Use lwrcase_dirname for desktop file names and substitutions.
[ardour.git] / gtk2_ardour / gui_object.h
index 3cbd85c171b0b7a5deca696146d9ef022ec694e9..39cf579fb5def7108a17a9bdaade0a2d1ac7df4a 100644 (file)
 #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);
-
        std::string get_string (const std::string& id, const std::string& prop_name, bool* empty = 0);
 
-       template<typename T> 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);
-               }
-               
+       template<typename T> void set_property (const std::string& id, const std::string& prop_name, const T& val) {
+               XMLNode* child = get_or_add_node (id);
                std::stringstream s;
                s << val;
                child->add_property (prop_name.c_str(), s.str());
        }
 
        std::list<std::string> all_ids () const;
-       
-  private:
-       XMLNode* find_node (const std::string &) const;
 
+       static XMLNode* get_node (const XMLNode *, const std::string &);
+       XMLNode* get_or_add_node (const std::string &);
+       static XMLNode* get_or_add_node (XMLNode *, const std::string &);
+
+       void remove_node (const std::string& id);
+
+  private:
        XMLNode _state;
 };