diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2006-08-25 01:07:15 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2006-08-25 01:07:15 +0000 |
commit | ce234f363e95c38fc92728e520bf5ba240a89aa7 (patch) | |
tree | 96ce8c4734bdd564ec1f2ad0c36bc32f0b108204 /libs/pbd/pbd/memento_command.h | |
parent | 7e95f29ce95edf01d6d451f96fae03f3d3451ff8 (diff) |
use shared_ptr<> for all region handling
git-svn-id: svn://localhost/ardour2/trunk@852 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/pbd/pbd/memento_command.h')
-rw-r--r-- | libs/pbd/pbd/memento_command.h | 39 |
1 files changed, 30 insertions, 9 deletions
diff --git a/libs/pbd/pbd/memento_command.h b/libs/pbd/pbd/memento_command.h index 3a72fc9841..f257e63233 100644 --- a/libs/pbd/pbd/memento_command.h +++ b/libs/pbd/pbd/memento_command.h @@ -21,6 +21,10 @@ #ifndef __lib_pbd_memento_command_h__ #define __lib_pbd_memento_command_h__ +#include <iostream> +using std::cerr; +using std::endl; + #include <pbd/command.h> #include <pbd/xml++.h> #include <sigc++/slot.h> @@ -34,12 +38,22 @@ template <class obj_T> class MementoCommand : public Command { public: - MementoCommand(XMLNode &state); - MementoCommand(obj_T &obj, + MementoCommand(obj_T &object, XMLNode *before, XMLNode *after ) - : obj(obj), before(before), after(after) {} + : obj(object), before(before), after(after) { + obj.GoingAway.connect (sigc::mem_fun (*this, &MementoCommand<obj_T>::object_death)); + } + ~MementoCommand () { + GoingAway(); + if (before) { + delete before; + } + if (after) { + delete after; + } + } void operator() () { if (after) @@ -60,20 +74,27 @@ class MementoCommand : public Command else name = "MementoRedoCommand"; + XMLNode *node = new XMLNode(name); - node->add_property("obj_id", obj.id().to_s()); - node->add_property("type_name", typeid(obj).name()); - if (before) - node->add_child_copy(*before); - if (after) - node->add_child_copy(*after); + node->add_property("obj_id", obj.id().to_s()); + node->add_property("type_name", typeid(obj).name()); + + if (before) + node->add_child_copy(*before); + if (after) + node->add_child_copy(*after); return *node; } + protected: obj_T &obj; XMLNode *before, *after; + + void object_death () { + delete this; + } }; #endif // __lib_pbd_memento_h__ |