diff options
Diffstat (limited to 'Src/Wasabi/api/skin/widgets/xuimenu.h')
-rw-r--r-- | Src/Wasabi/api/skin/widgets/xuimenu.h | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/Src/Wasabi/api/skin/widgets/xuimenu.h b/Src/Wasabi/api/skin/widgets/xuimenu.h new file mode 100644 index 00000000..2629f980 --- /dev/null +++ b/Src/Wasabi/api/skin/widgets/xuimenu.h @@ -0,0 +1,110 @@ +#ifndef _XUIMENU_H +#define _XUIMENU_H + +#include <api/wnd/wndclass/guiobjwnd.h> + +/*<?<autoheader/>*/ +#include "xuimenuso.h" +/*?>*/ + +#define XUIMENU_PARENT XuiMenuScriptObject + +// {A0211C57-DCED-45ae-AEA6-56014B5898E8} +static const GUID xuiMenuGuid = +{ 0xa0211c57, 0xdced, 0x45ae, { 0xae, 0xa6, 0x56, 0x1, 0x4b, 0x58, 0x98, 0xe8 } }; + +/*<?<classdecl name="XuiMenu" factory="ScriptObject" />*/ +class XuiMenu : public XuiMenuScriptObject +{ +/*?>*/ + public: + friend LRESULT CALLBACK xuimenu_KeyboardProc(int code, WPARAM wParam, LPARAM lParam); + friend LRESULT CALLBACK xuimenu_msgProc(int code, WPARAM wParam, LPARAM lParam); + + XuiMenu(); + virtual ~XuiMenu(); + + virtual int onInit(); + virtual int onLeftButtonDown(int x, int y); + int setXuiParam(int _xuihandle, int xmlattrid, const wchar_t *name, const wchar_t *value); + virtual void timerCallback(int c); + virtual int onDeferredCallback(intptr_t p1, intptr_t p2); + + SCRIPT void setMenuGroup(const wchar_t *mg); + SCRIPT const wchar_t *getMenuGroup() { return menugroup; } + + SCRIPT void setMenu(const wchar_t *m); + SCRIPT const wchar_t *getMenu() { return menuid; } + + SCRIPT void spawnMenu(int monitor = 1); + SCRIPT void cancelMenu(); + + SCRIPT void setNormalId(const wchar_t *id); + SCRIPT void setDownId(const wchar_t *id); + SCRIPT void setHoverId(const wchar_t *id); + + SCRIPT EVENT virtual void onOpenMenu(); + SCRIPT EVENT virtual void onCloseMenu(); + + virtual void onEnterArea(); + virtual void onLeaveArea(); + virtual int 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); + + SCRIPT void nextMenu(); + SCRIPT void previousMenu(); + + enum { + MENU_MENU = 0, + MENU_MENUGROUP, + MENU_NORMALID, + MENU_DOWNID, + MENU_HOVERID, + MENU_NEXT, + MENU_PREV, + }; + +protected: + /*static */void CreateXMLParameters(int master_handle); + private: + static XMLParamPair params[]; + void onMenuSelect(HWND hwnd, HMENU menu, int menuitem, int flags); + void startKbdHook(); + void stopKbdHook(); + void updateObjects(); + void timerCheck(); + void switchToMenu(XuiMenu *menu); + void _nextMenu(); + void _previousMenu(); + void openAction(); + void onTrappedLeft(); + void onTrappedRight(); + StringW menugroup; + StringW menuid; + int xuihandle; + XuiMenu *nextinchain; + int timerset; + int disablespawn; + GuiObject *normal; + GuiObject *down; + GuiObject *hover; + StringW next, prev; + int isspawned; + StringW normalid, downid, hoverid; + int inarea; + int kbdhook; + int orig_x, orig_y; + int kbdlocktimer; + int submenu_isselected; + int submenu_selectedbymouse; + HMENU submenu_selected; + HWND menu_parent; + HMENU first_hmenu; + HMENU cur_hmenu; +}; + +// ----------------------------------------------------------------------- +extern const wchar_t MenuXuiObjectStr[]; +extern char MenuXuiSvcName[]; +class MenuXuiSvc : public XuiObjectSvc<XuiMenu, MenuXuiObjectStr, MenuXuiSvcName> {}; + +#endif |