LMMS
Loading...
Searching...
No Matches
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) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 By using JUCE, you agree to the terms of both the JUCE 7 End-User License
11 Agreement and JUCE Privacy Policy.
12
13 End User License Agreement: www.juce.com/juce-7-licence
14 Privacy Policy: www.juce.com/juce-privacy-policy
15
16 Or: You may also use this code under the terms of the GPL v3 (see
17 www.gnu.org/licenses).
18
19 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
20 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
21 DISCLAIMED.
22
23 ==============================================================================
24*/
25
26namespace juce
27{
28
29//==============================================================================
72{
73public:
74 //==============================================================================
81 ValueTree() noexcept;
82
88 explicit ValueTree (const Identifier& type);
89
129 ValueTree (const Identifier& type,
130 std::initializer_list<NamedValueSet::NamedValue> properties,
131 std::initializer_list<ValueTree> subTrees = {});
132
134 ValueTree (const ValueTree&) noexcept;
135
137 ValueTree (ValueTree&&) noexcept;
138
145 ValueTree& operator= (const ValueTree&);
146
148 ~ValueTree();
149
154 bool operator== (const ValueTree&) const noexcept;
155
160 bool operator!= (const ValueTree&) const noexcept;
161
168 bool isEquivalentTo (const ValueTree&) const;
169
170 //==============================================================================
174 bool isValid() const noexcept { return object != nullptr; }
175
177 ValueTree createCopy() const;
178
184 void copyPropertiesFrom (const ValueTree& source, UndoManager* undoManager);
185
190 void copyPropertiesAndChildrenFrom (const ValueTree& source, UndoManager* undoManager);
191
192 //==============================================================================
197 Identifier getType() const noexcept;
198
203 bool hasType (const Identifier& typeName) const noexcept;
204
205 //==============================================================================
211 const var& getProperty (const Identifier& name) const noexcept;
212
218 var getProperty (const Identifier& name, const var& defaultReturnValue) const;
219
224 const var* getPropertyPointer (const Identifier& name) const noexcept;
225
231 const var& operator[] (const Identifier& name) const noexcept;
232
240 ValueTree& setProperty (const Identifier& name, const var& newValue, UndoManager* undoManager);
241
243 bool hasProperty (const Identifier& name) const noexcept;
244
249 void removeProperty (const Identifier& name, UndoManager* undoManager);
250
255 void removeAllProperties (UndoManager* undoManager);
256
260 int getNumProperties() const noexcept;
261
268 Identifier getPropertyName (int index) const noexcept;
269
278 Value getPropertyAsValue (const Identifier& name, UndoManager* undoManager,
279 bool shouldUpdateSynchronously = false);
280
281 //==============================================================================
285 int getNumChildren() const noexcept;
286
291 ValueTree getChild (int index) const;
292
298 ValueTree getChildWithName (const Identifier& type) const;
299
306 ValueTree getOrCreateChildWithName (const Identifier& type, UndoManager* undoManager);
307
314 ValueTree getChildWithProperty (const Identifier& propertyName, const var& propertyValue) const;
315
325 void addChild (const ValueTree& child, int index, UndoManager* undoManager);
326
331 void appendChild (const ValueTree& child, UndoManager* undoManager);
332
337 void removeChild (const ValueTree& child, UndoManager* undoManager);
338
344 void removeChild (int childIndex, UndoManager* undoManager);
345
350 void removeAllChildren (UndoManager* undoManager);
351
364 void moveChild (int currentIndex, int newIndex, UndoManager* undoManager);
365
369 bool isAChildOf (const ValueTree& possibleParent) const noexcept;
370
374 int indexOf (const ValueTree& child) const noexcept;
375
380 ValueTree getParent() const noexcept;
381
385 ValueTree getRoot() const noexcept;
386
393 ValueTree getSibling (int delta) const noexcept;
394
395 //==============================================================================
400 struct Iterator
401 {
402 Iterator (const ValueTree&, bool isEnd);
404
405 bool operator== (const Iterator&) const;
406 bool operator!= (const Iterator&) const;
407 ValueTree operator*() const;
408
409 using difference_type = std::ptrdiff_t;
413 using iterator_category = std::forward_iterator_tag;
414
415 private:
416 void* internal;
417 };
418
421
424
425 //==============================================================================
431 std::unique_ptr<XmlElement> createXml() const;
432
437 static ValueTree fromXml (const XmlElement& xml);
438
443 static ValueTree fromXml (const String& xmlText);
444
449 String toXmlString (const XmlElement::TextFormat& format = {}) const;
450
451 //==============================================================================
459 void writeToStream (OutputStream& output) const;
460
462 static ValueTree readFromStream (InputStream& input);
463
465 static ValueTree readFromData (const void* data, size_t numBytes);
466
470 static ValueTree readFromGZIPData (const void* data, size_t numBytes);
471
472 //==============================================================================
479 {
480 public:
482 virtual ~Listener() = default;
483
490 virtual void valueTreePropertyChanged (ValueTree& treeWhosePropertyHasChanged,
491 const Identifier& property);
492
499 virtual void valueTreeChildAdded (ValueTree& parentTree,
500 ValueTree& childWhichHasBeenAdded);
501
509 virtual void valueTreeChildRemoved (ValueTree& parentTree,
510 ValueTree& childWhichHasBeenRemoved,
511 int indexFromWhichChildWasRemoved);
512
520 virtual void valueTreeChildOrderChanged (ValueTree& parentTreeWhoseChildrenHaveMoved,
521 int oldIndex, int newIndex);
522
529 virtual void valueTreeParentChanged (ValueTree& treeWhoseParentHasChanged);
530
535 virtual void valueTreeRedirected (ValueTree& treeWhichHasBeenChanged);
536 };
537
552 void addListener (Listener* listener);
553
555 void removeListener (Listener* listener);
556
561 const Identifier& name, const var& newValue,
562 UndoManager* undoManager);
563
567 void sendPropertyChangeMessage (const Identifier& property);
568
569 //==============================================================================
591 template <typename ElementComparator>
592 void sort (ElementComparator& comparator, UndoManager* undoManager, bool retainOrderOfEquivalentItems)
593 {
594 if (object != nullptr)
595 {
596 OwnedArray<ValueTree> sortedList;
597 createListOfChildren (sortedList);
598 ComparatorAdapter<ElementComparator> adapter (comparator);
599 sortedList.sort (adapter, retainOrderOfEquivalentItems);
600 reorderChildren (sortedList, undoManager);
601 }
602 }
603
607 int getReferenceCount() const noexcept;
608
609 #if JUCE_ALLOW_STATIC_NULL_VARIABLES && ! defined (DOXYGEN)
610 /* An invalid ValueTree that can be used if you need to return one as an error condition, etc. */
611 [[deprecated ("If you need an empty ValueTree object, just use ValueTree() or {}.")]]
612 static const ValueTree invalid;
613 #endif
614
615private:
616 //==============================================================================
617 JUCE_PUBLIC_IN_DLL_BUILD (class SharedObject)
618 friend class SharedObject;
619
622
623 template <typename ElementComparator>
625 {
626 ComparatorAdapter (ElementComparator& comp) noexcept : comparator (comp) {}
627
628 int compareElements (const ValueTree* const first, const ValueTree* const second)
629 {
630 return comparator.compareElements (*first, *second);
631 }
632
633 private:
634 ElementComparator& comparator;
636 };
637
640
642 explicit ValueTree (SharedObject&) noexcept;
643};
644
645} // namespace juce
#define noexcept
Definition DistrhoDefines.h:72
#define final
Definition DistrhoDefines.h:74
CAdPlugDatabase::CRecord::RecordType type
Definition adplugdb.cpp:93
Definition juce_Identifier.h:39
Definition juce_InputStream.h:37
Definition juce_ListenerList.h:70
Definition juce_OutputStream.h:38
Definition juce_OwnedArray.h:51
void sort(ElementComparator &comparator, bool retainOrderOfEquivalentItems=false) noexcept
Definition juce_OwnedArray.h:821
Definition juce_ReferenceCountedObject.h:247
Definition juce_String.h:53
Definition juce_UndoManager.h:52
Definition juce_Value.h:51
Definition juce_ValueTree.h:479
virtual void valueTreeRedirected(ValueTree &treeWhichHasBeenChanged)
Definition juce_ValueTree.cpp:1096
virtual void valueTreeChildRemoved(ValueTree &parentTree, ValueTree &childWhichHasBeenRemoved, int indexFromWhichChildWasRemoved)
Definition juce_ValueTree.cpp:1093
virtual void valueTreeChildOrderChanged(ValueTree &parentTreeWhoseChildrenHaveMoved, int oldIndex, int newIndex)
Definition juce_ValueTree.cpp:1094
virtual ~Listener()=default
virtual void valueTreeParentChanged(ValueTree &treeWhoseParentHasChanged)
Definition juce_ValueTree.cpp:1095
virtual void valueTreePropertyChanged(ValueTree &treeWhosePropertyHasChanged, const Identifier &property)
Definition juce_ValueTree.cpp:1091
virtual void valueTreeChildAdded(ValueTree &parentTree, ValueTree &childWhichHasBeenAdded)
Definition juce_ValueTree.cpp:1092
Definition juce_ValueTree.cpp:30
Definition juce_ValueTree.h:72
Iterator begin() const noexcept
Definition juce_ValueTree.cpp:882
std::unique_ptr< XmlElement > createXml() const
Definition juce_ValueTree.cpp:989
ValueTree(ReferenceCountedObjectPtr< SharedObject >) noexcept
String toXmlString(const XmlElement::TextFormat &format={}) const
Definition juce_ValueTree.cpp:1020
void reorderChildren(const OwnedArray< ValueTree > &, UndoManager *)
Definition juce_ValueTree.cpp:956
bool isValid() const noexcept
Definition juce_ValueTree.h:174
void addListener(Listener *listener)
Definition juce_ValueTree.cpp:963
ValueTree & setPropertyExcludingListener(Listener *listenerToExclude, const Identifier &name, const var &newValue, UndoManager *undoManager)
Definition juce_ValueTree.cpp:760
ValueTree() noexcept
Definition juce_ValueTree.cpp:578
static ValueTree fromXml(const XmlElement &xml)
Definition juce_ValueTree.cpp:994
Iterator end() const noexcept
Definition juce_ValueTree.cpp:883
void removeListener(Listener *listener)
Definition juce_ValueTree.cpp:974
bool isEquivalentTo(const ValueTree &) const
Definition juce_ValueTree.cpp:653
void sendPropertyChangeMessage(const Identifier &property)
Definition juce_ValueTree.cpp:982
ListenerList< Listener > listeners
Definition juce_ValueTree.h:621
void sort(ElementComparator &comparator, UndoManager *undoManager, bool retainOrderOfEquivalentItems)
Definition juce_ValueTree.h:592
void createListOfChildren(OwnedArray< ValueTree > &) const
Definition juce_ValueTree.cpp:948
Definition juce_XmlElement.h:83
Definition juce_Variant.h:42
static const char * name
Definition pugl.h:1582
JSAMPIMAGE data
Definition jpeglib.h:945
#define JUCE_DECLARE_NON_COPYABLE(className)
#define JUCE_API
Definition juce_StandardHeader.h:152
#define JUCE_PUBLIC_IN_DLL_BUILD(declaration)
Definition juce_StandardHeader.h:158
static int JUCE_CDECL comp(const void *a, const void *b)
Definition lsp.c:298
Definition carla_juce.cpp:31
Definition juce_Uuid.h:141
#define false
Definition ordinals.h:83
Definition juce_ValueTree.h:625
ComparatorAdapter(ElementComparator &comp) noexcept
Definition juce_ValueTree.h:626
int compareElements(const ValueTree *const first, const ValueTree *const second)
Definition juce_ValueTree.h:628
ElementComparator & comparator
Definition juce_ValueTree.h:634
Definition juce_ValueTree.h:401
ValueTree & reference
Definition juce_ValueTree.h:411
std::ptrdiff_t difference_type
Definition juce_ValueTree.h:409
Iterator(const ValueTree &, bool isEnd)
Definition juce_ValueTree.cpp:863
ValueTree operator*() const
Definition juce_ValueTree.cpp:877
std::forward_iterator_tag iterator_category
Definition juce_ValueTree.h:413
ValueTree value_type
Definition juce_ValueTree.h:410
Iterator & operator++()
Definition juce_ValueTree.cpp:868
ValueTree * pointer
Definition juce_ValueTree.h:412
void * internal
Definition juce_ValueTree.h:416
_WDL_CSTRING_PREFIX void INT_PTR const char * format
Definition wdlcstring.h:263
#define const
Definition zconf.h:137