diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2010-03-02 18:05:26 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2010-03-02 18:05:26 +0000 |
commit | 17088ee3ea5af1e6174b098bb5bcfdaec6ebf9b0 (patch) | |
tree | cbf9fe8fb94212f9a50c6b760ebaac3b4a1bcec6 /libs/pbd/pbd/stateful.h | |
parent | a5ab2e99e19d5f5d4c1f91f38cd774fefdf257dc (diff) |
(1) remove most uses of MementoCommand for Playlist and Region (2) move frozen state from Region into Stateful, renamed "suspend property changes" (3) successive changes to a Property (scalar) after clear_history() do not keep resetting the old value (fixes region trim)
git-svn-id: svn://localhost/ardour2/branches/3.0@6720 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/pbd/pbd/stateful.h')
-rw-r--r-- | libs/pbd/pbd/stateful.h | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/libs/pbd/pbd/stateful.h b/libs/pbd/pbd/stateful.h index 78b9eb7b3b..93f353a095 100644 --- a/libs/pbd/pbd/stateful.h +++ b/libs/pbd/pbd/stateful.h @@ -82,6 +82,12 @@ class Stateful { static int current_state_version; static int loading_state_version; + virtual void suspend_property_changes (); + virtual void resume_property_changes (); + + void unlock_property_changes () { _no_property_changes = false; } + void block_property_changes () { _no_property_changes = true; } + protected: void add_instant_xml (XMLNode&, const sys::path& directory_path); @@ -100,10 +106,21 @@ class Stateful { XMLNode *_extra_xml; XMLNode *_instant_xml; - PBD::ID _id; + PBD::ID _id; + int32_t _frozen; + bool _no_property_changes; + PBD::PropertyChange _pending_changed; + Glib::Mutex _lock; std::string _xml_node_name; ///< name of node to use for this object in XML OwnedPropertyList* _properties; + + virtual void send_change (const PropertyChange&); + /** derived classes can implement this in order to process a property change + 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; } }; } // namespace PBD |