diff --git a/extras/Projucer/Source/Utility/Helpers/jucer_MiscUtilities.h b/extras/Projucer/Source/Utility/Helpers/jucer_MiscUtilities.h index 467fb5b24e..1d3c8752fb 100644 --- a/extras/Projucer/Source/Utility/Helpers/jucer_MiscUtilities.h +++ b/extras/Projucer/Source/Utility/Helpers/jucer_MiscUtilities.h @@ -94,7 +94,7 @@ struct PropertyListBuilder mainHelpText + " Use semi-colons or new-lines to separate multiple paths."); } - void addSearchPathProperty (const ValueWithDefault& value, const String& name, const String& mainHelpText) + void addSearchPathProperty (ValueWithDefault& value, const String& name, const String& mainHelpText) { add (new TextPropertyComponent (value, name, 16384, true), mainHelpText + " Use semi-colons or new-lines to separate multiple paths."); diff --git a/extras/Projucer/Source/Utility/UI/PropertyComponents/jucer_PropertyComponentsWithEnablement.h b/extras/Projucer/Source/Utility/UI/PropertyComponents/jucer_PropertyComponentsWithEnablement.h index f5dcb132a2..7338b22d8f 100644 --- a/extras/Projucer/Source/Utility/UI/PropertyComponents/jucer_PropertyComponentsWithEnablement.h +++ b/extras/Projucer/Source/Utility/UI/PropertyComponents/jucer_PropertyComponentsWithEnablement.h @@ -32,7 +32,7 @@ class TextPropertyComponentWithEnablement : public TextPropertyComponent, private Value::Listener { public: - TextPropertyComponentWithEnablement (const ValueWithDefault& valueToControl, + TextPropertyComponentWithEnablement (ValueWithDefault& valueToControl, ValueWithDefault valueToListenTo, const String& propertyName, int maxNumChars, @@ -59,7 +59,7 @@ class ChoicePropertyComponentWithEnablement : public ChoicePropertyComponent, private Value::Listener { public: - ChoicePropertyComponentWithEnablement (const ValueWithDefault& valueToControl, + ChoicePropertyComponentWithEnablement (ValueWithDefault& valueToControl, ValueWithDefault valueToListenTo, const String& propertyName, const StringArray& choices, diff --git a/modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp b/modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp index b2dada8f99..197451488a 100644 --- a/modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp +++ b/modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp @@ -73,7 +73,7 @@ class ChoicePropertyComponent::RemapperValueSourceWithDefault : public Value: private Value::Listener { public: - RemapperValueSourceWithDefault (const ValueWithDefault& vwd, const Array& map) + RemapperValueSourceWithDefault (ValueWithDefault& vwd, const Array& map) : valueWithDefault (vwd), sourceValue (valueWithDefault.getPropertyAsValue()), mappings (map) @@ -113,7 +113,7 @@ public: } private: - ValueWithDefault valueWithDefault; + ValueWithDefault& valueWithDefault; Value sourceValue; Array mappings; @@ -155,7 +155,7 @@ ChoicePropertyComponent::ChoicePropertyComponent (const Value& valueToControl, correspondingValues))); } -ChoicePropertyComponent::ChoicePropertyComponent (const ValueWithDefault& valueToControl, +ChoicePropertyComponent::ChoicePropertyComponent (ValueWithDefault& valueToControl, const String& name, const StringArray& choiceList, const Array& correspondingValues) @@ -165,9 +165,19 @@ ChoicePropertyComponent::ChoicePropertyComponent (const ValueWithDefault& valueT comboBox.getSelectedIdAsValue().referTo (Value (new RemapperValueSourceWithDefault (valueToControl, correspondingValues))); + + valueToControl.onDefaultChange = [this, &valueToControl, choiceList, correspondingValues] + { + auto selectedId = comboBox.getSelectedId(); + + comboBox.clear(); + createComboBoxWithDefault (choiceList [correspondingValues.indexOf (valueToControl.getDefault())]); + + comboBox.setSelectedId (selectedId); + }; } -ChoicePropertyComponent::ChoicePropertyComponent (const ValueWithDefault& valueToControl, +ChoicePropertyComponent::ChoicePropertyComponent (ValueWithDefault& valueToControl, const String& name) : PropertyComponent (name), choices ({ "Enabled", "Disabled" }) @@ -176,6 +186,16 @@ ChoicePropertyComponent::ChoicePropertyComponent (const ValueWithDefault& valueT comboBox.getSelectedIdAsValue().referTo (Value (new RemapperValueSourceWithDefault (valueToControl, { true, false }))); + + valueToControl.onDefaultChange = [this, &valueToControl] + { + auto selectedId = comboBox.getSelectedId(); + + comboBox.clear(); + createComboBoxWithDefault (valueToControl.getDefault() ? "Enabled" : "Disabled"); + + comboBox.setSelectedId (selectedId); + }; } ChoicePropertyComponent::~ChoicePropertyComponent() diff --git a/modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h b/modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h index 835bd95ff3..eacbc2cbfc 100644 --- a/modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h +++ b/modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h @@ -88,7 +88,7 @@ public: as the choices array */ - ChoicePropertyComponent (const ValueWithDefault& valueToControl, + ChoicePropertyComponent (ValueWithDefault& valueToControl, const String& propertyName, const StringArray& choices, const Array& correspondingValues); @@ -98,7 +98,7 @@ public: This is useful for simple on/off choices that also need a default value. */ - ChoicePropertyComponent (const ValueWithDefault& valueToControl, + ChoicePropertyComponent (ValueWithDefault& valueToControl, const String& propertyName); /** Destructor. */ diff --git a/modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp b/modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp index cf70411284..109b5425db 100644 --- a/modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp +++ b/modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp @@ -169,7 +169,7 @@ TextPropertyComponent::TextPropertyComponent (const Value& valueToControl, textEditor->getTextValue().referTo (valueToControl); } -TextPropertyComponent::TextPropertyComponent (const ValueWithDefault& valueToControl, +TextPropertyComponent::TextPropertyComponent (ValueWithDefault& valueToControl, const String& name, int maxNumChars, bool isMultiLine, @@ -178,6 +178,12 @@ TextPropertyComponent::TextPropertyComponent (const ValueWithDefault& valueToCon { textEditor->getTextValue().referTo (Value (new RemapperValueSourceWithDefault (valueToControl))); textEditor->setTextToDisplayWhenEmpty (valueToControl.getDefault(), 0.5f); + + valueToControl.onDefaultChange = [this, &valueToControl] + { + textEditor->setTextToDisplayWhenEmpty (valueToControl.getDefault(), 0.5f); + repaint(); + }; } TextPropertyComponent::~TextPropertyComponent() diff --git a/modules/juce_gui_basics/properties/juce_TextPropertyComponent.h b/modules/juce_gui_basics/properties/juce_TextPropertyComponent.h index 46f3407f2e..54a03a8d57 100644 --- a/modules/juce_gui_basics/properties/juce_TextPropertyComponent.h +++ b/modules/juce_gui_basics/properties/juce_TextPropertyComponent.h @@ -83,7 +83,7 @@ public: @see TextEditor, setEditable */ - TextPropertyComponent (const ValueWithDefault& valueToControl, + TextPropertyComponent (ValueWithDefault& valueToControl, const String& propertyName, int maxNumChars, bool isMultiLine,