aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/skin/widgets/xuiframe.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Wasabi/api/skin/widgets/xuiframe.cpp')
-rw-r--r--Src/Wasabi/api/skin/widgets/xuiframe.cpp241
1 files changed, 241 insertions, 0 deletions
diff --git a/Src/Wasabi/api/skin/widgets/xuiframe.cpp b/Src/Wasabi/api/skin/widgets/xuiframe.cpp
new file mode 100644
index 00000000..919baad1
--- /dev/null
+++ b/Src/Wasabi/api/skin/widgets/xuiframe.cpp
@@ -0,0 +1,241 @@
+#include <precomp.h>
+#include "xuiframe.h"
+#include <tataki/canvas/ifc_canvas.h>
+#include <api/script/scriptguid.h>
+
+const wchar_t ScriptFrameXuiObjectStr[] = L"Wasabi:Frame"; // This is the xml tag
+char ScriptFrameXuiSvcName[] = "Wasabi:ScriptFrame xui object";
+XMLParamPair ScriptFrame::params[] = {
+ {SCRIPTFRAME_SETORIENTATION, L"ORIENTATION"},
+ {SCRIPTFRAME_SETLEFT, L"LEFT"}, // TOP/BOTTOM IS ALIAS FOR LEFT/RIGHT
+ {SCRIPTFRAME_SETLEFT, L"TOP"},
+ {SCRIPTFRAME_SETRIGHT, L"RIGHT"},
+ {SCRIPTFRAME_SETRIGHT, L"BOTTOM"},
+ {SCRIPTFRAME_SETFROM, L"FROM"},
+ {SCRIPTFRAME_SETWIDTH, L"WIDTH"},
+ {SCRIPTFRAME_SETWIDTH, L"HEIGHT"}, // HEIGHT IS AN ALIAS FOR WIDTH
+ {SCRIPTFRAME_SETRESIZEABLE, L"RESIZABLE"},
+ {SCRIPTFRAME_SETMAXWIDTH, L"MAXWIDTH"},
+ {SCRIPTFRAME_SETMAXWIDTH, L"MAXHEIGHT"}, //ALIAS
+ {SCRIPTFRAME_SETMINWIDTH, L"MINWIDTH"},
+ {SCRIPTFRAME_SETMINWIDTH, L"MINHEIGHT"}, //ALIAS
+ {SCRIPTFRAME_SETV_BITMAP, L"VBITMAP"}, // to override wasabi.framewnd.verticaldivider
+ {SCRIPTFRAME_SETV_GRABBER, L"VGRABBER"}, // to override wasabi.framewnd.verticalgrabber
+};
+
+ScriptFrame::ScriptFrame()
+{
+ getScriptObject()->vcpu_setInterface(scriptFrameGuid, (void *)static_cast<ScriptFrame *>(this));
+ getScriptObject()->vcpu_setClassName(L"Frame");
+ getScriptObject()->vcpu_setController(frameController);
+
+ setVirtual(1);
+ myxuihandle = newXuiHandle();
+ CreateXMLParameters(myxuihandle);
+
+ orientation = DIVIDER_VERTICAL;
+ from = SDP_FROMLEFT;
+ resizable = 1;
+ width = 128;
+ rootwndleft = rootwndright = NULL;
+}
+
+void ScriptFrame::CreateXMLParameters(int master_handle)
+{
+ //SCRIPTFRAME_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);
+}
+
+ScriptFrame::~ScriptFrame() {
+ if (rootwndright) {
+ WASABI_API_SKIN->group_destroy(rootwndright);
+ rootwndright = NULL;
+ }
+ if (rootwndleft) {
+ WASABI_API_SKIN->group_destroy(rootwndleft);
+ rootwndleft = NULL;
+ }
+}
+
+// XuiObject automatically calls this back for all parameters registered using addParam
+// encountered in the xml source
+int ScriptFrame::setXuiParam(int xuihandle, int xmlattributeid, const wchar_t *xmlattributename, const wchar_t *value) {
+
+ if (xuihandle != myxuihandle)
+ return SCRIPTFRAME_PARENT::setXuiParam(xuihandle, xmlattributeid, xmlattributename, value);
+
+ switch (xmlattributeid) {
+ case SCRIPTFRAME_SETORIENTATION: setOrientation(value); break;
+ case SCRIPTFRAME_SETLEFT: setLeft(value); break;
+ case SCRIPTFRAME_SETRIGHT: setRight(value); break;
+ case SCRIPTFRAME_SETFROM: setFrom(value); break;
+ case SCRIPTFRAME_SETWIDTH: setWidth(value); break;
+ case SCRIPTFRAME_SETRESIZEABLE: setResize(value); break;
+ case SCRIPTFRAME_SETMAXWIDTH: setMaxWidth((!_wcsicmp(value, L"null")) ? 0 : WTOI(value)); break;
+ case SCRIPTFRAME_SETMINWIDTH: setMinWidth(WTOI(value)); break;
+ case SCRIPTFRAME_SETSNAP: setSnap(WTOI(value)); break;
+ case SCRIPTFRAME_SETV_BITMAP:
+ Set_v_bitmap(value);
+ break;
+ case SCRIPTFRAME_SETV_GRABBER:
+ Set_v_grabber(value);
+ break;
+
+ default:
+ return 0;
+ }
+ return 1;
+}
+
+int ScriptFrame::onInit()
+{
+
+ if (!left.isempty()) rootwndleft = WASABI_API_SKIN->group_create(left);
+ if (!right.isempty()) rootwndright = WASABI_API_SKIN->group_create(right);
+
+/* GuiObject *gl = rootwndleft ? static_cast<GuiObject *>(rootwndleft->getInterface(guiObjectGuid)) : NULL;
+ GuiObject *gr = rootwndright ? static_cast<GuiObject *>(rootwndleft->getInterface(guiObjectGuid)) : NULL;
+
+ if (gl) gl->guiobject_setParentGroup(getGuiObject()->guiobject_getParentGroup());
+ if (gr) gr->guiobject_setParentGroup(getGuiObject()->guiobject_getParentGroup());*/
+
+ if (rootwndleft) rootwndleft->setParent(this);
+ if (rootwndright) rootwndright->setParent(this);
+
+ setChildrenRootWnd(rootwndleft, rootwndright);
+ setDividerType(static_cast<FrameWndDividerType>(orientation));
+ setDividerPos(from, width);
+ setResizeable(resizable);
+
+
+ SCRIPTFRAME_PARENT::onInit();
+ return 1;
+}
+
+void ScriptFrame::onResizeChildren(RECT leftr, RECT rightr) {
+/* if (rootwndleft) rootwndleft->invalidate();
+ if (rootwndright) rootwndright->invalidate();*/
+ invalidate();
+}
+
+void ScriptFrame::setOrientation(const wchar_t *orient) {
+ if (!WCSICMP(orient, L"v") || !WCSICMP(orient, L"vertical"))
+ orientation = DIVIDER_VERTICAL;
+ if (!WCSICMP(orient, L"h") || !WCSICMP(orient, L"horizontal"))
+ orientation = DIVIDER_HORIZONTAL;
+}
+
+void ScriptFrame::setLeft(const wchar_t *groupname) {
+ left = groupname;
+}
+
+void ScriptFrame::setRight(const wchar_t *groupname) {
+ right = groupname;
+}
+
+void ScriptFrame::setFrom(const wchar_t *f) {
+ if (!WCSICMP(f, L"l") || !WCSICMP(f, L"left") || !WCSICMP(f, L"t") || !WCSICMP(f, L"top"))
+ from = SDP_FROMLEFT;
+ if (!WCSICMP(f, L"r") || !WCSICMP(f, L"right") || !WCSICMP(f, L"b") || !WCSICMP(f, L"bottom"))
+ from = SDP_FROMRIGHT;
+}
+
+void ScriptFrame::setWidth(const wchar_t *w) {
+ width = WTOI(w);
+}
+
+void ScriptFrame::setResize(const wchar_t *w) {
+ resizable = WTOI(w);
+ if (isInited())
+ setResizeable(resizable);
+}
+
+FrameScriptController _frameController;
+FrameScriptController *frameController = &_frameController;
+
+// -- Functions table -------------------------------------
+function_descriptor_struct FrameScriptController::exportedFunction[] =
+{
+ {L"setPosition", 1, (void*)ScriptFrame::script_vcpu_setPosition },
+ {L"getPosition", 0, (void*)ScriptFrame::script_vcpu_getPosition },
+};
+// --------------------------------------------------------
+
+const wchar_t *FrameScriptController::getClassName()
+{
+ return L"Frame";
+}
+
+const wchar_t *FrameScriptController::getAncestorClassName()
+{
+ return L"GuiObject";
+}
+
+ScriptObject *FrameScriptController::instantiate()
+{
+ ScriptFrame *t = new ScriptFrame;
+ ASSERT(t != NULL);
+ return t->getScriptObject();
+}
+
+void FrameScriptController::destroy(ScriptObject *o)
+{
+ ScriptFrame *t = static_cast<ScriptFrame *>(o->vcpu_getInterface(scriptFrameGuid));
+ ASSERT(t != NULL);
+ delete t;
+}
+
+void *FrameScriptController::encapsulate(ScriptObject *o)
+{
+ return NULL; // no encapsulation for Wasabi:Frame yet
+}
+
+void FrameScriptController::deencapsulate(void *o)
+{}
+
+int FrameScriptController::getNumFunctions()
+{
+ return sizeof(exportedFunction) / sizeof(function_descriptor_struct);
+}
+
+const function_descriptor_struct *FrameScriptController::getExportedFunctions()
+{
+ return exportedFunction;
+}
+
+GUID FrameScriptController::getClassGuid()
+{
+ return scriptFrameGuid;
+}
+
+const wchar_t *ScriptFrame::vcpu_getClassName()
+{
+ return L"Frame";
+}
+
+scriptVar ScriptFrame::script_vcpu_setPosition(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar t)
+{
+ SCRIPT_FUNCTION_INIT
+ ASSERT(t.type == SCRIPT_INT);
+ ScriptFrame *fr = static_cast<ScriptFrame *>(o->vcpu_getInterface(scriptFrameGuid));
+ if (fr)
+ fr->setDividerPosNoCfg(fr->from, ::GET_SCRIPT_INT(t));
+
+ RETURN_SCRIPT_VOID;
+}
+
+scriptVar ScriptFrame::script_vcpu_getPosition(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
+{
+ SCRIPT_FUNCTION_INIT
+ ScriptFrame *fr = static_cast<ScriptFrame *>(o->vcpu_getInterface(scriptFrameGuid));
+ if (fr)
+ {
+ int pos, from;
+ fr->getDividerPos(&from, &pos);
+ return MAKE_SCRIPT_INT(pos);
+ }
+ return MAKE_SCRIPT_INT(0);
+}