OSDN Git Service

Add KeyString class for conversion from a modifier and key code to a
authorKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Fri, 28 Oct 2011 14:26:40 +0000 (23:26 +0900)
committerKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Tue, 3 Jan 2012 12:03:56 +0000 (21:03 +0900)
string and the opposite. Modify related code.

xkeymacs/KeyString.cpp [new file with mode: 0644]
xkeymacs/KeyString.h [new file with mode: 0644]
xkeymacs/profile.cpp
xkeymacs/profile.h
xkeymacs/propertiesadvanced.cpp
xkeymacs/propertieslist.cpp
xkeymacs/xkeymacs-vc10.vcxproj
xkeymacs/xkeymacs-vc10.vcxproj.filters
xkeymacsdll/defs.h
xkeymacsdll/xkeymacsdll.cpp

diff --git a/xkeymacs/KeyString.cpp b/xkeymacs/KeyString.cpp
new file mode 100644 (file)
index 0000000..8fa8b60
--- /dev/null
@@ -0,0 +1,308 @@
+#include "KeyString.h"\r
+#include "../xkeymacsdll/defs.h"\r
+\r
+static const struct {\r
+       UINT Type;\r
+       LPCTSTR Name;\r
+} Types[] = {\r
+       {CONTROLX, _T("Ctrl+X ")},\r
+       {CONTROL, _T("Ctrl+")},\r
+       {META, _T("Meta+")},\r
+       {SHIFT, _T("Shift+")},\r
+};\r
+\r
+static LPCTSTR Keys[] = {\r
+       _T(""), // 0\r
+       _T("Left mouse button"), // VK_LBUTTON\r
+       _T("Right mouse button"), // VK_RBUTTON\r
+       _T("Break"), // VK_CANCEL\r
+       _T("Middle mouse button"), // VK_MBUTTON\r
+       _T("X1 mouse button"), // VK_XBUTTON1\r
+       _T("X2 mouse button"), // VK_XBUTTON2\r
+       _T("Undefined"), // 0x07\r
+       _T("Backspace"), // VK_BACK\r
+       _T("Tab"), // VK_TAB\r
+       _T("Reserved"), // 0x0a\r
+       _T("Reserved"), // 0x0b\r
+       _T("Clear"), // VK_CLEAR\r
+       _T("Enter"), // VK_RETURN\r
+       _T("Undefined"), // 0x0e\r
+       _T("Undefined"), // 0x0f\r
+       _T("Shift"), // VK_SHIFT\r
+       _T("Ctrl"), // VK_CONTROL\r
+       _T("Alt"), // VK_MENU\r
+       _T("Pause"), // VK_PAUSE\r
+       _T("Caps Lock"), // VK_CAPITAL\r
+       _T("Kana"),     // VK_KANA {VK_HANGUEL, "Hanguel"},     {VK_HANGUL, "Hangul"} \r
+       _T("Undefined"), // 0x16\r
+       _T("Junja"), // VK_JUNJA\r
+       _T("Final"), // VK_FINAL\r
+       _T("Kanji"), //VK_KANJI {VK_HANJA, "Hanja"}\r
+       _T("Undefined"), // 0x1a\r
+       _T("Esc"), // VK_ESCAPE\r
+       _T("Convert"), // VK_CONVERT \95Ï\8a·\r
+       _T("Nonconvert"), // VK_NONCONVERT \96³\95Ï\8a·\r
+       _T("Accept"), // VK_ACCEPT\r
+       _T("Mode change"), // VK_MODECHANGE\r
+       _T("Space"), // VK_SPACE\r
+       _T("Page Up"), // VK_PRIOR\r
+       _T("Page Down"), // VK_NEXT\r
+       _T("End"), // VK_END\r
+       _T("Home"), // VK_HOME\r
+       _T("Left"), // VK_LEFT\r
+       _T("Up"), // VK_UP\r
+       _T("Right"), // VK_RIGHT\r
+       _T("Down"), // VK_DOWN\r
+       _T("Select"), // VK_SELECT\r
+       _T("Print"), // VK_PRINT\r
+       _T("Execute"), // VK_EXECUTE\r
+       _T("Print Screen"), // VK_SNAPSHOT\r
+       _T("Ins"), // VK_INSERT\r
+       _T("Del"), // VK_DELETE\r
+       _T("Help"), // VK_HELP\r
+       _T("0"), // '0'\r
+       _T("1"), // '1'\r
+       _T("2"), // '2'\r
+       _T("3"), // '3'\r
+       _T("4"), // '4'\r
+       _T("5"), // '5'\r
+       _T("6"), // '6'\r
+       _T("7"), // '7'\r
+       _T("8"), // '8'\r
+       _T("9"), // '9'\r
+       _T("Undefined"), // 0x3a\r
+       _T("Undefined"), // 0x3b\r
+       _T("Undefined"), // 0x3c\r
+       _T("Undefined"), // 0x3d\r
+       _T("Undefined"), // 0x3e\r
+       _T("Undefined"), // 0x3f\r
+       _T("Undefined"), // 0x40\r
+       _T("A"), // 'A'\r
+       _T("B"), // 'B'\r
+       _T("C"), // 'C'\r
+       _T("D"), // 'D'\r
+       _T("E"), // 'E'\r
+       _T("F"), // 'F'\r
+       _T("G"), // 'G'\r
+       _T("H"), // 'H'\r
+       _T("I"), // 'I'\r
+       _T("J"), // 'J'\r
+       _T("K"), // 'K'\r
+       _T("L"), // 'L'\r
+       _T("M"), // 'M'\r
+       _T("N"), // 'N'\r
+       _T("O"), // 'O'\r
+       _T("P"), // 'P'\r
+       _T("Q"), // 'Q'\r
+       _T("R"), // 'R'\r
+       _T("S"), // 'S'\r
+       _T("T"), // 'T'\r
+       _T("U"), // 'U'\r
+       _T("V"), // 'V'\r
+       _T("W"), // 'W'\r
+       _T("X"), // 'X'\r
+       _T("Y"), // 'Y'\r
+       _T("Z"), // 'Z'\r
+       _T("Left Windows"), // VK_LWIN\r
+       _T("Right Windows"), // VK_RWIN\r
+       _T("Application"), // VK_APPS\r
+       _T("Reserved"), // 0x5e\r
+       _T("Sleep"), // VK_SLEEP\r
+       _T("Num 0"), // VK_NUMPAD0\r
+       _T("Num 1"), // VK_NUMPAD1\r
+       _T("Num 2"), // VK_NUMPAD2\r
+       _T("Num 3"), // VK_NUMPAD3\r
+       _T("Num 4"), // VK_NUMPAD4\r
+       _T("Num 5"), // VK_NUMPAD5\r
+       _T("Num 6"), // VK_NUMPAD6\r
+       _T("Num 7"), // VK_NUMPAD7\r
+       _T("Num 8"), // VK_NUMPAD8\r
+       _T("Num 9"), // VK_NUMPAD9\r
+       _T("Num *"), // VK_MULTIPLY\r
+       _T("Num +"), // VK_ADD\r
+       _T("Separator"), // VK_SEPARATOR\r
+       _T("Num -"), // VK_SUBTRACT\r
+       _T("Num ."), // VK_DECIMAL\r
+       _T("Num /"), // VK_DIVIDE\r
+       _T("F1"), // VK_F1\r
+       _T("F2"), // VK_F2\r
+       _T("F3"), // VK_F3\r
+       _T("F4"), // VK_F4\r
+       _T("F5"), // VK_F5\r
+       _T("F6"), // VK_F6\r
+       _T("F7"), // VK_F7\r
+       _T("F8"), // VK_F8\r
+       _T("F9"), // VK_F9\r
+       _T("F10"), // VK_F10\r
+       _T("F11"), // VK_F11\r
+       _T("F12"), // VK_F12\r
+       _T("F13"), // VK_F13\r
+       _T("F14"), // VK_F14\r
+       _T("F15"), // VK_F15\r
+       _T("F16"), // VK_F16\r
+       _T("F17"), // VK_F17\r
+       _T("F18"), // VK_F18\r
+       _T("F19"), // VK_F19\r
+       _T("F20"), // VK_F20\r
+       _T("F21"), // VK_F21\r
+       _T("F22"), // VK_F22\r
+       _T("F23"), // VK_F23\r
+       _T("F24"), // VK_F24\r
+       _T("Unassigned"), // 0x88\r
+       _T("Unassigned"), // 0x89\r
+       _T("Unassigned"), // 0x8a\r
+       _T("Unassigned"), // 0x8b\r
+       _T("Unassigned"), // 0x8c\r
+       _T("Unassigned"), // 0x8d\r
+       _T("Unassigned"), // 0x8e\r
+       _T("Unassigned"), // 0x8f\r
+       _T("Num Lock"), // VK_NUMLOCK\r
+       _T("Scroll Lock"), // VK_SCROLL\r
+       _T("OEM specific"), // 0x92\r
+       _T("OEM specific"), // 0x93\r
+       _T("OEM specific"), // 0x94\r
+       _T("OEM specific"), // 0x95\r
+       _T("OEM specific"), // 0x96\r
+       _T("Unassigned"), // 0x97\r
+       _T("Unassigned"), // 0x98\r
+       _T("Unassigned"), // 0x99\r
+       _T("Unassigned"), // 0x9a\r
+       _T("Unassigned"), // 0x9b\r
+       _T("Unassigned"), // 0x9c\r
+       _T("Unassigned"), // 0x9d\r
+       _T("Unassigned"), // 0x9e\r
+       _T("Unassigned"), // 0x9f\r
+       _T("Left Shift"), // VK_LSHIFT\r
+       _T("Right Shift"), // VK_RSHIFT\r
+       _T("Left Ctrl"), // VK_LCONTROL\r
+       _T("Right Ctrl"), // VK_RCONTROL\r
+       _T("Left Alt"), // VK_LMENU\r
+       _T("Right Alt"), // VK_RMENU\r
+       _T("Browser Back"), // VK_BROWSER_BACK\r
+       _T("Browser Forward"), // VK_BROWSER_FORWARD\r
+       _T("Browser Refresh"), // VK_BROWSER_REFRESH\r
+       _T("Browser Stop"), // VK_BROWSER_STOP\r
+       _T("Browser Search"), // VK_BROWSER_SEARCH\r
+       _T("Browser Favorites"), // VK_BROWSER_FAVORITES\r
+       _T("Browser Start"), // VK_BROWSER_HOME\r
+       _T("Volume Mute"), // VK_VOLUME_MUTE\r
+       _T("Volume Down"), // VK_VOLUME_DOWN\r
+       _T("Volume Up"), // VK_VOLUME_UP\r
+       _T("Next Track"), // VK_MEDIA_NEXT_TRACK\r
+       _T("Previous Track"), // VK_MEDIA_PREV_TRACK\r
+       _T("Stop Media"), // VK_MEDIA_STOP\r
+       _T("Play/Pause Media"), // VK_MEDIA_PLAY_PAUSE\r
+       _T("Start Mail"), // VK_LAUNCH_MAIL\r
+       _T("Select Media"), // VK_LAUNCH_MEDIA_SELECT\r
+       _T("Start Application 1"), // VK_LAUNCH_APP1\r
+       _T("Start Application 2"), // VK_LAUNCH_APP2\r
+       _T("Reserved"), // 0xb8\r
+       _T("Reserved"), // 0xb9\r
+       _T(";"), // VK_OEM_1 _T(":") for Japanese keyboard\r
+       _T("+"), // VK_OEM_PLUS _T(";") for Japanese keyboard\r
+       _T(","), // VK_OEM_COMMA\r
+       _T("-"), // VK_OEM_MINUS\r
+       _T("."), // VK_OEM_PERIOD\r
+       _T("/"), // VK_OEM_2\r
+       _T("`"), // VK_OEM_3 _T("@") for Japanese keyboard\r
+       _T("Reserved"), // 0xc1\r
+       _T("Reserved"), // 0xc2\r
+       _T("Reserved"), // 0xc3\r
+       _T("Reserved"), // 0xc4\r
+       _T("Reserved"), // 0xc5\r
+       _T("Reserved"), // 0xc6\r
+       _T("Reserved"), // 0xc7\r
+       _T("Reserved"), // 0xc8\r
+       _T("Reserved"), // 0xc9\r
+       _T("Reserved"), // 0xca\r
+       _T("Reserved"), // 0xcb\r
+       _T("Reserved"), // 0xcc\r
+       _T("Reserved"), // 0xcd\r
+       _T("Reserved"), // 0xce\r
+       _T("Reserved"), // 0xcf\r
+       _T("Reserved"), // 0xd0\r
+       _T("Reserved"), // 0xd1\r
+       _T("Reserved"), // 0xd2\r
+       _T("Reserved"), // 0xd3\r
+       _T("Reserved"), // 0xd4\r
+       _T("Reserved"), // 0xd5\r
+       _T("Reserved"), // 0xd6\r
+       _T("Reserved"), // 0xd7\r
+       _T("Unassigned"), // 0xd8\r
+       _T("Unassigned"), // 0xd9\r
+       _T("Unassigned"), // 0xda\r
+       _T("["), // VK_OEM_4\r
+       _T("Backslash"), // VK_OEM_5\r
+       _T("]"), // VK_OEM_6\r
+       _T("'"), // VK_OEM_7\r
+       _T("OEM specific"), // VK_OEM_8\r
+       _T("Reserved"), // 0xe0\r
+       _T("OEM specific"), // 0xe1\r
+       _T("Backslash for 106 keyboard"), // VK_OEM_102\r
+       _T("OEM specific"), // 0xe3\r
+       _T("OEM specific"), // 0xe4\r
+       _T("Process"), // VK_PROCESSKEY\r
+       _T("OEM specific"), // 0xe6\r
+       _T("Packet"), // VK_PACKET\r
+       _T("Unassigned"), // 0xe8\r
+       _T("OEM specific"), // 0xe9\r
+       _T("OEM specific"), // 0xea\r
+       _T("OEM specific"), // 0xeb\r
+       _T("OEM specific"), // 0xec\r
+       _T("OEM specific"), // 0xed\r
+       _T("OEM specific"), // 0xee\r
+       _T("OEM specific"), // 0xef\r
+       _T("Eisu"), // 0xf0 // \89p\90\94\r
+       _T("OEM specific"), // 0xf1\r
+       _T("Hiragana"), // 0xf2 \82Ð\82ç\82ª\82È\r
+       _T("Hankaku/Zenkaku 0xf3"), // 0xf3 "\94¼\8ap/\91S\8ap"\r
+       _T("Hankaku/Zenkaku 0xf4"), // 0xf4 "\94¼\8ap/\91S\8ap"\r
+       _T("OEM specific"), // 0xf5\r
+       _T("Attn"), // VK_ATTN\r
+       _T("CrSel"), // VK_CRSEL\r
+       _T("ExSel"), // VK_EXSEL\r
+       _T("Erace EOF"), // VK_EREOF\r
+       _T("Play"), // VK_PLAY\r
+       _T("Zoom"), // VK_ZOOM\r
+       _T("Noname"), // VK_NONAME\r
+       _T("PA1"), // VK_PA1\r
+       _T("OEM Clear"), // VK_OEM_CLEAR\r
+       _T("Fn"), // 0xff\r
+};\r
+\r
+KeyString::KeyString(bool is106Keyboard)\r
+{\r
+       if (!is106Keyboard)\r
+               return;\r
+       Keys[0xba] = _T(":");\r
+       Keys[0xbb] = _T(";");\r
+       Keys[0xc0] = _T("@");\r
+       Keys[0xde] = _T("^");\r
+}\r
+\r
+CString KeyString::ToString(int type, int key)\r
+{\r
+       CString str;\r
+       for (int i = 0; i < _countof(Types); ++i)\r
+               if ((type & Types[i].Type) != 0)\r
+                       str += Types[i].Name;\r
+       str += Keys[key];\r
+       return str;\r
+}\r
+\r
+void KeyString::ToKey(LPCTSTR str, int& type, int& key)\r
+{\r
+       CString s(str);\r
+       type = NONE;\r
+       for (int i = 0; i < _countof(Types); ++i)\r
+               if (s.Find(Types[i].Name) == 0) {\r
+                       type |= Types[i].Type;\r
+                       s.Delete(0, static_cast<int>(_tcslen(Types[i].Name)));\r
+               }\r
+       key = 0;\r
+       for (int i = 1; i < 256; ++i)\r
+               if (s == Keys[i]) {\r
+                       key = i;\r
+                       break;\r
+               }\r
+}\r
diff --git a/xkeymacs/KeyString.h b/xkeymacs/KeyString.h
new file mode 100644 (file)
index 0000000..738677d
--- /dev/null
@@ -0,0 +1,10 @@
+#pragma once\r
+#include "stdafx.h"\r
+\r
+class KeyString\r
+{\r
+public:\r
+       KeyString(bool is106Keyboard);\r
+       CString ToString(int type, int key);\r
+       void ToKey(LPCTSTR str, int& type, int& key);\r
+};\r
index 17716c9..0512ebf 100644 (file)
@@ -18,297 +18,11 @@ static char THIS_FILE[]=__FILE__;
 #define new DEBUG_NEW\r
 #endif\r
 \r
-struct CommandTypeName\r
-{\r
-       int nType;\r
-       LPCTSTR szName;\r
-};\r
-\r
-static const CommandTypeName CommandTypes[] = {\r
-       {NONE,                                                  _T("")},\r
-       {SHIFT,                                                 _T("Shift+")},\r
-       {CONTROL,                                               _T("Ctrl+")},\r
-       {CONTROL+SHIFT,                                 _T("Ctrl+Shift+")},\r
-       {META,                                                  _T("Meta+")},\r
-       {META+SHIFT,                                    _T("Meta+Shift+")},\r
-       {CONTROL+META,                                  _T("Ctrl+Meta+")},\r
-       {CONTROL+META+SHIFT,                    _T("Ctrl+Meta+Shift+")},\r
-       {CONTROLX+NONE,                                 _T("Ctrl+X ")},\r
-       {CONTROLX+SHIFT,                                _T("Ctrl+X Shift+")},\r
-       {CONTROLX+CONTROL,                              _T("Ctrl+X Ctrl+")},\r
-       {CONTROLX+CONTROL+SHIFT,                _T("Ctrl+X Ctrl+Shift+")},\r
-       {CONTROLX+META,                                 _T("Ctrl+X Meta+")},\r
-       {CONTROLX+META+SHIFT,                   _T("Ctrl+X Meta+Shift+")},\r
-       {CONTROLX+CONTROL+META,                 _T("Ctrl+X Ctrl+Meta+")},\r
-       {CONTROLX+CONTROL+META+SHIFT,   _T("Ctrl+X Ctrl+Meta+Shift+")},\r
-};\r
-\r
-static const KeyName KeyNames[] = {\r
-       {0,                             _T("")},\r
-       {VK_LBUTTON,    _T("Left mouse button")},\r
-       {VK_RBUTTON,    _T("Right mouse button")},\r
-       {VK_CANCEL,             _T("Break")},\r
-       {VK_MBUTTON,    _T("Middle mouse button")},\r
-       {0x05,                  _T("X1 mouse button")}, // VK_XBUTTON1\r
-       {0x06,                  _T("X2 mouse button")}, // VK_XBUTTON2\r
-       {0x07,                  _T("Undefined")},\r
-       {VK_BACK,               _T("Backspace")},\r
-       {VK_TAB,                _T("Tab")},\r
-       {0x0a,                  _T("Reserved")},\r
-       {0x0b,                  _T("Reserved")},\r
-       {VK_CLEAR,              _T("Clear")},\r
-       {VK_RETURN,             _T("Enter")},\r
-       {0x0e,                  _T("Undefined")},\r
-       {0x0f,                  _T("Undefined")},\r
-       {VK_SHIFT,              _T("Shift")},\r
-       {VK_CONTROL,    _T("Ctrl")},\r
-       {VK_MENU,               _T("Alt")},\r
-       {VK_PAUSE,              _T("Pause")},\r
-       {VK_CAPITAL,    _T("Caps Lock")},\r
-       {VK_KANA,               _T("Kana")},    //      {VK_HANGUEL,    "Hanguel"},     {VK_HANGUL,             "Hangul"},\r
-       {0x16,                  _T("Undefined")},\r
-       {VK_JUNJA,              _T("Junja")},\r
-       {VK_FINAL,              _T("Final")},\r
-       {VK_KANJI,              _T("Kanji")},   //      {VK_HANJA,              "Hanja"},\r
-       {0x1a,                  _T("Undefined")},\r
-       {VK_ESCAPE,             _T("Esc")},\r
-       {VK_CONVERT,    _T("Convert")},         // \95Ï\8a·\r
-       {VK_NONCONVERT, _T("Nonconvert")},      // \96³\95Ï\8a·\r
-       {VK_ACCEPT,             _T("Accept")},\r
-       {VK_MODECHANGE, _T("Mode change")},\r
-       {VK_SPACE,              _T("Space")},\r
-       {VK_PRIOR,              _T("Page Up")},\r
-       {VK_NEXT,               _T("Page Down")},\r
-       {VK_END,                _T("End")},\r
-       {VK_HOME,               _T("Home")},\r
-       {VK_LEFT,               _T("Left")},\r
-       {VK_UP,                 _T("Up")},\r
-       {VK_RIGHT,              _T("Right")},\r
-       {VK_DOWN,               _T("Down")},\r
-       {VK_SELECT,             _T("Select")},\r
-       {VK_PRINT,              _T("Print")},\r
-       {VK_EXECUTE,    _T("Execute")},\r
-       {VK_SNAPSHOT,   _T("Print Screen")},\r
-       {VK_INSERT,             _T("Ins")},\r
-       {VK_DELETE,             _T("Del")},\r
-       {VK_HELP,               _T("Help")},\r
-       {'0',                   _T("0")},\r
-       {'1',                   _T("1")},\r
-       {'2',                   _T("2")},\r
-       {'3',                   _T("3")},\r
-       {'4',                   _T("4")},\r
-       {'5',                   _T("5")},\r
-       {'6',                   _T("6")},\r
-       {'7',                   _T("7")},\r
-       {'8',                   _T("8")},\r
-       {'9',                   _T("9")},\r
-       {0x3a,                  _T("Undefined")},\r
-       {0x3b,                  _T("Undefined")},\r
-       {0x3c,                  _T("Undefined")},\r
-       {0x3d,                  _T("Undefined")},\r
-       {0x3e,                  _T("Undefined")},\r
-       {0x3f,                  _T("Undefined")},\r
-       {0x40,                  _T("Undefined")},\r
-       {'A',                   _T("A")},\r
-       {'B',                   _T("B")},\r
-       {'C',                   _T("C")},\r
-       {'D',                   _T("D")},\r
-       {'E',                   _T("E")},\r
-       {'F',                   _T("F")},\r
-       {'G',                   _T("G")},\r
-       {'H',                   _T("H")},\r
-       {'I',                   _T("I")},\r
-       {'J',                   _T("J")},\r
-       {'K',                   _T("K")},\r
-       {'L',                   _T("L")},\r
-       {'M',                   _T("M")},\r
-       {'N',                   _T("N")},\r
-       {'O',                   _T("O")},\r
-       {'P',                   _T("P")},\r
-       {'Q',                   _T("Q")},\r
-       {'R',                   _T("R")},\r
-       {'S',                   _T("S")},\r
-       {'T',                   _T("T")},\r
-       {'U',                   _T("U")},\r
-       {'V',                   _T("V")},\r
-       {'W',                   _T("W")},\r
-       {'X',                   _T("X")},\r
-       {'Y',                   _T("Y")},\r
-       {'Z',                   _T("Z")},\r
-       {VK_LWIN,               _T("Left Windows")},\r
-       {VK_RWIN,               _T("Right Windows")},\r
-       {VK_APPS,               _T("Application")},\r
-       {0x5e,                  _T("Reserved")},\r
-       {0x5f,                  _T("Sleep")},   // VK_SLEEP\r
-       {VK_NUMPAD0,    _T("Num 0")},\r
-       {VK_NUMPAD1,    _T("Num 1")},\r
-       {VK_NUMPAD2,    _T("Num 2")},\r
-       {VK_NUMPAD3,    _T("Num 3")},\r
-       {VK_NUMPAD4,    _T("Num 4")},\r
-       {VK_NUMPAD5,    _T("Num 5")},\r
-       {VK_NUMPAD6,    _T("Num 6")},\r
-       {VK_NUMPAD7,    _T("Num 7")},\r
-       {VK_NUMPAD8,    _T("Num 8")},\r
-       {VK_NUMPAD9,    _T("Num 9")},\r
-       {VK_MULTIPLY,   _T("Num *")},\r
-       {VK_ADD,                _T("Num +")},\r
-       {VK_SEPARATOR,  _T("Separator")},\r
-       {VK_SUBTRACT,   _T("Num -")},\r
-       {VK_DECIMAL,    _T("Num .")},\r
-       {VK_DIVIDE,             _T("Num /")},\r
-       {VK_F1,                 _T("F1")},\r
-       {VK_F2,                 _T("F2")},\r
-       {VK_F3,                 _T("F3")},\r
-       {VK_F4,                 _T("F4")},\r
-       {VK_F5,                 _T("F5")},\r
-       {VK_F6,                 _T("F6")},\r
-       {VK_F7,                 _T("F7")},\r
-       {VK_F8,                 _T("F8")},\r
-       {VK_F9,                 _T("F9")},\r
-       {VK_F10,                _T("F10")},\r
-       {VK_F11,                _T("F11")},\r
-       {VK_F12,                _T("F12")},\r
-       {VK_F13,                _T("F13")},\r
-       {VK_F14,                _T("F14")},\r
-       {VK_F15,                _T("F15")},\r
-       {VK_F16,                _T("F16")},\r
-       {VK_F17,                _T("F17")},\r
-       {VK_F18,                _T("F18")},\r
-       {VK_F19,                _T("F19")},\r
-       {VK_F20,                _T("F20")},\r
-       {VK_F21,                _T("F21")},\r
-       {VK_F22,                _T("F22")},\r
-       {VK_F23,                _T("F23")},\r
-       {VK_F24,                _T("F24")},\r
-       {0x88,                  _T("Unassigned")},\r
-       {0x89,                  _T("Unassigned")},\r
-       {0x8a,                  _T("Unassigned")},\r
-       {0x8b,                  _T("Unassigned")},\r
-       {0x8c,                  _T("Unassigned")},\r
-       {0x8d,                  _T("Unassigned")},\r
-       {0x8e,                  _T("Unassigned")},\r
-       {0x8f,                  _T("Unassigned")},\r
-       {VK_NUMLOCK,    _T("Num Lock")},\r
-       {VK_SCROLL,             _T("Scroll Lock")},\r
-       {0x92,                  _T("OEM specific")},\r
-       {0x93,                  _T("OEM specific")},\r
-       {0x94,                  _T("OEM specific")},\r
-       {0x95,                  _T("OEM specific")},\r
-       {0x96,                  _T("OEM specific")},\r
-       {0x97,                  _T("Unassigned")},\r
-       {0x98,                  _T("Unassigned")},\r
-       {0x99,                  _T("Unassigned")},\r
-       {0x9a,                  _T("Unassigned")},\r
-       {0x9b,                  _T("Unassigned")},\r
-       {0x9c,                  _T("Unassigned")},\r
-       {0x9d,                  _T("Unassigned")},\r
-       {0x9e,                  _T("Unassigned")},\r
-       {0x9f,                  _T("Unassigned")},\r
-       {VK_LSHIFT,             _T("Left Shift")},\r
-       {VK_RSHIFT,             _T("Right Shift")},\r
-       {VK_LCONTROL,   _T("Left Ctrl")},\r
-       {VK_RCONTROL,   _T("Right Ctrl")},\r
-       {VK_LMENU,              _T("Left Alt")},\r
-       {VK_RMENU,              _T("Right Alt")},\r
-       {0xa6,                  _T("Browser Back")},            // VK_BROWSER_BACK\r
-       {0xa7,                  _T("Browser Forward")},         // VK_BROWSER_FORWARD\r
-       {0xa8,                  _T("Browser Refresh")},         // VK_BROWSER_REFRESH\r
-       {0xa9,                  _T("Browser Stop")},            // VK_BROWSER_STOP\r
-       {0xaa,                  _T("Browser Search")},          // VK_BROWSER_SEARCH\r
-       {0xab,                  _T("Browser Favorites")},       // VK_BROWSER_FAVORITES\r
-       {0xac,                  _T("Browser Start")},           // VK_BROWSER_HOME\r
-       {0xad,                  _T("Volume Mute")},                     // VK_VOLUME_MUTE\r
-       {0xae,                  _T("Volume Down")},                     // VK_VOLUME_DOWN\r
-       {0xaf,                  _T("Volume Up")},                       // VK_VOLUME_UP\r
-       {0xb0,                  _T("Next Track")},                      // VK_MEDIA_NEXT_TRACK\r
-       {0xb1,                  _T("Previous Track")},          // VK_MEDIA_PREV_TRACK\r
-       {0xb2,                  _T("Stop Media")},                      // VK_MEDIA_STOP\r
-       {0xb3,                  _T("Play/Pause Media")},        // VK_MEDIA_PLAY_PAUSE\r
-       {0xb4,                  _T("Start Mail")},                      // VK_LAUNCH_MAIL\r
-       {0xb5,                  _T("Select Media")},            // VK_LAUNCH_MEDIA_SELECT\r
-       {0xb6,                  _T("Start Application 1")},     // VK_LAUNCH_APP1\r
-       {0xb7,                  _T("Start Application 2")},     // VK_LAUNCH_APP2\r
-       {0xb8,                  _T("Reserved")},\r
-       {0xb9,                  _T("Reserved")},\r
-       {0xba,                  _T(";")},                                       // VK_OEM_1\r
-//     {0xba,                  _T(":")},                                       // VK_OEM_1             // for Japanese keyboard\r
-       {0xbb,                  _T("+")},                                       // VK_OEM_PLUS\r
-//     {0xbb,                  _T(";")},                                       // VK_OEM_PLUS  // for Japanese keyboard\r
-       {0xbc,                  _T(",")},                                       // VK_OEM_COMMA\r
-       {0xbd,                  _T("-")},                                       // VK_OEM_MINUS\r
-       {0xbe,                  _T(".")},                                       // VK_OEM_PERIOD\r
-       {0xbf,                  _T("/")},                                       // VK_OEM_2\r
-       {0xc0,                  _T("`")},                                       // VK_OEM_3\r
-//     {0xc0,                  _T("@")},                                       // VK_OEM_3             // for Japanese keyboard\r
-       {0xc1,                  _T("Reserved")},\r
-       {0xc2,                  _T("Reserved")},\r
-       {0xc3,                  _T("Reserved")},\r
-       {0xc4,                  _T("Reserved")},\r
-       {0xc5,                  _T("Reserved")},\r
-       {0xc6,                  _T("Reserved")},\r
-       {0xc7,                  _T("Reserved")},\r
-       {0xc8,                  _T("Reserved")},\r
-       {0xc9,                  _T("Reserved")},\r
-       {0xca,                  _T("Reserved")},\r
-       {0xcb,                  _T("Reserved")},\r
-       {0xcc,                  _T("Reserved")},\r
-       {0xcd,                  _T("Reserved")},\r
-       {0xce,                  _T("Reserved")},\r
-       {0xcf,                  _T("Reserved")},\r
-       {0xd0,                  _T("Reserved")},\r
-       {0xd1,                  _T("Reserved")},\r
-       {0xd2,                  _T("Reserved")},\r
-       {0xd3,                  _T("Reserved")},\r
-       {0xd4,                  _T("Reserved")},\r
-       {0xd5,                  _T("Reserved")},\r
-       {0xd6,                  _T("Reserved")},\r
-       {0xd7,                  _T("Reserved")},\r
-       {0xd8,                  _T("Unassigned")},\r
-       {0xd9,                  _T("Unassigned")},\r
-       {0xda,                  _T("Unassigned")},\r
-       {0xdb,                  _T("[")},                                       // VK_OEM_4\r
-       {0xdc,                  _T("Backslash")},                       // VK_OEM_5\r
-       {0xdd,                  _T("]")},                                       // VK_OEM_6\r
-       {0xde,                  _T("'")},                                       // VK_OEM_7\r
-       {0xdf,                  _T("OEM specific")},            // VK_OEM_8\r
-       {0xe0,                  _T("Reserved")},\r
-       {0xe1,                  _T("OEM specific")},\r
-       {0xe2,                  _T("Backslash for 106 keyboard")},      // VK_OEM_102\r
-       {0xe3,                  _T("OEM specific")},\r
-       {0xe4,                  _T("OEM specific")},\r
-       {0xe5,                  _T("Process")},                         // VK_PROCESSKEY\r
-       {0xe6,                  _T("OEM specific")},\r
-       {0xe7,                  _T("Packet")},  // VK_PACKET\r
-       {0xe8,                  _T("Unassigned")},\r
-       {0xe9,                  _T("OEM specific")},\r
-       {0xea,                  _T("OEM specific")},\r
-       {0xeb,                  _T("OEM specific")},\r
-       {0xec,                  _T("OEM specific")},\r
-       {0xed,                  _T("OEM specific")},\r
-       {0xee,                  _T("OEM specific")},\r
-       {0xef,                  _T("OEM specific")},\r
-       {0xf0,                  _T("Eisu")},                                    // \89p\90\94\r
-       {0xf1,                  _T("OEM specific")},\r
-       {0xf2,                  _T("Hiragana")},                                // \82Ð\82ç\82ª\82È\r
-       {0xf3,                  _T("Hankaku/Zenkaku 0xf3")},    // "\94¼\8ap/\91S\8ap"\r
-       {0xf4,                  _T("Hankaku/Zenkaku 0xf4")},    // "\94¼\8ap/\91S\8ap"\r
-       {0xf5,                  _T("OEM specific")},\r
-       {VK_ATTN,               _T("Attn")},\r
-       {VK_CRSEL,              _T("CrSel")},\r
-       {VK_EXSEL,              _T("ExSel")},\r
-       {VK_EREOF,              _T("Erace EOF")},\r
-       {VK_PLAY,               _T("Play")},\r
-       {VK_ZOOM,               _T("Zoom")},\r
-       {VK_NONAME,             _T("Noname")},\r
-       {VK_PA1,                _T("PA1")},\r
-       {VK_OEM_CLEAR,  _T("OEM Clear")},\r
-       {0xff,                  _T("Fn")},\r
-};\r
-\r
 Config CProfile::m_Config;\r
 TCHAR CProfile::m_szAppTitle[MAX_APP][WINDOW_TEXT_LENGTH];\r
 TASK_LIST CProfile::m_TaskList[MAX_TASKS];\r
 DWORD CProfile::m_dwTasks;\r
+KeyString CProfile::m_KeyString(CProfile::Is106Keyboard() != FALSE);\r
 \r
 // This function returns the nth string in a window name separated by " - ".\r
 // If there aren't a sufficient number of strings, it returns the last string\r
@@ -429,7 +143,7 @@ void CProfile::LoadRegistry()
                                DWORD dwKeyBind = _countof(szKeyBind);\r
                                for (DWORD dwIndex = 0; RegEnumKeyEx(hKey, dwIndex, szKeyBind, &dwKeyBind, NULL, NULL, NULL, NULL) == ERROR_SUCCESS; ++dwIndex) {\r
                                        int nType, nKey;\r
-                                       ReadKeyBind(nType, nKey, szKeyBind);\r
+                                       StringToKey(szKeyBind, nType, nKey);\r
                                        m_Config.nCommandID[nAppID][nType][nKey] = nComID;\r
                                        dwKeyBind = _countof(szKeyBind);\r
                                }\r
@@ -453,7 +167,7 @@ void CProfile::LoadRegistry()
                                DWORD dwKeyBind = _countof(szKeyBind);\r
                                for (DWORD dwIndex = 0; RegEnumKeyEx(hKey, dwIndex, szKeyBind, &dwKeyBind, NULL, NULL, NULL, NULL) == ERROR_SUCCESS; ++dwIndex) {\r
                                        int nType, nKey;\r
-                                       ReadKeyBind(nType, nKey, szKeyBind);\r
+                                       StringToKey(szKeyBind, nType, nKey);\r
                                        CDotXkeymacs::SetKey(nFuncID, nAppID, nType, nKey);\r
                                        dwKeyBind = _countof(szKeyBind);\r
                                }\r
@@ -500,10 +214,9 @@ void CProfile::SaveRegistry()
                entry.LoadString(IDS_REG_ENTRY_WINDOW_TEXT);\r
                AfxGetApp()->WriteProfileString(szAppName, entry, m_Config.szWindowText[nAppID]);\r
 \r
-               const CString regApp = CString(MAKEINTRESOURCE(IDS_REGSUBKEY_DATA)) + _T("\\") + szAppName;\r
                // Create all commands\r
                for (int nComID = 1; nComID < MAX_COMMAND; ++nComID)\r
-                       SaveCommand(szAppName, nComID);\r
+                       SaveKeyBind(szAppName, nComID, 0, 0);\r
                for (int nType = 0; nType < MAX_COMMAND_TYPE; ++nType)\r
                        for (int nKey = 0; nKey < MAX_KEY; ++nKey)\r
                                SaveKeyBind(szAppName, m_Config.nCommandID[nAppID][nType][nKey], nType, nKey);\r
@@ -576,107 +289,35 @@ void CProfile::SetDllData()
        pApp->SendIPCMessage(XKEYMACS_RELOAD);\r
 }\r
 \r
-void CProfile::ReadKeyBind(int& nCommandType, int& nKey, const LPCTSTR szKeyBind)\r
-{\r
-       nCommandType = KeyBind2CommandType(szKeyBind);\r
-       nKey = KeyBind2Key(szKeyBind + _tcslen(CommandType2String(nCommandType)));\r
-}\r
-\r
-CString CProfile::WriteKeyBind(const int nType, const int nKey)\r
+void CProfile::SaveKeyBind(const LPCTSTR appName, int comID, int type, int key)\r
 {\r
-       CString szKeyBind;\r
-       szKeyBind.Format(_T("%s%s"), CommandType2String(nType), Key2String(nKey));\r
-       return szKeyBind;\r
-}\r
-\r
-int CProfile::KeyBind2CommandType(LPCTSTR szKeyBind)\r
-{\r
-       for (int nType = MAX_COMMAND_TYPE - 1; nType; --nType) {\r
-               if (IsCommandType(nType, szKeyBind)) {\r
-                       return nType;\r
-               }\r
-       }\r
-       return NONE;\r
-}\r
-\r
-int CProfile::KeyBind2Key(LPCTSTR szKey)\r
-{\r
-       for (int nKey = 1; nKey <= 0xff; ++nKey) {\r
-               if (!_tcscmp(szKey, Key2String(nKey))) {\r
-                       return nKey;\r
-               }\r
-       }\r
-       return 0;\r
-}\r
-\r
-LPCTSTR CProfile::CommandType2String(int nType)\r
-{\r
-       if (nType < 0 || sizeof(CommandTypes) / sizeof(CommandTypes[0]) <= nType) {\r
-               ASSERT(0);\r
-               nType = NONE;\r
-       }\r
-       return CommandTypes[nType].szName;\r
-}\r
-\r
-LPCTSTR CProfile::Key2String(int nKey)\r
-{\r
-       if (CProfile::Is106Keyboard()) {\r
-               switch (nKey) {\r
-               case 0xBA:\r
-                       return _T(":");\r
-               case 0xBB:\r
-                       return _T(";");\r
-               case 0xC0:\r
-                       return _T("@");\r
-               case 0xDE:\r
-                       return _T("^");\r
-               default:\r
-                       break;\r
-               }\r
-       }\r
-\r
-       if (nKey < 0 || sizeof(KeyNames) / sizeof(KeyNames[0]) <= nKey) {\r
-               ASSERT(0);\r
-               nKey = 0;\r
-       }\r
-       return KeyNames[nKey].name;\r
-}\r
-\r
-BOOL CProfile::IsCommandType(const int nType, LPCTSTR szKeyBind)\r
-{\r
-       LPCTSTR szCommandType = CommandType2String(nType);\r
-\r
-       if (!_tcsnicmp(szKeyBind, szCommandType, _tcslen(szCommandType))) {\r
-               return TRUE;\r
-       }\r
-\r
-       return FALSE;\r
-}\r
-\r
-void CProfile::SaveKeyBind(const LPCSTR szAppName, const int nComID, const int nType, const int nKey)\r
-{\r
-       if (!nComID)\r
+       if (!comID)\r
                return;\r
-       const LPCSTR szComName = CCommands::GetCommandName(nComID);\r
-       if (!szComName[0])\r
+       LPCTSTR comName = CCommands::GetCommandName(comID);\r
+       if (!comName[0])\r
                return;\r
-       SaveKeyBind(szAppName, szComName, nType, nKey);\r
+       SaveKeyBind(appName, comName, type, key);\r
 }\r
 \r
-void CProfile::SaveKeyBind(const LPCSTR szAppName, const LPCSTR szComName, const int nType, const int nKey)\r
+void CProfile::SaveKeyBind(const LPCTSTR appName, const LPCTSTR comName, int type, int key)\r
 {\r
-       const CString szKeyBind = WriteKeyBind(nType, nKey);\r
-       CString szSubKey = CString(MAKEINTRESOURCE(IDS_REGSUBKEY_DATA)) + _T("\\") + szAppName + _T("\\") + szComName;\r
-       if (!szKeyBind.IsEmpty())\r
-               szSubKey += _T("\\") + szKeyBind;\r
+       CString subKey = CString(MAKEINTRESOURCE(IDS_REGSUBKEY_DATA)) + _T("\\") + appName + _T("\\") + comName;\r
+       CString s = KeyToString(type, key);\r
+       if (!s.IsEmpty())\r
+               subKey = subKey + _T("\\") + s;\r
        HKEY hKey = NULL;\r
-       if (RegCreateKeyEx(HKEY_CURRENT_USER, szSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL) == ERROR_SUCCESS)\r
+       if (RegCreateKeyEx(HKEY_CURRENT_USER, subKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL) == ERROR_SUCCESS)\r
                RegCloseKey(hKey);\r
 }\r
 \r
-void CProfile::SaveCommand(const LPCSTR szAppName, const int nComID)\r
+void CProfile::StringToKey(const LPCTSTR str, int& type, int& key)\r
+{\r
+       m_KeyString.ToKey(str, type, key);\r
+}\r
+\r
+CString CProfile::KeyToString(int type, int key)\r
 {\r
-       SaveKeyBind(szAppName, nComID, 0, 0);\r
+       return m_KeyString.ToString(type, key);\r
 }\r
 \r
 void CProfile::AddKeyBind2C_(const LPCSTR szAppName, const BYTE bVk)\r
@@ -732,7 +373,7 @@ void CProfile::LevelUp()
                                        DWORD dwKeyBind = sizeof(szKeyBind);\r
                                        for (DWORD dwIndex = 0; RegEnumKeyEx(hKey, dwIndex, szKeyBind, &dwKeyBind, NULL, NULL, NULL, NULL) == ERROR_SUCCESS; ++dwIndex) {\r
                                                int nType, nKey;\r
-                                               ReadKeyBind(nType, nKey, szKeyBind);\r
+                                               StringToKey(szKeyBind, nType, nKey);\r
                                                SaveKeyBind(appName, CDotXkeymacs::GetFunctionSymbol(nFuncID), nType, nKey);\r
                                                dwKeyBind = sizeof(szKeyBind);\r
                                        }\r
index 740f748..70fe26a 100644 (file)
@@ -11,6 +11,7 @@
 \r
 #include "resource.h"\r
 #include "properties.h"\r
+#include "KeyString.h"\r
 #include "../xkeymacsdll/ipc.h"\r
 \r
 struct TASK_LIST {\r
@@ -44,9 +45,8 @@ public:
        static void SetUseDialogSetting(int nAppID, BOOL bUseDialogSetting);\r
        static int GetAppID(const LPCSTR szAppName);\r
        static void CopyData(CString szDestinationApplication, CString szSourceApplication);\r
-       static void ReadKeyBind(int& pnCommandType, int& pnKey, LPCTSTR szKeyBind);\r
-       static LPCTSTR Key2String(int nKey);\r
-       static LPCTSTR CommandType2String(int nType);\r
+       static void StringToKey(LPCTSTR str, int& type, int& key);\r
+       static CString KeyToString(int type, int key);\r
        static int GetKillRingMax(int nAppID);\r
        static void SetKillRingMax(int nAppID, int nKillRingMax);\r
        static int GetCommandID(int nAppID, int nType, int nKey);\r
@@ -64,12 +64,12 @@ public:
        static void SaveData();\r
 \r
 private:\r
-       static void SaveKeyBind(const LPCSTR szAppName, const LPCSTR szComName, int nType, int nKey);\r
+       static KeyString m_KeyString;\r
        static BOOL DiableTokenPrivileges();\r
        static BOOL AdjustTokenPrivileges(LPCTSTR lpName);\r
-       static void SaveCommand(const LPCSTR szAppName, int nComID);\r
-       static void SaveKeyBind(const LPCSTR szAppName, int nComID, int nType, int nKey);\r
-       static void AddKeyBind2C_(const LPCSTR szApplicationName, BYTE bVk);\r
+       static void SaveKeyBind(const LPCTSTR appName, int comID, int type, int key);\r
+       static void SaveKeyBind(const LPCTSTR appName, const LPCTSTR comName, int type, int key);\r
+       static void AddKeyBind2C_(const LPCTSTR szApplicationName, BYTE bVk);\r
        static void LevelUp();\r
        static bool GetAppTitle(CString& appTitle, const CString& windowName, int nth = 1000);\r
        static BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam);\r
@@ -80,10 +80,6 @@ private:
        static TASK_LIST m_TaskList[MAX_TASKS];\r
        static DWORD m_dwTasks;\r
        static void GetTaskList();\r
-       static BOOL IsCommandType(int nType, LPCTSTR szKeyBind);\r
-       static int KeyBind2Key(const LPCTSTR szKey);\r
-       static int KeyBind2CommandType(const LPCTSTR szKeyBind);\r
-       static CString WriteKeyBind(int nType, int nKey);\r
        static void LoadRegistry();\r
        static void SaveRegistry();\r
        static void AddIMEInfo(CProperties& cProperties);\r
index a1d9004..39f1b79 100644 (file)
@@ -258,9 +258,7 @@ void CPropertiesAdvanced::SetCurrentKeys()
                for (int nType = 0; nType < MAX_COMMAND_TYPE; ++nType) {\r
                        for (int nKey = 0; nKey < MAX_KEY; ++nKey) {\r
                                if (CCommands::GetCommandName(CProfile::GetCommandID(m_nAppID, nType, nKey)) == szCurrentCommandName) {\r
-                                       CString sz;\r
-                                       sz.Format(_T("%s%s"), CProfile::CommandType2String(nType), CProfile::Key2String(nKey));\r
-                                       m_cCurrentKeys.AddString(sz);\r
+                                       m_cCurrentKeys.AddString(CProfile::KeyToString(nType, nKey));\r
                                }\r
                        }\r
                }\r
@@ -292,10 +290,7 @@ void CPropertiesAdvanced::SetCurrentKeys()
                        int nType = 0;\r
                        int nKey = 0;\r
                        CDotXkeymacs::GetKey(nIndex, m_nAppID, nKeyID, &nType, &nKey);\r
-\r
-                       CString sz;\r
-                       sz.Format(_T("%s%s"), CProfile::CommandType2String(nType), CProfile::Key2String(nKey));\r
-                       m_cCurrentKeys.AddString(sz);\r
+                       m_cCurrentKeys.AddString(CProfile::KeyToString(nType, nKey));\r
                }\r
 \r
                m_cDescription.SetWindowText(CDotXkeymacs::GetFunctionDefinition(szCurrentCommandName));\r
@@ -331,7 +326,7 @@ void CPropertiesAdvanced::OnSelchangeCurrentKeys()
 {\r
        TCHAR szKeyBind[128] = {'\0'};\r
        m_cCurrentKeys.GetText(m_cCurrentKeys.GetCurSel(), szKeyBind);\r
-       CProfile::ReadKeyBind(m_nRemoveCommandType, m_nRemoveKey, szKeyBind);\r
+       CProfile::StringToKey(szKeyBind, m_nRemoveCommandType, m_nRemoveKey);\r
        m_cRemove.EnableWindow();\r
 }\r
 \r
@@ -354,9 +349,8 @@ void CPropertiesAdvanced::OnAssign()
        CDotXkeymacs::RemoveKey(m_nAppID, m_nAssignCommandType, m_nAssignKey);\r
 \r
        // Assign New Setting\r
-       CString szItem;\r
-       szItem.Format(_T("%s%s"), CProfile::CommandType2String(m_nAssignCommandType), CProfile::Key2String(m_nAssignKey));\r
-       if (m_cCurrentKeys.FindString(-1, szItem) == LB_ERR) {  // This key bind has not assignd to the same command yet.\r
+       CString item = CProfile::KeyToString(m_nAssignCommandType, m_nAssignKey);\r
+       if (m_cCurrentKeys.FindString(-1, item) == LB_ERR) {    // This key bind has not assignd to the same command yet.\r
                CString szCategory;\r
                m_cCategory.GetLBText(m_cCategory.GetCurSel(), szCategory);\r
 \r
@@ -368,7 +362,7 @@ void CPropertiesAdvanced::OnAssign()
                        m_cCommands.GetText(m_cCommands.GetCurSel(), szCurrentCommandName);\r
                        CDotXkeymacs::SetKey(CDotXkeymacs::GetIndex(szCurrentCommandName), m_nAppID, m_nAssignCommandType, m_nAssignKey);\r
                }\r
-               m_cCurrentKeys.AddString(szItem);\r
+               m_cCurrentKeys.AddString(item);\r
        }\r
 \r
        ClearNewKey();\r
@@ -435,37 +429,25 @@ LRESULT CALLBACK CPropertiesAdvanced::KeyboardProc(int code, WPARAM wParam, LPAR
 \r
 void CPropertiesAdvanced::SetNewKey()\r
 {\r
-       CString szNewKey;\r
-       int nType = NONE;\r
-\r
-       if (m_bC_x) {\r
-               szNewKey += _T("Ctrl+X ");\r
-               nType += CONTROLX;\r
-       }\r
-       if (IsCtrlDown()) {\r
-               szNewKey += _T("Ctrl+");\r
-               nType += CONTROL;\r
-       }\r
-       if (IsMetaDown()) {\r
-               szNewKey += _T("Meta+");\r
-               nType += META;\r
-       }\r
-       if (IsShiftDown()) {\r
-               szNewKey += _T("Shift+");\r
-               nType += SHIFT;\r
-       }\r
-\r
+       UINT nType = NONE;\r
+       if (m_bC_x)\r
+               nType |= CONTROLX;\r
+       if (IsCtrlDown())\r
+               nType |= CONTROL;\r
+       if (IsMetaDown())\r
+               nType |= META;\r
+       if (IsShiftDown())\r
+               nType |= SHIFT;\r
        m_nAssignCommandType = nType;\r
 \r
-       szNewKey += CProfile::Key2String(m_nAssignKey);\r
-       if (m_pNewKey) {\r
-               m_pNewKey->SetWindowText(szNewKey);\r
-       }\r
+       CString newKey = CProfile::KeyToString(nType, m_nAssignKey);\r
+       if (m_pNewKey)\r
+               m_pNewKey->SetWindowText(newKey);\r
 \r
        if (m_pAssign) {\r
                BOOL bEnable = TRUE;\r
                if (m_pCurrentKeys\r
-                && m_pCurrentKeys->FindString(-1, szNewKey) != LB_ERR) {       // This key bind is already assigned.\r
+                && m_pCurrentKeys->FindString(-1, newKey) != LB_ERR) { // This key bind is already assigned.\r
                        bEnable = FALSE;\r
                }\r
                m_pAssign->EnableWindow(bEnable);\r
index 9e12e09..e8f0151 100644 (file)
@@ -75,8 +75,7 @@ void CPropertiesList::SetDialogData()
                for (int nType = 0; nType < MAX_COMMAND_TYPE; ++nType) {\r
                        for (int nKey = 0; nKey < MAX_KEY; ++nKey)\r
                                if (nComID == CProfile::GetCommandID(nAppID, nType, nKey)) {\r
-                                       CString key;\r
-                                       key.Format(_T("%s%s"), CProfile::CommandType2String(nType), CProfile::Key2String(nKey));\r
+                                       CString key = CProfile::KeyToString(nType, nKey);\r
                                        InsertItem(category, szComName, key);\r
                                        bInserted = true;\r
                                }\r
index f78bbaf..fd92dcc 100644 (file)
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>\r
     </ClCompile>\r
+    <ClCompile Include="KeyString.cpp" />\r
     <ClCompile Include="mainfrm.cpp">\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>\r
     <ClInclude Include="imelist.h" />\r
     <ClInclude Include="key.h" />\r
     <ClInclude Include="keyboardlayout.h" />\r
+    <ClInclude Include="KeyString.h" />\r
     <ClInclude Include="mainfrm.h" />\r
     <ClInclude Include="mainfrm64.h" />\r
     <ClInclude Include="optionsdlg.h" />\r
index 13fdadd..29005ab 100644 (file)
@@ -69,6 +69,9 @@
     <ClCompile Include="imelist.cpp">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="KeyString.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="104keyboard.h">\r
     <ClInclude Include="resource1.h">\r
       <Filter>Header Files</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="KeyString.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ResourceCompile Include="xkeymacs.rc">\r
index 48ce14f..8e9e8cd 100644 (file)
@@ -20,12 +20,6 @@ enum { OFF_ICON, ON_ICON };
 enum SETTING_STYLE { SETTING_DEFAULT, SETTING_SPECIFIC, SETTING_DISABLE, SETTING_UNDEFINED };\r
 enum GOTO { GOTO_DO_NOTHING, GOTO_HOOK, GOTO_RECURSIVE, GOTO_HOOKX, GOTO_HOOK0_9, CONTINUE };\r
 \r
-struct KeyName\r
-{\r
-       BYTE bVk;\r
-       LPCTSTR name;\r
-};\r
-\r
 struct KeyBind\r
 {\r
        int nType;\r
index ce7b7e1..d709a52 100644 (file)
@@ -33,7 +33,10 @@ static const Modifier Modifiers[] = {
 };\r
 static const int MAX_MODIFIER = _countof(Modifiers);\r
 \r
-static const KeyName KeyNames[] = {\r
+static const struct {\r
+       BYTE bVk;\r
+       LPCTSTR name;\r
+} KeyNames[] = {\r
 //     { VK_LBUTTON,           _T("mouse-1") },                                // does not work well\r
 //     { VK_RBUTTON,           _T("mouse-3") },                                // does not work well\r
        { VK_CANCEL,            _T("break") },\r