1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Added support for removing parameters to ValueTreeSynchroniser

This commit is contained in:
jules 2017-05-03 11:16:22 +01:00
parent 6b5be8d9ef
commit e38643b2a9

View file

@ -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<int>& 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();