#ifndef __GUIOBJ_H #define __GUIOBJ_H #include #include #include #include #include #include #include #include #include class Layout; class FindObjectCallback; class ScriptObject; class SkinCursor; #ifndef _REDOCK_STRUCT_DEFINED #define _REDOCK_STRUCT_DEFINED typedef struct { Layout *l; RECT original_rect; } redock_struct; #endif class GuiObjectScriptController : public ScriptObjectControllerI { public: virtual const wchar_t *getClassName(); virtual const wchar_t *getAncestorClassName(); virtual ScriptObjectController *getAncestorController(); virtual int getNumFunctions(); virtual const function_descriptor_struct *getExportedFunctions(); virtual GUID getClassGuid(); virtual ScriptObject *instantiate(); virtual void destroy(ScriptObject *o); virtual void *encapsulate(ScriptObject *o); virtual void deencapsulate(void *o); virtual int getInstantiable(); private: static function_descriptor_struct exportedFunction[]; }; extern GuiObjectScriptController *guiController; #define GUIOBJECT_SCRIPTPARENT RootObject #define TARGET_FROZEN 0 #define TARGET_RUNNING 1 #define TARGETTIMER_ID 0x1879 #define ANCHOR_NONE 0 #define ANCHOR_LEFT 1 #define ANCHOR_TOP 2 #define ANCHOR_RIGHT 4 #define ANCHOR_BOTTOM 8 class GuiObjectI; class GuiObjectTimer : public TimerClientDI { public: GuiObjectTimer() { obj = NULL; } virtual ~GuiObjectTimer() { } public: virtual void timerclient_timerCallback(int id); virtual void setGuiObjectI(GuiObjectI *o) { obj = o; } private: GuiObjectI *obj; }; class GuiObjectI : public GuiObjectX, public DependentViewerTPtr { public: GuiObjectI(ScriptObject *o); virtual ~GuiObjectI(); virtual ifc_window *guiobject_getRootWnd(); virtual void guiobject_setRootWnd(ifc_window *w); virtual void guiobject_onInit(); virtual void guiobject_getGuiPosition(int *x, int *y, int *w, int *h, int *rx, int *ry, int *rw, int *rh); virtual void guiobject_setGuiPosition(int *x, int *y, int *w, int *h, int *rx, int *ry, int *rw, int *rh); virtual int guiobject_getAnchoragePosition(int *x1, int *y1, int *x2, int *y2, int *anchor); virtual void guiobject_setAnchoragePosition(int *x1, int *y1, int *x2, int *y2, int *anchor); virtual void guiobject_validateAnchorage(); virtual void guiobject_setParentGroup(Group *g); virtual ScriptObject *guiobject_getScriptObject(); virtual RootObject *guiobject_getRootObject(); virtual Group *guiobject_getParentGroup(); virtual GuiObject *guiobject_getParent(); virtual void guiobject_setTabOrder(int a); virtual void guiobject_setId(const wchar_t *id); virtual const wchar_t *guiobject_getId(); virtual void guiobject_setTargetX(int tx); virtual void guiobject_setTargetY(int ty); virtual void guiobject_setTargetW(int tw); virtual void guiobject_setTargetH(int th); virtual void guiobject_setTargetA(int th); virtual void guiobject_setTargetSpeed(float s); virtual void guiobject_gotoTarget(void); virtual void guiobject_cancelTarget(); virtual void guiobject_reverseTarget(int reverse); virtual int guiobject_getAutoWidth(); virtual int guiobject_getAutoHeight(); virtual int guiobject_movingToTarget(); virtual void guiobject_bringToFront(); virtual void guiobject_bringToBack(); virtual void guiobject_bringAbove(GuiObject *o); virtual void guiobject_bringBelow(GuiObject *o); virtual void guiobject_setClickThrough(int ct); virtual int guiobject_isClickThrough(); virtual void guiobject_setAutoSysMetricsX(int a); virtual void guiobject_setAutoSysMetricsY(int a); virtual void guiobject_setAutoSysMetricsW(int a); virtual void guiobject_setAutoSysMetricsH(int a); virtual int guiobject_getAutoSysMetricsX(); virtual int guiobject_getAutoSysMetricsY(); virtual int guiobject_getAutoSysMetricsW(); virtual int guiobject_getAutoSysMetricsH(); virtual int guiobject_getRegionOp(); virtual void guiobject_setRegionOp(int op); virtual int guiobject_isRectRgn(); virtual void guiobject_setRectRgn(int rrgn); virtual void guiobject_onLeftButtonDown(int x, int y); virtual void guiobject_onLeftButtonUp(int x, int y); virtual void guiobject_onRightButtonDown(int x, int y); virtual void guiobject_onRightButtonUp(int x, int y); virtual void guiobject_onLeftButtonDblClk(int x, int y); virtual void guiobject_onRightButtonDblClk(int x, int y); virtual int guiobject_onMouseWheelUp(int click, int lines); virtual int guiobject_onMouseWheelDown(int click, int lines); virtual void guiobject_onMouseMove(int x, int y); virtual void guiobject_onEnterArea(); virtual void guiobject_onLeaveArea(); virtual void guiobject_onEnable(int en); virtual void guiobject_setEnabled(int en); virtual void guiobject_onResize(int x, int y, int w, int h); virtual void guiobject_onSetVisible(int v); virtual void guiobject_onTargetReached(); virtual void guiobject_setAlpha(int a); virtual void guiobject_setActiveAlpha(int a); virtual void guiobject_setInactiveAlpha(int a); virtual int guiobject_getAlpha(); virtual int guiobject_getActiveAlpha(); virtual int guiobject_getInactiveAlpha(); virtual int guiobject_isActive(); virtual void guiobject_onStartup(); virtual int guiobject_setXmlParam(const wchar_t *param, const wchar_t *value); virtual const wchar_t *guiobject_getXmlParam(const wchar_t *param); virtual int guiobject_setXmlParamById(int id, const wchar_t *value); virtual svc_xuiObject *guiobject_getXuiService(); virtual void guiobject_setXuiService(svc_xuiObject *svc); virtual waServiceFactory *guiobject_getXuiServiceFactory(); virtual void guiobject_setXuiServiceFactory(waServiceFactory *fac); virtual GuiObject *guiobject_getTopParent(); virtual Layout *guiobject_getParentLayout(); virtual int guiobject_runModal(); virtual void guiobject_endModal(int retcode); virtual void guiobject_popParentLayout(); virtual void guiobject_registerStatusCB(GuiStatusCallback *cb); virtual void guiobject_setStatusText(const wchar_t *txt, int overlay = FALSE); virtual void guiobject_addAppCmds(AppCmds *commands); virtual void guiobject_removeAppCmds(AppCmds *commands); virtual void guiobject_pushCompleted(int max = 100); virtual void guiobject_incCompleted(int add = 1); virtual void guiobject_setCompleted(int pos); virtual void guiobject_popCompleted(); virtual GuiObject *guiobject_findObject(const wchar_t *id); virtual GuiObject *guiobject_findObjectXY(int x, int y); // in client coordinates relative to this object virtual GuiObject *guiobject_findObjectByInterface(GUID interface_guid); virtual GuiObject *guiobject_findObjectByCallback(FindObjectCallback *cb); virtual void guiobject_setMover(int m); virtual int guiobject_getMover(); virtual void guiobject_onCancelCapture(); virtual void guiobject_onChar(wchar_t c); virtual void guiobject_onKeyDown(int vkcode); virtual void guiobject_onKeyUp(int vkcode); virtual FOURCC guiobject_getDropTarget(); virtual void guiobject_setDropTarget(const wchar_t *strval); virtual void onTargetTimer(); #ifdef USEAPPBAR virtual int guiobject_getAppBar(); virtual void guiobject_setAppBar(int en); virtual void setAppBar(const wchar_t *en); #endif virtual void guiobject_setCfgAttrib(CfgItem *item, const wchar_t *name); virtual int viewer_onEvent(CfgItem *item, int event, intptr_t param, void *ptr, size_t ptrlen); virtual CfgItem *guiobject_getCfgItem(); const wchar_t *guiobject_getCfgAttrib(); virtual int guiobject_getCfgInt(); virtual void guiobject_setCfgInt(int i); virtual float guiobject_getCfgFloat(); virtual void guiobject_setCfgFloat(float f); virtual const wchar_t *guiobject_getCfgString(); virtual void guiobject_setCfgString(const wchar_t *s); virtual int guiobject_hasCfgAttrib(); virtual const wchar_t *guiobject_getName(); virtual void guiobject_onAccelerator(const wchar_t *accel); virtual int guiobject_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); virtual int guiobject_wantFocus(); virtual void guiobject_setNoDoubleClick(int no); virtual void guiobject_setNoLeftClick(int no); virtual void guiobject_setNoRightClick(int no); virtual void guiobject_setNoMouseMove(int no); virtual void guiobject_setNoContextMenu(int no); virtual void guiobject_setCursor(const wchar_t *c); virtual int guiobject_wantTranslation(); virtual int guiobject_dragEnter(ifc_window *sourceWnd); virtual int guiobject_dragOver(int x, int y, ifc_window *sourceWnd); virtual int guiobject_dragLeave(ifc_window *sourceWnd); private: void setCfgAttr(const wchar_t *strvalue); virtual void dataChanged(); void snapAdjust(ifc_window *w, RECT *r, int way); void infoMenu(GuiObject *o, int x, int y); int targetx, targety, targetw, targeth, targeta, targetspeed; int start_time; int targetstatus; void startTargetTimer(); void stopTargetTimer(); void ensureTimerOk(); int autosysmetricsx, autosysmetricsy, autosysmetricsw, autosysmetricsh; int startx, starty, startw, starth, starta; int in_area; StringW guiobject_id; int clickthrough; StringW autonotify; ifc_window *my_root_wnd; ScriptObject *my_script_object; GuiObjectTimer timer; int gui_x; int gui_y; int gui_w; int gui_h; int gui_rx; int gui_ry; int gui_rw; int gui_rh; int mover, moving; FOURCC droptarget; Group *p_group; POINT anchor; svc_xuiObject *xuisvc; waServiceFactory *xuifac; PtrList notifylist; int wantfocus; int anchor_x1, anchor_y1, anchor_x2, anchor_y2, anchorage, anchorage_invalidated; int reversetarget; SkinCursor *cursor; redock_struct redock; int dodragcheck; int m_lastnondocked_x, m_lastnondocked_y; #ifdef USEAPPBAR int m_dock_side; int m_initial_dock_side; #endif StringW cfgattrname; StringW cfgguid; CfgItem *cfgitem; int translate; }; class GuiObject_ScriptMethods { public: static scriptVar getId(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar show(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar hide(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar isvisible(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar getAlpha(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar setAlpha(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a); static scriptVar getActiveAlpha(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar setActiveAlpha(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a); static scriptVar getInactiveAlpha(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar setInactiveAlpha(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a); static scriptVar resize(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y, scriptVar w, scriptVar h); static scriptVar onResize(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y, scriptVar w, scriptVar h); static scriptVar init(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar parentGroup); static scriptVar bringToFront(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar bringToBack(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar bringAbove(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar obj); static scriptVar bringBelow(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar obj); static scriptVar getIdVar(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar onLeftButtonDown(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y); static scriptVar onLeftButtonUp(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y); static scriptVar onRightButtonDown(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y); static scriptVar onRightButtonUp(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y); static scriptVar onRightButtonDblClk(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y); static scriptVar onLeftButtonDblClk(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y); static scriptVar onMouseWheelUp(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar clicked, scriptVar lines); static scriptVar onMouseWheelDown(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar clicked, scriptVar lines); static scriptVar onMouseMove(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y); static scriptVar onEnterArea(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar onLeaveArea(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar onChar(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar c); static scriptVar onKeyDown(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar c); static scriptVar onKeyUp(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar c); static scriptVar setEnabled(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a); static scriptVar getEnabled(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar onEnable(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v); static scriptVar isMouseOver(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y); static scriptVar getLeft(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar getTop(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar getWidth(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar getHeight(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar setTargetX(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a); static scriptVar setTargetY(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a); static scriptVar setTargetW(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a); static scriptVar setTargetH(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a); static scriptVar setTargetA(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a); static scriptVar setTargetSpeed(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar a); static scriptVar gotoTarget(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar onTargetReached(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar cancelTarget(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar reverseTarget(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar r); static scriptVar movingToTarget(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar setXmlParam(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar param, scriptVar value); static scriptVar getXmlParam(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar param); static scriptVar onSetVisible(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v); static scriptVar onStartup(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar getGuiX(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar getGuiY(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar getGuiW(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar getGuiH(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar getGuiRelatX(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar getGuiRelatY(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar getGuiRelatW(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar getGuiRelatH(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar isActive(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar getParent(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar getTopParent(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar getParentLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar runModal(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar endModal(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar retcode); static scriptVar popParentLayout(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar setStatusText(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar text, scriptVar overlay); static scriptVar findObject(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar id); static scriptVar findObjectXY(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y); static scriptVar getName(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar getMover(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar setMover(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar is); static scriptVar setDropTarget(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar targ); static scriptVar onCfgChanged(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar cfgGetInt(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar cfgSetInt(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v); static scriptVar cfgGetString(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar cfgSetString(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v); static scriptVar cfgGetFloat(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar cfgSetFloat(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar v); static scriptVar cfgGetGuid(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar cfgGetAttributeName(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar clientToScreenX(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x); static scriptVar clientToScreenY(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar y); static scriptVar clientToScreenW(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x); static scriptVar clientToScreenH(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar y); static scriptVar screenToClientX(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x); static scriptVar screenToClientY(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar y); static scriptVar screenToClientW(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x); static scriptVar screenToClientH(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar y); static scriptVar getAutoWidth(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar getAutoHeight(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar setFocus(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar onGetFocus(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar onKillFocus(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar onAccelerator(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar accel); static scriptVar sendAction(SCRIPT_FUNCTION_PARAMS, ScriptObject *obj, scriptVar action, scriptVar param, scriptVar x, scriptVar y, scriptVar p1, scriptVar p2); static scriptVar onAction(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar action, scriptVar param, scriptVar x, scriptVar y, scriptVar p1, scriptVar p2, scriptVar source); static scriptVar isMouseOverRect(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar getInterface(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar interfaceguid); static scriptVar onDragEnter(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); static scriptVar onDragOver(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y); static scriptVar onDragLeave(SCRIPT_FUNCTION_PARAMS, ScriptObject *o); }; extern const wchar_t guiobjectXuiStr[]; extern char guiobjectXuiSvcName[]; class GuiObjectXuiSvc : public XuiObjectSvc {}; #endif