diff --git a/modules/foleys_gui_magic/Editor/foleys_StylePropertyComponent.cpp b/modules/foleys_gui_magic/Editor/foleys_StylePropertyComponent.cpp index 4dfc8afe..096d870b 100644 --- a/modules/foleys_gui_magic/Editor/foleys_StylePropertyComponent.cpp +++ b/modules/foleys_gui_magic/Editor/foleys_StylePropertyComponent.cpp @@ -75,7 +75,32 @@ StylePropertyComponent::StylePropertyComponent (MagicGUIBuilder& builderToUse, j remove.setConnectedEdges (juce::TextButton::ConnectedOnLeft | juce::TextButton::ConnectedOnRight); remove.onClick = [&] { - node.removeProperty (property, &builder.getUndoManager()); + // Three states: + // 1) Property has a non-empty value -> set to empty string + // 2) Property is explicitly empty string -> remove property entirely + // 3) Property not set (only default) -> do nothing + + if (node.hasProperty (property)) + { + if (node.getProperty (property).toString().isEmpty()) + { + // State 2 -> State 3: remove property entirely + // Break the label's Value binding BEFORE removing to prevent sync-back + if (auto* label = dynamic_cast(editor.get())) + { + juce::Value disconnected; + label->getTextValue().referTo (disconnected); + } + node.removeProperty (property, &builder.getUndoManager()); + } + else + { + // State 1 -> State 2: set to empty string + node.setProperty (property, "", &builder.getUndoManager()); + } + } + // State 3: property not set, do nothing (button should be disabled) + refresh(); }; diff --git a/modules/foleys_gui_magic/Editor/foleys_StyleTextPropertyComponent.cpp b/modules/foleys_gui_magic/Editor/foleys_StyleTextPropertyComponent.cpp index 41a7ec28..3dfc9724 100644 --- a/modules/foleys_gui_magic/Editor/foleys_StyleTextPropertyComponent.cpp +++ b/modules/foleys_gui_magic/Editor/foleys_StyleTextPropertyComponent.cpp @@ -69,11 +69,13 @@ void StyleTextPropertyComponent::refresh() if (node == inheritedFrom) { label->getTextValue().referTo (node.getPropertyAsValue (property, &builder.getUndoManager())); + label->setColour (juce::Label::textColourId, EditorColours::text); } else { label->getTextValue().referTo (label->getTextValue()); label->setText (value.toString(), juce::dontSendNotification); + label->setColour (juce::Label::textColourId, EditorColours::disabledText); } }