diff --git a/libs/main/types/pivaluetree.cpp b/libs/main/types/pivaluetree.cpp index b88f0914..ade43489 100644 --- a/libs/main/types/pivaluetree.cpp +++ b/libs/main/types/pivaluetree.cpp @@ -119,6 +119,16 @@ void PIValueTree::applyValues(const PIValueTree & root, bool recursive) { } +PIVariant PIValueTree::childValue(const PIString & child_name, const PIVariant & default_value, bool * exists) const { + if (!contains(child_name)) { + if (exists) *exists = false; + return default_value; + } + return child(child_name).value(); + if (exists) *exists = true; +} + + bool PIValueTree::contains(const PIString & name) const { if (_is_null) return true; for (const auto & c: _children) diff --git a/libs/main/types/pivaluetree.h b/libs/main/types/pivaluetree.h index 816ae708..f85aefb5 100644 --- a/libs/main/types/pivaluetree.h +++ b/libs/main/types/pivaluetree.h @@ -92,6 +92,7 @@ public: const PIVector & children() const { return _children; } void clearChildren() { _children.clear(); } + PIVariant childValue(const PIString & child_name, const PIVariant & default_value = PIVariant(), bool * exists = nullptr) const; bool contains(const PIString & name) const; bool contains(const PIStringList & path) const;