diff options
Diffstat (limited to 'Src/Wasabi/api/config/cfgscriptobj.h')
-rw-r--r-- | Src/Wasabi/api/config/cfgscriptobj.h | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/Src/Wasabi/api/config/cfgscriptobj.h b/Src/Wasabi/api/config/cfgscriptobj.h new file mode 100644 index 00000000..e446b618 --- /dev/null +++ b/Src/Wasabi/api/config/cfgscriptobj.h @@ -0,0 +1,198 @@ +#ifndef __CFGSCRIPTOBJ_H +#define __CFGSCRIPTOBJ_H + +#include <api/script/objects/rootobj.h> +#include <api/script/objcontroller.h> +#include <api/script/scriptobj.h> +#include <bfc/depview.h> +#include <api/service/svcs/svc_scriptobji.h> +#include <api/config/items/attribs.h> + +class CfgItem; +class ConfigObject; +class ConfigItemObject; +class ConfigAttributeObject; + +extern ScriptObjectController *configController; +extern ScriptObjectController *configItemController; +extern ScriptObjectController *configAttributeController; + +enum cfgtypes { + CFG_INT = 0, + CFG_BOOL = 1, + CFG_FLOAT = 2, + CFG_STRING = 3, +}; + +// ----------------------------------------------------------------------------------------------------- +// ScriptObject Provider Service + +class ConfigScriptObjectSvc : public svc_scriptObjectI { + +public: + ConfigScriptObjectSvc() {}; + virtual ~ConfigScriptObjectSvc() {}; + + static const char *getServiceName() { return "Config maki object"; } + virtual ScriptObjectController *getController(int n); + + static void addItemObject(ConfigItemObject *item); + static void addAttrObject(ConfigAttributeObject *attr); + static void removeItemObject(ConfigItemObject *item); + static void removeAttrObject(ConfigAttributeObject *attr); +}; + +// ----------------------------------------------------------------------------------------------------- +// Script classes GUIDS + +// {593DBA22-D077-4976-B952-F4713655400B} +static const GUID CONFIG_SCRIPTOBJECT_GUID = +{ 0x593dba22, 0xd077, 0x4976, { 0xb9, 0x52, 0xf4, 0x71, 0x36, 0x55, 0x40, 0xb } }; + +// {D4030282-3AAB-4d87-878D-12326FADFCD5} +static const GUID CONFIGITEM_SCRIPTOBJECT_GUID = +{ 0xd4030282, 0x3aab, 0x4d87, { 0x87, 0x8d, 0x12, 0x32, 0x6f, 0xad, 0xfc, 0xd5 } }; + +// {24DEC283-B76E-4a36-8CCC-9E24C46B6C73} +static const GUID CONFIGATTRIBUTE_SCRIPTOBJECT_GUID = +{ 0x24dec283, 0xb76e, 0x4a36, { 0x8c, 0xcc, 0x9e, 0x24, 0xc4, 0x6b, 0x6c, 0x73 } }; + +// ----------------------------------------------------------------------------------------------------- +// ScriptObject Interfaces + +// Config +class ConfigObject : public RootObjectInstance { + + public: + + ConfigObject(); + virtual ~ConfigObject(); + + static scriptVar config_getItem(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar configitem_name); + static scriptVar config_getItemByGuid(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar configitem_name); + static scriptVar config_newItem(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar configitem_name, scriptVar guid); + private: + static ConfigItemObject *getItem(const wchar_t *nameorguid, ConfigObject *co); + PtrList<ConfigItemObject> mylist; + static PtrList<CfgItemI> ouraddeditems; + static int numobjects; +}; + +// ConfigItem +class ConfigItemObject : public RootObjectInstance { + + public: + + ConfigItemObject(CfgItem *item); + virtual ~ConfigItemObject(); + + ConfigAttributeObject *getAttribute(const wchar_t *name); + const wchar_t *getGuid() { return guid; } + ConfigAttributeObject *newAttribute(const wchar_t *name, const wchar_t *defval); + + CfgItem *getCfgItem() { return item; } + + static scriptVar configItem_getAttribute(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar attr_name); + static scriptVar configItem_getGuid(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + static scriptVar configItem_newAttribute(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar attr_name, scriptVar defval); + + private: + CfgItem *item; + StringW guid; + PtrList<ConfigAttributeObject> mylist; +}; + +// ConfigAttribute +class ConfigAttributeObject : public RootObjectInstance, public DependentViewerTPtr<CfgItem> { + + public: + + ConfigAttributeObject(CfgItem *item, const wchar_t *attr, ConfigItemObject *parent); + virtual ~ConfigAttributeObject(); + + void setData(const wchar_t *data); + const wchar_t *getData(); + ConfigItemObject *getParentItem() { return parent; } + const wchar_t *getAttributeName() { return attr; } + void setAutoDelete() { autodelete = 1; } + + virtual int viewer_onEvent(CfgItem *item, int event, intptr_t param, void *ptr, size_t ptrlen); + + static scriptVar configAttr_getData(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + static scriptVar configAttr_setData(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar val); + static scriptVar configAttr_onDataChanged(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + static scriptVar configAttr_getParentItem(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + static scriptVar configAttr_getAttributeName(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); + + private: + CfgItem *item; + StringW attr; + ConfigItemObject *parent; + int autodelete; +}; + +// ----------------------------------------------------------------------------------------------------- +// ScriptObjectControllers for our script classes + +// Config +class ConfigScriptObjectController : public ScriptObjectControllerI { + public: + virtual const wchar_t *getClassName() { return L"Config"; } + virtual const wchar_t *getAncestorClassName() { return L"Object"; } + virtual ScriptObjectController *getAncestorController() { return NULL; } + virtual int getNumFunctions(); + virtual const function_descriptor_struct *getExportedFunctions() { return exportedFunction; } + virtual GUID getClassGuid() { return CONFIG_SCRIPTOBJECT_GUID; } + virtual int getInstantiable() { return 0; } + virtual int getReferenceable() { return 0; } + virtual ScriptObject *instantiate(); + virtual void destroy(ScriptObject *o); + virtual void *encapsulate(ScriptObject *o); + virtual void deencapsulate(void *o); + + private: + static function_descriptor_struct exportedFunction[]; +}; + +// ConfigItem +class ConfigItemScriptObjectController : public ScriptObjectControllerI { + public: + virtual const wchar_t *getClassName() { return L"ConfigItem"; } + virtual const wchar_t *getAncestorClassName() { return L"Object"; } + virtual ScriptObjectController *getAncestorController() { return NULL; } + virtual int getNumFunctions(); + virtual const function_descriptor_struct *getExportedFunctions() { return exportedFunction; } + virtual GUID getClassGuid() { return CONFIGITEM_SCRIPTOBJECT_GUID; } + virtual int getInstantiable() { return 0; } + virtual int getReferenceable() { return 1; } + virtual ScriptObject *instantiate() { return NULL; }; + virtual void destroy(ScriptObject *o) { }; + virtual void *encapsulate(ScriptObject *o) { return NULL; }; + virtual void deencapsulate(void *o) { }; + + private: + static function_descriptor_struct exportedFunction[]; +}; + +// ConfigAttribute +class ConfigAttributeScriptObjectController : public ScriptObjectControllerI { + public: + virtual const wchar_t *getClassName() { return L"ConfigAttribute"; } + virtual const wchar_t *getAncestorClassName() { return L"Object"; } + virtual ScriptObjectController *getAncestorController() { return NULL; } + virtual int getNumFunctions(); + virtual const function_descriptor_struct *getExportedFunctions() { return exportedFunction; } + virtual GUID getClassGuid() { return CONFIGATTRIBUTE_SCRIPTOBJECT_GUID; } + virtual int getInstantiable() { return 0; } + virtual int getReferenceable() { return 1; } + virtual ScriptObject *instantiate() { return NULL; }; + virtual void destroy(ScriptObject *o) { }; + virtual void *encapsulate(ScriptObject *o) { return NULL; }; + virtual void deencapsulate(void *o) { }; + + private: + static function_descriptor_struct exportedFunction[]; +}; + +#endif + |