diff options
Diffstat (limited to 'Src/Wasabi/api/skin/widgets/group.h')
-rw-r--r-- | Src/Wasabi/api/skin/widgets/group.h | 365 |
1 files changed, 365 insertions, 0 deletions
diff --git a/Src/Wasabi/api/skin/widgets/group.h b/Src/Wasabi/api/skin/widgets/group.h new file mode 100644 index 00000000..186541f6 --- /dev/null +++ b/Src/Wasabi/api/skin/widgets/group.h @@ -0,0 +1,365 @@ +#ifndef __GROUP_H +#define __GROUP_H + +#ifndef _NOSTUDIO + +class Group; +class Container; +class Layout; +class CfgItem; +class CfgGroup; +class SRegion; + +#include <bfc/tlist.h> +#include <bfc/depview.h> +#include <api/wnd/wndclass/embeddedxui.h> +#include <api/wnd/wndclass/clickwnd.h> +#include <api/wnd/wndclass/buttwnd.h> +#include <tataki/bitmap/bitmap.h> +#include <tataki/region/region.h> +#ifdef WASABI_COMPILE_CONFIG +#include <api/config/items/cfgitem.h> +#endif // wasabi_compile_config + +#include <api/wndmgr/container.h> + +#endif // _nostudio + +#include <api/script/script.h> +#include <api/script/scriptobj.h> +#include <api/script/objects/guiobj.h> + +// {80F0F8BD-1BA5-42a6-A093-3236A00C8D4A} +static const GUID cfgGroupGuid = +{ 0x80f0f8bd, 0x1ba5, 0x42a6, { 0xa0, 0x93, 0x32, 0x36, 0xa0, 0xc, 0x8d, 0x4a } }; + +#define RESIZE_MINW 96 +#define RESIZE_MINH 24 + +class XmlObject; + +class GroupScriptController : public GuiObjectScriptController { + public: + + virtual const wchar_t *getClassName(); + virtual const wchar_t *getAncestorClassName(); + virtual ScriptObjectController *getAncestorController() { return guiController; } + 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(); + virtual ScriptObject *cast(ScriptObject *, GUID g); + + private: + + static function_descriptor_struct exportedFunction[]; + +}; + +extern GroupScriptController *groupController; + +class XuiParam +{ + public: + XuiParam(const wchar_t *_param, const wchar_t *_value) : param(_param), value(_value) {} + virtual ~XuiParam() {} + StringW param; + StringW value; +}; + +#define GROUP_PARENT EmbeddedXuiObject + +class Group : public GROUP_PARENT +{ +public: + Group(); + virtual ~Group(); + + int onPaint(Canvas *canvas); + + virtual int onResize(); + virtual int onPostedMove(); + virtual int onInit(); + virtual Container *getParentContainer(); + virtual int childNotify(ifc_window *child, int msg, intptr_t p1, intptr_t p2); + + virtual void setBaseTexture(const wchar_t *b, int regis=1); + virtual SkinBitmap *getBaseTexture(); + virtual ifc_window *getBaseTextureWindow(); + + virtual int setXmlParam(const wchar_t *paramname, const wchar_t *strvalue); + virtual int setXuiParam(int _xuihandle, int xuiid, const wchar_t *paramname, const wchar_t *strvalue); + virtual api_region *getRegion(); + virtual void setRegion(api_region *r); + void reloadDefaults(); + virtual int onGroupChange(const wchar_t *id); + virtual void autoResize(); + virtual void startScripts(); + + void onCreateObject(GuiObject *o); + GuiObject *getObject(const wchar_t *id); + + void sendNotifyToAllChildren(int notifymsg, intptr_t param1, intptr_t param2); + + int isDeleting() { return deleting; } + + void updatePos(GuiObject *o, RECT *r=NULL); + + AutoSkinBitmap *background; + int x, y; +#ifdef _WIN32 + LPARAM wndHolder_getParentParam(int i=0); +#endif + + virtual void setDesignWidth(int w); + virtual void setDesignHeight(int h); + virtual int getDesignWidth(); + virtual int getDesignHeight(); + + virtual void invalidateWindowRegion(); + virtual void setRegionOp(int o); + virtual void setGroupContent(const wchar_t *id, SkinItem *specific_item, int scripts_enabled); + virtual const wchar_t *getGroupContentId(); + virtual SkinItem *getGroupContentSkinItem(); + virtual void setAutoWidthSource(const wchar_t *obj); + virtual void setAutoHeightSource(const wchar_t *obj); + + virtual void cancelCapture() {}; + virtual int getPreferences(int what); + + virtual const wchar_t *vcpu_getClassName(); + virtual ScriptObjectController *vcpu_getController() { return groupController; } + + int getNumObjects(); + ifc_window *enumObjects(int i); + + void addChild(GuiObject *g); + void removeChild(GuiObject *g); + +#ifdef WASABI_COMPILE_WNDMGR + virtual void mouseResize(int x, int y, int resizeway);// screen coords! + virtual void beginMove(); + virtual void beginScale(); + virtual void beginResize(); + virtual void endMove(); + virtual void endScale(); + virtual void endResize(); +#endif + + virtual int getAutoWidth(void); + virtual int getAutoHeight(void); + + virtual int isLayout(); + + void setDrawBackground(int t); + int getDrawBackground(void); + +#ifdef WASABI_COMPILE_CONFIG + static int isCfgGroup(Group *ptr); +#endif + + void addScript(int scriptid); + void deleteScripts(); + int enumScript(int n); + int getNumScripts(); + virtual int isDesktopAlphaSafe(); + virtual int isTransparencySafe(int excludeme=0); + + static int isGroup(Group *o); + const wchar_t *getBackgroundStr(); + int getWidthBasedOn(GuiObject *o=NULL); + int getHeightBasedOn(GuiObject *o=NULL); + + void fixPosition(); + + const wchar_t *embeddedxui_getEmbeddedObjectId() { return xui_embedded_id; } + virtual void onFillGroup(); + virtual int onUnknownXuiParam(const wchar_t *xmlattributename, const wchar_t *value); + + virtual ScriptObject *script_cast(GUID g); + + virtual void onMinMaxEnforcerChanged(); + virtual int isTransparencyForcedOff() { return 0; } + +protected: + /*static */void CreateXMLParameters(int master_handle); + static PtrList<CfgGroup> cfggrouplist; + +private: + StringW basetextureStr; + StringW xui_embedded_id; + + void invalidateScaledReg(); + void ensureScaledRegValid(); + + int resizing; + int size_w,size_h; + int cX,cY; + int captured; + POINT mousepos; + int propagatesize; + + PtrList<XuiParam> xuiparams; + + int moving; + int mover; + int drawbackground; + RECT oldRect; + int groupmaxheight; + int groupmaxwidth; + int groupminheight; + int groupminwidth; + int lockminmax; +// int regionop; + TList<int> scripts; + RegionI *subtractedreg; + static PtrList<Group> groups; + StringW backgroundstr; + StringW instanceid; + RegionI *reg; + RegionI *scaledreg; + int scaledregionvalid; + int autoregionop; + StringW content_id; + SkinItem *content_item; + int no_init_on_addchild; + StringW autoheightsource; + StringW autowidthsource; + GuiObject *lastheightsource; + GuiObject *lastwidthsource; + int lastgetwidthbasedon, lastgetheightbasedon; + + int default_w, default_h; + int design_w, design_h; + int scripts_enabled; + int xuihandle; + static XMLParamPair groupParams[]; +protected: + enum { + XUIGROUP_INSTANCEID=0, + XUIGROUP_BACKGROUND, + XUIGROUP_DRAWBACKGROUND, + XUIGROUP_DEFAULT_W, + XUIGROUP_DEFAULT_H, + XUIGROUP_MAXIMUM_H, + XUIGROUP_MAXIMUM_W, + XUIGROUP_MINIMUM_H, + XUIGROUP_MINIMUM_W, + XUIGROUP_PROPAGATESIZE, + XUIGROUP_LOCKMINMAX, + XUIGROUP_NAME, + XUIGROUP_AUTOWIDTHSOURCE, + XUIGROUP_AUTOHEIGHTSOURCE, + XUIGROUP_EMBED_XUI, + XUIGROUP_XUITAG, + XUIGROUP_INHERIT_GROUP, + XUIGROUP_INHERIT_CONTENT, + XUIGROUP_DESIGN_W, + XUIGROUP_DESIGN_H, + XUIGROUP_NUMPARAMS, + }; + +// FG> +// -- SCRIPT ----------------------------------------------------- +private: + PtrList<ScriptObject> script_objects; + PtrList<GuiObject> gui_objects; + int deleting; + int skinpart; + int alpha; + int disable_update_pos; + +public: + void addObject(GuiObject *o); + void removeObject(GuiObject *o); + void setSkinPartId(int i) { skinpart = i; } + int getSkinPartId() { return skinpart; } + + static scriptVar script_vcpu_getObject(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar obj); + static scriptVar script_vcpu_getNumObjects(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + static scriptVar script_vcpu_enumObject(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar i); + static scriptVar script_vcpu_onCreateObject(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar ob); + static scriptVar script_vcpu_getMousePosX(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + static scriptVar script_vcpu_getMousePosY(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + static scriptVar script_vcpu_subtractRegion(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar reg); + static scriptVar script_vcpu_isLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + static scriptVar script_vcpu_autoResize(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + + static void instantiate(Layout *l); + +}; + +extern const wchar_t groupXuiObjectStr[]; +extern char groupXuiSvcName[]; +class GroupXuiSvc : public XuiObjectSvc<Group, groupXuiObjectStr, groupXuiSvcName> {}; + + +#ifdef WASABI_COMPILE_CONFIG + +class CfgGroupScriptController : 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(); + + private: + + static function_descriptor_struct exportedFunction[]; +}; + +extern CfgGroupScriptController *cfgGroupController; + +class CfgGroup : public Group, public DependentViewerTPtr<CfgItem> { + public: + + CfgGroup(); + virtual ~CfgGroup(); + + void setAttr(CfgItem *item, const wchar_t *name); + const wchar_t *vcpu_getClassName(); + virtual ScriptObjectController *vcpu_getController() { return cfgGroupController; } + + virtual int viewer_onEvent(CfgItem *item, int event, intptr_t param, void *ptr, size_t ptrlen); + virtual void dataChanged(); + + CfgItem *getCfgItem(); + const wchar_t *getAttributeName(); + const wchar_t *getCfgGuid() { return cfgguid; } + virtual int onInit(); + + static scriptVar script_vcpu_cfgGetInt(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + static scriptVar script_vcpu_cfgSetInt(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v); + static scriptVar script_vcpu_cfgGetFloat(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + static scriptVar script_vcpu_cfgSetFloat(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v); + static scriptVar script_vcpu_cfgGetString(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + static scriptVar script_vcpu_cfgSetString(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v); + static scriptVar script_vcpu_cfgGetName(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + static scriptVar script_vcpu_cfgGetGuid(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + static scriptVar script_vcpu_onCfgChanged(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + + private: + + CfgItem *cfgitem; + StringW attrname; + StringW cfgguid; + static wchar_t txt[512]; +}; + +extern const wchar_t cfgGroupXuiObjectStr[]; +extern char cfgGroupXuiSvcName[]; +class CfgGroupXuiSvc : public XuiObjectSvc<CfgGroup, cfgGroupXuiObjectStr, cfgGroupXuiSvcName> {}; + +#endif // wasabi_compile_config + + +#endif // group.h |