diff options
author | David Robillard <d@drobilla.net> | 2006-08-10 01:22:45 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2006-08-10 01:22:45 +0000 |
commit | ab6f1ed9bafa869648b6e94ee5186ff317b32c3e (patch) | |
tree | d61dba7f9b6f1ae755803afc4b79bcff06a36005 /gtk2_ardour/editor_ops.cc | |
parent | 38c7d34d8c449c7ce5f7da9575c24e60c6b31b1a (diff) |
Merged with trunk R776
git-svn-id: svn://localhost/ardour2/branches/midi@777 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_ops.cc')
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 182 |
1 files changed, 108 insertions, 74 deletions
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index af366e18d0..9b69026a01 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -28,6 +28,7 @@ #include <pbd/error.h> #include <pbd/basename.h> #include <pbd/pthread_utils.h> +#include <pbd/memento_command.h> #include <gtkmm2ext/utils.h> #include <gtkmm2ext/choice.h> @@ -209,9 +210,10 @@ Editor::split_regions_at (jack_nframes_t where, RegionSelection& regions) _new_regionviews_show_envelope = arv->envelope_visible(); if (pl) { - session->add_undo (pl->get_memento()); + XMLNode &before = pl->get_state(); pl->split_region ((*a)->region(), where); - session->add_redo_no_execute (pl->get_memento()); + XMLNode &after = pl->get_state(); + session->add_command(new MementoCommand<Playlist>(*pl, before, after)); } a = tmp; @@ -231,9 +233,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(new MementoCommand<Playlist>(*playlist, before, after)); commit_reversible_command (); } @@ -406,9 +409,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 (new MementoCommand<Playlist>(*(r.playlist()), before, after)); } commit_reversible_command (); @@ -440,14 +444,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(new MementoCommand<Playlist>(*(r.playlist()), before, after)); } commit_reversible_command (); @@ -480,9 +485,10 @@ Editor::nudge_forward_capture_offset () for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { Region& r ((*i)->region()); - 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(new MementoCommand<Playlist>(*(r.playlist()), before, after)); } commit_reversible_command (); @@ -506,14 +512,15 @@ Editor::nudge_backward_capture_offset () for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { Region& 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(new MementoCommand<Playlist>(*(r.playlist()), before, after)); } commit_reversible_command (); @@ -1290,9 +1297,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(new MementoCommand<Locations>(*(session->locations()), before, after)); session->commit_reversible_command (); } @@ -1303,9 +1311,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(new MementoCommand<Locations>(*(session->locations()), before, after)); session->commit_reversible_command (); } @@ -1321,9 +1330,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(new MementoCommand<Locations>(*(session->locations()), before, after)); session->commit_reversible_command (); } @@ -1739,9 +1749,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(new MementoCommand<Locations>(*(session->locations()), before, after)); session->commit_reversible_command (); } } @@ -1751,7 +1762,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(); @@ -1761,7 +1772,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(new MementoCommand<Locations>(*(session->locations()), before, after)); session->commit_reversible_command (); } } @@ -1770,9 +1782,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(new MementoCommand<Locations>(*(session->locations()), before, after)); session->commit_reversible_command (); session->locations()->clear (); } @@ -1820,9 +1833,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(new MementoCommand<Playlist>(*playlist, before, playlist->get_state())); commit_reversible_command (); } @@ -1856,9 +1869,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(new MementoCommand<Playlist>(*playlist, before, playlist->get_state())); commit_reversible_command (); } @@ -2283,7 +2296,9 @@ Editor::separate_region_from_selection () begin_reversible_command (_("separate")); doing_undo = true; } - if (doing_undo) session->add_undo ((playlist)->get_memento()); + XMLNode *before; + if (doing_undo) + before = &(playlist->get_state()); /* XXX need to consider musical time selections here at some point */ @@ -2293,7 +2308,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(new MementoCommand<Playlist>(*playlist, *before, playlist->get_state())); } } } @@ -2328,11 +2344,14 @@ Editor::separate_regions_using_location (Location& loc) if (atv->is_audio_track()) { if ((playlist = atv->playlist()) != 0) { + XMLNode *before; 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 */ @@ -2340,7 +2359,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(new MementoCommand<Playlist>(*playlist, *before, playlist->get_state())); } } } @@ -2411,9 +2431,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 (new MementoCommand<Playlist>(*(*i), before, after)); } commit_reversible_command (); @@ -2454,9 +2475,9 @@ Editor::region_fill_track () return; } - session->add_undo (pl->get_memento()); + XMLNode &before = pl->get_state(); pl->add_region (*(new AudioRegion (*ar)), ar->last_frame(), times); - session->add_redo_no_execute (pl->get_memento()); + session->add_command (new MementoCommand<Playlist>(*pl, before, pl->get_state())); } commit_reversible_command (); @@ -2504,9 +2525,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 (new MementoCommand<Playlist>(*playlist, before, playlist->get_state())); } commit_reversible_command (); @@ -2521,9 +2542,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(new MementoCommand<Playlist>(*(region.playlist()), before, after)); commit_reversible_command (); } @@ -2541,9 +2563,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(new MementoCommand<Playlist>(*(region.playlist()), before, after)); commit_reversible_command (); } @@ -2553,9 +2576,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(new MementoCommand<Playlist>(*(region.playlist()), before, after)); commit_reversible_command (); } } @@ -2568,9 +2592,10 @@ Editor::naturalize () } begin_reversible_command (_("naturalize")); for (RegionSelection::iterator i = selection->regions.begin(); i != selection->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 (new MementoCommand<Region>((*i)->region(), before, after)); } commit_reversible_command (); } @@ -2636,7 +2661,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); @@ -2644,7 +2669,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(new MementoCommand<Playlist>(*(region.playlist()), before, after)); } @@ -2678,7 +2704,7 @@ 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 = region.playlist()->get_state(); switch (point) { case SyncPoint: @@ -2696,7 +2722,8 @@ Editor::align_region_internal (Region& region, RegionPoint point, jack_nframes_t break; } - session->add_redo_no_execute (region.playlist()->get_memento()); + XMLNode &after = region.playlist()->get_state(); + session->add_command(new MementoCommand<Playlist>(*(region.playlist()), before, after)); } void @@ -2718,9 +2745,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(new MementoCommand<Playlist>(*(region.playlist()), before, after)); commit_reversible_command (); } @@ -2743,9 +2771,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(new MementoCommand<Playlist>(*(region.playlist()), before, after)); commit_reversible_command (); } @@ -2857,9 +2886,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 (new MementoCommand<Playlist> (*playlist, before, after)); } commit_reversible_command (); @@ -2977,7 +3007,7 @@ Editor::cut_copy_regions (CutCopyOp op) insert_result = freezelist.insert (pl); if (insert_result.second) { pl->freeze (); - session->add_undo (pl->get_memento()); + session->add_command (new MementoUndoCommand<Playlist>(*pl, pl->get_state())); } } } @@ -3041,7 +3071,7 @@ Editor::cut_copy_regions (CutCopyOp op) for (set<Playlist*>::iterator pl = freezelist.begin(); pl != freezelist.end(); ++pl) { (*pl)->thaw (); - session->add_redo_no_execute ((*pl)->get_memento()); + session->add_command (new MementoRedoCommand<Playlist>(*(*pl), (*pl)->get_state())); } } @@ -3154,9 +3184,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(new MementoCommand<AudioPlaylist>(*apl, before, apl->get_state())); if (tmp != ns->playlists.end()) { chunk = tmp; @@ -3185,9 +3215,9 @@ Editor::duplicate_some_regions (RegionSelection& regions, float times) sigc::connection c = atv->view()->RegionViewAdded.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(new MementoCommand<Playlist>(*playlist, before, playlist->get_state())); c.disconnect (); @@ -3225,9 +3255,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 (new MementoCommand<Playlist>(*playlist, before, after)); ++ri; if (ri == new_regions.end()) { @@ -3275,9 +3306,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 (new MementoCommand<Playlist>(playlist, before, after)); commit_reversible_command (); } @@ -3311,9 +3343,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 (new MementoCommand<Playlist>(*playlist, before, after)); } commit_reversible_command (); @@ -3367,9 +3400,9 @@ Editor::normalize_region () AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*r); if (!arv) continue; - session->add_undo (arv->region().get_memento()); + XMLNode &before = arv->region().get_state(); arv->audio_region().normalize_to (0.0f); - session->add_redo_no_execute (arv->region().get_memento()); + session->add_command (new MementoCommand<Region>(arv->region(), before, arv->region().get_state())); } commit_reversible_command (); @@ -3394,9 +3427,9 @@ Editor::denormalize_region () AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*r); if (!arv) continue; - session->add_undo (arv->region().get_memento()); + XMLNode &before = arv->region().get_state(); arv->audio_region().set_scale_amplitude (1.0f); - session->add_redo_no_execute (arv->region().get_memento()); + session->add_command (new MementoCommand<Region>(arv->region(), before, arv->region().get_state())); } commit_reversible_command (); @@ -3440,9 +3473,10 @@ Editor::apply_filter (AudioFilter& filter, string command) if (arv->audio_region().apply (filter) == 0) { - session->add_undo (playlist->get_memento()); + XMLNode &before = playlist->get_state(); playlist->replace_region (arv->region(), *(filter.results.front()), arv->region().position()); - session->add_redo_no_execute (playlist->get_memento()); + XMLNode &after = playlist->get_state(); + session->add_command(new MementoCommand<Playlist>(*playlist, before, after)); } else { goto out; } |