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/Plugins/General/gen_ff/WinampConfigScriptObject.cpp | |
parent | 537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff) | |
download | winamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz |
Initial community commit
Diffstat (limited to 'Src/Plugins/General/gen_ff/WinampConfigScriptObject.cpp')
-rw-r--r-- | Src/Plugins/General/gen_ff/WinampConfigScriptObject.cpp | 276 |
1 files changed, 276 insertions, 0 deletions
diff --git a/Src/Plugins/General/gen_ff/WinampConfigScriptObject.cpp b/Src/Plugins/General/gen_ff/WinampConfigScriptObject.cpp new file mode 100644 index 00000000..ae1a7ef0 --- /dev/null +++ b/Src/Plugins/General/gen_ff/WinampConfigScriptObject.cpp @@ -0,0 +1,276 @@ +#include <precomp.h> +#include "WinampConfigScriptObject.h" + +// {B2AD3F2B-31ED-4e31-BC6D-E9951CD555BB} +static const GUID winampConfigScriptGuid = +{ 0xb2ad3f2b, 0x31ed, 0x4e31, { 0xbc, 0x6d, 0xe9, 0x95, 0x1c, 0xd5, 0x55, 0xbb } }; + +// {FC17844E-C72B-4518-A068-A8F930A5BA80} +static const GUID winampConfigGroupScriptGuid = +{ 0xfc17844e, 0xc72b, 0x4518, { 0xa0, 0x68, 0xa8, 0xf9, 0x30, 0xa5, 0xba, 0x80 } }; + +static WinampConfigScriptController _winampConfigController; +ScriptObjectController *winampConfigController = &_winampConfigController; + +static WinampConfigGroupScriptController _winampConfigGroupController; +ScriptObjectController *winampConfigGroupController = &_winampConfigGroupController; + +BEGIN_SERVICES(WinampConfig_svcs); +DECLARE_SERVICETSINGLE(svc_scriptObject, WinampConfigScriptObjectSvc); +END_SERVICES(WinampConfig_svcs, _WinampConfig_svcs); + +#ifdef _X86_ +extern "C" +{ + int _link_WinampConfig_svcs; +} +#else +extern "C" +{ + int __link_WinampConfig_svcs; +} +#endif +// ----------------------------------------------------------------------------------------------------- +// Service + +ScriptObjectController *WinampConfigScriptObjectSvc::getController(int n) +{ + switch (n) + { + case 0: + return winampConfigController; + case 1: + return winampConfigGroupController; + } + return NULL; +} + +// -- Functions table ------------------------------------- +function_descriptor_struct WinampConfigScriptController::exportedFunction[] = +{ + {L"getGroup", 1, (void*)WinampConfig::script_vcpu_getGroup }, +}; + +// -------------------------------------------------------- + +const wchar_t *WinampConfigScriptController::getClassName() +{ + return L"WinampConfig"; +} + +const wchar_t *WinampConfigScriptController::getAncestorClassName() +{ + return L"Object"; +} + +ScriptObject *WinampConfigScriptController::instantiate() +{ + WinampConfig *wc = new WinampConfig; + ASSERT(wc != NULL); + return wc->getScriptObject(); +} + +void WinampConfigScriptController::destroy(ScriptObject *o) +{ + WinampConfig *wc = static_cast<WinampConfig *>(o->vcpu_getInterface(winampConfigScriptGuid)); + if (wc) + delete wc; +} + +void *WinampConfigScriptController::encapsulate(ScriptObject *o) +{ + return NULL; // no encapsulation yet +} + +void WinampConfigScriptController::deencapsulate(void *o) +{ +} + +int WinampConfigScriptController::getNumFunctions() +{ + return sizeof(exportedFunction) / sizeof(function_descriptor_struct); +} + +const function_descriptor_struct *WinampConfigScriptController::getExportedFunctions() +{ + return exportedFunction; +} + +GUID WinampConfigScriptController::getClassGuid() +{ + return winampConfigScriptGuid; +} + +/* ------------- */ + +WinampConfig::WinampConfig() +{ + getScriptObject()->vcpu_setInterface(winampConfigScriptGuid, (void *)static_cast<WinampConfig *>(this)); + getScriptObject()->vcpu_setClassName(L"WinampConfig"); + getScriptObject()->vcpu_setController(winampConfigController); + + waServiceFactory *sf = WASABI_API_SVC->service_getServiceByGuid(Agave::AgaveConfigGUID); + if (sf) + config = (Agave::api_config *)sf->getInterface(); +} + +WinampConfig::~WinampConfig() +{ + waServiceFactory *sf = WASABI_API_SVC->service_getServiceByGuid(Agave::AgaveConfigGUID); + if (sf) + sf->releaseInterface(config); +} + +scriptVar WinampConfig::script_vcpu_getGroup(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar groupguid) +{ + SCRIPT_FUNCTION_INIT + + const wchar_t *g = GET_SCRIPT_STRING(groupguid); + GUID _g = nsGUID::fromCharW(g); + + WinampConfig *wc = static_cast<WinampConfig *>(o->vcpu_getInterface(winampConfigScriptGuid)); + if (wc) + { + Agave::ifc_configgroup *group = wc->config->GetGroup(_g); + if (group) + { + WinampConfigGroup *winampConfigGroup = new WinampConfigGroup(group); + return MAKE_SCRIPT_OBJECT(winampConfigGroup->getScriptObject()); + } + } + RETURN_SCRIPT_NULL; +} + +/* ------------- */ + +// -- Functions table ------------------------------------- +function_descriptor_struct WinampConfigGroupScriptController::exportedFunction[] = +{ + {L"getBool", 1, (void*)WinampConfigGroup::script_vcpu_getBool }, + {L"getString", 1, (void*)WinampConfigGroup::script_vcpu_getString }, + {L"getInt", 1, (void*)WinampConfigGroup::script_vcpu_getInt }, + {L"setBool", 2, (void*)WinampConfigGroup::script_vcpu_setBool }, +}; +// -------------------------------------------------------- + +const wchar_t *WinampConfigGroupScriptController::getClassName() +{ + return L"WinampConfigGroup"; +} + +const wchar_t *WinampConfigGroupScriptController::getAncestorClassName() +{ + return L"Object"; +} + +ScriptObject *WinampConfigGroupScriptController::instantiate() +{ + WinampConfigGroup *wc = new WinampConfigGroup; + ASSERT(wc != NULL); + return wc->getScriptObject(); +} + +void WinampConfigGroupScriptController::destroy(ScriptObject *o) +{ + WinampConfigGroup *wc = static_cast<WinampConfigGroup *>(o->vcpu_getInterface(winampConfigGroupScriptGuid)); + if (wc) + delete wc; +} + +void *WinampConfigGroupScriptController::encapsulate(ScriptObject *o) +{ + return NULL; // no encapsulation yet +} + +void WinampConfigGroupScriptController::deencapsulate(void *o) +{ +} + +int WinampConfigGroupScriptController::getNumFunctions() +{ + return sizeof(exportedFunction) / sizeof(function_descriptor_struct); +} + +const function_descriptor_struct *WinampConfigGroupScriptController::getExportedFunctions() +{ + return exportedFunction; +} + +GUID WinampConfigGroupScriptController::getClassGuid() +{ + return winampConfigGroupScriptGuid; +} + +/* ------------- */ + +WinampConfigGroup::WinampConfigGroup() +{ +getScriptObject()->vcpu_setInterface(winampConfigGroupScriptGuid, (void *)static_cast<WinampConfigGroup *>(this)); + getScriptObject()->vcpu_setClassName(L"WinampConfigGroup"); + getScriptObject()->vcpu_setController(winampConfigGroupController); + configGroup = 0; +} + +WinampConfigGroup::WinampConfigGroup(Agave::ifc_configgroup *_configGroup) +{ + getScriptObject()->vcpu_setInterface(winampConfigGroupScriptGuid, (void *)static_cast<WinampConfigGroup *>(this)); + getScriptObject()->vcpu_setClassName(L"WinampConfigGroup"); + getScriptObject()->vcpu_setController(winampConfigGroupController); + configGroup = _configGroup; +} + +Agave::ifc_configitem *WinampConfigGroup::GetItem(ScriptObject *o, scriptVar itemname) +{ + const wchar_t *item = GET_SCRIPT_STRING(itemname); + WinampConfigGroup *group = static_cast<WinampConfigGroup *>(o->vcpu_getInterface(winampConfigGroupScriptGuid)); + if (group) + { + Agave::ifc_configitem *configitem = group->configGroup->GetItem(item); + return configitem; + } + return 0; +} + +scriptVar WinampConfigGroup::script_vcpu_getBool(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar itemname) +{ + SCRIPT_FUNCTION_INIT + Agave::ifc_configitem *configitem = GetItem(o, itemname); + if (configitem) + return MAKE_SCRIPT_BOOLEAN(configitem->GetBool()); + + RETURN_SCRIPT_ZERO; +} + +scriptVar WinampConfigGroup::script_vcpu_getString(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar itemname) +{ + SCRIPT_FUNCTION_INIT + Agave::ifc_configitem *configitem = GetItem(o, itemname); + if (configitem) + return MAKE_SCRIPT_STRING(configitem->GetString()); + + RETURN_SCRIPT_ZERO; +} + +scriptVar WinampConfigGroup::script_vcpu_getInt(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar itemname) +{ + SCRIPT_FUNCTION_INIT + Agave::ifc_configitem *configitem = GetItem(o, itemname); + if (configitem) + return MAKE_SCRIPT_INT(configitem->GetInt()); + + RETURN_SCRIPT_ZERO; +} + +scriptVar WinampConfigGroup::script_vcpu_setBool(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar itemname, scriptVar value) +{ + SCRIPT_FUNCTION_INIT + const wchar_t *item = GET_SCRIPT_STRING(itemname); + WinampConfigGroup *group = static_cast<WinampConfigGroup *>(o->vcpu_getInterface(winampConfigGroupScriptGuid)); + if (group) + { + Agave::ifc_configitem *configitem = group->configGroup->GetItem(item); + if (configitem) + configitem->SetBool(!!GET_SCRIPT_BOOLEAN(value)); + } + RETURN_SCRIPT_VOID; +}
\ No newline at end of file |