#ifndef _SVC_CONTEXTCMD_H #define _SVC_CONTEXTCMD_H #include #include namespace ContextCmdSortVal { enum ContextCmdSortVal { BEGINNING = 0, MIDDLE = 32767, END = 65535, }; }; class DragItem; class NOVTABLE svc_contextCmd : public Dispatchable { protected: svc_contextCmd() {} ~svc_contextCmd() {} public: static FOURCC getServiceType() { return WaSvc::CONTEXTCMD; } int testItem(DragItem *item, const wchar_t *menu_path); int getSubMenu(DragItem *item, const wchar_t *menu_path); const wchar_t *getSubMenuText(const wchar_t *menu_path); const wchar_t *getCommand(DragItem *item, int n); int getEnabled(DragItem *item, int n); int getChecked(DragItem *item, int n); int getSortVal(DragItem *item, int n); void onCommand(DragItem *item, int n); protected: enum { TESTITEM, GETSUBMENU, GETSUBMENUTEXT, GETCOMMAND, GETENABLED, GETCHECKED, GETSORTVAL, ONCOMMAND, }; }; inline int svc_contextCmd::testItem(DragItem *item, const wchar_t *menu_path) { return _call(TESTITEM, 0, item, menu_path); } inline int svc_contextCmd::getSubMenu(DragItem *item, const wchar_t *menu_path) { return _call(GETSUBMENU, 0, item, menu_path); } inline const wchar_t *svc_contextCmd::getSubMenuText(const wchar_t *menu_path) { return _call(GETSUBMENUTEXT, (const wchar_t *)NULL, menu_path); } inline const wchar_t *svc_contextCmd::getCommand(DragItem *item, int n) { return _call(GETCOMMAND, (const wchar_t *)0, item, n); } inline int svc_contextCmd::getEnabled(DragItem *item, int n) { return _call(GETENABLED, TRUE, item, n); } inline int svc_contextCmd::getChecked(DragItem *item, int n) { return _call(GETCHECKED, FALSE, item, n); } inline int svc_contextCmd::getSortVal(DragItem *item, int n) { return _call(GETSORTVAL, ContextCmdSortVal::MIDDLE, item, n); } inline void svc_contextCmd::onCommand(DragItem *item, int n) { _voidcall(ONCOMMAND, item, n); } class NOVTABLE svc_contextCmdI : public svc_contextCmd { public: virtual int testItem(DragItem *item, const wchar_t *menu_path)=0; virtual int getSubMenu(DragItem *item, const wchar_t *menu_path) { return 0; } virtual const wchar_t *getSubMenuText(const wchar_t *menu_path) { return NULL; } virtual const wchar_t *getCommand(DragItem *item, int n)=0; // override these as needed virtual int getEnabled(DragItem *item, int n) { return TRUE; } virtual int getChecked(DragItem *item, int n) { return FALSE; } virtual int getSortVal(DragItem *item, int n) { return ContextCmdSortVal::MIDDLE; } virtual void onCommand(DragItem *item, int n)=0; protected: RECVS_DISPATCH; }; #include template class ContextCmdCreator : public waServiceFactoryT { }; #include #include class ContextCmdEnum : public SvcEnumT { public: ContextCmdEnum(DragItem *_item, const wchar_t *_menu_path) : item(_item), menu_path(_menu_path) {} protected: virtual int testService(svc_contextCmd *svc) { return svc->testItem(item, menu_path); } private: DragItem *item; StringW menu_path; }; #endif