1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-28 02:30:05 +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:
jules 2015-02-25 17:38:22 +00:00
parent 17863a45b6
commit 6bc4d7627f
18 changed files with 108 additions and 100 deletions

View file

@ -16,4 +16,6 @@ Version 3.1.2 (not yet released)
- Performance improvements to XML parsing
- Basic SVG text support
- New Whirlpool hashing class
- Various minor additions to the Introjucer
- Various minor additions to the Introjucer
- Added parameters to the ValueTree::Listener::valueTreeChildRemoved() and valueTreeChildOrderChanged()
methods to include more info about exactly what changed - this is essential for some applications

View file

@ -138,9 +138,9 @@ private:
repaintItem();
}
void valueTreeChildAdded (ValueTree& parentTree, ValueTree&) override { treeChildrenChanged (parentTree); }
void valueTreeChildRemoved (ValueTree& parentTree, ValueTree&) override { treeChildrenChanged (parentTree); }
void valueTreeChildOrderChanged (ValueTree& parentTree) override { treeChildrenChanged (parentTree); }
void valueTreeChildAdded (ValueTree& parentTree, ValueTree&) override { treeChildrenChanged (parentTree); }
void valueTreeChildRemoved (ValueTree& parentTree, ValueTree&, int) override { treeChildrenChanged (parentTree); }
void valueTreeChildOrderChanged (ValueTree& parentTree, int, int) override { treeChildrenChanged (parentTree); }
void valueTreeParentChanged (ValueTree&) override {}
void treeChildrenChanged (const ValueTree& parentTree)

View file

@ -69,8 +69,8 @@ private:
void valueTreePropertyChanged (ValueTree&, const Identifier&) override { updateColourScheme(); }
void valueTreeChildAdded (ValueTree&, ValueTree&) override { updateColourScheme(); }
void valueTreeChildRemoved (ValueTree&, ValueTree&) override { updateColourScheme(); }
void valueTreeChildOrderChanged (ValueTree&) override { updateColourScheme(); }
void valueTreeChildRemoved (ValueTree&, ValueTree&, int) override { updateColourScheme(); }
void valueTreeChildOrderChanged (ValueTree&, int, int) override { updateColourScheme(); }
void valueTreeParentChanged (ValueTree&) override { updateColourScheme(); }
void valueTreeRedirected (ValueTree&) override { updateColourScheme(); }

View file

@ -217,8 +217,8 @@ void SourceCodeEditor::checkSaveState()
void SourceCodeEditor::valueTreePropertyChanged (ValueTree&, const Identifier&) { updateColourScheme(); }
void SourceCodeEditor::valueTreeChildAdded (ValueTree&, ValueTree&) { updateColourScheme(); }
void SourceCodeEditor::valueTreeChildRemoved (ValueTree&, ValueTree&) { updateColourScheme(); }
void SourceCodeEditor::valueTreeChildOrderChanged (ValueTree&) { updateColourScheme(); }
void SourceCodeEditor::valueTreeChildRemoved (ValueTree&, ValueTree&, int) { updateColourScheme(); }
void SourceCodeEditor::valueTreeChildOrderChanged (ValueTree&, int, int) { updateColourScheme(); }
void SourceCodeEditor::valueTreeParentChanged (ValueTree&) { updateColourScheme(); }
void SourceCodeEditor::valueTreeRedirected (ValueTree&) { updateColourScheme(); }

View file

@ -156,8 +156,8 @@ private:
void valueTreePropertyChanged (ValueTree&, const Identifier&) override;
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;
void valueTreeRedirected (ValueTree&) override;

View file

@ -119,7 +119,7 @@ public:
if (! generatedCodeFolder.createDirectory())
{
addError ("Couldn't create folder: " + generatedCodeFolder.getFullPathName());
return Project::Item (project, ValueTree::invalid);
return Project::Item (project, ValueTree());
}
const File file (generatedCodeFolder.getChildFile (filePath));
@ -127,7 +127,7 @@ public:
if (replaceFileIfDifferent (file, newData))
return addFileToGeneratedGroup (file);
return Project::Item (project, ValueTree::invalid);
return Project::Item (project, ValueTree());
}
Project::Item addFileToGeneratedGroup (const File& file)

View file

@ -115,8 +115,8 @@ public:
void valueTreePropertyChanged (ValueTree&, const Identifier&) override {}
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 {}
virtual bool isProjectSettings() const { return false; }
@ -230,9 +230,9 @@ public:
}
//==============================================================================
void valueTreeChildAdded (ValueTree& parentTree, ValueTree&) override { refreshIfNeeded (parentTree); }
void valueTreeChildRemoved (ValueTree& parentTree, ValueTree&) override { refreshIfNeeded (parentTree); }
void valueTreeChildOrderChanged (ValueTree& parentTree) override { refreshIfNeeded (parentTree); }
void valueTreeChildAdded (ValueTree& parentTree, ValueTree&) override { refreshIfNeeded (parentTree); }
void valueTreeChildRemoved (ValueTree& parentTree, ValueTree&, int) override { refreshIfNeeded (parentTree); }
void valueTreeChildOrderChanged (ValueTree& parentTree, int, int) override { refreshIfNeeded (parentTree); }
void refreshIfNeeded (ValueTree& changedTree)
{

View file

@ -107,9 +107,9 @@ public:
}
//==============================================================================
void valueTreeChildAdded (ValueTree& parentTree, ValueTree&) override { refreshIfNeeded (parentTree); }
void valueTreeChildRemoved (ValueTree& parentTree, ValueTree&) override { refreshIfNeeded (parentTree); }
void valueTreeChildOrderChanged (ValueTree& parentTree) override { refreshIfNeeded (parentTree); }
void valueTreeChildAdded (ValueTree& parentTree, ValueTree&) override { refreshIfNeeded (parentTree); }
void valueTreeChildRemoved (ValueTree& parentTree, ValueTree&, int) override { refreshIfNeeded (parentTree); }
void valueTreeChildOrderChanged (ValueTree& parentTree, int, int) override { refreshIfNeeded (parentTree); }
void refreshIfNeeded (ValueTree& changedTree)
{

View file

@ -366,9 +366,9 @@ public:
}
//==============================================================================
void valueTreeChildAdded (ValueTree& parentTree, ValueTree&) override { refreshIfNeeded (parentTree); }
void valueTreeChildRemoved (ValueTree& parentTree, ValueTree&) override { refreshIfNeeded (parentTree); }
void valueTreeChildOrderChanged (ValueTree& parentTree) override { refreshIfNeeded (parentTree); }
void valueTreeChildAdded (ValueTree& parentTree, ValueTree&) override { refreshIfNeeded (parentTree); }
void valueTreeChildRemoved (ValueTree& parentTree, ValueTree&, int) override { refreshIfNeeded (parentTree); }
void valueTreeChildOrderChanged (ValueTree& parentTree, int, int) override { refreshIfNeeded (parentTree); }
void refreshIfNeeded (ValueTree& changedTree)
{

View file

@ -96,8 +96,8 @@ public:
//==============================================================================
void valueTreePropertyChanged (ValueTree&, const Identifier&) override { itemChanged(); }
void valueTreeChildAdded (ValueTree&, ValueTree&) override { itemChanged(); }
void valueTreeChildRemoved (ValueTree&, ValueTree&) override { itemChanged(); }
void valueTreeChildOrderChanged (ValueTree&) override { itemChanged(); }
void valueTreeChildRemoved (ValueTree&, ValueTree&, int) override { itemChanged(); }
void valueTreeChildOrderChanged (ValueTree&, int, int) override { itemChanged(); }
void valueTreeParentChanged (ValueTree&) override { itemChanged(); }
private:

View file

@ -208,8 +208,8 @@ private:
void valueTreePropertyChanged (ValueTree&, const Identifier&) override { itemChanged(); }
void valueTreeChildAdded (ValueTree&, ValueTree&) override { itemChanged(); }
void valueTreeChildRemoved (ValueTree&, ValueTree&) override { itemChanged(); }
void valueTreeChildOrderChanged (ValueTree&) override { itemChanged(); }
void valueTreeChildRemoved (ValueTree&, ValueTree&, int) override { itemChanged(); }
void valueTreeChildOrderChanged (ValueTree&, int, int) override { itemChanged(); }
void valueTreeParentChanged (ValueTree&) override { itemChanged(); }
void itemChanged()

View file

@ -310,10 +310,10 @@ void Project::valueTreePropertyChanged (ValueTree&, const Identifier& property)
changed();
}
void Project::valueTreeChildAdded (ValueTree&, ValueTree&) { changed(); }
void Project::valueTreeChildRemoved (ValueTree&, ValueTree&) { changed(); }
void Project::valueTreeChildOrderChanged (ValueTree&) { changed(); }
void Project::valueTreeParentChanged (ValueTree&) {}
void Project::valueTreeChildAdded (ValueTree&, ValueTree&) { changed(); }
void Project::valueTreeChildRemoved (ValueTree&, ValueTree&, int) { changed(); }
void Project::valueTreeChildOrderChanged (ValueTree&, int, int) { changed(); }
void Project::valueTreeParentChanged (ValueTree&) {}
//==============================================================================
File Project::resolveFilename (String filename) const
@ -566,7 +566,7 @@ Project::Item Project::Item::findItemWithID (const String& targetId) const
}
}
return Item (project, ValueTree::invalid);
return Item (project, ValueTree());
}
bool Project::Item::canContain (const Item& child) const
@ -660,7 +660,7 @@ Project::Item Project::Item::findItemForFile (const File& file) const
}
}
return Item (project, ValueTree::invalid);
return Item (project, ValueTree());
}
File Project::Item::determineGroupFolder() const

View file

@ -256,8 +256,8 @@ public:
//==============================================================================
void valueTreePropertyChanged (ValueTree&, const Identifier&) override;
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;
//==============================================================================

View file

@ -222,9 +222,9 @@ public:
repaintItem();
}
void valueTreeChildAdded (ValueTree& parentTree, ValueTree&) override { treeChildrenChanged (parentTree); }
void valueTreeChildRemoved (ValueTree& parentTree, ValueTree&) override { treeChildrenChanged (parentTree); }
void valueTreeChildOrderChanged (ValueTree& parentTree) override { treeChildrenChanged (parentTree); }
void valueTreeChildAdded (ValueTree& parentTree, ValueTree&) override { treeChildrenChanged (parentTree); }
void valueTreeChildRemoved (ValueTree& parentTree, ValueTree&, int) override { treeChildrenChanged (parentTree); }
void valueTreeChildOrderChanged (ValueTree& parentTree, int, int) override { treeChildrenChanged (parentTree); }
void valueTreeParentChanged (ValueTree&) override {}
//==============================================================================

View file

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

View file

@ -403,7 +403,8 @@ public:
just check the parentTree parameter to make sure it's the one that you're interested in.
*/
virtual void valueTreeChildRemoved (ValueTree& parentTree,
ValueTree& childWhichHasBeenRemoved) = 0;
ValueTree& childWhichHasBeenRemoved,
int indexFromWhichChildWasRemoved) = 0;
/** This method is called when a tree's children have been re-shuffled.
@ -412,7 +413,8 @@ public:
If your tree has sub-trees but you only want to know about changes to the top level tree,
just check the parameter to make sure it's the tree that you're interested in.
*/
virtual void valueTreeChildOrderChanged (ValueTree& parentTreeWhoseChildrenHaveMoved) = 0;
virtual void valueTreeChildOrderChanged (ValueTree& parentTreeWhoseChildrenHaveMoved,
int oldIndex, int newIndex) = 0;
/** This method is called when a tree has been added or removed from a parent node.
@ -482,7 +484,7 @@ public:
{
OwnedArray<ValueTree> sortedList;
createListOfChildren (sortedList);
ComparatorAdapter <ElementComparator> adapter (comparator);
ComparatorAdapter<ElementComparator> adapter (comparator);
sortedList.sort (adapter, retainOrderOfEquivalentItems);
reorderChildren (sortedList, undoManager);
}

View file

@ -200,12 +200,12 @@ void ComponentBuilder::valueTreeChildAdded (ValueTree& tree, ValueTree&)
ComponentBuilderHelpers::updateComponent (*this, tree);
}
void ComponentBuilder::valueTreeChildRemoved (ValueTree& tree, ValueTree&)
void ComponentBuilder::valueTreeChildRemoved (ValueTree& tree, ValueTree&, int)
{
ComponentBuilderHelpers::updateComponent (*this, tree);
}
void ComponentBuilder::valueTreeChildOrderChanged (ValueTree& tree)
void ComponentBuilder::valueTreeChildOrderChanged (ValueTree& tree, int, int)
{
ComponentBuilderHelpers::updateComponent (*this, tree);
}

View file

@ -235,8 +235,8 @@ private:
void valueTreePropertyChanged (ValueTree&, const Identifier&) override;
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 (ComponentBuilder)