void setNewKey (const KeyPress& newKey, bool dontAskUser) { if (newKey.isValid()) { const CommandID previousCommand = owner.getMappings().findCommandForKeyPress (newKey); if (previousCommand == 0 || dontAskUser) { owner.getMappings().removeKeyPress (newKey); if (keyNum >= 0) owner.getMappings().removeKeyPress (commandID, keyNum); owner.getMappings().addKeyPress (commandID, newKey, keyNum); } else { AlertWindow::showOkCancelBox (AlertWindow::WarningIcon, TRANS("Change key-mapping"), TRANS("This key is already assigned to the command \"") + owner.getCommandManager().getNameOfCommand (previousCommand) + TRANS("\"\n\nDo you want to re-assign it to this new command instead?"), TRANS("Re-assign"), TRANS("Cancel"), this, ModalCallbackFunction::forComponent (assignNewKeyCallback, this, KeyPress (newKey))); } } }
//============================================================================== void Button::addShortcut (const KeyPress& key) { if (key.isValid()) { jassert (! isRegisteredForShortcut (key)); // already registered! shortcuts.add (key); parentHierarchyChanged(); } }
void KeyPressMappingSet::removeKeyPress (const KeyPress& keypress) { if (keypress.isValid()) { for (int i = mappings.size(); --i >= 0;) { CommandMapping* const cm = mappings.getUnchecked(i); for (int j = cm->keypresses.size(); --j >= 0;) { if (keypress == cm->keypresses [j]) { cm->keypresses.remove (j); sendChangeMessage(); } } } } }
void KeyPressMappingSet::addKeyPress (const CommandID commandID, const KeyPress& newKeyPress, int insertIndex) { // If you specify an upper-case letter but no shift key, how is the user supposed to press it!? // Stick to lower-case letters when defining a keypress, to avoid ambiguity. jassert (! (CharacterFunctions::isUpperCase (newKeyPress.getTextCharacter()) && ! newKeyPress.getModifiers().isShiftDown())); if (findCommandForKeyPress (newKeyPress) != commandID) { if (newKeyPress.isValid()) { for (int i = mappings.size(); --i >= 0;) { if (mappings.getUnchecked(i)->commandID == commandID) { mappings.getUnchecked(i)->keypresses.insert (insertIndex, newKeyPress); sendChangeMessage(); return; } } if (const ApplicationCommandInfo* const ci = commandManager.getCommandForID (commandID)) { CommandMapping* const cm = new CommandMapping(); cm->commandID = commandID; cm->keypresses.add (newKeyPress); cm->wantsKeyUpDownCallbacks = (ci->flags & ApplicationCommandInfo::wantsKeyUpDownCallbacks) != 0; mappings.add (cm); sendChangeMessage(); } else { // If you hit this, you're trying to attach a keypress to a command ID that // doesn't exist, so the key is not being attached. jassertfalse; } } } }