aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/General/gen_ff/WinampConfigScriptObject.cpp
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/Plugins/General/gen_ff/WinampConfigScriptObject.cpp
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-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.cpp276
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