From e38643b2a902c5cd786a4ecf638f32fa846a1a45 Mon Sep 17 00:00:00 2001 From: jules Date: Wed, 3 May 2017 11:16:22 +0100 Subject: [PATCH] Added support for removing parameters to ValueTreeSynchroniser --- .../values/juce_ValueTreeSynchroniser.cpp | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/modules/juce_data_structures/values/juce_ValueTreeSynchroniser.cpp b/modules/juce_data_structures/values/juce_ValueTreeSynchroniser.cpp index 5a8d85a784..e4fb27b9fb 100644 --- a/modules/juce_data_structures/values/juce_ValueTreeSynchroniser.cpp +++ b/modules/juce_data_structures/values/juce_ValueTreeSynchroniser.cpp @@ -32,7 +32,8 @@ namespace ValueTreeSynchroniserHelpers fullSync = 2, childAdded = 3, childRemoved = 4, - childMoved = 5 + childMoved = 5, + propertyRemoved = 6 }; static void getValueTreePath (ValueTree v, const ValueTree& topLevelTree, Array& path) @@ -73,14 +74,14 @@ namespace ValueTreeSynchroniserHelpers const int numLevels = input.readCompressedInt(); if (! isPositiveAndBelow (numLevels, 65536)) // sanity-check - return ValueTree(); + return {}; for (int i = numLevels; --i >= 0;) { const int index = input.readCompressedInt(); if (! isPositiveAndBelow (index, v.getNumChildren())) - return ValueTree(); + return {}; v = v.getChild (index); } @@ -110,9 +111,19 @@ void ValueTreeSynchroniser::sendFullSyncCallback() void ValueTreeSynchroniser::valueTreePropertyChanged (ValueTree& vt, const Identifier& property) { MemoryOutputStream m; - ValueTreeSynchroniserHelpers::writeHeader (*this, m, ValueTreeSynchroniserHelpers::propertyChanged, vt); - m.writeString (property.toString()); - vt.getProperty (property).writeToStream (m); + + if (auto* value = vt.getPropertyPointer (property)) + { + ValueTreeSynchroniserHelpers::writeHeader (*this, m, ValueTreeSynchroniserHelpers::propertyChanged, vt); + m.writeString (property.toString()); + vt.getProperty (property).writeToStream (m); + } + else + { + ValueTreeSynchroniserHelpers::writeHeader (*this, m, ValueTreeSynchroniserHelpers::propertyRemoved, vt); + m.writeString (property.toString()); + } + stateChanged (m.getData(), m.getDataSize()); } @@ -173,6 +184,13 @@ bool ValueTreeSynchroniser::applyChange (ValueTree& root, const void* data, size return true; } + case ValueTreeSynchroniserHelpers::propertyRemoved: + { + Identifier property (input.readString()); + v.removeProperty (property, undoManager); + return true; + } + case ValueTreeSynchroniserHelpers::childAdded: { const int index = input.readCompressedInt();