/*
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
This file is part of the JUCE library .
Copyright ( c ) 2013 - Raw Material Software 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_PROPERTYCOMPONENT_H_INCLUDED
# define JUCE_PROPERTYCOMPONENT_H_INCLUDED
//==============================================================================
/**
A base class for a component that goes in a PropertyPanel and displays one of
an item ' s properties .
Subclasses of this are used to display a property in various forms , e . g . a
ChoicePropertyComponent shows its value as a combo box ; a SliderPropertyComponent
shows its value as a slider ; a TextPropertyComponent as a text box , etc .
A subclass must implement the refresh ( ) method which will be called to tell the
component to update itself , and is also responsible for calling this it when the
item that it refers to is changed .
@ see PropertyPanel , TextPropertyComponent , SliderPropertyComponent ,
ChoicePropertyComponent , ButtonPropertyComponent , BooleanPropertyComponent
*/
class JUCE_API PropertyComponent : public Component ,
public SettableTooltipClient
{
public :
//==============================================================================
/** Creates a PropertyComponent.
@ param propertyName the name is stored as this component ' s name , and is
used as the name displayed next to this component in
a property panel
@ param preferredHeight the height that the component should be given - some
items may need to be larger than a normal row height .
This value can also be set if a subclass changes the
preferredHeight member variable .
*/
PropertyComponent ( const String & propertyName ,
int preferredHeight = 25 ) ;
/** Destructor. */
~ PropertyComponent ( ) ;
//==============================================================================
/** Returns this item's preferred height.
This value is specified either in the constructor or by a subclass changing the
preferredHeight member variable .
*/
int getPreferredHeight ( ) const noexcept { return preferredHeight ; }
void setPreferredHeight ( int newHeight ) noexcept { preferredHeight = newHeight ; }
//==============================================================================
/** Updates the property component if the item it refers to has changed.
A subclass must implement this method , and other objects may call it to
force it to refresh itself .
The subclass should be economical in the amount of work is done , so for
example it should check whether it really needs to do a repaint rather than
just doing one every time this method is called , as it may be called when
the value being displayed hasn ' t actually changed .
*/
virtual void refresh ( ) = 0 ;
/** The default paint method fills the background and draws a label for the
item ' s name .
@ see LookAndFeel : : drawPropertyComponentBackground ( ) , LookAndFeel : : drawPropertyComponentLabel ( )
*/
void paint ( Graphics & ) override ;
/** The default resize method positions any child component to the right of this
one , based on the look and feel ' s default label size .
*/
void resized ( ) override ;
/** By default, this just repaints the component. */
void enablementChanged ( ) override ;
//==============================================================================
/** A set of colour IDs to use to change the colour of various aspects of the combo box.
These constants can be used either via the Component : : setColour ( ) , or LookAndFeel : : setColour ( )
methods .
To change the colours of the menu that pops up
@ see Component : : setColour , Component : : findColour , LookAndFeel : : setColour , LookAndFeel : : findColour
*/
enum ColourIds
{
backgroundColourId = 0x1008300 , /**< The background colour to fill the component with. */
labelTextColourId = 0x1008301 , /**< The colour for the property's label text. */
} ;
//==============================================================================
/** This abstract base class is implemented by LookAndFeel classes. */
struct JUCE_API LookAndFeelMethods
{
virtual ~ LookAndFeelMethods ( ) { }
virtual void drawPropertyPanelSectionHeader ( Graphics & , const String & name , bool isOpen , int width , int height ) = 0 ;
virtual void drawPropertyComponentBackground ( Graphics & , int width , int height , PropertyComponent & ) = 0 ;
virtual void drawPropertyComponentLabel ( Graphics & , int width , int height , PropertyComponent & ) = 0 ;
virtual Rectangle < int > getPropertyComponentContentPosition ( PropertyComponent & ) = 0 ;
} ;
protected :
/** Used by the PropertyPanel to determine how high this component needs to be.
A subclass can update this value in its constructor but shouldn ' t alter it later
as changes won ' t necessarily be picked up .
*/
int preferredHeight ;
private :
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR ( PropertyComponent )
} ;
# endif // JUCE_PROPERTYCOMPONENT_H_INCLUDED