mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
Modified the ValueTree::Listener::valueTreeChildRemoved() and ValueTree::Listener::valueTreeChildOrderChanged() methods to include some extra parameters that give more detailed info about exactly what changed.
This commit is contained in:
parent
17863a45b6
commit
6bc4d7627f
18 changed files with 108 additions and 100 deletions
|
|
@ -62,23 +62,20 @@ public:
|
|||
{
|
||||
const int numListeners = valueTreesWithListeners.size();
|
||||
|
||||
if (numListeners > 0)
|
||||
if (numListeners == 1)
|
||||
{
|
||||
if (numListeners == 1)
|
||||
{
|
||||
valueTreesWithListeners.getUnchecked(0)->listeners.call (method, tree);
|
||||
}
|
||||
else
|
||||
{
|
||||
const SortedSet<ValueTree*> listenersCopy (valueTreesWithListeners);
|
||||
valueTreesWithListeners.getUnchecked(0)->listeners.call (method, tree);
|
||||
}
|
||||
else if (numListeners > 0)
|
||||
{
|
||||
const SortedSet<ValueTree*> listenersCopy (valueTreesWithListeners);
|
||||
|
||||
for (int i = 0; i < numListeners; ++i)
|
||||
{
|
||||
ValueTree* const v = listenersCopy.getUnchecked(i);
|
||||
for (int i = 0; i < numListeners; ++i)
|
||||
{
|
||||
ValueTree* const v = listenersCopy.getUnchecked(i);
|
||||
|
||||
if (i == 0 || valueTreesWithListeners.contains (v))
|
||||
v->listeners.call (method, tree);
|
||||
}
|
||||
if (i == 0 || valueTreesWithListeners.contains (v))
|
||||
v->listeners.call (method, tree);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -88,23 +85,43 @@ public:
|
|||
{
|
||||
const int numListeners = valueTreesWithListeners.size();
|
||||
|
||||
if (numListeners > 0)
|
||||
if (numListeners == 1)
|
||||
{
|
||||
if (numListeners == 1)
|
||||
valueTreesWithListeners.getUnchecked(0)->listeners.call (method, tree, param2);
|
||||
}
|
||||
else if (numListeners > 0)
|
||||
{
|
||||
const SortedSet<ValueTree*> listenersCopy (valueTreesWithListeners);
|
||||
|
||||
for (int i = 0; i < numListeners; ++i)
|
||||
{
|
||||
valueTreesWithListeners.getUnchecked(0)->listeners.call (method, tree, param2);
|
||||
ValueTree* const v = listenersCopy.getUnchecked(i);
|
||||
|
||||
if (i == 0 || valueTreesWithListeners.contains (v))
|
||||
v->listeners.call (method, tree, param2);
|
||||
}
|
||||
else
|
||||
}
|
||||
}
|
||||
|
||||
template <typename Method, typename ParamType1, typename ParamType2>
|
||||
void callListeners (Method method, ValueTree& tree, ParamType1& param2, ParamType2& param3) const
|
||||
{
|
||||
const int numListeners = valueTreesWithListeners.size();
|
||||
|
||||
if (numListeners == 1)
|
||||
{
|
||||
valueTreesWithListeners.getUnchecked(0)->listeners.call (method, tree, param2, param3);
|
||||
}
|
||||
else if (numListeners > 0)
|
||||
{
|
||||
const SortedSet<ValueTree*> listenersCopy (valueTreesWithListeners);
|
||||
|
||||
for (int i = 0; i < numListeners; ++i)
|
||||
{
|
||||
const SortedSet<ValueTree*> listenersCopy (valueTreesWithListeners);
|
||||
ValueTree* const v = listenersCopy.getUnchecked(i);
|
||||
|
||||
for (int i = 0; i < numListeners; ++i)
|
||||
{
|
||||
ValueTree* const v = listenersCopy.getUnchecked(i);
|
||||
|
||||
if (i == 0 || valueTreesWithListeners.contains (v))
|
||||
v->listeners.call (method, tree, param2);
|
||||
}
|
||||
if (i == 0 || valueTreesWithListeners.contains (v))
|
||||
v->listeners.call (method, tree, param2, param3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -125,20 +142,20 @@ public:
|
|||
t->callListeners (&ValueTree::Listener::valueTreeChildAdded, tree, child);
|
||||
}
|
||||
|
||||
void sendChildRemovedMessage (ValueTree child)
|
||||
void sendChildRemovedMessage (ValueTree child, int index)
|
||||
{
|
||||
ValueTree tree (this);
|
||||
|
||||
for (ValueTree::SharedObject* t = this; t != nullptr; t = t->parent)
|
||||
t->callListeners (&ValueTree::Listener::valueTreeChildRemoved, tree, child);
|
||||
t->callListeners (&ValueTree::Listener::valueTreeChildRemoved, tree, child, index);
|
||||
}
|
||||
|
||||
void sendChildOrderChangedMessage()
|
||||
void sendChildOrderChangedMessage (int oldIndex, int newIndex)
|
||||
{
|
||||
ValueTree tree (this);
|
||||
|
||||
for (ValueTree::SharedObject* t = this; t != nullptr; t = t->parent)
|
||||
t->callListeners (&ValueTree::Listener::valueTreeChildOrderChanged, tree);
|
||||
t->callListeners (&ValueTree::Listener::valueTreeChildOrderChanged, tree, oldIndex, newIndex);
|
||||
}
|
||||
|
||||
void sendParentChangeMessage()
|
||||
|
|
@ -323,7 +340,7 @@ public:
|
|||
{
|
||||
children.remove (childIndex);
|
||||
child->parent = nullptr;
|
||||
sendChildRemovedMessage (ValueTree (child));
|
||||
sendChildRemovedMessage (ValueTree (child), childIndex);
|
||||
child->sendParentChangeMessage();
|
||||
}
|
||||
else
|
||||
|
|
@ -350,7 +367,7 @@ public:
|
|||
if (undoManager == nullptr)
|
||||
{
|
||||
children.move (currentIndex, newIndex);
|
||||
sendChildOrderChangedMessage();
|
||||
sendChildOrderChangedMessage (currentIndex, newIndex);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -366,28 +383,15 @@ public:
|
|||
{
|
||||
jassert (newOrder.size() == children.size());
|
||||
|
||||
if (undoManager == nullptr)
|
||||
for (int i = 0; i < children.size(); ++i)
|
||||
{
|
||||
children.clear();
|
||||
children.ensureStorageAllocated (newOrder.size());
|
||||
SharedObject* const child = newOrder.getUnchecked(i)->object;
|
||||
|
||||
for (int i = 0; i < newOrder.size(); ++i)
|
||||
children.add (newOrder.getUnchecked(i)->object);
|
||||
|
||||
sendChildOrderChangedMessage();
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < children.size(); ++i)
|
||||
if (children.getObjectPointerUnchecked (i) != child)
|
||||
{
|
||||
SharedObject* const child = newOrder.getUnchecked(i)->object;
|
||||
|
||||
if (children.getObjectPointerUnchecked (i) != child)
|
||||
{
|
||||
const int oldIndex = children.indexOf (child);
|
||||
jassert (oldIndex >= 0);
|
||||
moveChild (oldIndex, i, undoManager);
|
||||
}
|
||||
const int oldIndex = children.indexOf (child);
|
||||
jassert (oldIndex >= 0);
|
||||
moveChild (oldIndex, i, undoManager);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -825,8 +829,8 @@ private:
|
|||
}
|
||||
|
||||
void valueTreeChildAdded (ValueTree&, ValueTree&) override {}
|
||||
void valueTreeChildRemoved (ValueTree&, ValueTree&) override {}
|
||||
void valueTreeChildOrderChanged (ValueTree&) override {}
|
||||
void valueTreeChildRemoved (ValueTree&, ValueTree&, int) override {}
|
||||
void valueTreeChildOrderChanged (ValueTree&, int, int) override {}
|
||||
void valueTreeParentChanged (ValueTree&) override {}
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ValueTreePropertyValueSource)
|
||||
|
|
@ -1108,8 +1112,8 @@ public:
|
|||
ValueTree v2 = ValueTree::readFromStream (mi);
|
||||
expect (v1.isEquivalentTo (v2));
|
||||
|
||||
ScopedPointer <XmlElement> xml1 (v1.createXml());
|
||||
ScopedPointer <XmlElement> xml2 (v2.createCopy().createXml());
|
||||
ScopedPointer<XmlElement> xml1 (v1.createXml());
|
||||
ScopedPointer<XmlElement> xml2 (v2.createCopy().createXml());
|
||||
expect (xml1->isEquivalentTo (xml2, false));
|
||||
|
||||
ValueTree v4 = v2.createCopy();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue