|
- /*
- ==============================================================================
-
- This file is part of the JUCE library.
- Copyright (c) 2020 - Raw Material Software Limited
-
- JUCE is an open source library subject to commercial or open-source
- licensing.
-
- By using JUCE, you agree to the terms of both the JUCE 6 End-User License
- Agreement and JUCE Privacy Policy (both effective as of the 16th June 2020).
-
- End User License Agreement: www.juce.com/juce-6-licence
- Privacy Policy: www.juce.com/juce-privacy-policy
-
- Or: You may also use this code under the terms of the GPL v3 (see
- www.gnu.org/licenses).
-
- JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
- EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
- DISCLAIMED.
-
- ==============================================================================
- */
-
- namespace juce
- {
-
- //==============================================================================
- /**
- Represents a key press, including any modifier keys that are needed.
-
- E.g. a KeyPress might represent CTRL+C, SHIFT+ALT+H, Spacebar, Escape, etc.
-
- @see Component, KeyListener, KeyPressMappingSet, Button::addShortcut
-
- @tags{GUI}
- */
- class JUCE_API KeyPress
- {
- public:
- //==============================================================================
- /** Creates an (invalid) KeyPress.
-
- @see isValid
- */
- KeyPress() = default;
-
- /** Destructor. */
- ~KeyPress() = default;
-
- /** Creates a KeyPress for a key and some modifiers.
-
- e.g.
- CTRL+C would be: KeyPress ('c', ModifierKeys::ctrlModifier, 0)
- SHIFT+Escape would be: KeyPress (KeyPress::escapeKey, ModifierKeys::shiftModifier, 0)
-
- @param keyCode a code that represents the key - this value must be
- one of special constants listed in this class, or an
- 8-bit character code such as a letter (case is ignored),
- digit or a simple key like "," or ".". Note that this
- isn't the same as the textCharacter parameter, so for example
- a keyCode of 'a' and a shift-key modifier should have a
- textCharacter value of 'A'.
- @param modifiers the modifiers to associate with the keystroke
- @param textCharacter the character that would be printed if someone typed
- this keypress into a text editor. This value may be
- null if the keypress is a non-printing character
- @see getKeyCode, isKeyCode, getModifiers
- */
- KeyPress (int keyCode,
- ModifierKeys modifiers,
- juce_wchar textCharacter) noexcept;
-
- /** Creates a keypress with a keyCode but no modifiers or text character. */
- explicit KeyPress (int keyCode) noexcept;
-
- /** Creates a copy of another KeyPress. */
- KeyPress (const KeyPress&) = default;
-
- /** Copies this KeyPress from another one. */
- KeyPress& operator= (const KeyPress&) = default;
-
- /** Compares two KeyPress objects. */
- bool operator== (const KeyPress& other) const noexcept;
-
- /** Compares two KeyPress objects. */
- bool operator!= (const KeyPress& other) const noexcept;
-
- /** Returns true if this keypress is for the given keycode without any modifiers. */
- bool operator== (int keyCode) const noexcept;
-
- /** Returns true if this keypress is not for the given keycode without any modifiers. */
- bool operator!= (int keyCode) const noexcept;
-
- //==============================================================================
- /** Returns true if this is a valid KeyPress.
-
- A null keypress can be created by the default constructor, in case it's
- needed.
- */
- bool isValid() const noexcept { return keyCode != 0; }
-
- /** Returns the key code itself.
-
- This will either be one of the special constants defined in this class,
- or an 8-bit character code.
- */
- int getKeyCode() const noexcept { return keyCode; }
-
- /** Returns the key modifiers.
-
- @see ModifierKeys
- */
- ModifierKeys getModifiers() const noexcept { return mods; }
-
- /** Returns the character that is associated with this keypress.
-
- This is the character that you'd expect to see printed if you press this
- keypress in a text editor or similar component.
- */
- juce_wchar getTextCharacter() const noexcept { return textCharacter; }
-
- /** Checks whether the KeyPress's key is the same as the one provided, without checking
- the modifiers.
-
- The values for key codes can either be one of the special constants defined in
- this class, or an 8-bit character code.
-
- @see getKeyCode
- */
- bool isKeyCode (int keyCodeToCompare) const noexcept { return keyCode == keyCodeToCompare; }
-
- //==============================================================================
- /** Converts a textual key description to a KeyPress.
-
- This attempts to decode a textual version of a keypress, e.g. "ctrl + c" or "spacebar".
-
- This isn't designed to cope with any kind of input, but should be given the
- strings that are created by the getTextDescription() method.
-
- If the string can't be parsed, the object returned will be invalid.
-
- @see getTextDescription
- */
- static KeyPress createFromDescription (const String& textVersion);
-
- /** Creates a textual description of the key combination.
-
- e.g. "ctrl + c" or "delete".
-
- To store a keypress in a file, use this method, along with createFromDescription()
- to retrieve it later.
- */
- String getTextDescription() const;
-
- /** Creates a textual description of the key combination, using unicode icon symbols if possible.
-
- On OSX, this uses the Apple symbols for command, option, shift, etc, instead of the textual
- modifier key descriptions that are returned by getTextDescription()
- */
- String getTextDescriptionWithIcons() const;
-
- //==============================================================================
- /** Checks whether the user is currently holding down the keys that make up this
- KeyPress.
-
- Note that this will return false if any extra modifier keys are
- down - e.g. if the keypress is CTRL+X and the user is actually holding CTRL+ALT+x
- then it will be false.
- */
- bool isCurrentlyDown() const;
-
- /** Checks whether a particular key is held down, irrespective of modifiers.
-
- The values for key codes can either be one of the special constants defined in
- this class, or an 8-bit character code.
- */
- static bool isKeyCurrentlyDown (int keyCode);
-
- //==============================================================================
- // Key codes
- //
- // Note that the actual values of these are platform-specific and may change
- // without warning, so don't store them anywhere as constants. For persisting/retrieving
- // KeyPress objects, use getTextDescription() and createFromDescription() instead.
- //
-
- static const int spaceKey; /**< key-code for the space bar */
- static const int escapeKey; /**< key-code for the escape key */
- static const int returnKey; /**< key-code for the return key*/
- static const int tabKey; /**< key-code for the tab key*/
-
- static const int deleteKey; /**< key-code for the delete key (not backspace) */
- static const int backspaceKey; /**< key-code for the backspace key */
- static const int insertKey; /**< key-code for the insert key */
-
- static const int upKey; /**< key-code for the cursor-up key */
- static const int downKey; /**< key-code for the cursor-down key */
- static const int leftKey; /**< key-code for the cursor-left key */
- static const int rightKey; /**< key-code for the cursor-right key */
- static const int pageUpKey; /**< key-code for the page-up key */
- static const int pageDownKey; /**< key-code for the page-down key */
- static const int homeKey; /**< key-code for the home key */
- static const int endKey; /**< key-code for the end key */
-
- static const int F1Key; /**< key-code for the F1 key */
- static const int F2Key; /**< key-code for the F2 key */
- static const int F3Key; /**< key-code for the F3 key */
- static const int F4Key; /**< key-code for the F4 key */
- static const int F5Key; /**< key-code for the F5 key */
- static const int F6Key; /**< key-code for the F6 key */
- static const int F7Key; /**< key-code for the F7 key */
- static const int F8Key; /**< key-code for the F8 key */
- static const int F9Key; /**< key-code for the F9 key */
- static const int F10Key; /**< key-code for the F10 key */
- static const int F11Key; /**< key-code for the F11 key */
- static const int F12Key; /**< key-code for the F12 key */
- static const int F13Key; /**< key-code for the F13 key */
- static const int F14Key; /**< key-code for the F14 key */
- static const int F15Key; /**< key-code for the F15 key */
- static const int F16Key; /**< key-code for the F16 key */
- static const int F17Key; /**< key-code for the F17 key */
- static const int F18Key; /**< key-code for the F18 key */
- static const int F19Key; /**< key-code for the F19 key */
- static const int F20Key; /**< key-code for the F20 key */
- static const int F21Key; /**< key-code for the F21 key */
- static const int F22Key; /**< key-code for the F22 key */
- static const int F23Key; /**< key-code for the F23 key */
- static const int F24Key; /**< key-code for the F24 key */
- static const int F25Key; /**< key-code for the F25 key */
- static const int F26Key; /**< key-code for the F26 key */
- static const int F27Key; /**< key-code for the F27 key */
- static const int F28Key; /**< key-code for the F28 key */
- static const int F29Key; /**< key-code for the F29 key */
- static const int F30Key; /**< key-code for the F30 key */
- static const int F31Key; /**< key-code for the F31 key */
- static const int F32Key; /**< key-code for the F32 key */
- static const int F33Key; /**< key-code for the F33 key */
- static const int F34Key; /**< key-code for the F34 key */
- static const int F35Key; /**< key-code for the F35 key */
-
- static const int numberPad0; /**< key-code for the 0 on the numeric keypad. */
- static const int numberPad1; /**< key-code for the 1 on the numeric keypad. */
- static const int numberPad2; /**< key-code for the 2 on the numeric keypad. */
- static const int numberPad3; /**< key-code for the 3 on the numeric keypad. */
- static const int numberPad4; /**< key-code for the 4 on the numeric keypad. */
- static const int numberPad5; /**< key-code for the 5 on the numeric keypad. */
- static const int numberPad6; /**< key-code for the 6 on the numeric keypad. */
- static const int numberPad7; /**< key-code for the 7 on the numeric keypad. */
- static const int numberPad8; /**< key-code for the 8 on the numeric keypad. */
- static const int numberPad9; /**< key-code for the 9 on the numeric keypad. */
-
- static const int numberPadAdd; /**< key-code for the add sign on the numeric keypad. */
- static const int numberPadSubtract; /**< key-code for the subtract sign on the numeric keypad. */
- static const int numberPadMultiply; /**< key-code for the multiply sign on the numeric keypad. */
- static const int numberPadDivide; /**< key-code for the divide sign on the numeric keypad. */
- static const int numberPadSeparator; /**< key-code for the comma on the numeric keypad. */
- static const int numberPadDecimalPoint; /**< key-code for the decimal point sign on the numeric keypad. */
- static const int numberPadEquals; /**< key-code for the equals key on the numeric keypad. */
- static const int numberPadDelete; /**< key-code for the delete key on the numeric keypad. */
-
- static const int playKey; /**< key-code for a multimedia 'play' key, (not all keyboards will have one) */
- static const int stopKey; /**< key-code for a multimedia 'stop' key, (not all keyboards will have one) */
- static const int fastForwardKey; /**< key-code for a multimedia 'fast-forward' key, (not all keyboards will have one) */
- static const int rewindKey; /**< key-code for a multimedia 'rewind' key, (not all keyboards will have one) */
-
- private:
- //==============================================================================
- int keyCode = 0;
- ModifierKeys mods;
- juce_wchar textCharacter = 0;
-
- JUCE_LEAK_DETECTOR (KeyPress)
- };
-
- } // namespace juce
|