123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- #include <precomp.h>
- #include "mouseredir.h"
- #include <api/skin/widgets/group.h>
- #include <api/script/scriptmgr.h>
- #include <api/script/objects/smap.h>
- #include <api/script/objects/sregion.h>
- const wchar_t mouseRedirXuiObjectStr[] = L"MouseRedir"; // This is the xml tag
- char mouseRedirXuiSvcName[] = "MouseRedir xui object"; // this is the name of the xuiservice
- XMLParamPair MouseRedir::params[] = {
- {MOUSEREDIR_TARGET, L"target"},
- };
- MouseRedir::MouseRedir()
- {
- getScriptObject()->vcpu_setInterface(mouseredirGuid, (void *)static_cast<MouseRedir *>(this));
- getScriptObject()->vcpu_setClassName(L"MouseRedir");
- getScriptObject()->vcpu_setController(mouseredirController);
- rgn = NULL;
- redirobject = NULL;
- getGuiObject()->guiobject_setClickThrough(0);
- xuihandle = newXuiHandle();
- CreateXMLParameters(xuihandle);
- }
- void MouseRedir::CreateXMLParameters(int master_handle)
- {
- //MOUSEREDIR_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_REQUIRED);
- }
- MouseRedir::~MouseRedir()
- {
- delete rgn;
- }
- int MouseRedir::setXuiParam(int _xuihandle, int xmlattributeid, const wchar_t *xmlattributename, const wchar_t *value)
- {
- if (_xuihandle == xuihandle)
- {
- switch (xmlattributeid)
- {
- case MOUSEREDIR_TARGET:
- setTarget(value);
- return 1;
- }
- }
- return MOUSEREDIR_PARENT::setXuiParam(_xuihandle, xmlattributeid, xmlattributename, value);
- }
- int MouseRedir::onInit()
- {
- MOUSEREDIR_PARENT::onInit();
- if (!deferedredirobjectid.isempty())
- doSetTarget(deferedredirobjectid);
- deferedredirobjectid = L"";
- return 1;
- }
- int MouseRedir::mouseInRegion(int x, int y)
- {
- if (!rgn) return 1;
- RECT cr;
- getClientRect(&cr);
- POINT pt = {x - cr.left, y - cr.top};
- return rgn->ptInRegion(&pt);
- }
- void MouseRedir::setRedirection(GuiObject *o)
- {
- redirobject = o;
- }
- GuiObject *MouseRedir::getRedirection()
- {
- return redirobject;
- }
- void MouseRedir::setTarget(const wchar_t *id)
- {
- if (!isInited())
- deferedredirobjectid = id;
- else
- doSetTarget(id);
- }
- void MouseRedir::doSetTarget(const wchar_t *id)
- {
- Group *g = getGuiObject()->guiobject_getParentGroup();
- if (!g) return ;
- GuiObject *o = g->getObject(id);
- if (!o) return ;
- redirobject = o;
- }
- MouseRedirScriptController _mouseredirController;
- MouseRedirScriptController *mouseredirController = &_mouseredirController;
- // -- Functions table -------------------------------------
- function_descriptor_struct MouseRedirScriptController::exportedFunction[] = {
- {L"setRegionFromMap", 1, (void*)MouseRedir::script_vcpu_setRegionFromMap},
- {L"setRegion", 1, (void*)MouseRedir::script_vcpu_setRegion },
- {L"setRedirection", 1, (void*)MouseRedir::script_vcpu_setRedirection},
- {L"getRedirection", 0, (void*)MouseRedir::script_vcpu_getRedirection},
- };
- // --------------------------------------------------------
- const wchar_t *MouseRedirScriptController::getClassName()
- {
- return L"MouseRedir";
- }
- const wchar_t *MouseRedirScriptController::getAncestorClassName()
- {
- return L"GuiObject";
- }
- ScriptObject *MouseRedirScriptController::instantiate()
- {
- MouseRedir *m = new MouseRedir;
- if (!m) return NULL;
- return m->getScriptObject();
- }
- void MouseRedirScriptController::destroy(ScriptObject *o)
- {
- MouseRedir *obj = static_cast<MouseRedir*>(o->vcpu_getInterface(mouseredirGuid));
- ASSERT(obj != NULL);
- delete obj;
- }
- void *MouseRedirScriptController::encapsulate(ScriptObject *o)
- {
- return NULL; // no encapsulation for mouseredir yet
- }
- void MouseRedirScriptController::deencapsulate(void *)
- {}
- int MouseRedirScriptController::getNumFunctions()
- {
- return sizeof(exportedFunction) / sizeof(function_descriptor_struct);
- }
- const function_descriptor_struct *MouseRedirScriptController::getExportedFunctions()
- {
- return exportedFunction;
- }
- GUID MouseRedirScriptController::getClassGuid()
- {
- return mouseredirGuid;
- }
- //---------------------------------------------------------------------------
- void MouseRedir::setRegionFromMap(SMap *map, int byte, int inversed)
- {
- if (rgn)
- {
- delete rgn;
- rgn = NULL;
- }
- rgn = new RegionI(map->getBitmap(), NULL, 0, 0, FALSE, 1, (unsigned char)byte, inversed);
- }
- void MouseRedir::setRegion(SRegion *reg)
- {
- if (rgn) { delete rgn; rgn = NULL; }
- if (!reg) { invalidate(); return ; }
- rgn = new RegionI();
- rgn->addRegion(reg->getRegion());
- }
- ifc_window *MouseRedir::getForwardWnd()
- {
- if (redirobject) return redirobject->guiobject_getRootWnd();
- return this;
- }
- scriptVar MouseRedir::script_vcpu_setRedirection(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar obj)
- {
- SCRIPT_FUNCTION_INIT;
- MouseRedir *mr = static_cast<MouseRedir *>(o->vcpu_getInterface(mouseredirGuid));
- if (mr) mr->setRedirection(static_cast<GuiObject *>(GET_SCRIPT_OBJECT_AS(obj, guiObjectGuid)));
- RETURN_SCRIPT_VOID;
- }
- scriptVar MouseRedir::script_vcpu_getRedirection(SCRIPT_FUNCTION_PARAMS, ScriptObject *o)
- {
- SCRIPT_FUNCTION_INIT;
- MouseRedir *mr = static_cast<MouseRedir *>(o->vcpu_getInterface(mouseredirGuid));
- return MAKE_SCRIPT_OBJECT(mr ? mr ->getRedirection()->guiobject_getScriptObject() : NULL);
- }
- scriptVar MouseRedir::script_vcpu_setRegionFromMap(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar map, scriptVar byte, scriptVar inv)
- {
- SCRIPT_FUNCTION_INIT;
- ASSERT(SOM::isNumeric(&byte));
- ASSERT(SOM::isNumeric(&inv));
- MouseRedir *mr = static_cast<MouseRedir *>(o->vcpu_getInterface(mouseredirGuid));
- SMap *sm = static_cast<SMap*>(GET_SCRIPT_OBJECT_AS(map, mapGuid));
- if (mr) mr->setRegionFromMap(sm, SOM::makeInt(&byte), SOM::makeInt(&inv));
- RETURN_SCRIPT_VOID;
- }
- scriptVar MouseRedir::script_vcpu_setRegion(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar reg)
- {
- SCRIPT_FUNCTION_INIT;
- MouseRedir *mr = static_cast<MouseRedir *>(o->vcpu_getInterface(mouseredirGuid));
- SRegion *r = static_cast<SRegion *>(GET_SCRIPT_OBJECT_AS(reg, regionGuid));
- if (mr) mr->setRegion(r);
- RETURN_SCRIPT_VOID;
- }
|