aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/skin/widgets/edit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Wasabi/api/skin/widgets/edit.cpp')
-rw-r--r--Src/Wasabi/api/skin/widgets/edit.cpp312
1 files changed, 312 insertions, 0 deletions
diff --git a/Src/Wasabi/api/skin/widgets/edit.cpp b/Src/Wasabi/api/skin/widgets/edit.cpp
new file mode 100644
index 00000000..b7b9fe7c
--- /dev/null
+++ b/Src/Wasabi/api/skin/widgets/edit.cpp
@@ -0,0 +1,312 @@
+#include <precomp.h>
+#include <bfc/wasabi_std.h>
+#include <api/skin/skinparse.h>
+#include "edit.h"
+#include <api/script/scriptmgr.h>
+#include <api/skin/widgets/mb/xuibrowser.h>
+#include <api/skin/widgets/mb/mainminibrowser.h>
+
+#define BUFSIZE 0x7ffe
+
+const wchar_t editXuiObjectStr[] = L"Edit"; // This is the xml tag
+char editXuiSvcName[] = "Edit xui object"; // this is the name of the xuiservice
+
+
+EditScriptController _editController;
+EditScriptController *editController = &_editController;
+
+// -- Functions table -------------------------------------
+function_descriptor_struct EditScriptController::exportedFunction[] = {
+ {L"setText", 1, (void*)Edit::script_vcpu_setText },
+ {L"setAutoEnter", 1, (void*)Edit::script_vcpu_setAutoEnter },
+ {L"getAutoEnter", 0, (void*)Edit::script_vcpu_getAutoEnter },
+ {L"getText", 0, (void*)Edit::script_vcpu_getText },
+ {L"onEnter", 0, (void*)Edit::script_vcpu_onEnter },
+ {L"onAbort", 0, (void*)Edit::script_vcpu_onAbort },
+ {L"onIdleEditUpdate", 0, (void*)Edit::script_vcpu_onIdleEditUpdate },
+ {L"onEditUpdate", 0, (void*)Edit::script_vcpu_onEditUpdate },
+ {L"selectAll", 0, (void*)Edit::script_vcpu_selectAll },
+ {L"enter", 0, (void*)Edit::script_vcpu_enter },
+ {L"setIdleEnabled", 1, (void*)Edit::script_vcpu_setIdleEnabled},
+ {L"getIdleEnabled", 0, (void*)Edit::script_vcpu_getIdleEnabled},
+ };
+// --------------------------------------------------------
+
+const wchar_t *EditScriptController::getClassName()
+{
+ return L"Edit";
+}
+
+const wchar_t *EditScriptController::getAncestorClassName()
+{
+ return L"GuiObject";
+}
+
+ScriptObject *EditScriptController::instantiate()
+{
+ Edit *e = new Edit;
+ ASSERT(e != NULL);
+ return e->getScriptObject();
+}
+
+void EditScriptController::destroy(ScriptObject *o)
+{
+ Edit *e = static_cast<Edit *>(o->vcpu_getInterface(editGuid));
+ ASSERT(e != NULL);
+ delete e;
+}
+
+void *EditScriptController::encapsulate(ScriptObject *o)
+{
+ return NULL; // no encapsulation for edit yet
+}
+
+void EditScriptController::deencapsulate(void *o)
+{}
+
+int EditScriptController::getNumFunctions()
+{
+ return sizeof(exportedFunction) / sizeof(function_descriptor_struct);
+}
+
+const function_descriptor_struct *EditScriptController::getExportedFunctions()
+{
+ return exportedFunction;
+}
+
+GUID EditScriptController::getClassGuid()
+{
+ return editGuid;
+}
+
+// -----------------------------------------------------------------------------
+
+XMLParamPair Edit::params[] = {
+ {EDIT_ACTION, L"ACTION"},
+ {EDIT_AUTOENTER, L"AUTOENTER"},
+ {EDIT_AUTOHSCROLL, L"AUTOHSCROLL"},
+ {EDIT_AUTOSELECT, L"AUTOSELECT"},
+ {EDIT_MULTILINE, L"MULTILINE"},
+ {EDIT_PASSWORD, L"PASSWORD"},
+ {EDIT_TEXT, L"TEXT"},
+ {EDIT_VSCROLL, L"VSCROLL"},
+ };
+Edit::Edit()
+{
+ getScriptObject()->vcpu_setInterface(editGuid, (void *)static_cast<Edit *>(this));
+ getScriptObject()->vcpu_setClassName(L"Edit");
+ getScriptObject()->vcpu_setController(editController);
+ my_buffer = WMALLOC(BUFSIZE);
+ *my_buffer = 0;
+ autourl = 0;
+ xuihandle = newXuiHandle();
+ CreateXMLParameters(xuihandle);
+}
+
+void Edit::CreateXMLParameters(int master_handle)
+{
+ //EDIT_PARENT::CreateXMLParameters(master_handle);
+ int numParams = sizeof(params) / sizeof(params[0]);
+ hintNumberOfParams(xuihandle, numParams);
+ for (int i = 0;i < numParams;i++)
+ addParam(xuihandle, params[i], XUI_ATTRIBUTE_IMPLIED);
+}
+
+Edit::~Edit()
+{
+ FREE(my_buffer);
+}
+
+int Edit::setXuiParam(int _xuihandle, int xmlattrid, const wchar_t *name, const wchar_t *value)
+{
+ if (xuihandle == _xuihandle)
+ {
+ switch (xmlattrid)
+ {
+ case EDIT_TEXT: setText(value); return 1;
+ case EDIT_ACTION: if (SkinParser::getAction(value) == ACTION_MB_URL) setAutoUrl(1); return 1;
+ case EDIT_MULTILINE: setMultiline(WTOI(value)); return 1;
+ case EDIT_VSCROLL: setVScroll(WTOI(value)); return 1;
+ case EDIT_AUTOHSCROLL: setAutoHScroll(WTOI(value)); return 1;
+ case EDIT_AUTOENTER: setAutoEnter(WTOI(value)); return 1;
+ case EDIT_PASSWORD: setPassword(WTOI(value)); return 1;
+ case EDIT_AUTOSELECT: setAutoSelect(WTOI(value)); return 1;
+ }
+ }
+ return EDIT_PARENT::setXuiParam(_xuihandle, xmlattrid, name, value);
+}
+
+int Edit::onInit()
+{
+ int r = EDIT_PARENT::onInit();
+ setBuffer(my_buffer, BUFSIZE - 1);
+ my_buffer[BUFSIZE - 1] = 0;
+ return r;
+}
+
+void Edit::onEditUpdate()
+{
+ EDIT_PARENT::onEditUpdate();
+ script_vcpu_onEditUpdate(SCRIPT_CALL, getScriptObject());
+}
+
+void Edit::onIdleEditUpdate()
+{
+ EDIT_PARENT::onIdleEditUpdate();
+ script_vcpu_onIdleEditUpdate(SCRIPT_CALL, getScriptObject());
+}
+
+int Edit::onEnter()
+{
+ if (autourl)
+ {
+ MainMiniBrowser::navigateUrl(my_buffer);
+ }
+#ifdef WASABI_COMPILE_CONFIG
+ getGuiObject()->guiobject_setCfgString(my_buffer);
+#endif
+ int r = EDIT_PARENT::onEnter();
+#ifdef WASABI_COMPILE_CONFIG
+ script_vcpu_onEnter(SCRIPT_CALL, getScriptObject());
+#endif
+ return r;
+}
+
+#ifdef WASABI_COMPILE_CONFIG
+int Edit::onReloadConfig()
+{
+ EDIT_PARENT::onReloadConfig();
+ setText(getGuiObject()->guiobject_getCfgString());
+ return 1;
+}
+#endif
+
+int Edit::onAbort()
+{
+ if (autourl)
+ {
+ ScriptObject *so = MainMiniBrowser::getScriptObject();
+ if (so)
+ {
+ ScriptBrowserWnd *sbw = static_cast<ScriptBrowserWnd *>(so->vcpu_getInterface(browserGuid));
+ if (sbw)
+ setText(sbw->getCurrentUrl());
+ }
+ }
+ int r = EDIT_PARENT::onAbort();
+ script_vcpu_onAbort(SCRIPT_CALL, getScriptObject());
+ return r;
+}
+
+void Edit::setText(const wchar_t *t)
+{
+ wcsncpy(my_buffer, t, BUFSIZE - 1);
+ setBuffer(my_buffer, BUFSIZE - 1);
+ my_buffer[BUFSIZE - 1] = 0;
+}
+
+void Edit::setAutoUrl(int a)
+{
+ autourl = a;
+}
+
+// -----------------------------------------------------------------------------
+
+scriptVar Edit::script_vcpu_setText(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar t)
+{
+ SCRIPT_FUNCTION_INIT
+ ASSERT(t.type == SCRIPT_STRING);
+ Edit *e = static_cast<Edit *>(o->vcpu_getInterface(editGuid));
+ if (e) e->setText(t.data.sdata);
+ RETURN_SCRIPT_VOID;
+}
+
+scriptVar Edit::script_vcpu_setAutoEnter(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar t)
+{
+ SCRIPT_FUNCTION_INIT
+ Edit *e = static_cast<Edit *>(o->vcpu_getInterface(editGuid));
+ if (e) e->setAutoEnter(t.data.idata);
+ RETURN_SCRIPT_VOID;
+}
+
+scriptVar Edit::script_vcpu_getAutoEnter(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
+{
+ SCRIPT_FUNCTION_INIT
+ int a = 0;
+ Edit *e = static_cast<Edit *>(o->vcpu_getInterface(editGuid));
+ if (e) a = e->getAutoEnter();
+ return MAKE_SCRIPT_INT(a);
+}
+
+scriptVar Edit::script_vcpu_setIdleEnabled(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar t)
+{
+ SCRIPT_FUNCTION_INIT
+ Edit *e = static_cast<Edit *>(o->vcpu_getInterface(editGuid));
+ if (e) e->setIdleEnabled(t.data.idata);
+ RETURN_SCRIPT_VOID;
+}
+
+scriptVar Edit::script_vcpu_getIdleEnabled(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
+{
+ SCRIPT_FUNCTION_INIT
+ int a = 0;
+ Edit *e = static_cast<Edit *>(o->vcpu_getInterface(editGuid));
+ if (e) a = e->getIdleEnabled();
+ return MAKE_SCRIPT_INT(a);
+}
+
+scriptVar Edit::script_vcpu_getText(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
+{
+ SCRIPT_FUNCTION_INIT
+ Edit *e = static_cast<Edit *>(o->vcpu_getInterface(editGuid));
+ if (e) return MAKE_SCRIPT_STRING(e->getBufferPtr());
+ return MAKE_SCRIPT_STRING(L"");
+}
+
+scriptVar Edit::script_vcpu_selectAll(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
+{
+ SCRIPT_FUNCTION_INIT
+ Edit *e = static_cast<Edit *>(o->vcpu_getInterface(editGuid));
+ if (e) e->selectAll();
+ RETURN_SCRIPT_VOID;
+}
+
+scriptVar Edit::script_vcpu_enter(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
+{
+ SCRIPT_FUNCTION_INIT
+ Edit *e = static_cast<Edit *>(o->vcpu_getInterface(editGuid));
+ if (e) e->enter();
+ RETURN_SCRIPT_VOID;
+}
+
+scriptVar Edit::script_vcpu_onEnter(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
+{
+ SCRIPT_FUNCTION_INIT;
+ PROCESS_HOOKS0(o, editController);
+ SCRIPT_FUNCTION_CHECKABORTEVENT;
+ SCRIPT_EXEC_EVENT0(o);
+}
+
+scriptVar Edit::script_vcpu_onIdleEditUpdate(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
+{
+ SCRIPT_FUNCTION_INIT;
+ PROCESS_HOOKS0(o, editController);
+ SCRIPT_FUNCTION_CHECKABORTEVENT;
+ SCRIPT_EXEC_EVENT0(o);
+}
+
+scriptVar Edit::script_vcpu_onEditUpdate(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
+{
+ SCRIPT_FUNCTION_INIT;
+ PROCESS_HOOKS0(o, editController);
+ SCRIPT_FUNCTION_CHECKABORTEVENT;
+ SCRIPT_EXEC_EVENT0(o);
+}
+
+scriptVar Edit::script_vcpu_onAbort(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
+{
+ SCRIPT_FUNCTION_INIT;
+ PROCESS_HOOKS0(o, editController);
+ SCRIPT_FUNCTION_CHECKABORTEVENT;
+ SCRIPT_EXEC_EVENT0(o);
+} \ No newline at end of file