/*
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
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_KEYMAPPINGEDITORCOMPONENT_H_INCLUDED
# define JUCE_KEYMAPPINGEDITORCOMPONENT_H_INCLUDED
//==============================================================================
/**
A component to allow editing of the keymaps stored by a KeyPressMappingSet
object .
@ see KeyPressMappingSet
*/
class JUCE_API KeyMappingEditorComponent : public Component
{
public :
//==============================================================================
/** Creates a KeyMappingEditorComponent.
@ param mappingSet this is the set of mappings to display and edit . Make sure the
mappings object is not deleted before this component !
@ param showResetToDefaultButton if true , then at the bottom of the list , the
component will include a ' reset to defaults ' button .
*/
KeyMappingEditorComponent ( KeyPressMappingSet & mappingSet ,
bool showResetToDefaultButton ) ;
/** Destructor. */
~ KeyMappingEditorComponent ( ) ;
//==============================================================================
/** Sets up the colours to use for parts of the component.
@ param mainBackground colour to use for most of the background
@ param textColour colour to use for the text
*/
void setColours ( Colour mainBackground ,
Colour textColour ) ;
/** Returns the KeyPressMappingSet that this component is acting upon. */
KeyPressMappingSet & getMappings ( ) const noexcept { return mappings ; }
/** Returns the ApplicationCommandManager that this component is connected to. */
ApplicationCommandManager & getCommandManager ( ) const noexcept { return mappings . getCommandManager ( ) ; }
//==============================================================================
/** Can be overridden if some commands need to be excluded from the list.
By default this will use the KeyPressMappingSet ' s shouldCommandBeVisibleInEditor ( )
method to decide what to return , but you can override it to handle special cases .
*/
virtual bool shouldCommandBeIncluded ( CommandID commandID ) ;
/** Can be overridden to indicate that some commands are shown as read-only.
By default this will use the KeyPressMappingSet ' s shouldCommandBeReadOnlyInEditor ( )
method to decide what to return , but you can override it to handle special cases .
*/
virtual bool isCommandReadOnly ( CommandID commandID ) ;
/** This can be overridden to let you change the format of the string used
to describe a keypress .
This is handy if you ' re using non - standard KeyPress objects , e . g . for custom
keys that are triggered by something else externally . If you override the
method , be sure to let the base class ' s method handle keys you ' re not
interested in .
*/
virtual String getDescriptionForKeyPress ( const KeyPress & key ) ;
//==============================================================================
/** A set of colour IDs to use to change the colour of various aspects of the editor.
These constants can be used either via the Component : : setColour ( ) , or LookAndFeel : : setColour ( )
methods .
@ see Component : : setColour , Component : : findColour , LookAndFeel : : setColour , LookAndFeel : : findColour
*/
enum ColourIds
{
backgroundColourId = 0x100ad00 , /**< The background colour to fill the editor background. */
textColourId = 0x100ad01 , /**< The colour for the text. */
} ;
//==============================================================================
/** @internal */
void parentHierarchyChanged ( ) override ;
/** @internal */
void resized ( ) override ;
private :
//==============================================================================
KeyPressMappingSet & mappings ;
TreeView tree ;
TextButton resetButton ;
class TopLevelItem ;
class ChangeKeyButton ;
class MappingItem ;
class CategoryItem ;
class ItemComponent ;
friend class TopLevelItem ;
friend struct ContainerDeletePolicy < ChangeKeyButton > ;
friend struct ContainerDeletePolicy < TopLevelItem > ;
ScopedPointer < TopLevelItem > treeItem ;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR ( KeyMappingEditorComponent )
} ;
# endif // JUCE_KEYMAPPINGEDITORCOMPONENT_H_INCLUDED