From: Robert Roebling Date: Sat, 21 May 2005 16:05:29 +0000 (+0000) Subject: Add conversion to and from menu hotkeys and X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/bbcd40851cc443fd61194184df381622de8fca50?ds=inline Add conversion to and from menu hotkeys and their GTK pendants. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@34220 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/common/menucmn.cpp b/src/common/menucmn.cpp index a9d30e2bef..a423b41f9b 100644 --- a/src/common/menucmn.cpp +++ b/src/common/menucmn.cpp @@ -199,6 +199,104 @@ wxAcceleratorEntry *wxGetAccelFromString(const wxString& label) keyCode = WXK_TAB; else if ( current == wxT("ESC") || current == wxT("ESCAPE") ) keyCode = WXK_ESCAPE; + else if ( current == wxT("CANCEL") ) + keyCode = WXK_CANCEL; + else if ( current == wxT("CLEAR") ) + keyCode = WXK_CLEAR; + else if ( current == wxT("MENU") ) + keyCode = WXK_MENU; + else if ( current == wxT("PAUSE") ) + keyCode = WXK_PAUSE; + else if ( current == wxT("CAPITAL") ) + keyCode = WXK_CAPITAL; + else if ( current == wxT("SELECT") ) + keyCode = WXK_SELECT; + else if ( current == wxT("PRINT") ) + keyCode = WXK_PRINT; + else if ( current == wxT("EXECUTE") ) + keyCode = WXK_EXECUTE; + else if ( current == wxT("SNAPSHOT") ) + keyCode = WXK_SNAPSHOT; + else if ( current == wxT("HELP") ) + keyCode = WXK_HELP; + else if ( current == wxT("HELP") ) + keyCode = WXK_HELP; + else if ( current == wxT("ADD") ) + keyCode = WXK_ADD; + else if ( current == wxT("SEPARATOR") ) + keyCode = WXK_SEPARATOR; + else if ( current == wxT("SUBTRACT") ) + keyCode = WXK_SUBTRACT; + else if ( current == wxT("DECIMAL") ) + keyCode = WXK_DECIMAL; + else if ( current == wxT("DIVIDE") ) + keyCode = WXK_DIVIDE; + else if ( current == wxT("NUM_LOCK") ) + keyCode = WXK_NUMLOCK; + else if ( current == wxT("SCROLL_LOCK") ) + keyCode = WXK_SCROLL; + else if ( current == wxT("PAGEUP") ) + keyCode = WXK_PAGEUP; + else if ( current == wxT("PAGEDOWN") ) + keyCode = WXK_PAGEDOWN; + else if ( current == wxT("KP_SPACE") ) + keyCode = WXK_NUMPAD_SPACE; + else if ( current == wxT("KP_TAB") ) + keyCode = WXK_NUMPAD_TAB; + else if ( current == wxT("KP_ENTER") ) + keyCode = WXK_NUMPAD_ENTER; + else if ( current == wxT("KP_HOME") ) + keyCode = WXK_NUMPAD_HOME; + else if ( current == wxT("KP_LEFT") ) + keyCode = WXK_NUMPAD_LEFT; + else if ( current == wxT("KP_UP") ) + keyCode = WXK_NUMPAD_UP; + else if ( current == wxT("KP_RIGHT") ) + keyCode = WXK_NUMPAD_RIGHT; + else if ( current == wxT("KP_DOWN") ) + keyCode = WXK_NUMPAD_DOWN; + else if ( current == wxT("KP_PRIOR") ) + keyCode = WXK_NUMPAD_PRIOR; + else if ( current == wxT("KP_PAGEUP") ) + keyCode = WXK_NUMPAD_PAGEUP; + else if ( current == wxT("KP_NEXT;") ) + keyCode = WXK_NUMPAD_NEXT; + else if ( current == wxT("KP_PAGEDOWN") ) + keyCode = WXK_NUMPAD_PAGEDOWN; + else if ( current == wxT("KP_END") ) + keyCode = WXK_NUMPAD_END; + else if ( current == wxT("KP_BEGIN") ) + keyCode = WXK_NUMPAD_BEGIN; + else if ( current == wxT("KP_INSERT") ) + keyCode = WXK_NUMPAD_INSERT; + else if ( current == wxT("KP_DELETE") ) + keyCode = WXK_NUMPAD_DELETE; + else if ( current == wxT("KP_EQUAL") ) + keyCode = WXK_NUMPAD_EQUAL; + else if ( current == wxT("KP_MULTIPLY") ) + keyCode = WXK_NUMPAD_MULTIPLY; + else if ( current == wxT("KP_ADD") ) + keyCode = WXK_NUMPAD_ADD; + else if ( current == wxT("KP_SEPARATOR") ) + keyCode = WXK_NUMPAD_SEPARATOR; + else if ( current == wxT("KP_SUBTRACT") ) + keyCode = WXK_NUMPAD_SUBTRACT; + else if ( current == wxT("KP_DECIMAL") ) + keyCode = WXK_NUMPAD_DECIMAL; + else if ( current == wxT("KP_DIVIDE") ) + keyCode = WXK_NUMPAD_DIVIDE; + else if ( current == wxT("WINDOWS_LEFT") ) + keyCode = WXK_WINDOWS_LEFT; + else if ( current == wxT("WINDOWS_RIGHT") ) + keyCode = WXK_WINDOWS_RIGHT; + else if ( current == wxT("WINDOWS_MENU") ) + keyCode = WXK_WINDOWS_MENU; + else if ( current == wxT("COMMAND") ) + keyCode = WXK_COMMAND; + else if ( current.Left(3) == wxT("KP_") && wxIsdigit(current[3U]) ) { + keyCode = WXK_NUMPAD0 + wxAtoi(current.c_str() + 3); } + else if ( current.Left(7) == wxT("SPECIAL") && wxIsdigit(current[7U]) ) { + keyCode = WXK_SPECIAL1 + wxAtoi(current.c_str() + 7) - 1; } else { wxLogDebug(wxT("Unrecognized accel key '%s', accel string ignored."), diff --git a/src/gtk/menu.cpp b/src/gtk/menu.cpp index af79ceffec..7fd48a50d4 100644 --- a/src/gtk/menu.cpp +++ b/src/gtk/menu.cpp @@ -1316,19 +1316,25 @@ static wxString GetGtkHotKey( const wxMenuItem& item ) case WXK_F10: case WXK_F11: case WXK_F12: + case WXK_F13: + case WXK_F14: + case WXK_F15: + case WXK_F16: + case WXK_F17: + case WXK_F18: + case WXK_F19: + case WXK_F20: + case WXK_F21: + case WXK_F22: + case WXK_F23: + case WXK_F24: hotkey += wxString::Format(wxT("F%d"), code - WXK_F1 + 1); break; // TODO: we should use gdk_keyval_name() (a.k.a. // XKeysymToString) here as well as hardcoding the keysym // names this might be not portable - case WXK_NUMPAD_INSERT: - hotkey << wxT("KP_Insert" ); - break; - case WXK_NUMPAD_DELETE: - hotkey << wxT("KP_Delete" ); - break; - case WXK_INSERT: + case WXK_INSERT: hotkey << wxT("Insert" ); break; case WXK_DELETE: @@ -1363,7 +1369,165 @@ static wxString GetGtkHotKey( const wxMenuItem& item ) case WXK_RETURN: hotkey << wxT("Return" ); break; - + case WXK_BACK: + hotkey << wxT("BackSpace" ); + break; + case WXK_TAB: + hotkey << wxT("Tab" ); + break; + case WXK_ESCAPE: + hotkey << wxT("Esc" ); + break; + case WXK_SPACE: + hotkey << wxT("space" ); + break; + case WXK_MULTIPLY: + hotkey << wxT("Multiply" ); + break; + case WXK_ADD: + hotkey << wxT("Add" ); + break; + case WXK_SEPARATOR: + hotkey << wxT("Separator" ); + break; + case WXK_SUBTRACT: + hotkey << wxT("Subtract" ); + break; + case WXK_DECIMAL: + hotkey << wxT("Decimal" ); + break; + case WXK_DIVIDE: + hotkey << wxT("Divide" ); + break; + case WXK_CANCEL: + hotkey << wxT("Cancel" ); + break; + case WXK_CLEAR: + hotkey << wxT("Clear" ); + break; + case WXK_MENU: + hotkey << wxT("Menu" ); + break; + case WXK_PAUSE: + hotkey << wxT("Pause" ); + break; + case WXK_CAPITAL: + hotkey << wxT("Capital" ); + break; + case WXK_SELECT: + hotkey << wxT("Select" ); + break; + case WXK_PRINT: + hotkey << wxT("Print" ); + break; + case WXK_EXECUTE: + hotkey << wxT("Execute" ); + break; + case WXK_SNAPSHOT: + hotkey << wxT("Snapshot" ); + break; + case WXK_HELP: + hotkey << wxT("Help" ); + break; + case WXK_NUMLOCK: + hotkey << wxT("Num_Lock" ); + break; + case WXK_SCROLL: + hotkey << wxT("Scroll_Lock" ); + break; + case WXK_NUMPAD_INSERT: + hotkey << wxT("KP_Insert" ); + break; + case WXK_NUMPAD_DELETE: + hotkey << wxT("KP_Delete" ); + break; + case WXK_NUMPAD_SPACE: + hotkey << wxT("KP_Space" ); + break; + case WXK_NUMPAD_TAB: + hotkey << wxT("KP_Tab" ); + break; + case WXK_NUMPAD_ENTER: + hotkey << wxT("KP_Enter" ); + break; + case WXK_NUMPAD_F1: case WXK_NUMPAD_F2: case WXK_NUMPAD_F3: + case WXK_NUMPAD_F4: + hotkey += wxString::Format(wxT("KP_F%d"), code - WXK_NUMPAD_F1 + 1); + break; + case WXK_NUMPAD_HOME: + hotkey << wxT("KP_Home" ); + break; + case WXK_NUMPAD_LEFT: + hotkey << wxT("KP_Left" ); + break; + case WXK_NUMPAD_UP: + hotkey << wxT("KP_Up" ); + break; + case WXK_NUMPAD_RIGHT: + hotkey << wxT("KP_Right" ); + break; + case WXK_NUMPAD_DOWN: + hotkey << wxT("KP_Down" ); + break; + case WXK_NUMPAD_PRIOR: case WXK_NUMPAD_PAGEUP: + hotkey << wxT("KP_Prior" ); + break; + case WXK_NUMPAD_NEXT: case WXK_NUMPAD_PAGEDOWN: + hotkey << wxT("KP_Next" ); + break; + case WXK_NUMPAD_END: + hotkey << wxT("KP_End" ); + break; + case WXK_NUMPAD_BEGIN: + hotkey << wxT("KP_Begin" ); + break; + case WXK_NUMPAD_EQUAL: + hotkey << wxT("KP_Equal" ); + break; + case WXK_NUMPAD_MULTIPLY: + hotkey << wxT("KP_Multiply" ); + break; + case WXK_NUMPAD_ADD: + hotkey << wxT("KP_Add" ); + break; + case WXK_NUMPAD_SEPARATOR: + hotkey << wxT("KP_Separator" ); + break; + case WXK_NUMPAD_SUBTRACT: + hotkey << wxT("KP_Subtract" ); + break; + case WXK_NUMPAD_DECIMAL: + hotkey << wxT("KP_Decimal" ); + break; + case WXK_NUMPAD_DIVIDE: + hotkey << wxT("KP_Divide" ); + break; + case WXK_NUMPAD0: case WXK_NUMPAD1: case WXK_NUMPAD2: + case WXK_NUMPAD3: case WXK_NUMPAD4: case WXK_NUMPAD5: + case WXK_NUMPAD6: case WXK_NUMPAD7: case WXK_NUMPAD8: case WXK_NUMPAD9: + hotkey += wxString::Format(wxT("KP_%d"), code - WXK_NUMPAD0); + break; + case WXK_WINDOWS_LEFT: + hotkey << wxT("Super_L" ); + break; + case WXK_WINDOWS_RIGHT: + hotkey << wxT("Super_R" ); + break; + case WXK_WINDOWS_MENU: + hotkey << wxT("Menu" ); + break; + case WXK_COMMAND: + hotkey << wxT("Command" ); + break; + /* These probably wouldn't work as there is no SpecialX in gdk/keynames.txt + case WXK_SPECIAL1: case WXK_SPECIAL2: case WXK_SPECIAL3: case WXK_SPECIAL4: + case WXK_SPECIAL5: case WXK_SPECIAL6: case WXK_SPECIAL7: case WXK_SPECIAL8: + case WXK_SPECIAL9: case WXK_SPECIAL10: case WXK_SPECIAL11: case WXK_SPECIAL12: + case WXK_SPECIAL13: case WXK_SPECIAL14: case WXK_SPECIAL15: case WXK_SPECIAL16: + case WXK_SPECIAL17: case WXK_SPECIAL18: case WXK_SPECIAL19: case WXK_SPECIAL20: + hotkey += wxString::Format(wxT("Special%d"), code - WXK_SPECIAL1 + 1); + break; + */ // if there are any other keys wxGetAccelFromString() may // return, we should process them here diff --git a/src/gtk1/menu.cpp b/src/gtk1/menu.cpp index af79ceffec..7fd48a50d4 100644 --- a/src/gtk1/menu.cpp +++ b/src/gtk1/menu.cpp @@ -1316,19 +1316,25 @@ static wxString GetGtkHotKey( const wxMenuItem& item ) case WXK_F10: case WXK_F11: case WXK_F12: + case WXK_F13: + case WXK_F14: + case WXK_F15: + case WXK_F16: + case WXK_F17: + case WXK_F18: + case WXK_F19: + case WXK_F20: + case WXK_F21: + case WXK_F22: + case WXK_F23: + case WXK_F24: hotkey += wxString::Format(wxT("F%d"), code - WXK_F1 + 1); break; // TODO: we should use gdk_keyval_name() (a.k.a. // XKeysymToString) here as well as hardcoding the keysym // names this might be not portable - case WXK_NUMPAD_INSERT: - hotkey << wxT("KP_Insert" ); - break; - case WXK_NUMPAD_DELETE: - hotkey << wxT("KP_Delete" ); - break; - case WXK_INSERT: + case WXK_INSERT: hotkey << wxT("Insert" ); break; case WXK_DELETE: @@ -1363,7 +1369,165 @@ static wxString GetGtkHotKey( const wxMenuItem& item ) case WXK_RETURN: hotkey << wxT("Return" ); break; - + case WXK_BACK: + hotkey << wxT("BackSpace" ); + break; + case WXK_TAB: + hotkey << wxT("Tab" ); + break; + case WXK_ESCAPE: + hotkey << wxT("Esc" ); + break; + case WXK_SPACE: + hotkey << wxT("space" ); + break; + case WXK_MULTIPLY: + hotkey << wxT("Multiply" ); + break; + case WXK_ADD: + hotkey << wxT("Add" ); + break; + case WXK_SEPARATOR: + hotkey << wxT("Separator" ); + break; + case WXK_SUBTRACT: + hotkey << wxT("Subtract" ); + break; + case WXK_DECIMAL: + hotkey << wxT("Decimal" ); + break; + case WXK_DIVIDE: + hotkey << wxT("Divide" ); + break; + case WXK_CANCEL: + hotkey << wxT("Cancel" ); + break; + case WXK_CLEAR: + hotkey << wxT("Clear" ); + break; + case WXK_MENU: + hotkey << wxT("Menu" ); + break; + case WXK_PAUSE: + hotkey << wxT("Pause" ); + break; + case WXK_CAPITAL: + hotkey << wxT("Capital" ); + break; + case WXK_SELECT: + hotkey << wxT("Select" ); + break; + case WXK_PRINT: + hotkey << wxT("Print" ); + break; + case WXK_EXECUTE: + hotkey << wxT("Execute" ); + break; + case WXK_SNAPSHOT: + hotkey << wxT("Snapshot" ); + break; + case WXK_HELP: + hotkey << wxT("Help" ); + break; + case WXK_NUMLOCK: + hotkey << wxT("Num_Lock" ); + break; + case WXK_SCROLL: + hotkey << wxT("Scroll_Lock" ); + break; + case WXK_NUMPAD_INSERT: + hotkey << wxT("KP_Insert" ); + break; + case WXK_NUMPAD_DELETE: + hotkey << wxT("KP_Delete" ); + break; + case WXK_NUMPAD_SPACE: + hotkey << wxT("KP_Space" ); + break; + case WXK_NUMPAD_TAB: + hotkey << wxT("KP_Tab" ); + break; + case WXK_NUMPAD_ENTER: + hotkey << wxT("KP_Enter" ); + break; + case WXK_NUMPAD_F1: case WXK_NUMPAD_F2: case WXK_NUMPAD_F3: + case WXK_NUMPAD_F4: + hotkey += wxString::Format(wxT("KP_F%d"), code - WXK_NUMPAD_F1 + 1); + break; + case WXK_NUMPAD_HOME: + hotkey << wxT("KP_Home" ); + break; + case WXK_NUMPAD_LEFT: + hotkey << wxT("KP_Left" ); + break; + case WXK_NUMPAD_UP: + hotkey << wxT("KP_Up" ); + break; + case WXK_NUMPAD_RIGHT: + hotkey << wxT("KP_Right" ); + break; + case WXK_NUMPAD_DOWN: + hotkey << wxT("KP_Down" ); + break; + case WXK_NUMPAD_PRIOR: case WXK_NUMPAD_PAGEUP: + hotkey << wxT("KP_Prior" ); + break; + case WXK_NUMPAD_NEXT: case WXK_NUMPAD_PAGEDOWN: + hotkey << wxT("KP_Next" ); + break; + case WXK_NUMPAD_END: + hotkey << wxT("KP_End" ); + break; + case WXK_NUMPAD_BEGIN: + hotkey << wxT("KP_Begin" ); + break; + case WXK_NUMPAD_EQUAL: + hotkey << wxT("KP_Equal" ); + break; + case WXK_NUMPAD_MULTIPLY: + hotkey << wxT("KP_Multiply" ); + break; + case WXK_NUMPAD_ADD: + hotkey << wxT("KP_Add" ); + break; + case WXK_NUMPAD_SEPARATOR: + hotkey << wxT("KP_Separator" ); + break; + case WXK_NUMPAD_SUBTRACT: + hotkey << wxT("KP_Subtract" ); + break; + case WXK_NUMPAD_DECIMAL: + hotkey << wxT("KP_Decimal" ); + break; + case WXK_NUMPAD_DIVIDE: + hotkey << wxT("KP_Divide" ); + break; + case WXK_NUMPAD0: case WXK_NUMPAD1: case WXK_NUMPAD2: + case WXK_NUMPAD3: case WXK_NUMPAD4: case WXK_NUMPAD5: + case WXK_NUMPAD6: case WXK_NUMPAD7: case WXK_NUMPAD8: case WXK_NUMPAD9: + hotkey += wxString::Format(wxT("KP_%d"), code - WXK_NUMPAD0); + break; + case WXK_WINDOWS_LEFT: + hotkey << wxT("Super_L" ); + break; + case WXK_WINDOWS_RIGHT: + hotkey << wxT("Super_R" ); + break; + case WXK_WINDOWS_MENU: + hotkey << wxT("Menu" ); + break; + case WXK_COMMAND: + hotkey << wxT("Command" ); + break; + /* These probably wouldn't work as there is no SpecialX in gdk/keynames.txt + case WXK_SPECIAL1: case WXK_SPECIAL2: case WXK_SPECIAL3: case WXK_SPECIAL4: + case WXK_SPECIAL5: case WXK_SPECIAL6: case WXK_SPECIAL7: case WXK_SPECIAL8: + case WXK_SPECIAL9: case WXK_SPECIAL10: case WXK_SPECIAL11: case WXK_SPECIAL12: + case WXK_SPECIAL13: case WXK_SPECIAL14: case WXK_SPECIAL15: case WXK_SPECIAL16: + case WXK_SPECIAL17: case WXK_SPECIAL18: case WXK_SPECIAL19: case WXK_SPECIAL20: + hotkey += wxString::Format(wxT("Special%d"), code - WXK_SPECIAL1 + 1); + break; + */ // if there are any other keys wxGetAccelFromString() may // return, we should process them here