From bce949f5318afe7645b643274f9d48c5ed8fa1cc Mon Sep 17 00:00:00 2001 From: John Scipione Date: Tue, 8 Nov 2011 06:47:31 +0000 Subject: [PATCH] Implemented the style changes and other improvements suggested by Axel to the Keymap preference app Modifier Keys window. The number of lines of code in the class was significantly reduced by these changes. I also made one small change to change the window title from 'Modifers Keys' to 'Modifier Keys'. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@43221 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/preferences/keymap/KeymapApplication.cpp | 5 +- src/preferences/keymap/KeymapApplication.h | 3 +- src/preferences/keymap/KeymapWindow.cpp | 2 +- src/preferences/keymap/ModifierKeysWindow.cpp | 424 +++++++----------- src/preferences/keymap/ModifierKeysWindow.h | 4 +- 5 files changed, 183 insertions(+), 255 deletions(-) diff --git a/src/preferences/keymap/KeymapApplication.cpp b/src/preferences/keymap/KeymapApplication.cpp index 7d5f1bc33d..e25d428ee4 100644 --- a/src/preferences/keymap/KeymapApplication.cpp +++ b/src/preferences/keymap/KeymapApplication.cpp @@ -12,8 +12,9 @@ KeymapApplication::KeymapApplication() - : BApplication("application/x-vnd.Haiku-Keymap"), - fModifierKeysWindow(NULL) + : + BApplication("application/x-vnd.Haiku-Keymap"), + fModifierKeysWindow(NULL) { // create the window fWindow = new KeymapWindow(); diff --git a/src/preferences/keymap/KeymapApplication.h b/src/preferences/keymap/KeymapApplication.h index 7b00638ff0..217fefa82c 100644 --- a/src/preferences/keymap/KeymapApplication.h +++ b/src/preferences/keymap/KeymapApplication.h @@ -12,13 +12,14 @@ #include "KeymapWindow.h" -#include "ModifierKeysWindow.h" #include #include #include #include +#include "ModifierKeysWindow.h" + static const uint32 kMsgShowModifierKeysWindow = 'smkw'; static const uint32 kMsgCloseModifierKeysWindow = 'hmkw'; diff --git a/src/preferences/keymap/KeymapWindow.cpp b/src/preferences/keymap/KeymapWindow.cpp index fccf5bfc26..ac5acb888a 100644 --- a/src/preferences/keymap/KeymapWindow.cpp +++ b/src/preferences/keymap/KeymapWindow.cpp @@ -418,7 +418,7 @@ KeymapWindow::_CreateMenu() new BMessage(kMsgMenuFileSaveAs))); menu->AddSeparatorItem(); menu->AddItem(new BMenuItem( - B_TRANSLATE("Set Modifiers Keys" B_UTF8_ELLIPSIS), + B_TRANSLATE("Set Modifier Keys" B_UTF8_ELLIPSIS), new BMessage(kMsgShowModifierKeysWindow))); menu->AddSeparatorItem(); menu->AddItem(new BMenuItem(B_TRANSLATE("Quit"), diff --git a/src/preferences/keymap/ModifierKeysWindow.cpp b/src/preferences/keymap/ModifierKeysWindow.cpp index ac0b74242b..72a93205c7 100644 --- a/src/preferences/keymap/ModifierKeysWindow.cpp +++ b/src/preferences/keymap/ModifierKeysWindow.cpp @@ -6,6 +6,7 @@ * John Scipione, jscipione@gmail.com */ + #include "ModifierKeysWindow.h" #include @@ -25,8 +26,9 @@ #include "KeymapApplication.h" + enum { - MENU_ITEM_CAPS_LOCK, + MENU_ITEM_CAPS_LOCK = 0, MENU_ITEM_CONTROL, MENU_ITEM_OPTION, MENU_ITEM_COMMAND, @@ -34,40 +36,20 @@ enum { MENU_ITEM_DISABLED }; -#undef B_TRANSLATE_CONTEXT -#define B_TRANSLATE_CONTEXT "Modifier keys window" - - -static const uint32 kMsgCapsLockCapsLock = 'clcl'; -static const uint32 kMsgCapsLockControl = 'clct'; -static const uint32 kMsgCapsLockOption = 'clop'; -static const uint32 kMsgCapsLockCommand = 'clcm'; -static const uint32 kMsgCapsLockDisabled = 'clds'; - -static const uint32 kMsgControlCapsLock = 'ctcl'; -static const uint32 kMsgControlControl = 'ctct'; -static const uint32 kMsgControlOption = 'ctop'; -static const uint32 kMsgControlCommand = 'ctcm'; - -static const uint32 kMsgOptionCapsLock = 'opcl'; -static const uint32 kMsgOptionControl = 'opct'; -static const uint32 kMsgOptionOption = 'opop'; -static const uint32 kMsgOptionCommand = 'opcm'; - -static const uint32 kMsgCommmandCapsLock = 'cmcl'; -static const uint32 kMsgCommmandControl = 'cmct'; -static const uint32 kMsgCommmandOption = 'cmop'; -static const uint32 kMsgCommmandCommand = 'cmcm'; - +static const uint32 kMsgUpdateModifier = 'upmd'; static const uint32 kMsgApplyModifiers = 'apmd'; static const uint32 kMsgRevertModifiers = 'rvmd'; +#undef B_TRANSLATE_CONTEXT +#define B_TRANSLATE_CONTEXT "Modifier Keys window" + + ModifierKeysWindow::ModifierKeysWindow() : - BWindow(BRect(80, 50, 400, 260), B_TRANSLATE("Modifiers Keys"), + BWindow(BRect(80, 50, 400, 260), B_TRANSLATE("Modifier Keys"), B_TITLED_WINDOW, B_NOT_RESIZABLE | B_NOT_ZOOMABLE - | B_AUTO_UPDATE_SIZE_LIMITS) + | B_AUTO_UPDATE_SIZE_LIMITS) { get_key_map(&fCurrentMap, &fCurrentBuffer); get_key_map(&fSavedMap, &fSavedBuffer); @@ -130,8 +112,6 @@ ModifierKeysWindow::ModifierKeysWindow() .SetInsets(10, 10, 10, 10) ); - _MarkMenuItems(); - CenterOnScreen(); } @@ -146,120 +126,68 @@ void ModifierKeysWindow::MessageReceived(BMessage* message) { switch (message->what) { - // Caps Lock - case kMsgCapsLockCapsLock: - fCurrentMap->caps_key = 0x3b; - fCapsLockMenu->ItemAt(MENU_ITEM_CAPS_LOCK)->SetMarked(true); - _EnableRevertButton(); - break; + case kMsgUpdateModifier: + { + int32 menu = MENU_ITEM_CAPS_LOCK; + int32 key = -1; - case kMsgCapsLockControl: - fCurrentMap->caps_key = 0x5c; - fCapsLockMenu->ItemAt(MENU_ITEM_CONTROL)->SetMarked(true); - _EnableRevertButton(); - break; + for (; menu <= MENU_ITEM_COMMAND; menu++) { + if (message->FindInt32(_KeyToString(menu), &key) == B_OK) + break; + } - case kMsgCapsLockOption: - fCurrentMap->caps_key = 0x66; - fCapsLockMenu->ItemAt(MENU_ITEM_OPTION)->SetMarked(true); - _EnableRevertButton(); - break; + if (key == -1) { + // No option was found, don't update + return; + } - case kMsgCapsLockCommand: - fCurrentMap->caps_key = 0x5d; - fCapsLockMenu->ItemAt(MENU_ITEM_COMMAND)->SetMarked(true); - _EnableRevertButton(); - break; + // Now 'menu' contains the menu we want to set and 'key' contains + // the option we want to set it to. - case kMsgCapsLockDisabled: - fCurrentMap->caps_key = 0; - fCapsLockMenu->ItemAt(MENU_ITEM_DISABLED)->SetMarked(true); - _EnableRevertButton(); - break; + switch (menu) { + case MENU_ITEM_CAPS_LOCK: + fCurrentMap->caps_key = _KeyToKeyCode(key); + fCapsLockMenu->ItemAt(key)->SetMarked(true); + break; - // Control - case kMsgControlCapsLock: - fCurrentMap->left_control_key = 0x3b; - fControlMenu->ItemAt(MENU_ITEM_CAPS_LOCK)->SetMarked(true); - _EnableRevertButton(); - break; + case MENU_ITEM_CONTROL: + fCurrentMap->left_control_key + = _KeyToKeyCode(key); + if (key != MENU_ITEM_CAPS_LOCK) { + fCurrentMap->right_control_key + = _KeyToKeyCode(key, true); + } - case kMsgControlControl: - fCurrentMap->left_control_key = 0x5c; - fCurrentMap->right_control_key = 0x60; - fControlMenu->ItemAt(MENU_ITEM_CONTROL)->SetMarked(true); - _EnableRevertButton(); - break; + fControlMenu->ItemAt(key)->SetMarked(true); + break; - case kMsgControlOption: - fCurrentMap->left_control_key = 0x66; - fCurrentMap->right_control_key = 0x67; - fControlMenu->ItemAt(MENU_ITEM_OPTION)->SetMarked(true); - _EnableRevertButton(); - break; + case MENU_ITEM_OPTION: + fCurrentMap->left_option_key + = _KeyToKeyCode(key); + if (key != MENU_ITEM_CAPS_LOCK) { + fCurrentMap->right_option_key + = _KeyToKeyCode(key, true); + } - case kMsgControlCommand: - fCurrentMap->left_control_key = 0x5d; - fCurrentMap->right_control_key = 0x5f; - fControlMenu->ItemAt(MENU_ITEM_COMMAND)->SetMarked(true); - _EnableRevertButton(); - break; + fOptionMenu->ItemAt(key)->SetMarked(true); + break; - // Option - case kMsgOptionCapsLock: - fCurrentMap->left_option_key = 0x3b; - fOptionMenu->ItemAt(MENU_ITEM_CAPS_LOCK)->SetMarked(true); - _EnableRevertButton(); - break; + case MENU_ITEM_COMMAND: + fCurrentMap->left_command_key + = _KeyToKeyCode(key); + if (key != MENU_ITEM_CAPS_LOCK) { + fCurrentMap->right_command_key + = _KeyToKeyCode(key, true); + } - case kMsgOptionControl: - fCurrentMap->left_option_key = 0x5c; - fCurrentMap->right_option_key = 0x60; - fOptionMenu->ItemAt(MENU_ITEM_CONTROL)->SetMarked(true); - _EnableRevertButton(); - break; + fCommandMenu->ItemAt(key)->SetMarked(true); + break; + } - case kMsgOptionOption: - fCurrentMap->left_option_key = 0x66; - fCurrentMap->right_option_key = 0x67; - fOptionMenu->ItemAt(MENU_ITEM_OPTION)->SetMarked(true); - _EnableRevertButton(); - break; - - case kMsgOptionCommand: - fCurrentMap->left_option_key = 0x5d; - fCurrentMap->right_option_key = 0x5f; - fOptionMenu->ItemAt(MENU_ITEM_COMMAND)->SetMarked(true); - _EnableRevertButton(); - break; - - // Command - case kMsgCommmandCapsLock: - fCurrentMap->left_command_key = 0x3b; - fCommandMenu->ItemAt(MENU_ITEM_CAPS_LOCK)->SetMarked(true); - _EnableRevertButton(); - break; - - case kMsgCommmandControl: - fCurrentMap->left_command_key = 0x5c; - fCurrentMap->right_command_key = 0x60; - fCommandMenu->ItemAt(MENU_ITEM_CONTROL)->SetMarked(true); - _EnableRevertButton(); - break; - - case kMsgCommmandOption: - fCurrentMap->left_command_key = 0x66; - fCurrentMap->right_command_key = 0x67; - fCommandMenu->ItemAt(MENU_ITEM_OPTION)->SetMarked(true); - _EnableRevertButton(); - break; - - case kMsgCommmandCommand: - fCurrentMap->left_command_key = 0x5d; - fCurrentMap->right_command_key = 0x5f; - fCommandMenu->ItemAt(MENU_ITEM_COMMAND)->SetMarked(true); - _EnableRevertButton(); + fRevertButton->SetEnabled(memcmp(fCurrentMap, fSavedMap, + sizeof(key_map))); break; + } // Ok button case kMsgApplyModifiers: @@ -301,20 +229,17 @@ ModifierKeysWindow::MessageReceived(BMessage* message) fCurrentMap->right_command_key); } + // Tell KeymapWindow to update the modifier keys be_app->PostMessage(updateModifiers); + + // We are done here, close the window this->PostMessage(B_QUIT_REQUESTED); break; } // Revert button case kMsgRevertModifiers: - fCurrentMap->caps_key = fSavedMap->caps_key; - fCurrentMap->left_control_key = fSavedMap->left_control_key; - fCurrentMap->right_control_key = fSavedMap->right_control_key; - fCurrentMap->left_option_key = fSavedMap->left_option_key; - fCurrentMap->right_option_key = fSavedMap->right_option_key; - fCurrentMap->left_command_key = fSavedMap->left_command_key; - fCurrentMap->right_command_key = fSavedMap->right_command_key; + memcpy(fCurrentMap, fSavedMap, sizeof(key_map)); _MarkMenuItems(); fRevertButton->SetEnabled(false); @@ -329,30 +254,26 @@ ModifierKeysWindow::MessageReceived(BMessage* message) BMenuField* ModifierKeysWindow::_CreateCapsLockMenuField() { - fCapsLockMenu = new BPopUpMenu(B_TRANSLATE("Caps Lock"), true, true); + fCapsLockMenu = new BPopUpMenu( + B_TRANSLATE(_KeyToString(MENU_ITEM_CAPS_LOCK)), true, true); - BMenuItem* capsLock = new BMenuItem(B_TRANSLATE("Caps Lock"), - new BMessage(kMsgCapsLockCapsLock)); - fCapsLockMenu->AddItem(capsLock, MENU_ITEM_CAPS_LOCK); + for (int32 key = MENU_ITEM_CAPS_LOCK; key <= MENU_ITEM_DISABLED; key++) { + if (key == MENU_ITEM_SEPERATOR) { + BSeparatorItem* separator = new BSeparatorItem; + fCapsLockMenu->AddItem(separator, key); + } else { + BMessage* message = new BMessage(kMsgUpdateModifier); + message->AddInt32(_KeyToString(MENU_ITEM_CAPS_LOCK), key); - BMenuItem* control = new BMenuItem(B_TRANSLATE("Control"), - new BMessage(kMsgCapsLockControl)); - fCapsLockMenu->AddItem(control, MENU_ITEM_CONTROL); + BMenuItem* item = new BMenuItem(B_TRANSLATE(_KeyToString(key)), + message); - BMenuItem* option = new BMenuItem(B_TRANSLATE("Option"), - new BMessage(kMsgCapsLockOption)); - fCapsLockMenu->AddItem(option, MENU_ITEM_OPTION); + if (fCurrentMap->caps_key == _KeyToKeyCode(key)) + item->SetMarked(true); - BMenuItem* command = new BMenuItem(B_TRANSLATE("Command"), - new BMessage(kMsgCapsLockCommand)); - fCapsLockMenu->AddItem(command, MENU_ITEM_COMMAND); - - BSeparatorItem* separator = new BSeparatorItem; - fCapsLockMenu->AddItem(separator, MENU_ITEM_SEPERATOR); - - BMenuItem* disabled = new BMenuItem(B_TRANSLATE("Disabled"), - new BMessage(kMsgCapsLockDisabled)); - fCapsLockMenu->AddItem(disabled, MENU_ITEM_DISABLED); + fCapsLockMenu->AddItem(item, key); + } + } return new BMenuField(NULL, fCapsLockMenu); } @@ -361,23 +282,21 @@ ModifierKeysWindow::_CreateCapsLockMenuField() BMenuField* ModifierKeysWindow::_CreateControlMenuField() { - fControlMenu = new BPopUpMenu(B_TRANSLATE("Control"), true, true); + fControlMenu = new BPopUpMenu( + B_TRANSLATE(_KeyToString(MENU_ITEM_CONTROL)), true, true); - BMenuItem* capsLock = new BMenuItem(B_TRANSLATE("Caps Lock"), - new BMessage(kMsgControlCapsLock)); - fControlMenu->AddItem(capsLock, MENU_ITEM_CAPS_LOCK); + for (int32 key = MENU_ITEM_CAPS_LOCK; key <= MENU_ITEM_COMMAND; key++) { + BMessage* message = new BMessage(kMsgUpdateModifier); + message->AddInt32(_KeyToString(MENU_ITEM_CONTROL), key); - BMenuItem* control = new BMenuItem(B_TRANSLATE("Control"), - new BMessage(kMsgControlControl)); - fControlMenu->AddItem(control, MENU_ITEM_CONTROL); + BMenuItem* item = new BMenuItem(B_TRANSLATE(_KeyToString(key)), + message); - BMenuItem* option = new BMenuItem(B_TRANSLATE("Option"), - new BMessage(kMsgControlOption)); - fControlMenu->AddItem(option, MENU_ITEM_OPTION); + if (fCurrentMap->left_control_key == _KeyToKeyCode(key)) + item->SetMarked(true); - BMenuItem* command = new BMenuItem(B_TRANSLATE("Command"), - new BMessage(kMsgControlCommand)); - fControlMenu->AddItem(command, MENU_ITEM_COMMAND); + fControlMenu->AddItem(item, key); + } return new BMenuField(NULL, fControlMenu); } @@ -386,23 +305,21 @@ ModifierKeysWindow::_CreateControlMenuField() BMenuField* ModifierKeysWindow::_CreateOptionMenuField() { - fOptionMenu = new BPopUpMenu(B_TRANSLATE("Option"), true, true); + fOptionMenu = new BPopUpMenu( + B_TRANSLATE(_KeyToString(MENU_ITEM_OPTION)), true, true); - BMenuItem* capsLock = new BMenuItem(B_TRANSLATE("Caps Lock"), - new BMessage(kMsgOptionCapsLock)); - fOptionMenu->AddItem(capsLock, MENU_ITEM_CAPS_LOCK); + for (int32 key = MENU_ITEM_CAPS_LOCK; key <= MENU_ITEM_COMMAND; key++) { + BMessage* message = new BMessage(kMsgUpdateModifier); + message->AddInt32(_KeyToString(MENU_ITEM_OPTION), key); - BMenuItem* control = new BMenuItem(B_TRANSLATE("Control"), - new BMessage(kMsgOptionControl)); - fOptionMenu->AddItem(control, MENU_ITEM_CONTROL); + BMenuItem* item = new BMenuItem(B_TRANSLATE(_KeyToString(key)), + message); - BMenuItem* option = new BMenuItem(B_TRANSLATE("Option"), - new BMessage(kMsgOptionOption)); - fOptionMenu->AddItem(option, MENU_ITEM_OPTION); + if (fCurrentMap->left_option_key == _KeyToKeyCode(key)) + item->SetMarked(true); - BMenuItem* command = new BMenuItem(B_TRANSLATE("Command"), - new BMessage(kMsgOptionCommand)); - fOptionMenu->AddItem(command, MENU_ITEM_COMMAND); + fOptionMenu->AddItem(item, key); + } return new BMenuField(NULL, fOptionMenu); } @@ -411,23 +328,21 @@ ModifierKeysWindow::_CreateOptionMenuField() BMenuField* ModifierKeysWindow::_CreateCommandMenuField() { - fCommandMenu = new BPopUpMenu(B_TRANSLATE("Command"), true, true); + fCommandMenu = new BPopUpMenu( + B_TRANSLATE(_KeyToString(MENU_ITEM_COMMAND)), true, true); - BMenuItem* capsLock = new BMenuItem(B_TRANSLATE("Caps Lock"), - new BMessage(kMsgCommmandCapsLock)); - fCommandMenu->AddItem(capsLock, MENU_ITEM_CAPS_LOCK); + for (int32 key = MENU_ITEM_CAPS_LOCK; key <= MENU_ITEM_COMMAND; key++) { + BMessage* message = new BMessage(kMsgUpdateModifier); + message->AddInt32(_KeyToString(MENU_ITEM_COMMAND), key); - BMenuItem* control = new BMenuItem(B_TRANSLATE("Control"), - new BMessage(kMsgCommmandControl)); - fCommandMenu->AddItem(control, MENU_ITEM_CONTROL); + BMenuItem* item = new BMenuItem(B_TRANSLATE(_KeyToString(key)), + message); - BMenuItem* option = new BMenuItem(B_TRANSLATE("Option"), - new BMessage(kMsgCommmandOption)); - fCommandMenu->AddItem(option, MENU_ITEM_OPTION); + if (fCurrentMap->left_command_key == _KeyToKeyCode(key)) + item->SetMarked(true); - BMenuItem* command = new BMenuItem(B_TRANSLATE("Command"), - new BMessage(kMsgCommmandCommand)); - fCommandMenu->AddItem(command, MENU_ITEM_COMMAND); + fCommandMenu->AddItem(item, key); + } return new BMenuField(NULL, fCommandMenu); } @@ -436,61 +351,70 @@ ModifierKeysWindow::_CreateCommandMenuField() void ModifierKeysWindow::_MarkMenuItems() { - // Caps Lock Menu - if (fCurrentMap->caps_key == 0x3b) - fCapsLockMenu->ItemAt(MENU_ITEM_CAPS_LOCK)->SetMarked(true); - else if (fCurrentMap->caps_key == 0x5c) - fCapsLockMenu->ItemAt(MENU_ITEM_CONTROL)->SetMarked(true); - else if (fCurrentMap->caps_key == 0x66) - fCapsLockMenu->ItemAt(MENU_ITEM_OPTION)->SetMarked(true); - else if (fCurrentMap->caps_key == 0x5d) - fCapsLockMenu->ItemAt(MENU_ITEM_COMMAND)->SetMarked(true); - else if (fCurrentMap->caps_key == 0) + for (int32 key = MENU_ITEM_CAPS_LOCK; key <= MENU_ITEM_COMMAND; key++) { + if (fCurrentMap->caps_key == _KeyToKeyCode(key)) + fCapsLockMenu->ItemAt(key)->SetMarked(true); + + if (fCurrentMap->left_control_key == _KeyToKeyCode(key) + && fCurrentMap->right_control_key == _KeyToKeyCode(key, true)) + fControlMenu->ItemAt(key)->SetMarked(true); + + if (fCurrentMap->left_option_key == _KeyToKeyCode(key) + && fCurrentMap->right_option_key == _KeyToKeyCode(key, true)) + fOptionMenu->ItemAt(key)->SetMarked(true); + + if (fCurrentMap->left_command_key == _KeyToKeyCode(key) + && fCurrentMap->right_command_key == _KeyToKeyCode(key, true)) + fCommandMenu->ItemAt(key)->SetMarked(true); + } + + // Check if caps lock is disabled + if (fCurrentMap->caps_key == _KeyToKeyCode(MENU_ITEM_DISABLED)) fCapsLockMenu->ItemAt(MENU_ITEM_DISABLED)->SetMarked(true); - - // Control Menu - if (fCurrentMap->left_control_key == 0x3b) - fControlMenu->ItemAt(MENU_ITEM_CAPS_LOCK)->SetMarked(true); - else if (fCurrentMap->left_control_key == 0x5c) - fControlMenu->ItemAt(MENU_ITEM_CONTROL)->SetMarked(true); - else if (fCurrentMap->left_control_key == 0x66) - fControlMenu->ItemAt(MENU_ITEM_OPTION)->SetMarked(true); - else if (fCurrentMap->left_control_key == 0x5d) - fControlMenu->ItemAt(MENU_ITEM_COMMAND)->SetMarked(true); - - // Option Menu - if (fCurrentMap->left_option_key == 0x3b) - fOptionMenu->ItemAt(MENU_ITEM_CAPS_LOCK)->SetMarked(true); - else if (fCurrentMap->left_option_key == 0x5c) - fOptionMenu->ItemAt(MENU_ITEM_CONTROL)->SetMarked(true); - else if (fCurrentMap->left_option_key == 0x66) - fOptionMenu->ItemAt(MENU_ITEM_OPTION)->SetMarked(true); - else if (fCurrentMap->left_option_key == 0x5d) - fOptionMenu->ItemAt(MENU_ITEM_COMMAND)->SetMarked(true); - - // Command menu - if (fCurrentMap->left_command_key == 0x3b) - fCommandMenu->ItemAt(MENU_ITEM_CAPS_LOCK)->SetMarked(true); - else if (fCurrentMap->left_command_key == 0x5c) - fCommandMenu->ItemAt(MENU_ITEM_CONTROL)->SetMarked(true); - else if (fCurrentMap->left_command_key == 0x66) - fCommandMenu->ItemAt(MENU_ITEM_OPTION)->SetMarked(true); - else if (fCurrentMap->left_command_key == 0x5d) - fCommandMenu->ItemAt(MENU_ITEM_COMMAND)->SetMarked(true); } -void -ModifierKeysWindow::_EnableRevertButton() +const char* +ModifierKeysWindow::_KeyToString(int32 key) { - if (fCurrentMap->caps_key != fSavedMap->caps_key - || fCurrentMap->left_control_key != fSavedMap->left_control_key - || fCurrentMap->right_control_key != fSavedMap->right_control_key - || fCurrentMap->left_option_key != fSavedMap->left_option_key - || fCurrentMap->right_option_key != fSavedMap->right_option_key - || fCurrentMap->left_command_key != fSavedMap->left_command_key - || fCurrentMap->right_command_key != fSavedMap->right_command_key) - fRevertButton->SetEnabled(true); - else - fRevertButton->SetEnabled(false); + switch (key) { + case MENU_ITEM_CAPS_LOCK: + return "Caps Lock"; + case MENU_ITEM_CONTROL: + return "Control"; + case MENU_ITEM_OPTION: + return "Option"; + case MENU_ITEM_COMMAND: + return "Command"; + case MENU_ITEM_DISABLED: + return "Disabled"; + } + + return ""; +} + + +uint32 +ModifierKeysWindow::_KeyToKeyCode(int32 key, bool right = false) +{ + switch (key) { + case MENU_ITEM_CAPS_LOCK: + return 0x3b; + case MENU_ITEM_CONTROL: + if (right) + return 0x60; + return 0x5c; + case MENU_ITEM_OPTION: + if (right) + return 0x67; + return 0x66; + case MENU_ITEM_COMMAND: + if (right) + return 0x5f; + return 0x5d; + case MENU_ITEM_DISABLED: + return 0; + } + + return 0; } diff --git a/src/preferences/keymap/ModifierKeysWindow.h b/src/preferences/keymap/ModifierKeysWindow.h index 8326deebce..808e1a1f60 100644 --- a/src/preferences/keymap/ModifierKeysWindow.h +++ b/src/preferences/keymap/ModifierKeysWindow.h @@ -30,7 +30,8 @@ protected: BMenuField* _CreateCommandMenuField(); void _MarkMenuItems(); - void _EnableRevertButton(); + const char* _KeyToString(int32 key); + uint32 _KeyToKeyCode(int32 key, bool right = false); private: BPopUpMenu* fCapsLockMenu; @@ -49,4 +50,5 @@ private: char* fSavedBuffer; }; + #endif // MODIFIER_KEYS_WINDOW_H