1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-02-09 04:30:09 +00:00

Optimised and tidied up some ValueTree methods. Added a method to MultiDocumentPanel.

This commit is contained in:
jules 2011-11-17 12:57:44 +00:00
parent ba2287033c
commit ef63c14040
6 changed files with 740 additions and 600 deletions

File diff suppressed because it is too large Load diff

View file

@ -164,6 +164,7 @@ public:
const var& operator[] (const Identifier& name) const;
/** Changes a named property of the node.
The name identifier must not be an empty string.
If the undoManager parameter is non-null, its UndoManager::perform() method will be used,
so that this change can be undone.
@see var, getProperty, removeProperty
@ -427,6 +428,11 @@ public:
/** Removes a listener that was previously added with addListener(). */
void removeListener (Listener* listener);
/** Causes a property-change callback to be triggered for the specified property,
calling any listeners that are registered.
*/
void sendPropertyChangeMessage (const Identifier& property);
//==============================================================================
/** This method uses a comparator object to sort the tree's children into order.
@ -454,10 +460,11 @@ public:
{
if (object != nullptr)
{
ReferenceCountedArray <SharedObject> sortedList (object->children);
OwnedArray<ValueTree> sortedList;
createListOfChildren (sortedList);
ComparatorAdapter <ElementComparator> adapter (comparator);
sortedList.sort (adapter, retainOrderOfEquivalentItems);
object->reorderChildren (sortedList, undoManager);
reorderChildren (sortedList, undoManager);
}
}
@ -468,78 +475,29 @@ public:
private:
//==============================================================================
class SetPropertyAction; friend class SetPropertyAction;
class AddOrRemoveChildAction; friend class AddOrRemoveChildAction;
class MoveChildAction; friend class MoveChildAction;
class SharedObject;
friend class SharedObject;
class JUCE_API SharedObject : public SingleThreadedReferenceCountedObject
{
public:
explicit SharedObject (const Identifier& type);
SharedObject (const SharedObject& other);
~SharedObject();
const Identifier type;
NamedValueSet properties;
ReferenceCountedArray <SharedObject> children;
SortedSet <ValueTree*> valueTreesWithListeners;
SharedObject* parent;
void sendPropertyChangeMessage (const Identifier& property);
void sendPropertyChangeMessage (ValueTree& tree, const Identifier& property);
void sendChildAddedMessage (ValueTree& parent, ValueTree& child);
void sendChildAddedMessage (ValueTree child);
void sendChildRemovedMessage (ValueTree& parent, ValueTree& child);
void sendChildRemovedMessage (ValueTree child);
void sendChildOrderChangedMessage (ValueTree& parent);
void sendChildOrderChangedMessage();
void sendParentChangeMessage();
const var& getProperty (const Identifier& name) const;
var getProperty (const Identifier& name, const var& defaultReturnValue) const;
void setProperty (const Identifier& name, const var& newValue, UndoManager*);
bool hasProperty (const Identifier& name) const;
void removeProperty (const Identifier& name, UndoManager*);
void removeAllProperties (UndoManager*);
bool isAChildOf (const SharedObject* possibleParent) const;
int indexOf (const ValueTree& child) const;
ValueTree getChildWithName (const Identifier& type) const;
ValueTree getOrCreateChildWithName (const Identifier& type, UndoManager* undoManager);
ValueTree getChildWithProperty (const Identifier& propertyName, const var& propertyValue) const;
void addChild (SharedObject* child, int index, UndoManager*);
void removeChild (int childIndex, UndoManager*);
void removeAllChildren (UndoManager*);
void moveChild (int currentIndex, int newIndex, UndoManager*);
void reorderChildren (const ReferenceCountedArray <SharedObject>& newOrder, UndoManager*);
bool isEquivalentTo (const SharedObject& other) const;
XmlElement* createXml() const;
private:
SharedObject& operator= (const SharedObject&);
JUCE_LEAK_DETECTOR (SharedObject);
};
ReferenceCountedObjectPtr<SharedObject> object;
ListenerList<Listener> listeners;
template <typename ElementComparator>
class ComparatorAdapter
struct ComparatorAdapter
{
public:
ComparatorAdapter (ElementComparator& comparator_) noexcept : comparator (comparator_) {}
int compareElements (SharedObject* const first, SharedObject* const second)
int compareElements (const ValueTree* const first, const ValueTree* const second)
{
return comparator.compareElements (ValueTree (first), ValueTree (second));
return comparator.compareElements (*first, *second);
}
private:
ElementComparator& comparator;
JUCE_DECLARE_NON_COPYABLE (ComparatorAdapter);
};
friend class SharedObject;
typedef ReferenceCountedObjectPtr <SharedObject> SharedObjectPtr;
SharedObjectPtr object;
ListenerList <Listener> listeners;
void createListOfChildren (OwnedArray<ValueTree>&) const;
void reorderChildren (const OwnedArray<ValueTree>&, UndoManager*);
#if JUCE_MSVC && ! DOXYGEN
public: // (workaround for VC6)