Fixed WXKeyToString which had several problems, mostly just to get

hotkey configuration working with wx 2.9, but it turned out to be
too tempting to use it to hack up OS X keyboard support using wx
key events in the "old" input plugins.

It was with some reluctance that I used PAD_Input (and copied it
for Wiimote as well) as that is clearly a deprecated interface,
but this way the hack is contained within the old plugins for when
the switchover to ControllerInterface happens.

The idea is to provide stable keyboard support on OS X for both
GCPad and Wiimote while we debug HID keyboard and real 'mote code.

It works pretty well, although the wx approach does impose a few
limitations like no arrow keys and left/right side modifier keys
are considered equivalent.


git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5622 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
Soren Jorvang
2010-06-05 19:03:37 +00:00
parent 7d0f03cb61
commit 5c335a8c85
23 changed files with 364 additions and 156 deletions

View File

@ -15,112 +15,137 @@
// Official SVN repository and contact information can be found at
// http://code.google.com/p/dolphin-emu/
#include <wx/stattext.h>
#include "WXInputBase.h"
//#include <string.h>
//#include <stdio.h>
//#include <ctype.h>
namespace InputCommon
{
const wxChar *WXKeyToString(int keycode)
const wxString WXKeyToString(int keycode)
{
switch (keycode)
{
case WXK_CANCEL: return wxT("Cancel"); break;
case WXK_BACK: return wxT("Back"); break;
case WXK_TAB: return wxT("Tab"); break;
case WXK_CLEAR: return wxT("Clear"); break;
case WXK_RETURN: return wxT("Return"); break;
case WXK_SHIFT: return wxT("Shift"); break;
case WXK_CONTROL: return wxT("Control"); break;
case WXK_ALT: return wxT("Alt"); break;
case WXK_CAPITAL: return wxT("CapsLock"); break;
case WXK_MENU : return wxT("Menu"); break;
case WXK_PAUSE: return wxT("Pause"); break;
case WXK_ESCAPE: return wxT("Escape"); break;
case WXK_SPACE: return wxT("Space"); break;
case WXK_PAGEUP: return wxT("PgUp"); break;
case WXK_PAGEDOWN: return wxT("PgDn"); break;
case WXK_END: return wxT("End"); break;
case WXK_HOME : return wxT("Home"); break;
case WXK_LEFT : return wxT("Left"); break;
case WXK_UP: return wxT("Up"); break;
case WXK_RIGHT: return wxT("Right"); break;
case WXK_DOWN : return wxT("Down"); break;
case WXK_SELECT: return wxT("Select"); break;
case WXK_PRINT: return wxT("Print"); break;
case WXK_EXECUTE: return wxT("Execute"); break;
case WXK_INSERT: return wxT("Insert"); break;
case WXK_DELETE: return wxT("Delete"); break;
case WXK_HELP : return wxT("Help"); break;
case WXK_NUMPAD0: return wxT("NP 0"); break;
case WXK_NUMPAD1: return wxT("NP 1"); break;
case WXK_NUMPAD2: return wxT("NP 2"); break;
case WXK_NUMPAD3: return wxT("NP 3"); break;
case WXK_NUMPAD4: return wxT("NP 4"); break;
case WXK_NUMPAD5: return wxT("NP 5"); break;
case WXK_NUMPAD6: return wxT("NP 6"); break;
case WXK_NUMPAD7: return wxT("NP 7"); break;
case WXK_NUMPAD8: return wxT("NP 8"); break;
case WXK_NUMPAD9: return wxT("NP 9"); break;
case WXK_NUMPAD_DECIMAL: return wxT("NP ."); break;
case WXK_NUMPAD_DELETE: return wxT("NP Delete"); break;
case WXK_NUMPAD_INSERT: return wxT("NP Insert"); break;
case WXK_NUMPAD_END: return wxT("NP End"); break;
case WXK_NUMPAD_DOWN: return wxT("NP Down"); break;
case WXK_NUMPAD_PAGEDOWN: return wxT("NP Pagedown"); break;
case WXK_NUMPAD_LEFT: return wxT("NP Left"); break;
case WXK_NUMPAD_RIGHT: return wxT("NP Right"); break;
case WXK_NUMPAD_HOME: return wxT("NP Home"); break;
case WXK_NUMPAD_UP: return wxT("NP Up"); break;
case WXK_NUMPAD_PAGEUP: return wxT("NP Pageup"); break;
case WXK_NUMPAD_MULTIPLY: return wxT("NP *"); break;
case WXK_NUMPAD_ADD: return wxT("NP +"); break;
case WXK_NUMPAD_SUBTRACT: return wxT("NP -"); break;
case WXK_NUMPAD_DIVIDE: return wxT("NP /"); break;
case WXK_NUMPAD_ENTER: return wxT("NP Enter"); break;
case WXK_NUMPAD_SEPARATOR: return wxT("NP Separator"); break;
case WXK_F1: return wxT("F1"); break;
case WXK_F2: return wxT("F2"); break;
case WXK_F3: return wxT("F3"); break;
case WXK_F4: return wxT("F4"); break;
case WXK_F5: return wxT("F5"); break;
case WXK_F6: return wxT("F6"); break;
case WXK_F7: return wxT("F7"); break;
case WXK_F8: return wxT("F8"); break;
case WXK_F9: return wxT("F9"); break;
case WXK_F10: return wxT("F10"); break;
case WXK_F11: return wxT("F11"); break;
case WXK_F12: return wxT("F12"); break;
case WXK_F13: return wxT("F13"); break;
case WXK_F14: return wxT("F14"); break;
case WXK_F15: return wxT("F15"); break;
case WXK_F16: return wxT("F16"); break;
case WXK_F17: return wxT("F17"); break;
case WXK_F18: return wxT("F19"); break;
case WXK_F19: return wxT("F20"); break;
case WXK_F20: return wxT("F21"); break;
case WXK_F21: return wxT("F22"); break;
case WXK_F22: return wxT("F23"); break;
case WXK_F23: return wxT("F24"); break;
case WXK_F24: return wxT("F25"); break;
case WXK_NUMLOCK: return wxT("Numlock"); break;
case WXK_SCROLL: return wxT("Scrolllock"); break;
default: return wxString::FromAscii(keycode);
case WXK_BACK: return wxT("Back");
case WXK_TAB: return wxT("Tab");
case WXK_RETURN: return wxT("Return");
case WXK_ESCAPE: return wxT("Escape");
case WXK_SPACE: return wxT("Space");
case WXK_DELETE: return wxT("Delete");
case WXK_START: return wxT("Start");
case WXK_LBUTTON: return wxT("L Button");
case WXK_RBUTTON: return wxT("R Button");
case WXK_CANCEL: return wxT("Cancel");
case WXK_MBUTTON: return wxT("M Button");
case WXK_CLEAR: return wxT("Clear");
case WXK_SHIFT: return wxT("Shift");
case WXK_ALT: return wxT("Alt");
case WXK_CONTROL: return wxT("Control");
case WXK_MENU: return wxT("Menu");
case WXK_PAUSE: return wxT("Pause");
case WXK_CAPITAL: return wxT("Caps Lock");
case WXK_END: return wxT("End");
case WXK_HOME: return wxT("Home");
case WXK_LEFT: return wxT("Left");
case WXK_UP: return wxT("Up");
case WXK_RIGHT: return wxT("Right");
case WXK_DOWN: return wxT("Down");
case WXK_SELECT: return wxT("Select");
case WXK_PRINT: return wxT("Print");
case WXK_EXECUTE: return wxT("Execute");
case WXK_SNAPSHOT: return wxT("Snapshot");
case WXK_INSERT: return wxT("Insert");
case WXK_HELP: return wxT("Help");
case WXK_NUMPAD0: return wxT("NP 0");
case WXK_NUMPAD1: return wxT("NP 1");
case WXK_NUMPAD2: return wxT("NP 2");
case WXK_NUMPAD3: return wxT("NP 3");
case WXK_NUMPAD4: return wxT("NP 4");
case WXK_NUMPAD5: return wxT("NP 5");
case WXK_NUMPAD6: return wxT("NP 6");
case WXK_NUMPAD7: return wxT("NP 7");
case WXK_NUMPAD8: return wxT("NP 8");
case WXK_NUMPAD9: return wxT("NP 9");
case WXK_MULTIPLY: return wxT("Multiply");
case WXK_ADD: return wxT("Add");
case WXK_SEPARATOR: return wxT("Separator");
case WXK_SUBTRACT: return wxT("Subtract");
case WXK_DECIMAL: return wxT("Decimal");
case WXK_DIVIDE: return wxT("Divide");
case WXK_F1: return wxT("F1");
case WXK_F2: return wxT("F2");
case WXK_F3: return wxT("F3");
case WXK_F4: return wxT("F4");
case WXK_F5: return wxT("F5");
case WXK_F6: return wxT("F6");
case WXK_F7: return wxT("F7");
case WXK_F8: return wxT("F8");
case WXK_F9: return wxT("F9");
case WXK_F10: return wxT("F10");
case WXK_F11: return wxT("F11");
case WXK_F12: return wxT("F12");
case WXK_F13: return wxT("F13");
case WXK_F14: return wxT("F14");
case WXK_F15: return wxT("F15");
case WXK_F16: return wxT("F16");
case WXK_F17: return wxT("F17");
case WXK_F18: return wxT("F19");
case WXK_F19: return wxT("F20");
case WXK_F20: return wxT("F21");
case WXK_F21: return wxT("F22");
case WXK_F22: return wxT("F23");
case WXK_F23: return wxT("F24");
case WXK_F24: return wxT("F25");
case WXK_NUMLOCK: return wxT("Num Lock");
case WXK_SCROLL: return wxT("Scroll Lock");
case WXK_PAGEUP: return wxT("Page Up");
case WXK_PAGEDOWN: return wxT("Page Down");
case WXK_NUMPAD_SPACE: return wxT("NP Space");
case WXK_NUMPAD_TAB: return wxT("NP Tab");
case WXK_NUMPAD_ENTER: return wxT("NP Enter");
case WXK_NUMPAD_F1: return wxT("NP F1");
case WXK_NUMPAD_F2: return wxT("NP F2");
case WXK_NUMPAD_F3: return wxT("NP F3");
case WXK_NUMPAD_F4: return wxT("NP F4");
case WXK_NUMPAD_HOME: return wxT("NP Home");
case WXK_NUMPAD_LEFT: return wxT("NP Left");
case WXK_NUMPAD_UP: return wxT("NP Up");
case WXK_NUMPAD_RIGHT: return wxT("NP Right");
case WXK_NUMPAD_DOWN: return wxT("NP Down");
case WXK_NUMPAD_PAGEUP: return wxT("NP Page Up");
case WXK_NUMPAD_PAGEDOWN: return wxT("NP Page Down");
case WXK_NUMPAD_END: return wxT("NP End");
case WXK_NUMPAD_BEGIN: return wxT("NP Begin");
case WXK_NUMPAD_INSERT: return wxT("NP Insert");
case WXK_NUMPAD_DELETE: return wxT("NP Delete");
case WXK_NUMPAD_EQUAL: return wxT("NP Equal");
case WXK_NUMPAD_MULTIPLY: return wxT("NP Multiply");
case WXK_NUMPAD_ADD: return wxT("NP Add");
case WXK_NUMPAD_SEPARATOR: return wxT("NP Separator");
case WXK_NUMPAD_SUBTRACT: return wxT("NP Subtract");
case WXK_NUMPAD_DECIMAL: return wxT("NP Decimal");
case WXK_NUMPAD_DIVIDE: return wxT("NP Divide");
case WXK_WINDOWS_LEFT: return wxT("Windows Left");
case WXK_WINDOWS_RIGHT: return wxT("Windows Right");
case WXK_WINDOWS_MENU: return wxT("Windows Menu");
case WXK_COMMAND: return wxT("Command");
}
if (keycode > WXK_SPACE && keycode < WXK_DELETE) {
return wxString((wxChar)keycode, 1);
}
return wxT("");
}
const wxChar *WXKeymodToString(int modifier)
const wxString WXKeymodToString(int modifier)
{
switch (modifier)
{
case wxMOD_ALT: return wxT("Alt"); break;
case wxMOD_CMD: return wxT("Ctrl"); break;
case wxMOD_ALTGR: return wxT("Ctrl+Alt"); break;
case wxMOD_SHIFT: return wxT("Shift"); break;
default: return wxT(""); break;
case wxMOD_ALT: return wxT("Alt");
case wxMOD_CMD: return wxT("Ctrl");
case wxMOD_ALTGR: return wxT("Ctrl+Alt");
case wxMOD_SHIFT: return wxT("Shift");
default: return wxT("");
}
}