aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/script/objects/spopup.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/Wasabi/api/script/objects/spopup.cpp
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Wasabi/api/script/objects/spopup.cpp')
-rw-r--r--Src/Wasabi/api/script/objects/spopup.cpp140
1 files changed, 140 insertions, 0 deletions
diff --git a/Src/Wasabi/api/script/objects/spopup.cpp b/Src/Wasabi/api/script/objects/spopup.cpp
new file mode 100644
index 00000000..84cc6254
--- /dev/null
+++ b/Src/Wasabi/api/script/objects/spopup.cpp
@@ -0,0 +1,140 @@
+#include <precomp.h>
+#include <api/script/objects/spopup.h>
+#include <api/script/scriptmgr.h>
+
+SPopup::SPopup() {
+ getScriptObject()->vcpu_setInterface(popupGuid, (void *)static_cast<SPopup*>(this));
+ getScriptObject()->vcpu_setClassName(L"Popup");
+ getScriptObject()->vcpu_setController(popupController);
+}
+
+SPopup::~SPopup() {
+}
+
+PopupScriptController _popupController;
+PopupScriptController *popupController = &_popupController;
+
+// -- Functions table -------------------------------------
+function_descriptor_struct PopupScriptController::exportedFunction[] = {
+ {L"addSubMenu", 2, (void*)SPopup::script_vcpu_addSubMenu },
+ {L"addCommand", 4, (void*)SPopup::script_vcpu_addCommand },
+ {L"addSeparator", 0, (void*)SPopup::script_vcpu_addSeparator },
+ {L"popAtXY", 2, (void*)SPopup::script_vcpu_popAtXY },
+ {L"popAtMouse", 0, (void*)SPopup::script_vcpu_popAtMouse },
+ {L"getNumCommands", 0, (void*)SPopup::script_vcpu_getNumCommands },
+ {L"checkCommand", 2, (void*)SPopup::script_vcpu_checkCommand },
+ {L"disableCommand", 2, (void*)SPopup::script_vcpu_disableCommand },
+
+//todo: events
+};
+
+// --------------------------------------------------------
+const wchar_t *PopupScriptController::getClassName() {
+ return L"Popup";
+}
+
+const wchar_t *PopupScriptController::getAncestorClassName() {
+ return L"Object";
+}
+
+ScriptObject *PopupScriptController::instantiate() {
+ SPopup *p = new SPopup;
+ ASSERT(p != NULL);
+ return p->getScriptObject();
+}
+
+void PopupScriptController::destroy(ScriptObject *o) {
+ SPopup *p = static_cast<SPopup *>(o->vcpu_getInterface(popupGuid));
+ ASSERT(p != NULL);
+ delete p;
+}
+
+void *PopupScriptController::encapsulate(ScriptObject *o) {
+ return NULL; // no encapsulation for popups yet
+}
+
+void PopupScriptController::deencapsulate(void *o) {
+}
+
+int PopupScriptController::getNumFunctions() {
+ return sizeof(exportedFunction) / sizeof(function_descriptor_struct);
+}
+
+const function_descriptor_struct *PopupScriptController::getExportedFunctions() {
+ return exportedFunction;
+}
+
+GUID PopupScriptController::getClassGuid() {
+ return popupGuid;
+}
+
+// -----------------------------------------------------------------------
+scriptVar SPopup::script_vcpu_addSubMenu(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar popup, scriptVar str)
+{
+ SCRIPT_FUNCTION_INIT;
+ ASSERT(str.type == SCRIPT_STRING); // compiler discarded
+ SPopup *p = static_cast<SPopup *>(o->vcpu_getInterface(popupGuid));
+ SPopup *p2 = static_cast<SPopup *>(GET_SCRIPT_OBJECT_AS(popup, popupGuid));
+ if (p) p->addSubMenu(p2, GET_SCRIPT_STRING(str));
+ RETURN_SCRIPT_VOID;
+}
+
+scriptVar SPopup::script_vcpu_addCommand(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar str, scriptVar cmd, scriptVar checked, scriptVar disabled) {
+ SCRIPT_FUNCTION_INIT;
+ ASSERT(str.type == SCRIPT_STRING); // compiler discarded
+ ASSERT(SOM::isNumeric(&cmd)); // compiler discarded
+ ASSERT(SOM::isNumeric(&checked)); // compiler discarded
+ ASSERT(SOM::isNumeric(&disabled)); // compiler discarded
+ SPopup *p = static_cast<SPopup *>(o->vcpu_getInterface(popupGuid));
+ if (p)
+ p->addCommand(str.data.sdata, SOM::makeInt(&cmd), SOM::makeBoolean(&checked), SOM::makeBoolean(&disabled));
+ RETURN_SCRIPT_VOID;
+}
+
+scriptVar SPopup::script_vcpu_addSeparator(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
+ SCRIPT_FUNCTION_INIT;
+ SPopup *p = static_cast<SPopup *>(o->vcpu_getInterface(popupGuid));
+ if (p) p->addSeparator();
+ RETURN_SCRIPT_VOID;
+}
+
+scriptVar SPopup::script_vcpu_checkCommand(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar i, scriptVar check) {
+ SCRIPT_FUNCTION_INIT;
+ ASSERT(SOM::isNumeric(&i));
+ ASSERT(SOM::isNumeric(&check));
+ SPopup *p = static_cast<SPopup *>(o->vcpu_getInterface(popupGuid));
+ if (p) p->checkCommand(SOM::makeInt(&i), SOM::makeBoolean(&check));
+ RETURN_SCRIPT_VOID;
+}
+
+scriptVar SPopup::script_vcpu_disableCommand(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar i, scriptVar disable) {
+ SCRIPT_FUNCTION_INIT;
+ ASSERT(SOM::isNumeric(&i));
+ ASSERT(SOM::isNumeric(&disable));
+ SPopup *p = static_cast<SPopup *>(o->vcpu_getInterface(popupGuid));
+ if (p) p->disableCommand(SOM::makeInt(&i), SOM::makeBoolean(&disable));
+ RETURN_SCRIPT_VOID;
+}
+
+scriptVar SPopup::script_vcpu_popAtXY(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y) {
+ SCRIPT_FUNCTION_INIT;
+ ASSERT(SOM::isNumeric(&x));
+ ASSERT(SOM::isNumeric(&y));
+ SPopup *p = static_cast<SPopup *>(o->vcpu_getInterface(popupGuid));
+ if (p) return MAKE_SCRIPT_INT(p->popAtXY(SOM::makeInt(&x), SOM::makeInt(&y)));
+ RETURN_SCRIPT_ZERO;
+}
+
+scriptVar SPopup::script_vcpu_popAtMouse(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
+ SCRIPT_FUNCTION_INIT;
+ SPopup *p = static_cast<SPopup *>(o->vcpu_getInterface(popupGuid));
+ if (p) return MAKE_SCRIPT_INT(p->popAtMouse());
+ RETURN_SCRIPT_ZERO;
+}
+
+scriptVar SPopup::script_vcpu_getNumCommands(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
+ SCRIPT_FUNCTION_INIT;
+ SPopup *p = static_cast<SPopup *>(o->vcpu_getInterface(popupGuid));
+ if (p) return MAKE_SCRIPT_INT(p->getNumCommands());
+ RETURN_SCRIPT_ZERO;
+}