openshot-audio  0.1.6
juce_ValueTree.h
Go to the documentation of this file.
1 /*
2  ==============================================================================
3 
4  This file is part of the JUCE library.
5  Copyright (c) 2015 - ROLI Ltd.
6 
7  Permission is granted to use this software under the terms of either:
8  a) the GPL v2 (or any later version)
9  b) the Affero GPL v3
10 
11  Details of these licenses can be found at: www.gnu.org/licenses
12 
13  JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
14  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15  A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 
17  ------------------------------------------------------------------------------
18 
19  To release a closed-source product which uses JUCE, commercial licenses are
20  available: visit www.juce.com for more information.
21 
22  ==============================================================================
23 */
24 
25 #ifndef JUCE_VALUETREE_H_INCLUDED
26 #define JUCE_VALUETREE_H_INCLUDED
27 
28 
29 //==============================================================================
65 {
66 public:
67  //==============================================================================
77 
82  explicit ValueTree (const Identifier& type);
83 
85  ValueTree (const ValueTree&);
86 
88  ValueTree& operator= (const ValueTree&);
89 
90  #if JUCE_COMPILER_SUPPORTS_MOVE_SEMANTICS
92  #endif
93 
95  ~ValueTree();
96 
101  bool operator== (const ValueTree&) const noexcept;
102 
107  bool operator!= (const ValueTree&) const noexcept;
108 
115  bool isEquivalentTo (const ValueTree&) const;
116 
117  //==============================================================================
122  bool isValid() const { return object != nullptr; }
123 
125  ValueTree createCopy() const;
126 
127  //==============================================================================
132  Identifier getType() const;
133 
137  bool hasType (const Identifier& typeName) const;
138 
139  //==============================================================================
145  const var& getProperty (const Identifier& name) const;
146 
152  var getProperty (const Identifier& name, const var& defaultReturnValue) const;
153 
159  const var& operator[] (const Identifier& name) const;
160 
168  ValueTree& setProperty (const Identifier& name, const var& newValue, UndoManager* undoManager);
169 
171  bool hasProperty (const Identifier& name) const;
172 
177  void removeProperty (const Identifier& name, UndoManager* undoManager);
178 
183  void removeAllProperties (UndoManager* undoManager);
184 
188  int getNumProperties() const;
189 
193  Identifier getPropertyName (int index) const;
194 
201  Value getPropertyAsValue (const Identifier& name, UndoManager* undoManager);
202 
207  void copyPropertiesFrom (const ValueTree& source, UndoManager* undoManager);
208 
209  //==============================================================================
213  int getNumChildren() const;
214 
219  ValueTree getChild (int index) const;
220 
226  ValueTree getChildWithName (const Identifier& type) const;
227 
235  ValueTree getOrCreateChildWithName (const Identifier& type, UndoManager* undoManager);
236 
245  ValueTree getChildWithProperty (const Identifier& propertyName, const var& propertyValue) const;
246 
258  void addChild (const ValueTree& child, int index, UndoManager* undoManager);
259 
264  void removeChild (const ValueTree& child, UndoManager* undoManager);
265 
270  void removeChild (int childIndex, UndoManager* undoManager);
271 
276  void removeAllChildren (UndoManager* undoManager);
277 
291  void moveChild (int currentIndex, int newIndex, UndoManager* undoManager);
292 
296  bool isAChildOf (const ValueTree& possibleParent) const;
297 
301  int indexOf (const ValueTree& child) const;
302 
307  ValueTree getParent() const;
308 
315  ValueTree getSibling (int delta) const;
316 
317  //==============================================================================
327  XmlElement* createXml() const;
328 
334  static ValueTree fromXml (const XmlElement& xml);
335 
339  String toXmlString() const;
340 
341  //==============================================================================
349  void writeToStream (OutputStream& output) const;
350 
352  static ValueTree readFromStream (InputStream& input);
353 
355  static ValueTree readFromData (const void* data, size_t numBytes);
356 
360  static ValueTree readFromGZIPData (const void* data, size_t numBytes);
361 
362  //==============================================================================
369  {
370  public:
372  virtual ~Listener() {}
373 
385  virtual void valueTreePropertyChanged (ValueTree& treeWhosePropertyHasChanged,
386  const Identifier& property) = 0;
387 
395  virtual void valueTreeChildAdded (ValueTree& parentTree,
396  ValueTree& childWhichHasBeenAdded) = 0;
397 
405  virtual void valueTreeChildRemoved (ValueTree& parentTree,
406  ValueTree& childWhichHasBeenRemoved,
407  int indexFromWhichChildWasRemoved) = 0;
408 
416  virtual void valueTreeChildOrderChanged (ValueTree& parentTreeWhoseChildrenHaveMoved,
417  int oldIndex, int newIndex) = 0;
418 
425  virtual void valueTreeParentChanged (ValueTree& treeWhoseParentHasChanged) = 0;
426 
431  virtual void valueTreeRedirected (ValueTree& treeWhichHasBeenChanged);
432  };
433 
448  void addListener (Listener* listener);
449 
451  void removeListener (Listener* listener);
452 
456  void sendPropertyChangeMessage (const Identifier& property);
457 
458  //==============================================================================
480  template <typename ElementComparator>
481  void sort (ElementComparator& comparator, UndoManager* undoManager, bool retainOrderOfEquivalentItems)
482  {
483  if (object != nullptr)
484  {
485  OwnedArray<ValueTree> sortedList;
486  createListOfChildren (sortedList);
487  ComparatorAdapter<ElementComparator> adapter (comparator);
488  sortedList.sort (adapter, retainOrderOfEquivalentItems);
489  reorderChildren (sortedList, undoManager);
490  }
491  }
492 
496  static const ValueTree invalid;
497 
501  int getReferenceCount() const noexcept;
502 
503 private:
504  //==============================================================================
506  friend class SharedObject;
507 
508  ReferenceCountedObjectPtr<SharedObject> object;
509  ListenerList<Listener> listeners;
510 
511  template <typename ElementComparator>
512  struct ComparatorAdapter
513  {
514  ComparatorAdapter (ElementComparator& comp) noexcept : comparator (comp) {}
515 
516  int compareElements (const ValueTree* const first, const ValueTree* const second)
517  {
518  return comparator.compareElements (*first, *second);
519  }
520 
521  private:
522  ElementComparator& comparator;
523  JUCE_DECLARE_NON_COPYABLE (ComparatorAdapter)
524  };
525 
526  void createListOfChildren (OwnedArray<ValueTree>&) const;
527  void reorderChildren (const OwnedArray<ValueTree>&, UndoManager*);
528 
529  explicit ValueTree (SharedObject*);
530 };
531 
532 
533 #endif // JUCE_VALUETREE_H_INCLUDED
Definition: juce_Variant.h:46
void sort(ElementComparator &comparator, bool retainOrderOfEquivalentItems=false) const noexcept
Definition: juce_OwnedArray.h:854
virtual ~Listener()
Definition: juce_ValueTree.h:372
#define noexcept
Definition: juce_CompilerSupport.h:141
bool isValid() const
Definition: juce_ValueTree.h:122
Definition: juce_ValueTree.h:368
Definition: juce_ValueTree.cpp:25
Definition: juce_InputStream.h:41
Definition: juce_String.h:43
void sort(ElementComparator &comparator, UndoManager *undoManager, bool retainOrderOfEquivalentItems)
Definition: juce_ValueTree.h:481
#define JUCE_API
Definition: juce_StandardHeader.h:139
#define JUCE_PUBLIC_IN_DLL_BUILD(declaration)
Definition: juce_StandardHeader.h:145
Definition: juce_XmlElement.h:142
Definition: juce_ListenerList.h:69
Definition: juce_ReferenceCountedObject.h:227
Definition: juce_OutputStream.h:42
bool operator==(const var &v1, const var &v2) noexcept
Definition: juce_Variant.cpp:565
Definition: juce_OwnedArray.h:55
Definition: juce_Value.h:44
#define JUCE_DECLARE_NON_COPYABLE(className)
Definition: juce_PlatformDefs.h:191
static const ValueTree invalid
Definition: juce_ValueTree.h:496
Definition: juce_ValueTree.h:64
Definition: juce_UndoManager.h:49
bool operator!=(const var &v1, const var &v2) noexcept
Definition: juce_Variant.cpp:566
Definition: juce_Identifier.h:43