123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476 |
- #include <precomp.h>
- #include <api/script/api_maki.h>
- #include <api/wnd/wndclass/guiobjwnd.h>
- #include <api/script/scriptobj.h>
- #include <api/script/scriptguid.h>
- #include <api/service/svcs/svc_droptarget.h>
- #include <api/wnd/notifmsg.h>
- #include <api/script/objects/rootobject.h>
- #include <api/locales/xlatstr.h>
- XMLParamPair GuiObjectWnd::params[] =
- {
- {GUIOBJECT_ACTIVEALPHA, L"ACTIVEALPHA"},
- {GUIOBJECT_ALPHA, L"ALPHA"},
- {GUIOBJECT_SETANCHOR, L"ANCHOR"},
- #ifdef USEAPPBAR
- {GUIOBJECT_APPBAR, L"APPBAR"},
- #endif
- {GUIOBJECT_CFGATTR, L"CFGATTRIB"},
- {GUIOBJECT_SETCURSOR, L"CURSOR"},
- {GUIOBJECT_DROPTARGET, L"DROPTARGET"},
- {GUIOBJECT_ENABLED, L"ENABLED"},
- {GUIOBJECT_FITTOPARENT, L"FITPARENT"},
- {GUIOBJECT_FOCUSONCLICK, L"FOCUSONCLICK"},
- {GUIOBJECT_GHOST, L"GHOST"},
- {GUIOBJECT_H, L"H"},
- {GUIOBJECT_ID, L"ID"},
- {GUIOBJECT_INACTIVEALPHA, L"INACTIVEALPHA"},
- {GUIOBJECT_MOVE, L"MOVE"},
- {GUIOBJECT_SETNOCONTEXTMENU, L"NOCONTEXTMENU"},
- {GUIOBJECT_SETNODBLCLICK, L"NODBLCLICK"},
- {GUIOBJECT_SETNOLEFTCLICK, L"NOLEFTCLICK"},
- {GUIOBJECT_SETNOMOUSEMOVE, L"NOMOUSEMOVE"},
- {GUIOBJECT_SETNORIGHTCLICK, L"NORIGHTCLICK"},
- {GUIOBJECT_NOTIFY, L"NOTIFY"},
- {GUIOBJECT_NOTIFY, L"NOTIFY0"},
- {GUIOBJECT_NOTIFY, L"NOTIFY1"},
- {GUIOBJECT_NOTIFY, L"NOTIFY2"},
- {GUIOBJECT_NOTIFY, L"NOTIFY3"},
- {GUIOBJECT_NOTIFY, L"NOTIFY4"},
- {GUIOBJECT_NOTIFY, L"NOTIFY5"},
- {GUIOBJECT_NOTIFY, L"NOTIFY6"},
- {GUIOBJECT_NOTIFY, L"NOTIFY7"},
- {GUIOBJECT_NOTIFY, L"NOTIFY8"},
- {GUIOBJECT_NOTIFY, L"NOTIFY9"},
- {GUIOBJECT_RECTRGN, L"RECTRGN"},
- {GUIOBJECT_SYSREGION, L"REGIONOP"},
- {GUIOBJECT_RELATH, L"RELATH"},
- {GUIOBJECT_RELATW, L"RELATW"},
- {GUIOBJECT_RELATX, L"RELATX"},
- {GUIOBJECT_RELATY, L"RELATY"},
- {GUIOBJECT_RENDERBASETEXTURE, L"RENDERBASETEXTURE"},
- {GUIOBJECT_SYSMETRICSX, L"SYSMETRICSX"},
- {GUIOBJECT_SYSMETRICSY, L"SYSMETRICSY"},
- {GUIOBJECT_SYSMETRICSW, L"SYSMETRICSW"},
- {GUIOBJECT_SYSMETRICSH, L"SYSMETRICSH"},
- {GUIOBJECT_SYSREGION, L"SYSREGION"},
- {GUIOBJECT_TABORDER, L"TABORDER"},
- {GUIOBJECT_TOOLTIP, L"TOOLTIP"},
- {GUIOBJECT_TRANSLATE, L"TRANSLATE"},
- {GUIOBJECT_USERDATA, L"USERDATA"},
- {GUIOBJECT_VISIBLE, L"VISIBLE"},
- {GUIOBJECT_W, L"W"},
- {GUIOBJECT_WANTFOCUS, L"WANTFOCUS"},
- {GUIOBJECT_X, L"X"},
- {GUIOBJECT_SETX1, L"X1"},
- {GUIOBJECT_SETX2, L"X2"},
- {GUIOBJECT_Y, L"Y"},
- {GUIOBJECT_SETY1, L"Y1"},
- {GUIOBJECT_SETY2, L"Y2"},
- };
- GuiObjectWnd::GuiObjectWnd()
- {
- my_gui_object = static_cast<GuiObject *>(WASABI_API_MAKI->maki_encapsulate(guiObjectGuid, getScriptObject()));
- getScriptObject()->vcpu_setInterface(xmlObjectGuid, static_cast<XmlObject *>(this));
- getScriptObject()->vcpu_setInterface(guiObjectWndGuid, static_cast<GuiObjectWnd *>(this));
- #ifdef USEAPPBAR
- getScriptObject()->vcpu_setInterface(appBarGuid, static_cast<AppBar*>(this));
- #endif
- my_gui_object->guiobject_setRootWnd(this);
- getScriptObject()->vcpu_setClassName(L"GuiObject");
- getScriptObject()->vcpu_setController(WASABI_API_MAKI->maki_getController(guiObjectGuid));
- cfg_reentry = 0;
- xuihandle = newXuiHandle();
- CreateXMLParameters(xuihandle);
- }
- void GuiObjectWnd::CreateXMLParameters(int 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);
- }
- GuiObjectWnd::~GuiObjectWnd()
- {
- WASABI_API_MAKI->maki_deencapsulate(guiObjectGuid, my_gui_object);
- my_gui_object = NULL;
- }
- const wchar_t *GuiObjectWnd::getTip()
- {
- switch(wantTranslation())
- {
- case 1:
- return _(tip);
- case 2:
- return __(tip);
- default:
- return tip;
- }
- }
- int GuiObjectWnd::onRightButtonDown(int x, int y)
- {
- if (!my_gui_object) return 1;
- GUIOBJECTWND_PARENT::onRightButtonDown(x, y);
- my_gui_object->guiobject_onRightButtonDown(x, y);
- return 1;
- }
- int GuiObjectWnd::onRightButtonUp(int x, int y)
- {
- if (!my_gui_object) return 1;
- GUIOBJECTWND_PARENT::onRightButtonUp(x, y);
- my_gui_object->guiobject_onRightButtonUp(x, y);
- return 1;
- }
- int GuiObjectWnd::onLeftButtonDown(int x, int y)
- {
- if (!my_gui_object) return 1;
- GUIOBJECTWND_PARENT::onLeftButtonDown(x, y);
- my_gui_object->guiobject_onLeftButtonDown(x, y);
- return 1;
- }
- int GuiObjectWnd::onLeftButtonUp(int x, int y)
- {
- if (!my_gui_object) return 1;
- GUIOBJECTWND_PARENT::onLeftButtonUp(x, y);
- my_gui_object->guiobject_onLeftButtonUp(x, y);
- return 1;
- }
- int GuiObjectWnd::onMouseMove(int x, int y)
- {
- if (!my_gui_object) return 1;
- GUIOBJECTWND_PARENT::onMouseMove(x, y);
- my_gui_object->guiobject_onMouseMove(x, y);
- return 1;
- }
- int GuiObjectWnd::wantTranslation()
- {
- if (!my_gui_object) return 1;
- return my_gui_object->guiobject_wantTranslation();
- }
- int GuiObjectWnd::onLeftButtonDblClk(int x, int y)
- {
- if (!my_gui_object) return 1;
- GUIOBJECTWND_PARENT::onLeftButtonDblClk(x, y);
- my_gui_object->guiobject_onLeftButtonDblClk(x, y);
- return 1;
- }
- int GuiObjectWnd::onRightButtonDblClk(int x, int y)
- {
- if (!my_gui_object) return 1;
- GUIOBJECTWND_PARENT::onRightButtonDblClk(x, y);
- my_gui_object->guiobject_onRightButtonDblClk(x, y);
- return 1;
- }
- // Martin> For the next two functions, we need to ensure that we don't kill volume change if nothing is done
- int GuiObjectWnd::onMouseWheelDown (int click, int line)
- {
- if (!my_gui_object) return 1;
- int ret = GUIOBJECTWND_PARENT::onMouseWheelDown(click, line);
- if (!ret) ret = my_gui_object->guiobject_onMouseWheelDown(click, line);
- return ret;
- }
- int GuiObjectWnd::onMouseWheelUp (int click, int line)
- {
- if (!my_gui_object) return 1;
- int ret = GUIOBJECTWND_PARENT::onMouseWheelUp(click, line);
- if (!ret) ret = my_gui_object->guiobject_onMouseWheelUp(click, line);
- return ret;
- }
- int GuiObjectWnd::onResize()
- {
- if (!my_gui_object) return 1;
- GUIOBJECTWND_PARENT::onResize();
- if (!isInited()) return 1;
- ifc_window *w = my_gui_object->guiobject_getRootWnd();
- RECT r;
- w->getClientRect(&r);
- my_gui_object->guiobject_onResize(r.left, r.top, r.right - r.left, r.bottom - r.top);
- return 1;
- }
- void GuiObjectWnd::onEnterArea()
- {
- if (!my_gui_object) return ;
- GUIOBJECTWND_PARENT::onEnterArea();
- my_gui_object->guiobject_onEnterArea();
- }
- void GuiObjectWnd::onLeaveArea()
- {
- if (!my_gui_object) return ;
- GUIOBJECTWND_PARENT::onLeaveArea();
- my_gui_object->guiobject_onLeaveArea();
- }
- void GuiObjectWnd::onSetVisible(int show)
- {
- if (!my_gui_object)
- return ;
- GUIOBJECTWND_PARENT::onSetVisible(show);
- my_gui_object->guiobject_onSetVisible(show);
- }
- int GuiObjectWnd::onEnable(int en)
- {
- if (!my_gui_object) return 1;
- GUIOBJECTWND_PARENT::onEnable(en);
- my_gui_object->guiobject_onEnable(en);
- return 1;
- }
- GuiObject *GuiObjectWnd::getGuiObject()
- {
- return my_gui_object;
- }
- RootObject *GuiObjectWnd::getRootObject()
- {
- return my_gui_object->guiobject_getRootObject();
- }
- int GuiObjectWnd::dragDrop(ifc_window *sourceWnd, int x, int y)
- {
- int r = DropTargetEnum::throwDrop(my_gui_object->guiobject_getDropTarget(), sourceWnd, x, y);
- if (r == 0)
- {
- ifc_window *p = getParent();
- if (p != NULL)
- {
- DragInterface *d = p->getDragInterface();
- if (d != NULL)
- return d->dragDrop(sourceWnd, x, y);
- }
- }
- return r;
- }
- int GuiObjectWnd::dragEnter(ifc_window *sourceWnd)
- {
- my_gui_object->guiobject_dragEnter(sourceWnd);
- return 1;
- }
- int GuiObjectWnd::dragOver(int x, int y, ifc_window *sourceWnd)
- {
- my_gui_object->guiobject_dragOver(x, y, sourceWnd);
- return 1;
- }
- int GuiObjectWnd::dragLeave(ifc_window *sourceWnd)
- {
- my_gui_object->guiobject_dragLeave(sourceWnd);
- return 1;
- }
- int GuiObjectWnd::onActivate()
- {
- if (!my_gui_object) return 1;
- GUIOBJECTWND_PARENT::onActivate();
- invalidate();
- return 1;
- }
- int GuiObjectWnd::onDeactivate()
- {
- if (!my_gui_object) return 1;
- GUIOBJECTWND_PARENT::onDeactivate();
- invalidate();
- return 1;
- }
- void GuiObjectWnd::onCancelCapture()
- {
- if (!my_gui_object) return ;
- GUIOBJECTWND_PARENT::onCancelCapture();
- my_gui_object->guiobject_onCancelCapture();
- }
- int GuiObjectWnd::setXuiParam(int _xuihandle, int attrid, const wchar_t *name, const wchar_t *value)
- {
- if (_xuihandle == xuihandle)
- {
- switch (attrid)
- {
- case GUIOBJECT_FOCUSONCLICK:
- setFocusOnClick(WTOI(value));
- break;
- default:
- getGuiObject()->guiobject_setXmlParamById(attrid, value);
- break;
- }
- }
- return 0;
- }
- int GuiObjectWnd::onUnknownXmlParam(const wchar_t *param, const wchar_t *value)
- {
- return onUnknownXuiParam(param, value);
- }
- int GuiObjectWnd::setXmlParamById(int xmlhandle, int attrid, const wchar_t *name, const wchar_t *value)
- {
- return setXuiParam(xmlhandle, attrid, name, value);
- }
- void *GuiObjectWnd::getInterface(GUID interface_guid)
- {
- void *r = GUIOBJECTWND_PARENT::getInterface(interface_guid);
- if (r) return r;
- return getRootObject()->rootobject_getScriptObject()->vcpu_getInterface(interface_guid);
- }
- int GuiObjectWnd::onAction(const wchar_t *action, const wchar_t *param, int x, int y, intptr_t p1, intptr_t p2, void *data, size_t datalen, ifc_window *source)
- {
- #ifdef WASABI_COMPILE_CONFIG
- if (!_wcsicmp(action, L"reload_config") && isInited())
- {
- if (cfg_reentry) return 1;
- cfg_reentry = 1;
- int r = onReloadConfig();
- cfg_reentry = 0;
- return r;
- }
- #endif
- int rt = GUIOBJECTWND_PARENT::onAction(action, param, x, y, p1, p2, data, datalen, source);
- getGuiObject()->guiobject_onAction(action, param, x, y, p1, p2, data, datalen, source);
- return rt;
- }
- void GuiObjectWnd::setContent(const wchar_t *groupid_orguid, int autoresizefromcontent)
- {
- #ifdef WASABI_COMPILE_SKIN
- // abstract_setAllowDeferredContent(0);
- abstract_setContent(groupid_orguid, autoresizefromcontent);
- #endif
- }
- void GuiObjectWnd::setContentBySkinItem(SkinItem *item, int autoresizefromcontent)
- {
- // abstract_setAllowDeferredContent(0);
- #ifdef WASABI_COMPILE_SKIN
- abstract_setContentBySkinItem(item, autoresizefromcontent);
- #endif
- }
- void GuiObjectWnd::abstract_onNewContent()
- {
- #ifdef WASABI_COMPILE_SKIN
- GUIOBJECTWND_PARENT::abstract_onNewContent();
- #endif
- onNewContent();
- #ifdef WASABI_COMPILE_CONFIG
- if (getGuiObject()->guiobject_hasCfgAttrib())
- onReloadConfig();
- #endif
- }
- GuiObject *GuiObjectWnd::findObject(const wchar_t *object_id)
- {
- return getGuiObject()->guiobject_findObject(object_id);
- }
- #ifdef WASABI_COMPILE_SCRIPT
- ScriptObject *GuiObjectWnd::findScriptObject(const wchar_t *object_id)
- {
- GuiObject *fo = getGuiObject()->guiobject_findObject(object_id);
- if (fo != NULL) return fo->guiobject_getScriptObject();
- return NULL;
- }
- #endif
- const wchar_t *GuiObjectWnd::getId()
- {
- if (my_gui_object)
- return my_gui_object->guiobject_getId();
- return GUIOBJECTWND_PARENT::getId();
- }
- int GuiObjectWnd::onPostOnInit()
- {
- int r = GUIOBJECTWND_PARENT::onPostOnInit();
- #ifdef WASABI_COMPILE_CONFIG
- if (getGuiObject()->guiobject_hasCfgAttrib())
- onReloadConfig();
- #endif
- return r;
- }
- int GuiObjectWnd::onInit()
- {
- int r = GUIOBJECTWND_PARENT::onInit();
- getGuiObject()->guiobject_onInit();
- return r;
- }
- int GuiObjectWnd::onChar(unsigned int c)
- {
- if (!my_gui_object) return 1;
- int r = GUIOBJECTWND_PARENT::onChar(c);
- getGuiObject()->guiobject_onChar(c);
- return r;
- }
- int GuiObjectWnd::onKeyDown(int vkcode)
- {
- if (!my_gui_object) return 1;
- int r = GUIOBJECTWND_PARENT::onKeyDown(vkcode);
- getGuiObject()->guiobject_onKeyDown(vkcode);
- return r;
- }
- int GuiObjectWnd::onKeyUp(int vkcode)
- {
- if (!my_gui_object) return 1;
- int r = GUIOBJECTWND_PARENT::onKeyUp(vkcode);
- getGuiObject()->guiobject_onKeyUp(vkcode);
- return r;
- }
- int GuiObjectWnd::onGetFocus()
- {
- if (!my_gui_object) return 1;
- int r = GUIOBJECTWND_PARENT::onGetFocus();
- getGuiObject()->guiobject_onGetFocus();
- return r;
- }
- int GuiObjectWnd::onKillFocus()
- {
- if (!my_gui_object) return 1;
- int r = GUIOBJECTWND_PARENT::onKillFocus();
- getGuiObject()->guiobject_onKillFocus();
- return r;
- }
- int GuiObjectWnd::onAcceleratorEvent(const wchar_t *name)
- {
- int r = GUIOBJECTWND_PARENT::onAcceleratorEvent(name);
- getGuiObject()->guiobject_onAccelerator(name);
- return r;
- }
- int GuiObjectWnd::wantFocus()
- {
- if (GUIOBJECTWND_PARENT::wantFocus()) return 1;
- if (my_gui_object)
- return my_gui_object->guiobject_wantFocus();
- return 0;
- }
|