X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fpbd%2Fpbd%2Fstateful.h;h=4808bc2911f816b3e6e5634342dab488a5bd0433;hb=350ed31655b00f3043e5d723606cdd50099fa91b;hp=1f0f73b3effe804da782e0ccdef460f1c9b98ccb;hpb=90e73a3a6dc196f8295291eca7e67e85595b82d4;p=ardour.git diff --git a/libs/pbd/pbd/stateful.h b/libs/pbd/pbd/stateful.h index 1f0f73b3ef..4808bc2911 100644 --- a/libs/pbd/pbd/stateful.h +++ b/libs/pbd/pbd/stateful.h @@ -61,9 +61,13 @@ class Stateful { */ void add_extra_xml (XMLNode&); - XMLNode *extra_xml (const std::string& str); + XMLNode *extra_xml (const std::string& str, bool add_if_missing = false); + void save_extra_xml (const XMLNode&); const PBD::ID& id() const { return _id; } + bool set_id (const XMLNode&); + void set_id (const std::string&); + void reset_id (); /* history management */ @@ -86,13 +90,13 @@ class Stateful { virtual void suspend_property_changes (); virtual void resume_property_changes (); - - virtual bool frozen() const { return _frozen; } + bool property_changes_suspended() const { return g_atomic_int_get (const_cast(&_stateful_frozen)) > 0; } + protected: - void add_instant_xml (XMLNode&, const sys::path& directory_path); - XMLNode *instant_xml (const std::string& str, const sys::path& directory_path); + void add_instant_xml (XMLNode&, const std::string& directory_path); + XMLNode *instant_xml (const std::string& str, const std::string& directory_path); void add_properties (XMLNode &); PropertyChange set_values (XMLNode const &); @@ -101,14 +105,12 @@ class Stateful { of property values after either a PropertyList or XML driven property change. */ - virtual void post_set () { }; + virtual void post_set (const PropertyChange&) { }; XMLNode *_extra_xml; XMLNode *_instant_xml; - PBD::ID _id; - int32_t _frozen; PBD::PropertyChange _pending_changed; - Glib::Mutex _lock; + Glib::Threads::Mutex _lock; std::string _xml_node_name; ///< name of node to use for this object in XML OwnedPropertyList* _properties; @@ -118,7 +120,10 @@ class Stateful { within thaw() just before send_change() is called. */ virtual void mid_thaw (const PropertyChange&) { } - bool property_changes_suspended() const { return g_atomic_int_get (&_frozen) > 0; } + + private: + PBD::ID _id; + gint _stateful_frozen; }; } // namespace PBD