| 
							- /*
 -   ==============================================================================
 - 
 -    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 __JUCER_COLOURPROPERTYCOMPONENT_JUCEHEADER__
 - #define __JUCER_COLOURPROPERTYCOMPONENT_JUCEHEADER__
 - 
 - #include "../../Application/jucer_Application.h"
 - 
 - 
 - class JucerColourPropertyComponent  : public PropertyComponent
 - {
 - public:
 -     JucerColourPropertyComponent (const String& name,
 -                                   const bool canReset)
 -         : PropertyComponent (name)
 -     {
 -         colourPropEditor = new ColourPropEditorComponent (this, canReset);
 -         addAndMakeVisible (colourPropEditor);
 -     }
 - 
 -     virtual void setColour (Colour newColour) = 0;
 -     virtual Colour getColour() const = 0;
 -     virtual void resetToDefault() = 0;
 - 
 -     void refresh()
 -     {
 -         ((ColourPropEditorComponent*) getChildComponent (0))->refresh();
 -     }
 - 
 -     class ColourEditorComponent    : public Component,
 -                                      public ChangeListener
 -     {
 -     public:
 -         ColourEditorComponent (const bool canReset)
 -             : canResetToDefault (canReset)
 -         {
 -         }
 - 
 -         void paint (Graphics& g)
 -         {
 -             g.fillAll (Colours::grey);
 - 
 -             g.fillCheckerBoard (getLocalBounds().reduced (2, 2),
 -                                 10, 10,
 -                                 Colour (0xffdddddd).overlaidWith (colour),
 -                                 Colour (0xffffffff).overlaidWith (colour));
 - 
 -             g.setColour (Colours::white.overlaidWith (colour).contrasting());
 -             g.setFont (Font (getHeight() * 0.6f, Font::bold));
 -             g.drawFittedText (colour.toDisplayString (true),
 -                               2, 1, getWidth() - 4, getHeight() - 1,
 -                               Justification::centred, 1);
 -         }
 - 
 -         virtual void setColour (Colour newColour) = 0;
 -         virtual void resetToDefault() = 0;
 -         virtual Colour getColour() const = 0;
 - 
 -         void refresh()
 -         {
 -             const Colour col (getColour());
 - 
 -             if (col != colour)
 -             {
 -                 colour = col;
 -                 repaint();
 -             }
 -         }
 - 
 -         void mouseDown (const MouseEvent&)
 -         {
 -             CallOutBox::launchAsynchronously (new ColourSelectorComp (this, canResetToDefault),
 -                                               getScreenBounds(), nullptr);
 -         }
 - 
 -         void changeListenerCallback (ChangeBroadcaster* source)
 -         {
 -             const ColourSelector* const cs = (const ColourSelector*) source;
 - 
 -             if (cs->getCurrentColour() != getColour())
 -                 setColour (cs->getCurrentColour());
 -         }
 - 
 -         class ColourSelectorComp   : public Component,
 -                                      public ButtonListener
 -         {
 -         public:
 -             ColourSelectorComp (ColourEditorComponent* owner_,
 -                                 const bool canReset)
 -                 : owner (owner_),
 -                   defaultButton ("Reset to Default")
 -             {
 -                 addAndMakeVisible (selector);
 -                 selector.setName ("Colour");
 -                 selector.setCurrentColour (owner->getColour());
 -                 selector.addChangeListener (owner);
 - 
 -                 if (canReset)
 -                 {
 -                     addAndMakeVisible (defaultButton);
 -                     defaultButton.addListener (this);
 -                 }
 - 
 -                 setSize (300, 400);
 -             }
 - 
 -             void resized()
 -             {
 -                 if (defaultButton.isVisible())
 -                 {
 -                     selector.setBounds (0, 0, getWidth(), getHeight() - 30);
 -                     defaultButton.changeWidthToFitText (22);
 -                     defaultButton.setTopLeftPosition (10, getHeight() - 26);
 -                 }
 -                 else
 -                 {
 -                     selector.setBounds (getLocalBounds());
 -                 }
 -             }
 - 
 -             void buttonClicked (Button*)
 -             {
 -                 owner->resetToDefault();
 -                 owner->refresh();
 -                 selector.setCurrentColour (owner->getColour());
 -             }
 - 
 -         private:
 -             class ColourSelectorWithSwatches    : public ColourSelector
 -             {
 -             public:
 -                 ColourSelectorWithSwatches()
 -                 {
 -                 }
 - 
 -                 int getNumSwatches() const override
 -                 {
 -                     return getAppSettings().swatchColours.size();
 -                 }
 - 
 -                 Colour getSwatchColour (int index) const override
 -                 {
 -                     return getAppSettings().swatchColours [index];
 -                 }
 - 
 -                 void setSwatchColour (int index, const Colour& newColour) const override
 -                 {
 -                     getAppSettings().swatchColours.set (index, newColour);
 -                 }
 -             };
 - 
 -             ColourEditorComponent* owner;
 -             ColourSelectorWithSwatches selector;
 -             TextButton defaultButton;
 -         };
 - 
 -     private:
 -         Colour colour;
 -         bool canResetToDefault;
 -     };
 - 
 -     class ColourPropEditorComponent     : public ColourEditorComponent
 -     {
 -         JucerColourPropertyComponent* const owner;
 - 
 -     public:
 -         ColourPropEditorComponent (JucerColourPropertyComponent* const owner_,
 -                                    const bool canReset)
 -             : ColourEditorComponent (canReset),
 -               owner (owner_)
 -         {}
 - 
 -         void setColour (Colour newColour) override
 -         {
 -             owner->setColour (newColour);
 -         }
 - 
 -         Colour getColour() const override
 -         {
 -             return owner->getColour();
 -         }
 - 
 -         void resetToDefault()
 -         {
 -             owner->resetToDefault();
 -         }
 -     };
 - 
 -     ScopedPointer<ColourPropEditorComponent> colourPropEditor;
 - };
 - 
 - 
 - #endif   // __JUCER_COLOURPROPERTYCOMPONENT_JUCEHEADER__
 
 
  |