diff options
author | Hans Fugal <hans@fugal.net> | 2006-07-25 01:50:20 +0000 |
---|---|---|
committer | Hans Fugal <hans@fugal.net> | 2006-07-25 01:50:20 +0000 |
commit | b7bffbe7a249356a93d25a41f7c472cc9dd8f27f (patch) | |
tree | f4e2739586f55cca66834c32c63bb7027c46e920 /gtk2_ardour | |
parent | 55159005b925396eeb41529f6e5b1d998fe63dc2 (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.cc | 5 | ||||
-rw-r--r-- | gtk2_ardour/automation_line.cc | 7 | ||||
-rw-r--r-- | gtk2_ardour/automation_time_axis.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/editor_audio_import.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/editor_keyboard.cc | 5 | ||||
-rw-r--r-- | gtk2_ardour/editor_markers.cc | 27 | ||||
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 182 | ||||
-rw-r--r-- | gtk2_ardour/editor_tempodisplay.cc | 29 | ||||
-rw-r--r-- | gtk2_ardour/editor_timefx.cc | 5 | ||||
-rw-r--r-- | gtk2_ardour/gain_automation_time_axis.cc | 6 | ||||
-rw-r--r-- | gtk2_ardour/location_ui.cc | 16 | ||||
-rw-r--r-- | gtk2_ardour/pan_automation_time_axis.cc | 6 | ||||
-rw-r--r-- | gtk2_ardour/redirect_automation_time_axis.cc | 6 | ||||
-rw-r--r-- | gtk2_ardour/region_gain_line.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/regionview.cc | 5 |
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 (); } |