diff options
author | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
---|---|---|
committer | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
commit | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Wasabi/api/wndmgr/container.h | |
parent | 537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff) | |
download | winamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz |
Initial community commit
Diffstat (limited to 'Src/Wasabi/api/wndmgr/container.h')
-rw-r--r-- | Src/Wasabi/api/wndmgr/container.h | 231 |
1 files changed, 231 insertions, 0 deletions
diff --git a/Src/Wasabi/api/wndmgr/container.h b/Src/Wasabi/api/wndmgr/container.h new file mode 100644 index 00000000..0078057d --- /dev/null +++ b/Src/Wasabi/api/wndmgr/container.h @@ -0,0 +1,231 @@ +#ifdef WASABI_COMPILE_WNDMGR +#ifndef __CONTAINER_H +#define __CONTAINER_H + +class Container; +class Layout; + +#include <bfc/ptrlist.h> +#include <api/skin/xmlobject.h> + +#ifdef WASABI_WIDGETS_GUIOBJECT +#include <api/script/objects/guiobj.h> +#endif +#include <api/script/script.h> +#include <api/script/scriptobj.h> +#include <api/script/objcontroller.h> +#include <api/script/objects/rootobj.h> + + +#define CONTAINER_UNDEFINED_NAME L"undefined container name" + +enum { + CONTAINERPARAM_NAME = 0, + CONTAINERPARAM_ID, + CONTAINERPARAM_DYNAMIC, + CONTAINERPARAM_DEFAULTX, + CONTAINERPARAM_DEFAULTY, + CONTAINERPARAM_DEFAULTVISIBLE, + CONTAINERPARAM_CANCLOSE, + CONTAINERPARAM_NOMENU, + CONTAINERPARAM_NOFOCUSAPPONCLOSE, + CONTAINERPARAM_CONTENT, +}; + +class ContainerScriptController: public ScriptObjectControllerI +{ +public: + + virtual const wchar_t *getClassName(); + virtual const wchar_t *getAncestorClassName(); + virtual ScriptObjectController *getAncestorController(); + virtual int getNumFunctions(); + virtual const function_descriptor_struct *getExportedFunctions(); + virtual GUID getClassGuid(); + virtual ScriptObject *instantiate(); + virtual void destroy(ScriptObject *o); + virtual void *encapsulate(ScriptObject *o); + virtual void deencapsulate(void *o); + virtual int getInstantiable(); + +private: + + static function_descriptor_struct exportedFunction[]; + +}; + +class ContentEntry +{ +public: + ContentEntry(const wchar_t *gid, GUID g, ifc_window *w) : groupid(gid), guid(g), wnd(w) { } + + GUID guid; + StringW groupid; + ifc_window *wnd; +}; + +extern ContainerScriptController *containerController; + +#define CONTAINER_SCRIPTPARENT RootObjectInstance + +class Container : public CONTAINER_SCRIPTPARENT, public XmlObjectI, public DependentI +{ + +public: + Container(int scriptid = -1); + virtual ~Container(); + + virtual void setName(const wchar_t *name); + virtual void setId(const wchar_t *id); + + virtual const wchar_t *getName(); + virtual const wchar_t *getId(); + + virtual int setXmlParam(const wchar_t *p, const wchar_t *v); + + virtual void onInit(int noshow = 0); + + virtual void addLayout(Layout *layout); + virtual void resetLayouts(); + + virtual void setVisible(int sh); + virtual int isVisible(); + + virtual void switchToLayout(const wchar_t *name, int moveit = 1); + virtual void toggle(); + virtual void close(); + virtual void sysMenu(); + virtual int getNumLayouts(); + virtual Layout *enumLayout(int n); + virtual Layout *getLayout(const wchar_t *name, int *pos = NULL); + virtual int getScriptId(); + virtual void savePositions(); + void setDefaultLayout(const wchar_t *name); + void loadFromDefaults(int noshow = 0); + int isTranscient() { return transcient; } + void setTranscient(int is) { transcient = is; } + + // player callbacks to notify that container/component + // has been set visible/invisible + virtual void otherContainerToggled(const wchar_t *id, int visible); + virtual void componentToggled(GUID *g, int visible); + + virtual int isMainContainer(); + virtual int isDynamic(); + + virtual void onSwitchToLayout(Layout *l); + virtual void onBeforeSwitchToLayout(Layout *oldl, Layout *newl); + virtual void onHideLayout(Layout *l); + virtual void onShowLayout(Layout *l); + virtual Layout *getCurrentLayout(); + virtual int getDefaultPositionX(void); + virtual int getDefaultPositionY(void); + virtual void onChildSetLayoutVisible(Layout *l, int v); + + virtual void notifyAddContent(ifc_window *w, const wchar_t *groupid, GUID guid = INVALID_GUID); + virtual void notifyRemoveContent(ifc_window *w); + virtual int hasContent(GUID g); + virtual GUID getDefaultContent(); + + const wchar_t *getDescriptor(void); + + virtual void getWindowRect(RECT *r); + + virtual void sendNotifyToAllLayouts(int notifymsg, int param1, int param2); + void setDynamic(int i); + + void updateDefaultVisible(); + void setDeleting() { deleting = 1; } + int isDeleting() { return deleting; } + int isInited() { return inited; } + + int canClose() { return canclose; } + void setCanClose(int c) { canclose = c; } + GUID getGUID() { return myGUID; } + + int getNoMenu() { return nomenu; } + + void setPreventSaveVisibility(int p) { prevent_save_visibility = p; } + int wantRefocusApp() { return refocusapponclose; } + void setWantRefocusApp(int rf) { refocusapponclose = rf; } + + public: + // ifc_dependent stuff + + static const GUID *depend_getClassGuid() { + // {C439D9F4-34F5-453c-B947-448ED20203FC} + static const GUID ret = + { 0xc439d9f4, 0x34f5, 0x453c, { 0xb9, 0x47, 0x44, 0x8e, 0xd2, 0x2, 0x3, 0xfc } }; + + return &ret; + } + enum + { + Event_NAMECHANGE = 0, + }; + + +private: + void containerCallback(int msg); + StringW containerName; + StringW containerId; + PtrList<Layout> layouts; + int currentLayout; + StringW last_layout; + int canclose; + int lastLayout; + int default_visible, loaded_default_visible; + int ismain; + int dynamic; + int default_x = -1; + int default_y = -1; + int default_w = -1; + int default_h = -1; + int scriptid; + int inited; + int deleting; + int transcient; + PtrList<ContentEntry> contents; + int switching_layout; + int nomenu; + int prevent_save_visibility; + int refocusapponclose; + GUID contentGuid; + bool hasContentGuid; + +private: + GUID myGUID; + void showDefaultLayout(int noshow = 0); + +public: + static scriptVar script_vcpu_getId(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + static scriptVar script_onSwitchToLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar l); + static scriptVar script_onBeforeSwitchToLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar oldl, scriptVar newl); + static scriptVar script_onHideLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar l); + static scriptVar script_onShowLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar l); + static scriptVar script_getLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar obj); + static scriptVar script_switchToLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar s); + static scriptVar script_getCurrentLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + static scriptVar script_show(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + static scriptVar script_hide(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + static scriptVar script_close(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + static scriptVar script_toggle(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + static scriptVar script_getNumLayouts(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + static scriptVar script_enumLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar n); + static scriptVar script_isDynamic(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + static scriptVar script_setName(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar name); + static scriptVar script_getName(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + static scriptVar script_getGuid(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + static scriptVar script_setXmlParam(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar p, scriptVar v); + static scriptVar script_onAddContent(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar window, scriptVar id, scriptVar g); + +}; + +enum { + CONT_CB_NONE, + CONT_CB_VISIBLE, + CONT_CB_HIDDEN +}; + +#endif +#endif |