OSDN Git Service

Add .vs/ to .gitignore
[xkeymacs/xkeymacs.git] / xkeymacs / KeyString.cpp
1 #include "KeyString.h"\r
2 #include "../xkeymacsdll/defs.h"\r
3 \r
4 static const struct {\r
5         UINT Type;\r
6         LPCTSTR Name;\r
7 } Types[] = {\r
8         {CONTROLX, _T("Ctrl+X ")},\r
9         {CONTROL, _T("Ctrl+")},\r
10         {META, _T("Meta+")},\r
11         {SHIFT, _T("Shift+")},\r
12 };\r
13 \r
14 static LPCTSTR Keys[] = {\r
15         _T(""), // 0\r
16         _T("Left mouse button"), // VK_LBUTTON\r
17         _T("Right mouse button"), // VK_RBUTTON\r
18         _T("Break"), // VK_CANCEL\r
19         _T("Middle mouse button"), // VK_MBUTTON\r
20         _T("X1 mouse button"), // VK_XBUTTON1\r
21         _T("X2 mouse button"), // VK_XBUTTON2\r
22         _T("Undefined"), // 0x07\r
23         _T("Backspace"), // VK_BACK\r
24         _T("Tab"), // VK_TAB\r
25         _T("Reserved"), // 0x0a\r
26         _T("Reserved"), // 0x0b\r
27         _T("Clear"), // VK_CLEAR\r
28         _T("Enter"), // VK_RETURN\r
29         _T("Undefined"), // 0x0e\r
30         _T("Undefined"), // 0x0f\r
31         _T("Shift"), // VK_SHIFT\r
32         _T("Ctrl"), // VK_CONTROL\r
33         _T("Alt"), // VK_MENU\r
34         _T("Pause"), // VK_PAUSE\r
35         _T("Caps Lock"), // VK_CAPITAL\r
36         _T("Kana"),     // VK_KANA {VK_HANGUEL, "Hanguel"},     {VK_HANGUL, "Hangul"} \r
37         _T("Undefined"), // 0x16\r
38         _T("Junja"), // VK_JUNJA\r
39         _T("Final"), // VK_FINAL\r
40         _T("Kanji"), //VK_KANJI {VK_HANJA, "Hanja"}\r
41         _T("Undefined"), // 0x1a\r
42         _T("Esc"), // VK_ESCAPE\r
43         _T("Convert"), // VK_CONVERT \95Ï\8a·\r
44         _T("Nonconvert"), // VK_NONCONVERT \96³\95Ï\8a·\r
45         _T("Accept"), // VK_ACCEPT\r
46         _T("Mode change"), // VK_MODECHANGE\r
47         _T("Space"), // VK_SPACE\r
48         _T("Page Up"), // VK_PRIOR\r
49         _T("Page Down"), // VK_NEXT\r
50         _T("End"), // VK_END\r
51         _T("Home"), // VK_HOME\r
52         _T("Left"), // VK_LEFT\r
53         _T("Up"), // VK_UP\r
54         _T("Right"), // VK_RIGHT\r
55         _T("Down"), // VK_DOWN\r
56         _T("Select"), // VK_SELECT\r
57         _T("Print"), // VK_PRINT\r
58         _T("Execute"), // VK_EXECUTE\r
59         _T("Print Screen"), // VK_SNAPSHOT\r
60         _T("Ins"), // VK_INSERT\r
61         _T("Del"), // VK_DELETE\r
62         _T("Help"), // VK_HELP\r
63         _T("0"), // '0'\r
64         _T("1"), // '1'\r
65         _T("2"), // '2'\r
66         _T("3"), // '3'\r
67         _T("4"), // '4'\r
68         _T("5"), // '5'\r
69         _T("6"), // '6'\r
70         _T("7"), // '7'\r
71         _T("8"), // '8'\r
72         _T("9"), // '9'\r
73         _T("Undefined"), // 0x3a\r
74         _T("Undefined"), // 0x3b\r
75         _T("Undefined"), // 0x3c\r
76         _T("Undefined"), // 0x3d\r
77         _T("Undefined"), // 0x3e\r
78         _T("Undefined"), // 0x3f\r
79         _T("Undefined"), // 0x40\r
80         _T("A"), // 'A'\r
81         _T("B"), // 'B'\r
82         _T("C"), // 'C'\r
83         _T("D"), // 'D'\r
84         _T("E"), // 'E'\r
85         _T("F"), // 'F'\r
86         _T("G"), // 'G'\r
87         _T("H"), // 'H'\r
88         _T("I"), // 'I'\r
89         _T("J"), // 'J'\r
90         _T("K"), // 'K'\r
91         _T("L"), // 'L'\r
92         _T("M"), // 'M'\r
93         _T("N"), // 'N'\r
94         _T("O"), // 'O'\r
95         _T("P"), // 'P'\r
96         _T("Q"), // 'Q'\r
97         _T("R"), // 'R'\r
98         _T("S"), // 'S'\r
99         _T("T"), // 'T'\r
100         _T("U"), // 'U'\r
101         _T("V"), // 'V'\r
102         _T("W"), // 'W'\r
103         _T("X"), // 'X'\r
104         _T("Y"), // 'Y'\r
105         _T("Z"), // 'Z'\r
106         _T("Left Windows"), // VK_LWIN\r
107         _T("Right Windows"), // VK_RWIN\r
108         _T("Application"), // VK_APPS\r
109         _T("Reserved"), // 0x5e\r
110         _T("Sleep"), // VK_SLEEP\r
111         _T("Num 0"), // VK_NUMPAD0\r
112         _T("Num 1"), // VK_NUMPAD1\r
113         _T("Num 2"), // VK_NUMPAD2\r
114         _T("Num 3"), // VK_NUMPAD3\r
115         _T("Num 4"), // VK_NUMPAD4\r
116         _T("Num 5"), // VK_NUMPAD5\r
117         _T("Num 6"), // VK_NUMPAD6\r
118         _T("Num 7"), // VK_NUMPAD7\r
119         _T("Num 8"), // VK_NUMPAD8\r
120         _T("Num 9"), // VK_NUMPAD9\r
121         _T("Num *"), // VK_MULTIPLY\r
122         _T("Num +"), // VK_ADD\r
123         _T("Separator"), // VK_SEPARATOR\r
124         _T("Num -"), // VK_SUBTRACT\r
125         _T("Num ."), // VK_DECIMAL\r
126         _T("Num /"), // VK_DIVIDE\r
127         _T("F1"), // VK_F1\r
128         _T("F2"), // VK_F2\r
129         _T("F3"), // VK_F3\r
130         _T("F4"), // VK_F4\r
131         _T("F5"), // VK_F5\r
132         _T("F6"), // VK_F6\r
133         _T("F7"), // VK_F7\r
134         _T("F8"), // VK_F8\r
135         _T("F9"), // VK_F9\r
136         _T("F10"), // VK_F10\r
137         _T("F11"), // VK_F11\r
138         _T("F12"), // VK_F12\r
139         _T("F13"), // VK_F13\r
140         _T("F14"), // VK_F14\r
141         _T("F15"), // VK_F15\r
142         _T("F16"), // VK_F16\r
143         _T("F17"), // VK_F17\r
144         _T("F18"), // VK_F18\r
145         _T("F19"), // VK_F19\r
146         _T("F20"), // VK_F20\r
147         _T("F21"), // VK_F21\r
148         _T("F22"), // VK_F22\r
149         _T("F23"), // VK_F23\r
150         _T("F24"), // VK_F24\r
151         _T("Unassigned"), // 0x88\r
152         _T("Unassigned"), // 0x89\r
153         _T("Unassigned"), // 0x8a\r
154         _T("Unassigned"), // 0x8b\r
155         _T("Unassigned"), // 0x8c\r
156         _T("Unassigned"), // 0x8d\r
157         _T("Unassigned"), // 0x8e\r
158         _T("Unassigned"), // 0x8f\r
159         _T("Num Lock"), // VK_NUMLOCK\r
160         _T("Scroll Lock"), // VK_SCROLL\r
161         _T("OEM specific"), // 0x92\r
162         _T("OEM specific"), // 0x93\r
163         _T("OEM specific"), // 0x94\r
164         _T("OEM specific"), // 0x95\r
165         _T("OEM specific"), // 0x96\r
166         _T("Unassigned"), // 0x97\r
167         _T("Unassigned"), // 0x98\r
168         _T("Unassigned"), // 0x99\r
169         _T("Unassigned"), // 0x9a\r
170         _T("Unassigned"), // 0x9b\r
171         _T("Unassigned"), // 0x9c\r
172         _T("Unassigned"), // 0x9d\r
173         _T("Unassigned"), // 0x9e\r
174         _T("Unassigned"), // 0x9f\r
175         _T("Left Shift"), // VK_LSHIFT\r
176         _T("Right Shift"), // VK_RSHIFT\r
177         _T("Left Ctrl"), // VK_LCONTROL\r
178         _T("Right Ctrl"), // VK_RCONTROL\r
179         _T("Left Alt"), // VK_LMENU\r
180         _T("Right Alt"), // VK_RMENU\r
181         _T("Browser Back"), // VK_BROWSER_BACK\r
182         _T("Browser Forward"), // VK_BROWSER_FORWARD\r
183         _T("Browser Refresh"), // VK_BROWSER_REFRESH\r
184         _T("Browser Stop"), // VK_BROWSER_STOP\r
185         _T("Browser Search"), // VK_BROWSER_SEARCH\r
186         _T("Browser Favorites"), // VK_BROWSER_FAVORITES\r
187         _T("Browser Start"), // VK_BROWSER_HOME\r
188         _T("Volume Mute"), // VK_VOLUME_MUTE\r
189         _T("Volume Down"), // VK_VOLUME_DOWN\r
190         _T("Volume Up"), // VK_VOLUME_UP\r
191         _T("Next Track"), // VK_MEDIA_NEXT_TRACK\r
192         _T("Previous Track"), // VK_MEDIA_PREV_TRACK\r
193         _T("Stop Media"), // VK_MEDIA_STOP\r
194         _T("Play/Pause Media"), // VK_MEDIA_PLAY_PAUSE\r
195         _T("Start Mail"), // VK_LAUNCH_MAIL\r
196         _T("Select Media"), // VK_LAUNCH_MEDIA_SELECT\r
197         _T("Start Application 1"), // VK_LAUNCH_APP1\r
198         _T("Start Application 2"), // VK_LAUNCH_APP2\r
199         _T("Reserved"), // 0xb8\r
200         _T("Reserved"), // 0xb9\r
201         _T(";"), // VK_OEM_1 _T(":") for Japanese keyboard\r
202         _T("+"), // VK_OEM_PLUS _T(";") for Japanese keyboard\r
203         _T(","), // VK_OEM_COMMA\r
204         _T("-"), // VK_OEM_MINUS\r
205         _T("."), // VK_OEM_PERIOD\r
206         _T("/"), // VK_OEM_2\r
207         _T("`"), // VK_OEM_3 _T("@") for Japanese keyboard\r
208         _T("Reserved"), // 0xc1\r
209         _T("Reserved"), // 0xc2\r
210         _T("Reserved"), // 0xc3\r
211         _T("Reserved"), // 0xc4\r
212         _T("Reserved"), // 0xc5\r
213         _T("Reserved"), // 0xc6\r
214         _T("Reserved"), // 0xc7\r
215         _T("Reserved"), // 0xc8\r
216         _T("Reserved"), // 0xc9\r
217         _T("Reserved"), // 0xca\r
218         _T("Reserved"), // 0xcb\r
219         _T("Reserved"), // 0xcc\r
220         _T("Reserved"), // 0xcd\r
221         _T("Reserved"), // 0xce\r
222         _T("Reserved"), // 0xcf\r
223         _T("Reserved"), // 0xd0\r
224         _T("Reserved"), // 0xd1\r
225         _T("Reserved"), // 0xd2\r
226         _T("Reserved"), // 0xd3\r
227         _T("Reserved"), // 0xd4\r
228         _T("Reserved"), // 0xd5\r
229         _T("Reserved"), // 0xd6\r
230         _T("Reserved"), // 0xd7\r
231         _T("Unassigned"), // 0xd8\r
232         _T("Unassigned"), // 0xd9\r
233         _T("Unassigned"), // 0xda\r
234         _T("["), // VK_OEM_4\r
235         _T("Backslash"), // VK_OEM_5\r
236         _T("]"), // VK_OEM_6\r
237         _T("'"), // VK_OEM_7\r
238         _T("OEM specific"), // VK_OEM_8\r
239         _T("Reserved"), // 0xe0\r
240         _T("OEM specific"), // 0xe1\r
241         _T("Backslash for 106 keyboard"), // VK_OEM_102\r
242         _T("OEM specific"), // 0xe3\r
243         _T("OEM specific"), // 0xe4\r
244         _T("Process"), // VK_PROCESSKEY\r
245         _T("OEM specific"), // 0xe6\r
246         _T("Packet"), // VK_PACKET\r
247         _T("Unassigned"), // 0xe8\r
248         _T("OEM specific"), // 0xe9\r
249         _T("OEM specific"), // 0xea\r
250         _T("OEM specific"), // 0xeb\r
251         _T("OEM specific"), // 0xec\r
252         _T("OEM specific"), // 0xed\r
253         _T("OEM specific"), // 0xee\r
254         _T("OEM specific"), // 0xef\r
255         _T("Eisu"), // 0xf0 // \89p\90\94\r
256         _T("OEM specific"), // 0xf1\r
257         _T("Hiragana"), // 0xf2 \82Ð\82ç\82ª\82È\r
258         _T("Hankaku/Zenkaku 0xf3"), // 0xf3 "\94¼\8ap/\91S\8ap"\r
259         _T("Hankaku/Zenkaku 0xf4"), // 0xf4 "\94¼\8ap/\91S\8ap"\r
260         _T("OEM specific"), // 0xf5\r
261         _T("Attn"), // VK_ATTN\r
262         _T("CrSel"), // VK_CRSEL\r
263         _T("ExSel"), // VK_EXSEL\r
264         _T("Erace EOF"), // VK_EREOF\r
265         _T("Play"), // VK_PLAY\r
266         _T("Zoom"), // VK_ZOOM\r
267         _T("Noname"), // VK_NONAME\r
268         _T("PA1"), // VK_PA1\r
269         _T("OEM Clear"), // VK_OEM_CLEAR\r
270         _T("Fn"), // 0xff\r
271 };\r
272 \r
273 KeyString::KeyString(bool is106Keyboard)\r
274 {\r
275         if (!is106Keyboard)\r
276                 return;\r
277         Keys[0xba] = _T(":");\r
278         Keys[0xbb] = _T(";");\r
279         Keys[0xc0] = _T("@");\r
280         Keys[0xde] = _T("^");\r
281 }\r
282 \r
283 CString KeyString::ToString(int type, int key)\r
284 {\r
285         CString str;\r
286         for (int i = 0; i < _countof(Types); ++i)\r
287                 if ((type & Types[i].Type) != 0)\r
288                         str += Types[i].Name;\r
289         str += Keys[key];\r
290         return str;\r
291 }\r
292 \r
293 void KeyString::ToKey(LPCTSTR str, int& type, int& key)\r
294 {\r
295         CString s(str);\r
296         type = NONE;\r
297         for (int i = 0; i < _countof(Types); ++i)\r
298                 if (s.Find(Types[i].Name) == 0) {\r
299                         type |= Types[i].Type;\r
300                         s.Delete(0, static_cast<int>(_tcslen(Types[i].Name)));\r
301                 }\r
302         key = 0;\r
303         for (int i = 1; i < 256; ++i)\r
304                 if (s == Keys[i]) {\r
305                         key = i;\r
306                         break;\r
307                 }\r
308 }\r