//============================================================================== void Button::setToggleState (const bool shouldBeOn, const bool sendChangeNotification) { if (shouldBeOn != lastToggleState) { if (getToggleState() != shouldBeOn) // this test means that if the value is void rather than explicitly set to isOn = shouldBeOn; // false, it won't be changed unless the required value is true. lastToggleState = shouldBeOn; repaint(); WeakReference<Component> deletionWatcher (this); if (sendChangeNotification) { sendClickMessage (ModifierKeys()); if (deletionWatcher == nullptr) return; } if (lastToggleState) { turnOffOtherButtonsInGroup (sendChangeNotification); if (deletionWatcher == nullptr) return; } sendStateMessage(); } }
void setComponentUnderMouse (Component* const newComponent, Point<float> screenPos, Time time) { Component* current = getComponentUnderMouse(); if (newComponent != current) { WeakReference<Component> safeNewComp (newComponent); const ModifierKeys originalButtonState (buttonState); if (current != nullptr) { WeakReference<Component> safeOldComp (current); setButtons (screenPos, time, ModifierKeys()); if (safeOldComp != nullptr) { componentUnderMouse = safeNewComp; sendMouseExit (*safeOldComp, screenPos, time); } buttonState = originalButtonState; } current = componentUnderMouse = safeNewComp; if (current != nullptr) sendMouseEnter (*current, screenPos, time); revealCursor (false); setButtons (screenPos, time, originalButtonState); } }
//============================================================================== KeyPress KeyPress::createFromDescription (const String& desc) { int modifiers = 0; for (int i = 0; i < numElementsInArray (KeyPressHelpers::modifierNames); ++i) if (desc.containsWholeWordIgnoreCase (KeyPressHelpers::modifierNames[i].name)) modifiers |= KeyPressHelpers::modifierNames[i].flag; int key = 0; for (int i = 0; i < numElementsInArray (KeyPressHelpers::translations); ++i) { if (desc.containsWholeWordIgnoreCase (String (KeyPressHelpers::translations[i].name))) { key = KeyPressHelpers::translations[i].code; break; } } if (key == 0) key = KeyPressHelpers::getNumpadKeyCode (desc); if (key == 0) { // see if it's a function key.. if (! desc.containsChar ('#')) // avoid mistaking hex-codes like "#f1" { for (int i = 1; i <= 35; ++i) { if (desc.containsWholeWordIgnoreCase ("f" + String (i))) { if (i <= 16) key = F1Key + i - 1; else if (i <= 24) key = F17Key + i - 17; else if (i <= 35) key = F25Key + i - 25; } } } if (key == 0) { // give up and use the hex code.. auto hexCode = desc.fromFirstOccurrenceOf ("#", false, false) .retainCharacters ("0123456789abcdefABCDEF") .getHexValue32(); if (hexCode > 0) key = hexCode; else key = (int) CharacterFunctions::toUpperCase (desc.getLastCharacter()); } } return KeyPress (key, ModifierKeys (modifiers), 0); }
void getCommandInfo (CommandID commandID, ApplicationCommandInfo& result) override { const String generalCategory ("General"); const String demosCategory ("Demos"); switch (commandID) { case MainAppWindow::showPreviousDemo: result.setInfo ("Previous Demo", "Shows the previous demo in the list", demosCategory, 0); result.addDefaultKeypress ('-', ModifierKeys::commandModifier); break; case MainAppWindow::showNextDemo: result.setInfo ("Next Demo", "Shows the next demo in the list", demosCategory, 0); result.addDefaultKeypress ('=', ModifierKeys::commandModifier); break; case MainAppWindow::welcome: result.setInfo ("Welcome Demo", "Shows the 'Welcome' demo", demosCategory, 0); result.addDefaultKeypress ('1', ModifierKeys::commandModifier); break; case MainAppWindow::componentsAnimation: result.setInfo ("Animation Demo", "Shows the 'Animation' demo", demosCategory, 0); result.addDefaultKeypress ('2', ModifierKeys::commandModifier); break; case MainAppWindow::componentsDialogBoxes: result.setInfo ("Dialog Boxes Demo", "Shows the 'Dialog Boxes' demo", demosCategory, 0); result.addDefaultKeypress ('3', ModifierKeys::commandModifier); break; case MainAppWindow::componentsKeyMappings: result.setInfo ("Key Mappings Demo", "Shows the 'Key Mappings' demo", demosCategory, 0); result.addDefaultKeypress ('4', ModifierKeys::commandModifier); break; case MainAppWindow::componentsMDI: result.setInfo ("Multi-Document Demo", "Shows the 'Multi-Document' demo", demosCategory, 0); result.addDefaultKeypress ('5', ModifierKeys::commandModifier); break; case MainAppWindow::componentsPropertyEditors: result.setInfo ("Property Editor Demo", "Shows the 'Property Editor' demo", demosCategory, 0); result.addDefaultKeypress ('6', ModifierKeys::commandModifier); break; case MainAppWindow::componentsTransforms: result.setInfo ("Component Transforms Demo", "Shows the 'Transforms' demo", demosCategory, 0); result.addDefaultKeypress ('7', ModifierKeys::commandModifier); break; case MainAppWindow::componentsWebBrowsers: result.setInfo ("Web Browser Demo", "Shows the 'Web Browser' demo", demosCategory, 0); result.addDefaultKeypress ('8', ModifierKeys::commandModifier); break; case MainAppWindow::componentsWidgets: result.setInfo ("Widgets Demo", "Shows the 'Widgets' demo", demosCategory, 0); result.addDefaultKeypress ('9', ModifierKeys::commandModifier); break; case MainAppWindow::renderingEngineOne: case MainAppWindow::renderingEngineTwo: case MainAppWindow::renderingEngineThree: { MainAppWindow& mainWindow = *MainAppWindow::getMainAppWindow(); const StringArray engines (mainWindow.getRenderingEngines()); const int index = commandID - MainAppWindow::renderingEngineOne; result.setInfo ("Use " + engines[index], "Uses the " + engines[index] + " engine to render the UI", generalCategory, 0); result.setTicked (mainWindow.getActiveRenderingEngine() == index); result.addDefaultKeypress ('1' + index, ModifierKeys::noModifiers); break; } case MainAppWindow::useLookAndFeelV1: result.setInfo ("Use LookAndFeel_V1", String(), generalCategory, 0); result.addDefaultKeypress ('i', ModifierKeys::commandModifier); result.setTicked (isLookAndFeelSelected<LookAndFeel_V1>()); break; case MainAppWindow::useLookAndFeelV2: result.setInfo ("Use LookAndFeel_V2", String(), generalCategory, 0); result.addDefaultKeypress ('o', ModifierKeys::commandModifier); result.setTicked (isLookAndFeelSelected<LookAndFeel_V2>()); break; case MainAppWindow::useLookAndFeelV3: result.setInfo ("Use LookAndFeel_V3", String(), generalCategory, 0); result.addDefaultKeypress ('p', ModifierKeys::commandModifier); result.setTicked (isLookAndFeelSelected<LookAndFeel_V3>()); break; case MainAppWindow::toggleRepaintDebugging: result.setInfo ("Toggle repaint display", String(), generalCategory, 0); result.addDefaultKeypress ('r', ModifierKeys()); result.setTicked (juceDemoRepaintDebuggingActive); break; case MainAppWindow::useNativeTitleBar: { result.setInfo ("Use native window title bar", String(), generalCategory, 0); result.addDefaultKeypress ('n', ModifierKeys::commandModifier); bool nativeTitlebar = false; if (MainAppWindow* map = MainAppWindow::getMainAppWindow()) nativeTitlebar = map->isUsingNativeTitleBar(); result.setTicked (nativeTitlebar); break; } #if ! JUCE_LINUX case MainAppWindow::goToKioskMode: result.setInfo ("Show full-screen kiosk mode", String(), generalCategory, 0); result.addDefaultKeypress ('f', ModifierKeys::commandModifier); result.setTicked (Desktop::getInstance().getKioskModeComponent() != 0); break; #endif default: break; } }