mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-12-19 17:25:54 +01:00
166 lines
5.4 KiB
C++
166 lines
5.4 KiB
C++
#include <precomp.h>
|
|
#include "xuicheckbox.h"
|
|
#include <bfc/parse/paramparser.h>
|
|
#include <api/script/objects/c_script/c_text.h>
|
|
|
|
// -----------------------------------------------------------------------
|
|
const wchar_t ScriptCheckBoxXuiObjectStr[] = L"Wasabi:CheckBox"; // This is the xml tag
|
|
char ScriptCheckBoxXuiSvcName[] = "Wasabi:CheckBox xui object";
|
|
|
|
XMLParamPair ScriptCheckBox::params[] = {
|
|
{SCRIPTCHECKBOX_ACTION, L"ACTION"},
|
|
{SCRIPTCHECKBOX_ACTIONTARGET, L"ACTION_TARGET"},
|
|
{SCRIPTCHECKBOX_ACTIONPARAM, L"PARAM"},
|
|
{SCRIPTCHECKBOX_RADIOID, L"RADIOID"},
|
|
{SCRIPTCHECKBOX_RADIOVAL, L"RADIOVAL"},
|
|
{SCRIPTCHECKBOX_TEXT, L"TEXT"},
|
|
|
|
};
|
|
// -----------------------------------------------------------------------
|
|
ScriptCheckBox::ScriptCheckBox() : SCRIPTCHECKBOX_PARENT() {
|
|
getScriptObject()->vcpu_setInterface(checkBoxGuid, (void *)static_cast<ScriptCheckBox*>(this));
|
|
getScriptObject()->vcpu_setClassName(L"CheckBox"); // this is the script class name
|
|
getScriptObject()->vcpu_setController(checkBoxController);
|
|
|
|
myxuihandle = newXuiHandle();
|
|
CreateXMLParameters(myxuihandle);
|
|
}
|
|
|
|
|
|
void ScriptCheckBox::CreateXMLParameters(int master_handle)
|
|
{
|
|
//SCRIPTCHECKBOX_PARENT::CreateXMLParameters(master_handle);
|
|
int numParams = sizeof(params) / sizeof(params[0]);
|
|
hintNumberOfParams(myxuihandle, numParams);
|
|
for (int i = 0;i < numParams;i++)
|
|
addParam(myxuihandle, params[i], XUI_ATTRIBUTE_IMPLIED);
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
ScriptCheckBox::~ScriptCheckBox() {
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
int ScriptCheckBox::setXuiParam(int xuihandle, int xmlattributeid, const wchar_t *xmlattributename, const wchar_t *value) {
|
|
if (xuihandle != myxuihandle)
|
|
return SCRIPTCHECKBOX_PARENT::setXuiParam(xuihandle, xmlattributeid, xmlattributename, value);
|
|
|
|
// Parcel the values out to the window object we multiply inherit from
|
|
switch (xmlattributeid) {
|
|
case SCRIPTCHECKBOX_TEXT:
|
|
setText(value);
|
|
break;
|
|
case SCRIPTCHECKBOX_RADIOID:
|
|
setRadioid(value);
|
|
break;
|
|
case SCRIPTCHECKBOX_RADIOVAL:
|
|
setRadioVal(value);
|
|
break;
|
|
case SCRIPTCHECKBOX_ACTION:
|
|
setAction(value);
|
|
break;
|
|
case SCRIPTCHECKBOX_ACTIONPARAM:
|
|
setActionParam(value);
|
|
break;
|
|
case SCRIPTCHECKBOX_ACTIONTARGET:
|
|
setActionTarget(value);
|
|
break;
|
|
default:
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
void ScriptCheckBox::onToggle() {
|
|
SCRIPTCHECKBOX_PARENT::onToggle();
|
|
Accessible *a = getAccessibleObject();
|
|
if (a != NULL) {
|
|
a->onStateChange();
|
|
}
|
|
CheckBoxController::onToggle(SCRIPT_CALL, getScriptObject(), MAKE_SCRIPT_INT(isActivated()));
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
// Script Object
|
|
|
|
CheckBoxController _checkBoxController;
|
|
CheckBoxController *checkBoxController = &_checkBoxController;
|
|
|
|
// -- Functions table -------------------------------------
|
|
function_descriptor_struct CheckBoxController::exportedFunction[] = {
|
|
{L"onToggle", 1, (void*)CheckBoxController::onToggle},
|
|
{L"setChecked", 1, (void*)CheckBoxController::setChecked},
|
|
{L"isChecked", 0, (void*)CheckBoxController::isChecked},
|
|
{L"setText", 1, (void*)CheckBoxController::setText},
|
|
{L"getText", 0, (void*)CheckBoxController::getText},
|
|
};
|
|
|
|
ScriptObject *CheckBoxController::instantiate() {
|
|
ScriptCheckBox *sb = new ScriptCheckBox;
|
|
ASSERT(sb != NULL);
|
|
return sb->getScriptObject();
|
|
}
|
|
|
|
void CheckBoxController::destroy(ScriptObject *o) {
|
|
ScriptCheckBox *sb = static_cast<ScriptCheckBox *>(o->vcpu_getInterface(checkBoxGuid));
|
|
ASSERT(sb != NULL);
|
|
delete sb;
|
|
}
|
|
|
|
void *CheckBoxController::encapsulate(ScriptObject *o) {
|
|
return NULL; // no encapsulation for checkboxes yet
|
|
}
|
|
|
|
void CheckBoxController::deencapsulate(void *o) {
|
|
}
|
|
|
|
int CheckBoxController::getNumFunctions() {
|
|
return sizeof(exportedFunction) / sizeof(function_descriptor_struct);
|
|
}
|
|
|
|
const function_descriptor_struct *CheckBoxController::getExportedFunctions() {
|
|
return exportedFunction;
|
|
}
|
|
|
|
|
|
scriptVar CheckBoxController::onToggle(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar newstate) {
|
|
SCRIPT_FUNCTION_INIT
|
|
PROCESS_HOOKS1(o, checkBoxController, newstate);
|
|
SCRIPT_FUNCTION_CHECKABORTEVENT;
|
|
SCRIPT_EXEC_EVENT1(o, newstate);
|
|
}
|
|
|
|
scriptVar CheckBoxController::setChecked(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar state) {
|
|
SCRIPT_FUNCTION_INIT
|
|
ScriptCheckBox *sb = static_cast<ScriptCheckBox *>(o->vcpu_getInterface(checkBoxGuid));
|
|
if (sb) sb->setActivated(GET_SCRIPT_INT(state));
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar CheckBoxController::isChecked(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT
|
|
int a = 0;
|
|
ScriptCheckBox *sb = static_cast<ScriptCheckBox *>(o->vcpu_getInterface(checkBoxGuid));
|
|
if (sb) a = sb->isActivated();
|
|
return MAKE_SCRIPT_INT(a);
|
|
}
|
|
|
|
scriptVar CheckBoxController::setText(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar text) {
|
|
SCRIPT_FUNCTION_INIT
|
|
ScriptCheckBox *sb = static_cast<ScriptCheckBox *>(o->vcpu_getInterface(checkBoxGuid));
|
|
if (sb)
|
|
sb->setText(GET_SCRIPT_STRING(text));
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar CheckBoxController::getText(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT
|
|
ScriptCheckBox *sb = static_cast<ScriptCheckBox *>(o->vcpu_getInterface(checkBoxGuid));
|
|
if (sb)
|
|
{
|
|
return MAKE_SCRIPT_STRING(sb->getText());
|
|
|
|
}
|
|
return MAKE_SCRIPT_STRING(L"");
|
|
}
|