aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/wndmgr/layout.h
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Wasabi/api/wndmgr/layout.h
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Wasabi/api/wndmgr/layout.h')
-rw-r--r--Src/Wasabi/api/wndmgr/layout.h465
1 files changed, 465 insertions, 0 deletions
diff --git a/Src/Wasabi/api/wndmgr/layout.h b/Src/Wasabi/api/wndmgr/layout.h
new file mode 100644
index 00000000..20a90504
--- /dev/null
+++ b/Src/Wasabi/api/wndmgr/layout.h
@@ -0,0 +1,465 @@
+#ifndef __LAYOUT_H
+#define __LAYOUT_H
+
+class Layout;
+class Group;
+class Container;
+class Layer;
+
+#include <bfc/tlist.h>
+#include <bfc/depend.h>
+#include <tataki/bitmap/bitmap.h>
+#include <api/wnd/wndclass/buttwnd.h>
+#include <tataki/region/region.h>
+#include <api/wndmgr/container.h>
+#include <api/skin/group.h>
+#include <api/skin/widgets/layer.h>
+#include <api/wndmgr/guistatuscb.h>
+#include <api/script/script.h>
+#include <api/script/scriptobj.h>
+#ifdef WASABI_WIDGETS_GUIOBJECT
+#include <api/script/objects/guiobj.h>
+#endif
+#include <api/wnd/accessible.h>
+#include <api/wndmgr/alphamgr.h>
+#include <api/wnd/resizable.h>
+
+class XmlObject;
+class Layout;
+
+extern AlphaMgr *alphaMgr;
+
+class LayoutScriptController : public GroupScriptController {
+ public:
+
+ virtual const wchar_t *getClassName();
+ virtual const wchar_t *getAncestorClassName();
+ virtual ScriptObjectController *getAncestorController() { return groupController; }
+ virtual int getNumFunctions();
+ virtual const function_descriptor_struct *getExportedFunctions();
+ virtual GUID getClassGuid();
+ virtual ScriptObject *instantiate();
+ virtual int getInstantiable();
+ virtual void destroy(ScriptObject *o);
+ virtual void *encapsulate(ScriptObject *o);
+ virtual void deencapsulate(void *o);
+
+ private:
+
+ static function_descriptor_struct exportedFunction[];
+
+};
+
+extern LayoutScriptController *layoutController;
+
+#ifndef _NOSTUDIO
+
+class AutoOpacityLinker;
+
+#define LAYOUT_PARENT Group
+#define LAYOUT_SCRIPTPARENT Group
+
+class Layout : public LAYOUT_SCRIPTPARENT, public DependentViewerI, public GuiResizable
+{
+
+public:
+ Layout();
+ virtual ~Layout();
+
+#ifdef _WIN32
+ virtual LRESULT wndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+#else
+ virtual OSStatus eventHandler(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void *inUserData);
+#endif
+
+// int onPaint(Canvas *canvas);
+ virtual int onInit();
+ virtual int init(OSMODULEHANDLE inst, OSWINDOWHANDLE parent, int nochild);
+ virtual int reinit(OSMODULEHANDLE inst, OSWINDOWHANDLE parent, int nochild);
+
+ virtual int childNotify(ifc_window *child, int msg, intptr_t param1=0, intptr_t param2=0);
+ virtual int onActionNotify(int action, intptr_t param=0);
+
+ virtual void resize(int x, int y, int w, int h, int wantcb=1);
+ virtual void move(int x, int y);
+
+// virtual int onRightButtonDown(int x, int y);
+// virtual int onLeftButtonDown(int x, int y);
+// virtual int onMouseMove(int x, int y);
+// virtual int onLeftButtonUp(int x, int y);
+ virtual int onResize();
+ virtual int onPostedMove();
+ virtual int onPaint(Canvas *canvas);
+ virtual void onSetDesktopAlpha(int a);
+ virtual int isLayout();
+ virtual void setAlphaBackground(const wchar_t *txture);
+ virtual SkinBitmap *getBaseTexture();
+ virtual void onGuiObjectSetVisible(GuiObject *o, int status); // called whenever a child shows/hide
+ virtual ifc_window *getCustomOwner();
+ virtual void addLockedLayout(Layout *l);
+ virtual void removeLockedLayout(Layout *l);
+ virtual int getNumLockedLayouts();
+ virtual Layout *enumLockedLayout(int n);
+ virtual int isLocked();
+ virtual void lockTo(Layout *l);
+ virtual Layout *getLockedTo();
+ void updateLockedLayouts();
+ virtual int onGetFocus();
+ virtual int onKillFocus();
+ virtual void snapAdjust(int left, int right, int top, int bottom);
+
+ virtual void onShow(void);
+ virtual void onHide(void);
+
+ virtual void center();
+
+ virtual int wantDesktopAlpha();
+ virtual void setWantDesktopAlpha(int want);
+ virtual int handleDesktopAlpha();
+
+ virtual int setXuiParam(int _xuihandle, int attribid, const wchar_t *paramname, const wchar_t *strvalue);
+
+ void setWindowRegion(api_region *reg);
+ virtual int allowResize() {
+ return !isLocked()
+#ifdef USEAPPBAR
+ && !appbar_isDocked()
+#endif
+ ;
+ }
+
+ // container/component callbacks to get notified that a container
+ // has been set visible/invisible
+ void containerToggled(const wchar_t *id,int visible);
+ void componentToggled(GUID *guid, int visible);
+
+ void setParentContainer(Container *c);
+ virtual Container *getParentContainer();
+
+ virtual int isClickThrough();
+
+ void onSetVisible(int show);
+ virtual void cancelCapture();
+
+ virtual int onActivate();
+ virtual int onDeactivate();
+
+ virtual int forceTransparencyFlag();
+
+ int x, y;
+
+#ifdef _WIN32
+ void setForwardMsgWnd(HWND wnd) { forwardMsgWnd = wnd; }
+
+ LPARAM wndHolder_getParentParam(int i=0);
+#endif
+
+ void scaleTo(int s);
+ virtual void setRenderRatio(double s);
+
+ virtual void beginMove();
+ virtual void beginScale();
+ virtual void beginResize();
+ virtual void endMove();
+ virtual void endScale();
+ virtual void endResize();
+
+ virtual void setEndMoveResize(int w, int h) {
+ m_w = w;
+ m_h = h;
+ m_endmovesize = 1;
+ };
+
+ virtual ifc_window *guiresizable_getRootWnd() { return (this); }
+
+
+ virtual void lockScale(int locked);
+ virtual int isScaleLocked() { return scalelocked; }
+
+ virtual void onMove();
+
+ virtual int isDesktopAlphaSafe();
+
+ void addSubRegionLayer(Layer *l);
+ void removeSubRegionLayer(Layer *l);
+
+ virtual void setInDesktop(int a);
+ virtual int getInDesktop();
+
+ virtual void setAlpha(int a);
+ virtual int getAlpha();
+ virtual int getPaintingAlpha();
+ virtual void timerCallback(int id);
+
+ virtual void setLinkWidth(const wchar_t *layoutid);
+ virtual void setLinkHeight(const wchar_t *layoutid);
+
+ virtual void setBaseTexture(const wchar_t *b, int regis=1);
+ virtual void setPaintingAlpha(int activealpha, int inactivealpha=-1);
+
+ static void onGlobalEnableDesktopAlpha(int enabled);
+
+ void savePosition();
+#ifdef USEAPPBAR
+ void saveAppBarPosition();
+#endif
+ virtual void setStatusText(const wchar_t *txt, int overlay=0);
+ virtual void addAppCmds(AppCmds *commands);
+ virtual void removeAppCmds(AppCmds *commands);
+
+ void pushCompleted(int max=100);
+ void incCompleted(int add=1);
+ void setCompleted(int pos);
+ void popCompleted();
+
+ virtual void registerStatusCallback(GuiStatusCallback *lcb);
+ virtual int viewer_onItemDeleted(api_dependent *item);
+ virtual int wantActivation() { return wantactiv && LAYOUT_PARENT::wantActivation(); }
+ void loadSavedState();
+ virtual void updateOnTop();
+
+ virtual int runAction(int actionid, const wchar_t *param=NULL);
+
+ virtual void getSnapAdjust(RECT *r);
+
+ virtual void updateTransparency();
+ virtual int onDeferredCallback(intptr_t p1, intptr_t p2);
+ virtual int wantRedrawOnResize() { return wantredrawonresize; }
+ virtual void setWantRedrawOnResize(int v);
+
+#ifdef USEAPPBAR
+ virtual int appbar_wantAutoHide() { return getAppBarAutoHide(); }
+ virtual int appbar_wantAlwaysOnTop() { return getAppBarAlwaysOnTop(); }
+
+ virtual int getAppBarAutoHide();
+ virtual void setAppBarAutoHide(int ah);
+
+ virtual int getAppBarAlwaysOnTop();
+ virtual void setAppBarAlwaysOnTop(int aot);
+#endif
+
+ virtual void pushForceUnlink() { m_forceunlink++; }
+ virtual void popForceUnlink() { m_forceunlink--; }
+
+ virtual int isUnlinked() {
+#ifdef USEAPPBAR
+ return unlinked || appbar_isDocked() || m_forceunlink;
+#else
+ return unlinked || m_forceunlink;
+#endif
+ }
+
+ void setAutoOpacify(int a);
+ int getAutoOpacify() { return autoopacify; }
+
+ void offscreenCheck();
+ int isOffscreen(ifc_window *w);
+
+ int getResizable();
+ int getScalable();
+
+ void setTransparencyOverride(int v);
+ int getTransparencyOverride() { return transparencyoverride; }
+
+ enum {
+ LAYOUT_SETDESKTOPALPHA=0,
+ LAYOUT_SETINDESKTOP,
+ LAYOUT_SETALPHA,
+ LAYOUT_SETLINKWIDTH,
+ LAYOUT_SETLINKHEIGHT,
+ LAYOUT_SETOWNER,
+ LAYOUT_SETLOCKTO,
+ LAYOUT_SETOSFRAME,
+ LAYOUT_SETALPHABACKGROUND,
+ LAYOUT_SETNOACTIVATION,
+ LAYOUT_SETONTOP,
+ LAYOUT_SNAPADJUSTLEFT,
+ LAYOUT_SNAPADJUSTTOP,
+ LAYOUT_SNAPADJUSTRIGHT,
+ LAYOUT_SNAPADJUSTBOTTOM,
+ LAYOUT_UNLINKED,
+ LAYOUT_NOPARENT,
+ LAYOUT_FORCEALPHA,
+ LAYOUT_NODOCK,
+ LAYOUT_NOOFFSCREENCHECK,
+ LAYOUT_RESIZABLE,
+ LAYOUT_SCALABLE,
+ };
+
+
+ void onMouseEnterLayout();
+ void onMouseLeaveLayout();
+
+ int getNoParent() { return noparent; }
+ void setNoParent(int np) { noparent = np; }
+ int isAlphaForced() { return forcealpha; }
+
+ AlphaMgr *getAlphaMgr() { return alphaMgr; }
+
+ int getNoDock() { return nodock; }
+ void setNoDock(int nd) { nodock = nd; }
+ int isTransparencyForcedOff() { return transparency_autooff; }
+
+ void controlMenu();
+
+ void setNoOffscreenCheck(int nocheck);
+
+#ifdef USEAPPBAR
+ void onDock(int side);
+ void onUnDock();
+
+ virtual void appbar_onDock(int side);
+ virtual void appbar_onUnDock();
+ virtual void appbar_onSlide();
+#endif
+
+protected:
+ /*static */void CreateXMLParameters(int master_handle);
+/* virtual int dragEnter(ifc_window *sourceWnd);
+ virtual int dragOver(int x, int y, ifc_window *sourceWnd);
+ virtual int dragDrop(ifc_window *sourceWnd, int x, int y);
+ virtual int acceptExternalDrops() { return 1; }*/
+ virtual int wantClickWndAutoInvalidate() { return 0; }
+
+
+private:
+ StringW MakePrefix();
+ static XMLParamPair params[];
+ void fixPosition();
+ void saveAllPositions();
+ void activateChildren(int act);
+#ifdef _WIN32
+ void getExplorerWindows(HWND *parent, HWND *listview, HWND *webserver);
+#endif
+ void desktopAlpha_autoTurnOn();
+ void desktopAlpha_autoTurnOff();
+ void transparency_autoTurnOn();
+ void transparency_autoTurnOff();
+ void globalEnableDesktopAlpha(int enabled);
+
+#ifdef _WIN32
+ HWND forwardMsgWnd;
+#endif
+ int resizing;
+ int wantactiv;
+ int size_w,size_h;
+ int cX,cY;
+ int captured;
+ POINT mousepos;
+#ifdef _WIN32
+ HWND webserver;
+ HWND listview;
+#endif
+ int alphagoingon;
+ int alphagoingoff;
+ int scalelocked;
+ int wantredrawonresize;
+
+ int xuihandle;
+
+ RegionI *reg;
+ //PtrList<Layer> *subregionlayers;
+ Container *p_container;
+ StringW alphabackgroundstr;
+ ifc_window *wndholders;
+ int abortSaving();
+ int transparencyoverride;
+
+ int default_x;
+ int default_y;
+ int moving;
+ int scaling;
+ int mover;
+ int indesktop;
+ int alpha;
+ StringW linkedheight, linkedwidth;
+ int inlinkwidth, inlinkheight;
+ AutoSkinBitmap alphabackground;
+ int wantdesktopalpha;
+ int galphadisabled;
+ static PtrList<Layout> alllayouts;
+ StringW owner;
+ PtrList<Layout> locked;
+ StringW lockto;
+ Layout *lockedto;
+ int inpostedmove;
+ int osframe;
+ PtrList<GuiStatusCallback> statuscbs;
+ int initontop;
+// GarbageCollector gc;
+ PtrList<AppCmds> appcmds;
+ int inresize;
+ int unlinked;
+
+ int snap_adjust_left;
+ int snap_adjust_top;
+ int snap_adjust_right;
+ int snap_adjust_bottom;
+
+ int disable_auto_alpha;
+ int autoopacify;
+ int noparent;
+ int forcealpha;
+ redock_struct redock;
+ static int broadcasting;
+ int nodock;
+ uint32_t transparency_reenabled_at;
+ int transparency_autooff;
+ int nooffscreencheck;
+ int resizable;
+ int scalable;
+
+ int m_w, m_h;
+ int m_endmovesize;
+ int m_allowsavedock;
+ int m_forceunlink;
+#ifdef USEAPPBAR
+ int appbar_want_autohide;
+ int appbar_want_alwaysontop;
+#endif
+
+// FG>
+// -- SCRIPT -----------------------------------------------------
+public:
+
+ static scriptVar script_vcpu_onDock(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar side);
+ static scriptVar script_vcpu_onUndock(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
+ static scriptVar script_vcpu_getScale(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
+ static scriptVar script_vcpu_setScale(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar s);
+ static scriptVar script_vcpu_onScale(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar s);
+ static scriptVar script_vcpu_setDesktopAlpha(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar s);
+ static scriptVar script_vcpu_getDesktopAlpha(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
+ static scriptVar script_vcpu_isTransparencySafe(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
+ static scriptVar script_vcpu_isLayoutAnimationSafe(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
+ static scriptVar script_vcpu_getContainer(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
+ static scriptVar script_vcpu_center(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
+ static scriptVar script_vcpu_onMove(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
+ static scriptVar script_vcpu_onEndMove(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
+ static scriptVar script_vcpu_onUserResize(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y, scriptVar w, scriptVar h);
+ static scriptVar script_vcpu_snapAdjust(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar left, scriptVar top, scriptVar right, scriptVar bottom);
+ static scriptVar script_vcpu_setRedrawOnResize(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v);
+ static scriptVar script_vcpu_beforeRedock(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
+ static scriptVar script_vcpu_redock(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
+ static scriptVar script_vcpu_getSnapAdjustTop(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
+ static scriptVar script_vcpu_getSnapAdjustLeft(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
+ static scriptVar script_vcpu_getSnapAdjustRight(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
+ static scriptVar script_vcpu_getSnapAdjustBottom(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
+ static scriptVar script_vcpu_onMouseEnterLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
+ static scriptVar script_vcpu_onMouseLeaveLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
+ static scriptVar script_vcpu_onSnapAdjustChanged(SCRIPT_FUNCTION_PARAMS, ScriptObject *o);
+
+#else
+class Layout : public LAYOUT_SCRIPTPARENT {
+
+public:
+
+#endif
+
+// INSERT_SCRIPT_OBJECT_CONTROL
+
+
+};
+
+// END SCRIPT
+
+#endif