diff --git a/extras/Jucer (experimental)/Source/model/Component Types/jucer_ComboBox.h b/extras/Jucer (experimental)/Source/model/Component Types/jucer_ComboBox.h index fdec0b688f..8aa6feada7 100644 --- a/extras/Jucer (experimental)/Source/model/Component Types/jucer_ComboBox.h +++ b/extras/Jucer (experimental)/Source/model/Component Types/jucer_ComboBox.h @@ -34,7 +34,15 @@ class ComboBoxHandler : public ComponentTypeHelper { public: - ComboBoxHandler() : ComponentTypeHelper ("ComboBox", "COMBOBOX", "comboBox") {} + ComboBoxHandler() : ComponentTypeHelper ("ComboBox", "COMBOBOX", "comboBox") + { + addEditableColour (ComboBox::backgroundColourId, "Background", "backgroundColour"); + addEditableColour (ComboBox::textColourId, "Text", "textColour"); + addEditableColour (ComboBox::outlineColourId, "Outline", "outlineColour"); + addEditableColour (ComboBox::buttonColourId, "Button", "buttonColour"); + addEditableColour (ComboBox::arrowColourId, "Arrow", "arrowColour"); + } + ~ComboBoxHandler() {} Component* createComponent() { return new ComboBox (String::empty); } @@ -50,6 +58,9 @@ public: void createProperties (ComponentDocument& document, ValueTree& state, Array & props) { + addTooltipProperty (document, state, props); + addFocusOrderProperty (document, state, props); + addEditableColourProperties (document, state, props); } }; diff --git a/extras/Jucer (experimental)/Source/model/Component Types/jucer_ComponentTypeManager.cpp b/extras/Jucer (experimental)/Source/model/Component Types/jucer_ComponentTypeManager.cpp index 17c6d833e7..a41d1bac8c 100644 --- a/extras/Jucer (experimental)/Source/model/Component Types/jucer_ComponentTypeManager.cpp +++ b/extras/Jucer (experimental)/Source/model/Component Types/jucer_ComponentTypeManager.cpp @@ -175,6 +175,12 @@ void ComponentTypeHandler::updateComponent (ComponentDocument& document, Compone comp->setBounds (pos.resolve (document)); comp->setName (state [ComponentDocument::compNameProperty]); + + comp->setExplicitFocusOrder (state [ComponentDocument::compFocusOrderProperty]); + + SettableTooltipClient* tooltipClient = dynamic_cast (comp); + if (tooltipClient != 0) + tooltipClient->setTooltip (state [ComponentDocument::compTooltipProperty]); } void ComponentTypeHandler::initialiseNewItem (ComponentDocument& document, ValueTree& state) diff --git a/extras/Jucer (experimental)/Source/model/Component Types/jucer_ComponentTypeManager.h b/extras/Jucer (experimental)/Source/model/Component Types/jucer_ComponentTypeManager.h index 3b0a73b362..fdcab01943 100644 --- a/extras/Jucer (experimental)/Source/model/Component Types/jucer_ComponentTypeManager.h +++ b/extras/Jucer (experimental)/Source/model/Component Types/jucer_ComponentTypeManager.h @@ -28,6 +28,7 @@ #include "../../jucer_Headers.h" #include "../jucer_ComponentDocument.h" +#include "../../utility/jucer_ColourEditorComponent.h" //============================================================================== @@ -92,6 +93,7 @@ template class ComponentTypeHelper : public ComponentTypeHandler { public: + //============================================================================== ComponentTypeHelper (const String& name_, const String& xmlTag_, const String& memberNameRoot_) : ComponentTypeHandler (name_, xmlTag_, memberNameRoot_) { @@ -105,6 +107,7 @@ public: ComponentClass* const c = dynamic_cast (comp); jassert (c != 0); + updateComponentColours (state, c); update (document, c, state); } @@ -123,9 +126,67 @@ public: ComponentTypeHandler::createPropertyEditors (document, state, props); createProperties (document, state, props); } -}; +protected: + //============================================================================== + void addTooltipProperty (ComponentDocument& document, ValueTree& state, Array & props) + { + props.add (new TextPropertyComponent (getValue (ComponentDocument::compTooltipProperty, state, document), + "Tooltip", 4096, false)); + } + + void addFocusOrderProperty (ComponentDocument& document, ValueTree& state, Array & props) + { + props.add (new TextPropertyComponent (Value (new IntegerValueSource (getValue (ComponentDocument::compFocusOrderProperty, + state, document))), + "Focus Order", 10, false)); + } + + //============================================================================== + struct EditableColour + { + int colourId; + String name, propertyName; + + PropertyComponent* createProperty (ComponentTypeHelper& type, ComponentDocument& document, ValueTree& state) + { + return new ColourPropertyComponent (document, name, type.getValue (propertyName, state, document), + LookAndFeel::getDefaultLookAndFeel().findColour (colourId), true); + } + + void updateComponent (const ValueTree& state, Component* component) + { + const String colour (state [propertyName].toString()); + if (colour.isNotEmpty()) + component->setColour (colourId, Colour::fromString (colour)); + else + component->removeColour (colourId); + } + }; + + Array editableColours; + + void addEditableColour (int colourId, const String& displayName, const String& propertyName) + { + EditableColour ec; + ec.colourId = colourId; + ec.name = displayName; + ec.propertyName = propertyName; + editableColours.add (ec); + } + + void addEditableColourProperties (ComponentDocument& document, ValueTree& state, Array & props) + { + for (int i = 0; i < editableColours.size(); ++i) + props.add (editableColours.getReference(i).createProperty (*this, document, state)); + } + void updateComponentColours (const ValueTree& state, Component* component) + { + for (int i = 0; i < editableColours.size(); ++i) + editableColours.getReference(i).updateComponent (state, component); + } +}; #endif // __JUCER_COMPONENTTYPEMANAGER_H_734EBF1__ diff --git a/extras/Jucer (experimental)/Source/model/Component Types/jucer_GroupComponent.h b/extras/Jucer (experimental)/Source/model/Component Types/jucer_GroupComponent.h index ac7be87566..383fccd46e 100644 --- a/extras/Jucer (experimental)/Source/model/Component Types/jucer_GroupComponent.h +++ b/extras/Jucer (experimental)/Source/model/Component Types/jucer_GroupComponent.h @@ -34,7 +34,12 @@ class GroupComponentHandler : public ComponentTypeHelper { public: - GroupComponentHandler() : ComponentTypeHelper ("GroupComponent", "GROUPCOMPONENT", "group") {} + GroupComponentHandler() : ComponentTypeHelper ("GroupComponent", "GROUPCOMPONENT", "group") + { + addEditableColour (GroupComponent::outlineColourId, "Outline", "outlineColour"); + addEditableColour (GroupComponent::textColourId, "Text Colour", "textColour"); + } + ~GroupComponentHandler() {} Component* createComponent() { return new GroupComponent (String::empty, String::empty); } @@ -50,6 +55,7 @@ public: void createProperties (ComponentDocument& document, ValueTree& state, Array & props) { + addEditableColourProperties (document, state, props); } }; diff --git a/extras/Jucer (experimental)/Source/model/Component Types/jucer_Label.h b/extras/Jucer (experimental)/Source/model/Component Types/jucer_Label.h index dc09109332..127b490259 100644 --- a/extras/Jucer (experimental)/Source/model/Component Types/jucer_Label.h +++ b/extras/Jucer (experimental)/Source/model/Component Types/jucer_Label.h @@ -34,7 +34,13 @@ class LabelHandler : public ComponentTypeHelper