winamp/Src/Plugins/General/gen_ff/WinampConfigScriptObject.cpp

276 lines
7.8 KiB
C++
Raw Permalink Normal View History

2024-09-24 12:54:57 +00:00
#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;
}