X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fgui_object.h;h=c9082807fbebfbfd453b350b7c9c21bee2779802;hb=4dc65e6613a375a836de4dd9901ac50a4ab43be6;hp=3cbd85c171b0b7a5deca696146d9ef022ec694e9;hpb=3396a9a851180ef73c6af9c42fc63897bb965390;p=ardour.git diff --git a/gtk2_ardour/gui_object.h b/gtk2_ardour/gui_object.h index 3cbd85c171..c9082807fb 100644 --- a/gtk2_ardour/gui_object.h +++ b/gtk2_ardour/gui_object.h @@ -28,43 +28,50 @@ #include "pbd/xml++.h" #include "pbd/id.h" -#include "i18n.h" - class GUIObjectState { public: GUIObjectState (); - - XMLNode& get_state () const; - int set_state (const XMLNode&); static const std::string xml_node_name; void load (const XMLNode&); - GUIObjectState& operator= (const GUIObjectState& other); + int set_state (const XMLNode&); + XMLNode& get_state () const; + /** 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. + * @param empty if non-0, filled in with true if the property is currently non-existant, otherwise false. + * @return value of property `prop_name', or empty. + */ std::string get_string (const std::string& id, const std::string& prop_name, bool* empty = 0); - template void set (const std::string& id, const std::string& prop_name, const T& val) { - XMLNode* child = find_node (id); - if (!child) { - child = new XMLNode (X_("Object")); - child->add_property (X_("id"), id); - _state.add_child_nocopy (*child); - } - - std::stringstream s; - s << val; - child->add_property (prop_name.c_str(), s.str()); + template void set_property (const std::string& id, const std::string& prop_name, const T& val) { + XMLNode* child = get_or_add_node (id); + child->set_property (prop_name.c_str(), val); } + /** Remove node with provided id. + * @param id property of Object node to look for. + */ + void remove_node (const std::string& id); std::list all_ids () const; - + + XMLNode* get_or_add_node (const std::string &); + + static XMLNode* get_node (const XMLNode *, const std::string &); + static XMLNode* get_or_add_node (XMLNode *, const std::string &); + private: - XMLNode* find_node (const std::string &) const; + // no copy construction. object_map saves pointers to _state XMLNodes + // use set_state(get_state()) + GUIObjectState (const GUIObjectState& other); XMLNode _state; + // ideally we'd use a O(1) hash table here, + // but O(log(N)) is fine already. + std::map object_map; }; - #endif /* __gtk_ardour_gui_object_h__ */