OSDN Git Service

Add .vs/ to .gitignore
[xkeymacs/xkeymacs.git] / xkeymacsdll / CmdTable.h
1 #pragma once\r
2 #include "defs.h"\r
3 \r
4 const int MAX_KEY_BIND = 8;\r
5 const int MAX_COMMAND = 115;\r
6 \r
7 class AFX_EXT_CLASS CmdTable\r
8 {\r
9 public:\r
10         struct CmdDef\r
11         {\r
12                 LPCTSTR Name;\r
13                 int CategoryID;\r
14                 int DescriptionID;\r
15                 int ToolTipID;\r
16                 int (*Command)();\r
17                 KeyBind KeyBind[MAX_KEY_BIND];\r
18         };\r
19         static LPCTSTR Name(int cmdID);\r
20         static int CategoryID(int cmdID);\r
21         static int DescriptionID(int cmdID);\r
22         static int ToolTipID(int cmdID);\r
23         static int (*Command(int cmdID))();\r
24         static const KeyBind Bind(int cmdID, int index);\r
25         static const int* Categories();\r
26         static int CmdByName(LPCTSTR name);\r
27         template <typename T> static void EnumCommands(T* obj, void (T::*func)(int cmdID, const KeyBind& bind, int arg), int arg)\r
28         {\r
29                 for (int cmdID = 0; cmdID < MAX_COMMAND; ++cmdID)\r
30                         for (int i = 0; i < MAX_KEY_BIND; ++i) {\r
31                                 KeyBind bind = Bind(cmdID, i);\r
32                                 if (bind.bVk == 0)\r
33                                         break;\r
34                                 (obj->*func)(cmdID, bind, arg);\r
35                         }\r
36         };\r
37 private:\r
38         static const CmdDef m_Table[MAX_COMMAND];\r
39         static const int m_Categories[];\r
40 };\r