summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorHans Fugal <hans@fugal.net>2006-07-25 01:50:20 +0000
committerHans Fugal <hans@fugal.net>2006-07-25 01:50:20 +0000
commitb7bffbe7a249356a93d25a41f7c472cc9dd8f27f (patch)
treef4e2739586f55cca66834c32c63bb7027c46e920 /gtk2_ardour
parent55159005b925396eeb41529f6e5b1d998fe63dc2 (diff)
r191@gandalf: fugalh | 2006-07-24 19:50:10 -0600
All the obvious MementoCommand grunt work. Now there's some add_undo/add_redo_no_execute sprinkled around where one is separated from the other (e.g. in different callbacks) or perhaps even where there's only an undo and no redo. Also some sigc-based undo/redo pairs that probably need their own Command class. git-svn-id: svn://localhost/ardour2/branches/undo@692 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/audio_time_axis.cc5
-rw-r--r--gtk2_ardour/automation_line.cc7
-rw-r--r--gtk2_ardour/automation_time_axis.cc4
-rw-r--r--gtk2_ardour/editor_audio_import.cc4
-rw-r--r--gtk2_ardour/editor_keyboard.cc5
-rw-r--r--gtk2_ardour/editor_markers.cc27
-rw-r--r--gtk2_ardour/editor_ops.cc182
-rw-r--r--gtk2_ardour/editor_tempodisplay.cc29
-rw-r--r--gtk2_ardour/editor_timefx.cc5
-rw-r--r--gtk2_ardour/gain_automation_time_axis.cc6
-rw-r--r--gtk2_ardour/location_ui.cc16
-rw-r--r--gtk2_ardour/pan_automation_time_axis.cc6
-rw-r--r--gtk2_ardour/redirect_automation_time_axis.cc6
-rw-r--r--gtk2_ardour/region_gain_line.cc4
-rw-r--r--gtk2_ardour/regionview.cc5
15 files changed, 188 insertions, 123 deletions
diff --git a/gtk2_ardour/audio_time_axis.cc b/gtk2_ardour/audio_time_axis.cc
index 01205abfc8..7fbe7c9fd8 100644
--- a/gtk2_ardour/audio_time_axis.cc
+++ b/gtk2_ardour/audio_time_axis.cc
@@ -1786,9 +1786,10 @@ AudioTimeAxisView::paste (jack_nframes_t pos, float times, Selection& selection,
if (get_diskstream()->speed() != 1.0f)
pos = session_frame_to_track_frame(pos, get_diskstream()->speed() );
- _session.add_undo (playlist->get_memento());
+ XMLNode &before = playlist->get_state();
playlist->paste (**p, pos, times);
- _session.add_redo_no_execute (playlist->get_memento());
+ _session.add_command(MementoCommand<Playlist>(*playlist, before,
+ playlist->get_state()));
return true;
}
diff --git a/gtk2_ardour/automation_line.cc b/gtk2_ardour/automation_line.cc
index b87a71ca87..f5b23f01ae 100644
--- a/gtk2_ardour/automation_line.cc
+++ b/gtk2_ardour/automation_line.cc
@@ -1013,11 +1013,11 @@ AutomationLine::remove_point (ControlPoint& cp)
model_representation (cp, mr);
trackview.editor.current_session()->begin_reversible_command (_("remove control point"));
- trackview.editor.current_session()->add_undo (get_memento());
+ XMLNode &before = get_state();
alist.erase (mr.start, mr.end);
- trackview.editor.current_session()->add_redo_no_execute (get_memento());
+ trackview.editor.current_session()->add_command(MementoCommand<AutomationLine>(*this, before, get_state()));
trackview.editor.current_session()->commit_reversible_command ();
trackview.editor.current_session()->set_dirty ();
}
@@ -1225,9 +1225,10 @@ void
AutomationLine::clear ()
{
/* parent must create command */
+ XMLNode &before = get_state();
trackview.editor.current_session()->add_undo (get_memento());
alist.clear();
- trackview.editor.current_session()->add_redo_no_execute (get_memento());
+ trackview.editor.current_session()->add_command (MementoCommand<AutomationLine>(*this, before, get_state()));
trackview.editor.current_session()->commit_reversible_command ();
trackview.editor.current_session()->set_dirty ();
}
diff --git a/gtk2_ardour/automation_time_axis.cc b/gtk2_ardour/automation_time_axis.cc
index 165e124add..f4b9aaaf7b 100644
--- a/gtk2_ardour/automation_time_axis.cc
+++ b/gtk2_ardour/automation_time_axis.cc
@@ -662,9 +662,9 @@ AutomationTimeAxisView::paste_one (AutomationLine& line, jack_nframes_t pos, flo
(*x)->value = foo;
}
- _session.add_undo (alist.get_memento());
+ XMLNode &before = alist.get_state();
alist.paste (copy, pos, times);
- _session.add_redo_no_execute (alist.get_memento());
+ _session.add_command (MementoCommand<AutomationList>(alist, before, alist.get_state()));
return true;
}
diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc
index f3e2ee1cb2..4cdc38dcf3 100644
--- a/gtk2_ardour/editor_audio_import.cc
+++ b/gtk2_ardour/editor_audio_import.cc
@@ -318,9 +318,9 @@ int
AudioRegion* copy = new AudioRegion (region);
begin_reversible_command (_("insert sndfile"));
- session->add_undo (playlist->get_memento());
+ XMLNode &before = playlist->get_state();
playlist->add_region (*copy, pos);
- session->add_redo_no_execute (playlist->get_memento());
+ session->add_command (MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
commit_reversible_command ();
pos += region.length();
diff --git a/gtk2_ardour/editor_keyboard.cc b/gtk2_ardour/editor_keyboard.cc
index 1ffaf2146d..df9bbf00ba 100644
--- a/gtk2_ardour/editor_keyboard.cc
+++ b/gtk2_ardour/editor_keyboard.cc
@@ -102,11 +102,12 @@ Editor::kbd_mute_unmute_region ()
{
if (entered_regionview) {
begin_reversible_command (_("mute region"));
- session->add_undo (entered_regionview->region.playlist()->get_memento());
+ XMLNode &before = entered_regionview->region.playlist()->get_state();
entered_regionview->region.set_muted (!entered_regionview->region.muted());
- session->add_redo_no_execute (entered_regionview->region.playlist()->get_memento());
+ XMLNode &after = entered_regionview->region.playlist()->get_state();
+ session->add_command (MementoCommand<Playlist>(entered_regionview->region.playlist(), before, after));
commit_reversible_command();
}
}
diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc
index a584561e42..5be9cc2747 100644
--- a/gtk2_ardour/editor_markers.cc
+++ b/gtk2_ardour/editor_markers.cc
@@ -290,9 +290,11 @@ Editor::mouse_add_new_marker (jack_nframes_t where)
if (session) {
Location *location = new Location (where, where, "mark", Location::IsMark);
session->begin_reversible_command (_("add marker"));
- session->add_undo (session->locations()->get_memento());
+ XMLNode &before, &after;
+ before = session->locations()->get_state();
session->locations()->add (location, true);
- session->add_redo_no_execute (session->locations()->get_memento());
+ after = session->locations()->get_state();
+ session->add_command (MementoCommand<Locations>(*(session->locations()), before, after));
session->commit_reversible_command ();
}
}
@@ -329,9 +331,11 @@ gint
Editor::really_remove_marker (Location* loc)
{
session->begin_reversible_command (_("remove marker"));
- session->add_undo (session->locations()->get_memento());
+ XMLNode &before, &after;
+ before = session->locations()->get_state();
session->locations()->remove (loc);
- session->add_redo_no_execute (session->locations()->get_memento());
+ after = session->locations()->get_state();
+ session->add_command (MementoCommand<Locations>(*(session->locations()), before, after));
session->commit_reversible_command ();
return FALSE;
}
@@ -838,12 +842,13 @@ Editor::marker_menu_rename ()
}
begin_reversible_command ( _("rename marker") );
- session->add_undo( session->locations()->get_memento() );
+ XMLNode &before = session->locations()->get_state();
dialog.get_result(txt);
loc->set_name (txt);
- session->add_redo_no_execute( session->locations()->get_memento() );
+ XMLNode &after = session->locations()->get_state();
+ session->add_command (MementoCommand<Locations>(*(session->locations()), before, after));
commit_reversible_command ();
}
@@ -868,10 +873,11 @@ Editor::new_transport_marker_menu_set_loop ()
if ((tll = transport_loop_location()) == 0) {
Location* loc = new Location (temp_location->start(), temp_location->end(), _("Loop"), Location::IsAutoLoop);
- session->add_undo (session->locations()->get_memento());
+ XMLNode &before = session->locations()->get_state();
session->locations()->add (loc, true);
session->set_auto_loop_location (loc);
- session->add_redo_no_execute (session->locations()->get_memento());
+ XMLNode &after = session->locations()->get_state();
+ session->add_command (MementoCommand<Locations>(*(session->locations()), before, after));
}
else {
session->add_undo (retype_return<void>(bind (mem_fun (*tll, &Location::set), tll->start(), tll->end())));
@@ -894,10 +900,11 @@ Editor::new_transport_marker_menu_set_punch ()
if ((tpl = transport_punch_location()) == 0) {
tpl = new Location (temp_location->start(), temp_location->end(), _("Punch"), Location::IsAutoPunch);
- session->add_undo (session->locations()->get_memento());
+ XMLNode &before = session->locations()->get_state();
session->locations()->add (tpl, true);
session->set_auto_punch_location (tpl);
- session->add_redo_no_execute (session->locations()->get_memento());
+ XMLNode &after = session->locations()->get_state();
+ session->add_command (MementoCommand<Locations>(*(session->locations()), before, after));
} else {
session->add_undo (retype_return<void>(bind (mem_fun (*tpl, &Location::set), tpl->start(), tpl->end())));
session->add_redo (retype_return<void>(bind (mem_fun (*tpl, &Location::set), temp_location->start(), temp_location->end())));
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index d3845dd26b..579b2403c6 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -207,9 +207,11 @@ Editor::split_regions_at (jack_nframes_t where, AudioRegionSelection& regions)
_new_regionviews_show_envelope = (*a)->envelope_visible();
if (pl) {
- session->add_undo (pl->get_memento());
+ XMLNode &before, &after;
+ before = pl->get_state();
pl->split_region ((*a)->region, where);
- session->add_redo_no_execute (pl->get_memento());
+ after = pl->get_state();
+ session->add_command(MementoCommand<Playlist>(*pl, before, after));
}
a = tmp;
@@ -229,9 +231,10 @@ Editor::remove_clicked_region ()
Playlist* playlist = clicked_audio_trackview->playlist();
begin_reversible_command (_("remove region"));
- session->add_undo (playlist->get_memento());
+ XMLNode &before = playlist->get_state();
playlist->remove_region (&clicked_regionview->region);
- session->add_redo_no_execute (playlist->get_memento());
+ XMLNode &after = playlist->get_state();
+ session->add_command(MementoCommand<Playlist>(*playlist, before, after));
commit_reversible_command ();
}
@@ -404,9 +407,10 @@ Editor::nudge_forward (bool next)
distance = next_distance;
}
- session->add_undo (r.playlist()->get_memento());
+ XMLNode &before = r.playlist()->get_state();
r.set_position (r.position() + distance, this);
- session->add_redo_no_execute (r.playlist()->get_memento());
+ XMLNode &after = r.playlist()->get_state();
+ session->add_command (MementoCommand<Playlist>(*(r.playlist()), before, after));
}
commit_reversible_command ();
@@ -438,14 +442,15 @@ Editor::nudge_backward (bool next)
distance = next_distance;
}
- session->add_undo (r.playlist()->get_memento());
+ XMLNode &before = r.playlist()->get_state();
if (r.position() > distance) {
r.set_position (r.position() - distance, this);
} else {
r.set_position (0, this);
}
- session->add_redo_no_execute (r.playlist()->get_memento());
+ XMLNode &after = r.playlist()->get_state();
+ session->add_command(MementoCommand<Playlist>(*(r.playlist()), before, after));
}
commit_reversible_command ();
@@ -478,9 +483,11 @@ Editor::nudge_forward_capture_offset ()
for (AudioRegionSelection::iterator i = selection->audio_regions.begin(); i != selection->audio_regions.end(); ++i) {
AudioRegion& r ((*i)->region);
- session->add_undo (r.playlist()->get_memento());
+ XMLNode &before, &after;
+ before = r.playlist()->get_state();
r.set_position (r.position() + distance, this);
- session->add_redo_no_execute (r.playlist()->get_memento());
+ after = r.playlist()->get_state();
+ session->add_command(MementoCommand<Playlist>(*(r.playlist()), before, after));
}
commit_reversible_command ();
@@ -504,14 +511,15 @@ Editor::nudge_backward_capture_offset ()
for (AudioRegionSelection::iterator i = selection->audio_regions.begin(); i != selection->audio_regions.end(); ++i) {
AudioRegion& r ((*i)->region);
- session->add_undo (r.playlist()->get_memento());
+ XMLNode &before = r.playlist()->get_state();
if (r.position() > distance) {
r.set_position (r.position() - distance, this);
} else {
r.set_position (0, this);
}
- session->add_redo_no_execute (r.playlist()->get_memento());
+ XMLNode &after = r.playlist()->get_state();
+ session->add_command(MementoCommand<Playlist>(*(r.playlist()), before, after));
}
commit_reversible_command ();
@@ -1288,9 +1296,10 @@ Editor::add_location_from_selection ()
Location *location = new Location (start, end, "selection");
session->begin_reversible_command (_("add marker"));
- session->add_undo (session->locations()->get_memento());
+ XMLNode &before = session->locations()->get_state();
session->locations()->add (location, true);
- session->add_redo_no_execute (session->locations()->get_memento());
+ XMLNode &after = session->locations()->get_state();
+ session->add_command(MementoCommand<Locations>(*(session->locations()), before, after));
session->commit_reversible_command ();
}
@@ -1301,9 +1310,10 @@ Editor::add_location_from_playhead_cursor ()
Location *location = new Location (where, where, "mark", Location::IsMark);
session->begin_reversible_command (_("add marker"));
- session->add_undo (session->locations()->get_memento());
+ XMLNode &before = session->locations()->get_state();
session->locations()->add (location, true);
- session->add_redo_no_execute (session->locations()->get_memento());
+ XMLNode &after = session->locations()->get_state();
+ session->add_command(MementoCommand<Locations>(*(session->locations()), before, after));
session->commit_reversible_command ();
}
@@ -1319,9 +1329,10 @@ Editor::add_location_from_audio_region ()
Location *location = new Location (region.position(), region.last_frame(), region.name());
session->begin_reversible_command (_("add marker"));
- session->add_undo (session->locations()->get_memento());
+ XMLNode &before = session->locations()->get_state();
session->locations()->add (location, true);
- session->add_redo_no_execute (session->locations()->get_memento());
+ XMLNode &after = session->locations()->get_state();
+ session->add_command(MementoCommand<Locations>(*(session->locations()), before, after));
session->commit_reversible_command ();
}
@@ -1737,9 +1748,10 @@ Editor::clear_markers ()
{
if (session) {
session->begin_reversible_command (_("clear markers"));
- session->add_undo (session->locations()->get_memento());
+ XMLNode &before = session->locations()->get_state();
session->locations()->clear_markers ();
- session->add_redo_no_execute (session->locations()->get_memento());
+ XMLNode &after = session->locations()->get_state();
+ session->add_command(MementoCommand<Locations>(*(session->locations()), before, after));
session->commit_reversible_command ();
}
}
@@ -1749,7 +1761,7 @@ Editor::clear_ranges ()
{
if (session) {
session->begin_reversible_command (_("clear ranges"));
- session->add_undo (session->locations()->get_memento());
+ XMLNode &before = session->locations()->get_state();
Location * looploc = session->locations()->auto_loop_location();
Location * punchloc = session->locations()->auto_punch_location();
@@ -1759,7 +1771,8 @@ Editor::clear_ranges ()
if (looploc) session->locations()->add (looploc);
if (punchloc) session->locations()->add (punchloc);
- session->add_redo_no_execute (session->locations()->get_memento());
+ XMLNode &after = session->locations()->get_state();
+ session->add_command(MementoCommand<Locations>(*(session->locations()), before, after));
session->commit_reversible_command ();
}
}
@@ -1768,9 +1781,10 @@ void
Editor::clear_locations ()
{
session->begin_reversible_command (_("clear locations"));
- session->add_undo (session->locations()->get_memento());
+ XMLNode &before = session->locations()->get_state();
session->locations()->clear ();
- session->add_redo_no_execute (session->locations()->get_memento());
+ XMLNode &after = session->locations()->get_state();
+ session->add_command(MementoCommand<Locations>(*(sessions->locations()), before, after));
session->commit_reversible_command ();
session->locations()->clear ();
}
@@ -1818,9 +1832,9 @@ Editor::insert_region_list_drag (AudioRegion& region, int x, int y)
snap_to (where);
begin_reversible_command (_("insert dragged region"));
- session->add_undo (playlist->get_memento());
+ XMLNode &before = playlist->get_state();
playlist->add_region (*(new AudioRegion (region)), where, 1.0);
- session->add_redo_no_execute (playlist->get_memento());
+ session->add_command(MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
commit_reversible_command ();
}
@@ -1854,9 +1868,9 @@ Editor::insert_region_list_selection (float times)
Region* region = (*i)[region_list_columns.region];
begin_reversible_command (_("insert region"));
- session->add_undo (playlist->get_memento());
+ XMLNode &before = playlist->get_state();
playlist->add_region (*(createRegion (*region)), edit_cursor->current_frame, times);
- session->add_redo_no_execute (playlist->get_memento());
+ session->add_command(MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
commit_reversible_command ();
}
@@ -2277,7 +2291,9 @@ Editor::separate_region_from_selection ()
begin_reversible_command (_("separate"));
doing_undo = true;
}
- if (doing_undo) session->add_undo ((playlist)->get_memento());
+ XMLNode &before, &after;
+ if (doing_undo)
+ before = playlist->get_state();
/* XXX need to consider musical time selections here at some point */
@@ -2287,7 +2303,8 @@ Editor::separate_region_from_selection ()
playlist->partition ((jack_nframes_t)((*t).start * speed), (jack_nframes_t)((*t).end * speed), true);
}
- if (doing_undo) session->add_redo_no_execute (playlist->get_memento());
+ if (doing_undo)
+ session->add_command(MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
}
}
}
@@ -2322,11 +2339,14 @@ Editor::separate_regions_using_location (Location& loc)
if (atv->is_audio_track()) {
if ((playlist = atv->playlist()) != 0) {
+ XMLNode &before, &after;
if (!doing_undo) {
begin_reversible_command (_("separate"));
doing_undo = true;
}
- if (doing_undo) session->add_undo ((playlist)->get_memento());
+ if (doing_undo)
+ before = playlist->get_state();
+
/* XXX need to consider musical time selections here at some point */
@@ -2334,7 +2354,8 @@ Editor::separate_regions_using_location (Location& loc)
playlist->partition ((jack_nframes_t)(loc.start() * speed), (jack_nframes_t)(loc.end() * speed), true);
- if (doing_undo) session->add_redo_no_execute (playlist->get_memento());
+ if (doing_undo)
+ session->add_command(MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
}
}
}
@@ -2405,9 +2426,10 @@ Editor::crop_region_to_selection ()
end = min (selection->time.end_frame(), start + region->length() - 1);
cnt = end - start + 1;
- session->add_undo ((*i)->get_memento());
+ XMLNode &before = (*i)->get_state();
region->trim_to (start, cnt, this);
- session->add_redo_no_execute ((*i)->get_memento());
+ XMLNode &after = (*i)->get_state();
+ session->add_command (MementoCommand<Playlist>(*(*i), before, after));
}
commit_reversible_command ();
@@ -2442,9 +2464,9 @@ Editor::region_fill_track ()
return;
}
- session->add_undo (pl->get_memento());
+ XMLNode &before = pl->get_state();
pl->add_region (*(new AudioRegion (region)), region.last_frame(), times);
- session->add_redo_no_execute (pl->get_memento());
+ session->add_command (MementoCommand<Playlist>(*pl, before, pl->get_state()));
}
commit_reversible_command ();
@@ -2492,9 +2514,9 @@ Editor::region_fill_selection ()
continue;
}
- session->add_undo (playlist->get_memento());
+ XMLNode &before = playlist->get_state();
playlist->add_region (*(createRegion (*region)), start, times);
- session->add_redo_no_execute (playlist->get_memento());
+ session->add_command (MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
}
commit_reversible_command ();
@@ -2509,9 +2531,10 @@ Editor::set_a_regions_sync_position (Region& region, jack_nframes_t position)
return;
}
begin_reversible_command (_("set region sync position"));
- session->add_undo (region.playlist()->get_memento());
+ XMLNode &before = region.playlist()->get_state();
region.set_sync_position (position);
- session->add_redo_no_execute (region.playlist()->get_memento());
+ XMLNode &after = region.playlist()->get_state();
+ session->add_command(MementoCommand<Playlist>(*(region.playlist()), before, after));
commit_reversible_command ();
}
@@ -2529,9 +2552,10 @@ Editor::set_region_sync_from_edit_cursor ()
Region& region (clicked_regionview->region);
begin_reversible_command (_("set sync from edit cursor"));
- session->add_undo (region.playlist()->get_memento());
+ XMLNode &before = region.playlist()->get_state();
region.set_sync_position (edit_cursor->current_frame);
- session->add_redo_no_execute (region.playlist()->get_memento());
+ XMLNode &after = region.playlist()->get_state();
+ session->add_command(MementoCommand<Playlist>(*(region.playlist()), before, after));
commit_reversible_command ();
}
@@ -2541,9 +2565,10 @@ Editor::remove_region_sync ()
if (clicked_regionview) {
Region& region (clicked_regionview->region);
begin_reversible_command (_("remove sync"));
- session->add_undo (region.playlist()->get_memento());
+ XMLNode &before = region.playlist()->get_state();
region.clear_sync_position ();
- session->add_redo_no_execute (region.playlist()->get_memento());
+ XMLNode &after = region.playlist()->get_state();
+ session->add_command(MementoCommand<Playlist>(*(region.playlist()), before, after));
commit_reversible_command ();
}
}
@@ -2556,9 +2581,10 @@ Editor::naturalize ()
}
begin_reversible_command (_("naturalize"));
for (AudioRegionSelection::iterator i = selection->audio_regions.begin(); i != selection->audio_regions.end(); ++i) {
- session->add_undo ((*i)->region.get_memento());
+ XMLNode &before = (*i)->region.get_state();
(*i)->region.move_to_natural_position (this);
- session->add_redo_no_execute ((*i)->region.get_memento());
+ XMLNode &after = (*i)->region.get_state();
+ session->add_command (MementoCommand<AudioRegion>((*i)->region, before, after));
}
commit_reversible_command ();
}
@@ -2624,7 +2650,7 @@ Editor::align_selection_relative (RegionPoint point, jack_nframes_t position)
Region& region ((*i)->region);
- session->add_undo (region.playlist()->get_memento());
+ XMLNode &before = region.playlist()->get_state();
if (dir > 0) {
region.set_position (region.position() + distance, this);
@@ -2632,7 +2658,8 @@ Editor::align_selection_relative (RegionPoint point, jack_nframes_t position)
region.set_position (region.position() - distance, this);
}
- session->add_redo_no_execute (region.playlist()->get_memento());
+ XMLNode &after = region.playlist()->get_state();
+ session->add_command(MementoCommand<Playlist>(*(region.playlist()), before, after));
}
@@ -2666,7 +2693,8 @@ Editor::align_region (Region& region, RegionPoint point, jack_nframes_t position
void
Editor::align_region_internal (Region& region, RegionPoint point, jack_nframes_t position)
{
- session->add_undo (region.playlist()->get_memento());
+ XMLNode &before, &after;
+ before = region.playlist()->get_state();
switch (point) {
case SyncPoint:
@@ -2684,7 +2712,8 @@ Editor::align_region_internal (Region& region, RegionPoint point, jack_nframes_t
break;
}
- session->add_redo_no_execute (region.playlist()->get_memento());
+ after = region.playlist()->get_state();
+ session->add_command(MementoCommand<Playlist>(*(region.playlist()), before, after));
}
void
@@ -2706,9 +2735,10 @@ Editor::trim_region_to_edit_cursor ()
}
begin_reversible_command (_("trim to edit"));
- session->add_undo (region.playlist()->get_memento());
+ XMLNode &before = region.playlist()->get_state();
region.trim_end( session_frame_to_track_frame(edit_cursor->current_frame, speed), this);
- session->add_redo_no_execute (region.playlist()->get_memento());
+ XMLNode &after = region.playlist()->get_state();
+ session->add_command(MementoCommand<Playlist>(*(region.playlist()), before, after));
commit_reversible_command ();
}
@@ -2731,9 +2761,10 @@ Editor::trim_region_from_edit_cursor ()
}
begin_reversible_command (_("trim to edit"));
- session->add_undo (region.playlist()->get_memento());
+ XMLNode &before = region.playlist()->get_state();
region.trim_front ( session_frame_to_track_frame(edit_cursor->current_frame, speed), this);
- session->add_redo_no_execute (region.playlist()->get_memento());
+ XMLNode &after = region.playlist()->get_state();
+ session->add_command(MementoCommand<Playlist>(*(region.playlist()), before, after));
commit_reversible_command ();
}
@@ -2845,9 +2876,10 @@ Editor::bounce_range_selection ()
itt.cancel = false;
itt.progress = false;
- session->add_undo (playlist->get_memento());
+ XMLNode &before = playlist->get_state();
atv->audio_track()->bounce_range (start, cnt, itt);
- session->add_redo_no_execute (playlist->get_memento());
+ XMLNode &after = playlist->get_state();
+ session->add_command (MementoCommand<Playlist> (*playlist, before, after));
}
commit_reversible_command ();
@@ -3136,9 +3168,9 @@ Editor::paste_named_selection (float times)
tmp = chunk;
++tmp;
- session->add_undo (apl->get_memento());
+ XMLNode &before = apl->get_state();
apl->paste (**chunk, edit_cursor->current_frame, times);
- session->add_redo_no_execute (apl->get_memento());
+ session->add_command(MementoCommand<AudioPlaylist>(*apl, before, apl->get_state()));
if (tmp != ns->playlists.end()) {
chunk = tmp;
@@ -3167,9 +3199,9 @@ Editor::duplicate_some_regions (AudioRegionSelection& regions, float times)
sigc::connection c = atv->view->AudioRegionViewAdded.connect (mem_fun(*this, &Editor::collect_new_region_view));
playlist = (*i)->region.playlist();
- session->add_undo (playlist->get_memento());
+ XMLNode &before = playlist->get_state();
playlist->duplicate (r, r.last_frame(), times);
- session->add_redo_no_execute (playlist->get_memento());
+ session->add_command(MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
c.disconnect ();
@@ -3207,9 +3239,10 @@ Editor::duplicate_selection (float times)
if ((playlist = (*i)->playlist()) == 0) {
continue;
}
- session->add_undo (playlist->get_memento());
+ XMLNode &before = playlist->get_state();
playlist->duplicate (**ri, selection->time[clicked_selection].end, times);
- session->add_redo_no_execute (playlist->get_memento());
+ XMLNode &after = playlist->get_state();
+ session->add_command (MementoCommand<Playlist>(*playlist, before, after));
++ri;
if (ri == new_regions.end()) {
@@ -3257,9 +3290,10 @@ void
Editor::clear_playlist (Playlist& playlist)
{
begin_reversible_command (_("clear playlist"));
- session->add_undo (playlist.get_memento());
+ XMLNode &before = playlist.get_state();
playlist.clear ();
- session->add_redo_no_execute (playlist.get_memento());
+ XMLNode &after = playlist.get_state();
+ session->add_command (MementoCommand<Playlist>(playlist, before, after));
commit_reversible_command ();
}
@@ -3293,9 +3327,10 @@ Editor::nudge_track (bool use_edit_cursor, bool forwards)
continue;
}
- session->add_undo (playlist->get_memento());
+ XMLNode &before = playlist->get_state();
playlist->nudge_after (start, distance, forwards);
- session->add_redo_no_execute (playlist->get_memento());
+ XMLNode &after = playlist->get_state();
+ session->add_command (MementoCommand<Playlist>(*playlist, before, after));
}
commit_reversible_command ();
@@ -3346,9 +3381,10 @@ Editor::normalize_region ()
gdk_flush ();
for (AudioRegionSelection::iterator r = selection->audio_regions.begin(); r != selection->audio_regions.end(); ++r) {
- session->add_undo ((*r)->region.get_memento());
+ XMLNode &before = (*r)->region.get_state();
(*r)->region.normalize_to (0.0f);
- session->add_redo_no_execute ((*r)->region.get_memento());
+ XMLNode &after = (*r)->region.get_state();
+ session->add_command (MementoCommand<AudioRegion>((*r)->region, before, after));
}
commit_reversible_command ();
@@ -3370,9 +3406,10 @@ Editor::denormalize_region ()
begin_reversible_command ("denormalize");
for (AudioRegionSelection::iterator r = selection->audio_regions.begin(); r != selection->audio_regions.end(); ++r) {
- session->add_undo ((*r)->region.get_memento());
+ XMLNode &before = (*r)->region.get_state();
(*r)->region.set_scale_amplitude (1.0f);
- session->add_redo_no_execute ((*r)->region.get_memento());
+ XMLNode &after = (*r)->region.get_state();
+ session->add_command (MementoCommand<AudioRegion>((*r)->region, before, after));
}
commit_reversible_command ();
@@ -3414,9 +3451,10 @@ Editor::apply_filter (AudioFilter& filter, string command)
if (region.apply (filter) == 0) {
- session->add_undo (playlist->get_memento());
+ XMLNode &before = playlist->get_state();
playlist->replace_region (region, *(filter.results.front()), region.position());
- session->add_redo_no_execute (playlist->get_memento());
+ XMLNode &after = playlist->get_state();
+ session->add_command(MementoCommand<Playlist>(*playlist, before, after));
} else {
goto out;
}
diff --git a/gtk2_ardour/editor_tempodisplay.cc b/gtk2_ardour/editor_tempodisplay.cc
index 5f998ada9f..0456087859 100644
--- a/gtk2_ardour/editor_tempodisplay.cc
+++ b/gtk2_ardour/editor_tempodisplay.cc
@@ -273,9 +273,10 @@ Editor::mouse_add_new_tempo_event (jack_nframes_t frame)
tempo_dialog.get_bbt_time (requested);
begin_reversible_command (_("add tempo mark"));
- session->add_undo (map.get_memento());
+ XMLNode &before = map.get_state();
map.add_tempo (Tempo (bpm), requested);
- session->add_redo_no_execute (map.get_memento());
+ XMLNode &after = map.get_state();
+ session->add_command(MementoCommand<TempoMap>(map, before, after));
commit_reversible_command ();
map.dump (cerr);
@@ -313,9 +314,9 @@ Editor::mouse_add_new_meter_event (jack_nframes_t frame)
meter_dialog.get_bbt_time (requested);
begin_reversible_command (_("add meter mark"));
- session->add_undo (map.get_memento());
+ XMLNode &before = map.get_state();
map.add_meter (Meter (bpb, note_type), requested);
- session->add_redo_no_execute (map.get_memento());
+ session->add_command(MementoCommand<TempoMap>(map, before, map.get_state()));
commit_reversible_command ();
map.dump (cerr);
@@ -364,9 +365,10 @@ Editor::edit_meter_section (MeterSection* section)
double note_type = meter_dialog.get_note_type ();
begin_reversible_command (_("replace tempo mark"));
- session->add_undo (session->tempo_map().get_memento());
+ XMLNode &before = session->tempo_map().get_state();
session->tempo_map().replace_meter (*section, Meter (bpb, note_type));
- session->add_redo_no_execute (session->tempo_map().get_memento());
+ XMLNode &before = session->tempo_map().get_state();
+ session->add_command(MementoCommand<TempoMap>(session->tempo_map(), before, after));
commit_reversible_command ();
}
@@ -392,10 +394,11 @@ Editor::edit_tempo_section (TempoSection* section)
bpm = max (0.01, bpm);
begin_reversible_command (_("replace tempo mark"));
- session->add_undo (session->tempo_map().get_memento());
+ XMLNode &before = session->tempo_map().get_state();
session->tempo_map().replace_tempo (*section, Tempo (bpm));
session->tempo_map().move_tempo (*section, when);
- session->add_redo_no_execute (session->tempo_map().get_memento());
+ XMLNode &after = session->tempo_map().get_state();
+ session->add_command (MementoCommand<TempoMap>(session->tempo_map(), before, after));
commit_reversible_command ();
}
@@ -441,9 +444,10 @@ gint
Editor::real_remove_tempo_marker (TempoSection *section)
{
begin_reversible_command (_("remove tempo mark"));
- session->add_undo (session->tempo_map().get_memento());
+ XMLNode &before = session->tempo_map().get_state();
session->tempo_map().remove_tempo (*section);
- session->add_redo_no_execute (session->tempo_map().get_memento());
+ XMLNode &after = session->tempo_map().get_state();
+ session->add_command(MementoCommand<TempoMap>(session->tempo_map(), before, after));
commit_reversible_command ();
return FALSE;
@@ -474,9 +478,10 @@ gint
Editor::real_remove_meter_marker (MeterSection *section)
{
begin_reversible_command (_("remove tempo mark"));
- session->add_undo (session->tempo_map().get_memento());
+ XMLNode &before = session->tempo_map().get_state();
session->tempo_map().remove_meter (*section);
- session->add_redo_no_execute (session->tempo_map().get_memento());
+ XMLNode &after = session->tempo_map().get_state();
+ session->add_command(MementoCommand<TempoMap>(session->tempo_map(), before, after));
commit_reversible_command ();
return FALSE;
}
diff --git a/gtk2_ardour/editor_timefx.cc b/gtk2_ardour/editor_timefx.cc
index 6ff467454d..817a770fe5 100644
--- a/gtk2_ardour/editor_timefx.cc
+++ b/gtk2_ardour/editor_timefx.cc
@@ -203,9 +203,10 @@ Editor::do_timestretch (TimeStretchDialog& dialog)
return;
}
- session->add_undo (playlist->get_memento());
+ XMLNode &before = playlist->get_state();
playlist->replace_region (aregion, *new_region, aregion.position());
- session->add_redo_no_execute (playlist->get_memento());
+ XMLNode &after = playlist->get_state();
+ session->add_command (MementoCommand<Playlist>(*playlist, before, after));
i = tmp;
}
diff --git a/gtk2_ardour/gain_automation_time_axis.cc b/gtk2_ardour/gain_automation_time_axis.cc
index 8f41f5def0..1697adbb9c 100644
--- a/gtk2_ardour/gain_automation_time_axis.cc
+++ b/gtk2_ardour/gain_automation_time_axis.cc
@@ -61,9 +61,11 @@ GainAutomationTimeAxisView::add_automation_event (ArdourCanvas::Item* item, GdkE
_session.begin_reversible_command (_("add gain automation event"));
- _session.add_undo (curve.get_memento());
+ XMLNode &before, &after;
+ before = curve.get_state();
curve.add (when, y);
- _session.add_redo_no_execute (curve.get_memento());
+ after = curve.get_state();
+ _session.add_command(MementoCommand<ARDOUR::Curve>(curve, before, after));
_session.commit_reversible_command ();
_session.set_dirty ();
}
diff --git a/gtk2_ardour/location_ui.cc b/gtk2_ardour/location_ui.cc
index f0fe230b57..08d5a0b3af 100644
--- a/gtk2_ardour/location_ui.cc
+++ b/gtk2_ardour/location_ui.cc
@@ -654,9 +654,11 @@ gint LocationUI::do_location_remove (ARDOUR::Location *loc)
}
session->begin_reversible_command (_("remove marker"));
- session->add_undo (session->locations()->get_memento());
+ XMLNode &before, &after;
+ before = session->locations()->get_state();
session->locations()->remove (loc);
- session->add_redo_no_execute (session->locations()->get_memento());
+ after = session->locations()->get_state();
+ session->add_command(MementoCommand<Location>(*(session->locations()), before, after));
session->commit_reversible_command ();
return FALSE;
@@ -772,9 +774,10 @@ LocationUI::add_new_location()
jack_nframes_t where = session->audible_frame();
Location *location = new Location (where, where, "mark", Location::IsMark);
session->begin_reversible_command (_("add marker"));
- session->add_undo (session->locations()->get_memento());
+ XMLNode &before = session->locations()->get_state();
session->locations()->add (location, true);
- session->add_redo_no_execute (session->locations()->get_memento());
+ XMLNode &after = session->locations()->get_state();
+ session->add_command (MementoCommand<Locations>(*(session->locations()), before, after));
session->commit_reversible_command ();
}
@@ -788,9 +791,10 @@ LocationUI::add_new_range()
Location *location = new Location (where, where, "unnamed",
Location::IsRangeMarker);
session->begin_reversible_command (_("add range marker"));
- session->add_undo (session->locations()->get_memento());
+ XMLNode &before = session->locations()->get_state();
session->locations()->add (location, true);
- session->add_redo_no_execute (session->locations()->get_memento());
+ XMLNode &after = session->locations()->get_state();
+ session->add_command (MementoCommand<Locations>(*(session->locations()), before, after));
session->commit_reversible_command ();
}
}
diff --git a/gtk2_ardour/pan_automation_time_axis.cc b/gtk2_ardour/pan_automation_time_axis.cc
index b72eda78bd..267bb6ef09 100644
--- a/gtk2_ardour/pan_automation_time_axis.cc
+++ b/gtk2_ardour/pan_automation_time_axis.cc
@@ -78,9 +78,11 @@ PanAutomationTimeAxisView::add_automation_event (ArdourCanvas::Item* item, GdkEv
AutomationList& alist (lines.front()->the_list());
_session.begin_reversible_command (_("add pan automation event"));
- _session.add_undo (alist.get_memento());
+ XMLNode &before, &after;
+ before = alist.get_state();
alist.add (when, y);
- _session.add_undo (alist.get_memento());
+ after = alist.get_state();
+ _seession.add_command(MementoCommand<AutomationList>(alist, before, after));
_session.commit_reversible_command ();
_session.set_dirty ();
}
diff --git a/gtk2_ardour/redirect_automation_time_axis.cc b/gtk2_ardour/redirect_automation_time_axis.cc
index e1b71310ac..d6e2432338 100644
--- a/gtk2_ardour/redirect_automation_time_axis.cc
+++ b/gtk2_ardour/redirect_automation_time_axis.cc
@@ -97,9 +97,11 @@ RedirectAutomationTimeAxisView::add_automation_event (ArdourCanvas::Item* item,
lines.front()->view_to_model_y (y);
_session.begin_reversible_command (description);
- _session.add_undo (alist.get_memento());
+ XMLNode &before, &after;
+ before = alist.get_state();
alist.add (when, y);
- _session.add_redo_no_execute (alist.get_memento());
+ after = alist.get_state();
+ _session.add_command(MementoCommand<AutomationList>(alist, before, after));
_session.commit_reversible_command ();
_session.set_dirty ();
}
diff --git a/gtk2_ardour/region_gain_line.cc b/gtk2_ardour/region_gain_line.cc
index bba9410ffb..54b7fa5b56 100644
--- a/gtk2_ardour/region_gain_line.cc
+++ b/gtk2_ardour/region_gain_line.cc
@@ -60,7 +60,7 @@ AudioRegionGainLine::remove_point (ControlPoint& cp)
model_representation (cp, mr);
trackview.editor.current_session()->begin_reversible_command (_("remove control point"));
- trackview.editor.current_session()->add_undo (get_memento());
+ XMLNode &before = get_state();
if (!rv.region.envelope_active()) {
trackview.session().add_undo( bind( mem_fun(rv.region, &AudioRegion::set_envelope_active), false) );
@@ -70,7 +70,7 @@ AudioRegionGainLine::remove_point (ControlPoint& cp)
alist.erase (mr.start, mr.end);
- trackview.editor.current_session()->add_redo_no_execute (get_memento());
+ trackview.editor.current_session()->add_command (MementoCommand<AudioRegionGainLine>(*this, before, get_state()));
trackview.editor.current_session()->commit_reversible_command ();
trackview.editor.current_session()->set_dirty ();
}
diff --git a/gtk2_ardour/regionview.cc b/gtk2_ardour/regionview.cc
index 114aaf5da3..fbd69105df 100644
--- a/gtk2_ardour/regionview.cc
+++ b/gtk2_ardour/regionview.cc
@@ -1144,7 +1144,7 @@ AudioRegionView::add_gain_point_event (ArdourCanvas::Item *item, GdkEvent *ev)
gain_line->view_to_model_y (y);
trackview.session().begin_reversible_command (_("add gain control point"));
- trackview.session().add_undo (region.envelope().get_memento());
+ XMLNode &before = region.envelope().get_state();
if (!region.envelope_active()) {
@@ -1155,7 +1155,8 @@ AudioRegionView::add_gain_point_event (ArdourCanvas::Item *item, GdkEvent *ev)
region.envelope().add (fx, y);
- trackview.session().add_redo_no_execute (region.envelope().get_memento());
+ XMLNode &after = region.envelope().get_state();
+ trackview.session().add_command(MementoCommand<Curve>(region.envelope(), before, after));
trackview.session().commit_reversible_command ();
}