}
}
+ XMLNode &before, &after;
switch (op) {
case Cut:
- _session.add_undo (playlist->get_memento());
+ before = playlist->get_state();
if ((what_we_got = playlist->cut (time)) != 0) {
editor.get_cut_buffer().add (what_we_got);
- _session.add_redo_no_execute (playlist->get_memento());
+ after = playlist->get_state();
+ _session.add_command (MementoCommand<Playlist>(*playlist, before, after));
ret = true;
}
break;
break;
case Clear:
- _session.add_undo (playlist->get_memento());
+ before = playlist->get_state();
if ((what_we_got = playlist->cut (time)) != 0) {
- _session.add_redo_no_execute (playlist->get_memento());
+ _session.add_command(MementoCommand<Playlist>(*playlist, before, after));
what_we_got->unref ();
ret = true;
}
}
trackview.editor.current_session()->begin_reversible_command (str);
- trackview.editor.current_session()->add_undo (get_memento());
+ trackview.editor.current_session()->add_command (MementoUndoCommand<AutomationLine>(*this, get_state()));
first_drag_fraction = fraction;
last_drag_fraction = fraction;
update_pending = false;
- trackview.editor.current_session()->add_redo_no_execute (get_memento());
+ trackview.editor.current_session()->add_command (MementoRedoCommand<AutomationLine>(*this, get_state()));
trackview.editor.current_session()->commit_reversible_command ();
trackview.editor.current_session()->set_dirty ();
}
{
/* parent must create command */
XMLNode &before = get_state();
- trackview.editor.current_session()->add_undo (get_memento());
alist.clear();
trackview.editor.current_session()->add_command (MementoCommand<AutomationLine>(*this, before, get_state()));
trackview.editor.current_session()->commit_reversible_command ();
AutomationList& alist (line.the_list());
bool ret = false;
- _session.add_undo (alist.get_memento());
+ XMLNode &before, &after;
+ before = alist.get_state();
switch (op) {
case Cut:
if ((what_we_got = alist.cut (selection.time.front().start, selection.time.front().end)) != 0) {
editor.get_cut_buffer().add (what_we_got);
- _session.add_redo_no_execute (alist.get_memento());
+ _session.add_command(MementoCommand<AutomationList>(alist, before, alist.get_state()));
ret = true;
}
break;
case Clear:
if ((what_we_got = alist.cut (selection.time.front().start, selection.time.front().end)) != 0) {
- _session.add_redo_no_execute (alist.get_memento());
+ _session.add_command(MementoCommand<AutomationList>(alist, before, alist.get_state()));
delete what_we_got;
what_we_got = 0;
ret = true;
AutomationList* what_we_got = 0;
AutomationList& alist (line.the_list());
bool ret = false;
+ XMLNode &before, &after;
- _session.add_undo (alist.get_memento());
+ before = alist.get_state();
for (PointSelection::iterator i = selection.begin(); i != selection.end(); ++i) {
case Cut:
if ((what_we_got = alist.cut ((*i).start, (*i).end)) != 0) {
editor.get_cut_buffer().add (what_we_got);
- _session.add_redo_no_execute (alist.get_memento());
+ _session.add_command (MementoCommand<AutomationList>(alist, before, alist.get_state()));
ret = true;
}
break;
case Clear:
if ((what_we_got = alist.cut ((*i).start, (*i).end)) != 0) {
- _session.add_redo_no_execute (alist.get_memento());
+ _session.add_command (MementoCommand<AutomationList>(alist, before, alist.get_state()));
delete what_we_got;
what_we_got = 0;
ret = true;
insert_result = affected_playlists.insert (to_playlist);
if (insert_result.second) {
- session->add_undo (to_playlist->get_memento ());
+ session->add_command (MementoUndoCommand<Playlist>(*to_playlist, to_playlist->get_state()));
}
latest_regionview = 0;
insert_result = motion_frozen_playlists.insert (pl);
if (insert_result.second) {
pl->freeze();
- session->add_undo(pl->get_memento());
+ session->add_command(MementoUndoCommand<Playlist>(*pl, pl->get_state()));
}
}
}
insert_result = motion_frozen_playlists.insert(to_playlist);
if (insert_result.second) {
to_playlist->freeze();
- session->add_undo(to_playlist->get_memento());
+ session->add_command(MementoUndoCommand<Playlist>(*to_playlist, to_playlist->get_state()));
}
}
out:
for (set<Playlist*>::iterator p = motion_frozen_playlists.begin(); p != motion_frozen_playlists.end(); ++p) {
(*p)->thaw ();
- session->add_redo_no_execute ((*p)->get_memento());
+ session->add_command (MementoRedoCommand<Playlist>(*(*p), (*p)->get_state()));
}
motion_frozen_playlists.clear ();
Playlist * pl = (*i)->region.playlist();
insert_result = motion_frozen_playlists.insert (pl);
if (insert_result.second) {
- session->add_undo (pl->get_memento());
+ session->add_command(MementoUndoCommand<Playlist>(*pl, pl->get_state()));
}
}
}
for (set<Playlist*>::iterator p = motion_frozen_playlists.begin(); p != motion_frozen_playlists.end(); ++p) {
//(*p)->thaw ();
- session->add_redo_no_execute ((*p)->get_memento());
- }
+ session->add_command (MementoRedoCommand<Playlist>(*(*p), (*p)->get_state()));
+ }
motion_frozen_playlists.clear ();
}
region.thaw (_("trimmed region"));
- session->add_redo_no_execute (region.playlist()->get_memento());
+ XMLNode &after = region.playlist()->get_state();
+ session->add_command (MementoRedoCommand<Playlist>(*(region.playlist()), after));
rv.unhide_envelope ();
}
insert_result = freezelist.insert (pl);
if (insert_result.second) {
pl->freeze ();
- session->add_undo (pl->get_memento());
+ session->add_command (MementoUndoCommand<Playlist>(*pl, pl->get_state()));
}
}
}
for (set<Playlist*>::iterator pl = freezelist.begin(); pl != freezelist.end(); ++pl) {
(*pl)->thaw ();
- session->add_redo_no_execute ((*pl)->get_memento());
+ session->add_command (MementoRedoCommand<Playlist>(*(*pl), *(*pl)->get_state()));
}
}
XMLNode &before, &after;
};
+template <class obj_T>
+class MementoUndoCommand : public MementoCommand<obj_T>
+{
+public:
+ MementoUndoCommand(obj_T &obj,
+ XMLNode &before)
+ : obj(obj), before(before) {}
+ void operator() () { /* noop */ }
+ void undo() { obj.set_state(before); }
+ virtual XMLNode &serialize()
+ {
+ // obj.id
+ // key is "MementoCommand" or something
+ // before and after mementos
+ }
+}
+
+template <class obj_T>
+class MementoRedoCommand : public MementoCommand<obj_T>
+{
+public:
+ MementoUndoCommand(obj_T &obj,
+ XMLNode &after)
+ : obj(obj), after(after) {}
+ void operator() () { obj.set_state(after); }
+ void undo() { /* noop */ }
+ virtual XMLNode &serialize()
+ {
+ // obj.id
+ // key is "MementoCommand" or something
+ // before and after mementos
+ }
+}
+
#endif // __lib_pbd_memento_h__