summaryrefslogtreecommitdiff
path: root/libs/pbd
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-08-01 20:50:09 +0000
committerDavid Robillard <d@drobilla.net>2007-08-01 20:50:09 +0000
commitd7db3f757fde92126ef9886370ce604992b7e974 (patch)
tree4ac58366ad0a9980756c23ef58e413ce54bf395f /libs/pbd
parent3f421ac45025a856f03b779363f8f5f60b837b1e (diff)
Better MidiModel command framework, ready to go for all your canvas editing needs.
Rewrote MidiEvent to be a well-behaved self-contained object that optionally owns it's buffer, has proper copying semantics, etc. Fixed crazy bugs triggered by adding lots of events with varying times to a region. Speed up initial session display significantly (don't redraw each MIDI region tons of times, though still happens more than once and can use fixing...). git-svn-id: svn://localhost/ardour2/trunk@2213 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/pbd')
-rw-r--r--libs/pbd/pbd/command.h9
-rw-r--r--libs/pbd/pbd/undo.h6
-rw-r--r--libs/pbd/undo.cc6
3 files changed, 12 insertions, 9 deletions
diff --git a/libs/pbd/pbd/command.h b/libs/pbd/pbd/command.h
index 5d45f85ac3..a66485bc0d 100644
--- a/libs/pbd/pbd/command.h
+++ b/libs/pbd/pbd/command.h
@@ -30,11 +30,20 @@ public:
virtual void operator() () = 0;
+ void set_name (const std::string& str) { _name = str; }
+ const std::string& name() const { return _name; }
+
virtual void undo() = 0;
virtual void redo() { (*this)(); }
virtual XMLNode &get_state();
virtual int set_state(const XMLNode&) { /* noop */ return 0; }
+
+protected:
+ Command() {}
+ Command(const std::string& name) : _name(name) {}
+
+ std::string _name;
};
#endif // __lib_pbd_command_h_
diff --git a/libs/pbd/pbd/undo.h b/libs/pbd/pbd/undo.h
index ea9a6d0e8b..5bfccf5a06 100644
--- a/libs/pbd/pbd/undo.h
+++ b/libs/pbd/pbd/undo.h
@@ -50,11 +50,6 @@ class UndoTransaction : public Command
void redo();
XMLNode &get_state();
-
- void set_name (const std::string& str) {
- _name = str;
- }
- const std::string& name() const { return _name; }
void set_timestamp (struct timeval &t) {
_timestamp = t;
@@ -67,7 +62,6 @@ class UndoTransaction : public Command
private:
std::list<Command*> actions;
struct timeval _timestamp;
- std::string _name;
bool _clearing;
friend void command_death (UndoTransaction*, Command *);
diff --git a/libs/pbd/undo.cc b/libs/pbd/undo.cc
index 5c7178b0d6..6db85e6ab3 100644
--- a/libs/pbd/undo.cc
+++ b/libs/pbd/undo.cc
@@ -32,14 +32,14 @@ using namespace std;
using namespace sigc;
UndoTransaction::UndoTransaction ()
+ : _clearing(false)
{
- _clearing = false;
}
UndoTransaction::UndoTransaction (const UndoTransaction& rhs)
+ : Command(rhs._name)
+ , _clearing(false)
{
- _name = rhs._name;
- _clearing = false;
clear ();
actions.insert(actions.end(),rhs.actions.begin(),rhs.actions.end());
}