X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fgui_object.cc;h=3e21f82fa424280bd76d56991081b0c5bc7453f3;hb=41c4c41eaa09a7d831988af828dd040499130bf1;hp=2b516d04dac97e64b16bf0230cd6f14d329cec6f;hpb=3396a9a851180ef73c6af9c42fc63897bb965390;p=ardour.git diff --git a/gtk2_ardour/gui_object.cc b/gtk2_ardour/gui_object.cc index 2b516d04da..3e21f82fa4 100644 --- a/gtk2_ardour/gui_object.cc +++ b/gtk2_ardour/gui_object.cc @@ -34,10 +34,11 @@ GUIObjectState::GUIObjectState () } XMLNode * -GUIObjectState::find_node (const string& id) const +GUIObjectState::get_node (const XMLNode* parent, const string& id) { - XMLNodeList const & children = _state.children (); + XMLNodeList const & children = parent->children (); for (XMLNodeList::const_iterator i = children.begin(); i != children.end(); ++i) { + if ((*i)->name() != X_("Object")) { continue; } @@ -51,6 +52,25 @@ GUIObjectState::find_node (const string& id) const return 0; } +XMLNode * +GUIObjectState::get_or_add_node (XMLNode* parent, const string& id) +{ + XMLNode* child = get_node (parent, id); + if (!child) { + child = new XMLNode (X_("Object")); + child->add_property (X_("id"), id); + parent->add_child_nocopy (*child); + } + + return child; +} + +XMLNode * +GUIObjectState::get_or_add_node (const string& id) +{ + return get_or_add_node (&_state, id); +} + /** Get a string from our state. * @param id property of Object node to look for. * @param prop_name name of the Object property to return. @@ -61,7 +81,8 @@ GUIObjectState::find_node (const string& id) const string GUIObjectState::get_string (const string& id, const string& prop_name, bool* empty) { - XMLNode* child = find_node (id); + XMLNode* child = get_node (&_state, id); + if (!child) { if (empty) { *empty = true; @@ -107,13 +128,6 @@ GUIObjectState::load (const XMLNode& node) (void) set_state (node); } -GUIObjectState& -GUIObjectState::operator= (const GUIObjectState& other) -{ - _state = other._state; - return *this; -} - std::list GUIObjectState::all_ids () const {