/*
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
This file is part of the JUCE library .
Copyright ( c ) 2015 - ROLI Ltd .
Permission is granted to use this software under the terms of either :
a ) the GPL v2 ( or any later version )
b ) the Affero GPL v3
Details of these licenses can be found at : www . gnu . org / licenses
JUCE is distributed in the hope that it will be useful , but WITHOUT ANY
WARRANTY ; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE . See the GNU General Public License for more details .
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
To release a closed - source product which uses JUCE , commercial licenses are
available : visit www . juce . com for more information .
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
*/
# ifndef JUCE_KEYPRESS_H_INCLUDED
# define JUCE_KEYPRESS_H_INCLUDED
//==============================================================================
/**
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
*/
class JUCE_API KeyPress
{
public :
//==============================================================================
/** Creates an (invalid) KeyPress.
@ see isValid
*/
KeyPress ( ) noexcept ;
/** Creates a KeyPress for a key and some modifiers.
e . g .
CTRL + C would be : KeyPress ( ' c ' , ModifierKeys : : ctrlModifier )
SHIFT + Escape would be : KeyPress ( KeyPress : : escapeKey , ModifierKeys : : shiftModifier )
@ 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 & other ) noexcept ;
/** Copies this KeyPress from another one. */
KeyPress & operator = ( const KeyPress & other ) noexcept ;
/** 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 " SPACE " .
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 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 ;
ModifierKeys mods ;
juce_wchar textCharacter ;
JUCE_LEAK_DETECTOR ( KeyPress )
} ;
# endif // JUCE_KEYPRESS_H_INCLUDED