summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_mouse.cc
diff options
context:
space:
mode:
authorHans Fugal <hans@fugal.net>2006-07-18 23:54:31 +0000
committerHans Fugal <hans@fugal.net>2006-07-18 23:54:31 +0000
commit55159005b925396eeb41529f6e5b1d998fe63dc2 (patch)
tree558ac50370e6bc8d88008b19840b9da1feb12f1c /gtk2_ardour/editor_mouse.cc
parentd819b922e1d858dc3addbe31962d12af64027e50 (diff)
r189@gandalf: fugalh | 2006-07-18 17:54:25 -0600
This is the first swath of changes, replacing add_undo with MementoCommand pattern, through most of the editor_mouse.cc file. However there were a few places that weren't symmetrical that I need to think about. The question is whether to tweak things so that they are symmetrical (add_undo paired with add_redo*), or to allow Commands to not be undoable or not be redoable. Your thoughts are welcome. git-svn-id: svn://localhost/ardour2/branches/undo@685 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_mouse.cc')
-rw-r--r--gtk2_ardour/editor_mouse.cc93
1 files changed, 65 insertions, 28 deletions
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index 6c2919f5dd..e4d8ec6ce6 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -1812,9 +1812,15 @@ Editor::fade_in_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* even
}
begin_reversible_command (_("change fade in length"));
- session->add_undo (arv->region.get_memento());
+ XMLNode &before, &after;
+ before = arv->region.get_state();
+
arv->region.set_fade_in_length (fade_length);
- session->add_redo_no_execute (arv->region.get_memento());
+
+ after = arv->region.get_state();
+ session->add_command(MementoCommand<ARDOUR::AudioRegion>(arv->region,
+ before,
+ after));
commit_reversible_command ();
fade_in_drag_motion_callback (item, event);
}
@@ -1904,9 +1910,13 @@ Editor::fade_out_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* eve
}
begin_reversible_command (_("change fade out length"));
- session->add_undo (arv->region.get_memento());
+ XMLNode &before, &after;
+ before = arv->region.get_state();
+
arv->region.set_fade_out_length (fade_length);
- session->add_redo_no_execute (arv->region.get_memento());
+
+ after = arv->region.get_state();
+ session->add_command(MementoCommand<ARDOUR::AudioRegion>(arv->region, before, after));
commit_reversible_command ();
fade_out_drag_motion_callback (item, event);
@@ -2140,7 +2150,8 @@ Editor::marker_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
begin_reversible_command ( _("move marker") );
- session->add_undo( session->locations()->get_memento() );
+ XMLNode &before, &after;
+ before = session->locations()->get_state();
Location * location = find_location_from_marker (marker, is_start);
@@ -2148,7 +2159,8 @@ Editor::marker_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
location->set (drag_info.copied_location->start(), drag_info.copied_location->end());
}
- session->add_redo_no_execute( session->locations()->get_memento() );
+ after = session->locations()->get_state();
+ session->add_command(MementoCommand<Locations>(session->locations(), before, after));
commit_reversible_command ();
marker_drag_line->hide();
@@ -2260,11 +2272,14 @@ Editor::meter_marker_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent*
TempoMap& map (session->tempo_map());
map.bbt_time (drag_info.last_pointer_frame, when);
+ XMLNode &before, &after;
+
if (drag_info.copy == true) {
begin_reversible_command (_("copy meter mark"));
- session->add_undo (map.get_memento());
+ before = map.get_state();
map.add_meter (marker->meter(), when);
- session->add_redo_no_execute (map.get_memento());
+ after = map.get_state();
+ session->add_command(MementoCommand<TempoMap>(map, before, after));
commit_reversible_command ();
// delete the dummy marker we used for visual representation of copying.
@@ -2272,9 +2287,10 @@ Editor::meter_marker_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent*
delete marker;
} else {
begin_reversible_command (_("move meter mark"));
- session->add_undo (map.get_memento());
+ before = map.get_state();
map.move_meter (marker->meter(), when);
- session->add_redo_no_execute (map.get_memento());
+ after = map.get_state();
+ session->add_command(MementoCommand<TempoMap>(map, before, after));
commit_reversible_command ();
}
}
@@ -2389,12 +2405,15 @@ Editor::tempo_marker_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent*
TempoMap& map (session->tempo_map());
map.bbt_time (drag_info.last_pointer_frame, when);
+
+ XMLNode &before, &after;
if (drag_info.copy == true) {
begin_reversible_command (_("copy tempo mark"));
- session->add_undo (map.get_memento());
+ before = map.get_state();
map.add_tempo (marker->tempo(), when);
- session->add_redo_no_execute (map.get_memento());
+ after = map.get_state();
+ session->add_command (MementoCommand<TempoMap>(map, before, after));
commit_reversible_command ();
// delete the dummy marker we used for visual representation of copying.
@@ -2402,9 +2421,10 @@ Editor::tempo_marker_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent*
delete marker;
} else {
begin_reversible_command (_("move tempo mark"));
- session->add_undo (map.get_memento());
+ before = map.get_state();
map.move_tempo (marker->tempo(), when);
- session->add_redo_no_execute (map.get_memento());
+ after = map.get_state();
+ session->add_command (MementoCommand<TempoMap>(map, before, after));
commit_reversible_command ();
}
}
@@ -3610,9 +3630,10 @@ Editor::start_selection_grab (ArdourCanvas::Item* item, GdkEvent* event)
Playlist* playlist = clicked_trackview->playlist();
- session->add_undo (playlist->get_memento ());
+ before = playlist->get_state();
clicked_trackview->playlist()->add_region (*region, selection->time[clicked_selection].start);
- session->add_redo_no_execute (playlist->get_memento ());
+ after = playlist->get_state();
+ session->add_command(MementoCommand<Playlist>(*playlist, before, after));
commit_reversible_command ();
@@ -4200,18 +4221,24 @@ Editor::point_trim (GdkEvent* event)
i != selection->audio_regions.by_layer().end(); ++i)
{
if (!(*i)->region.locked()) {
- session->add_undo ((*i)->region.playlist()->get_memento());
+ XMLNode &before, &after;
+ Playlist *pl = (*i)->region.playlist();
+ before = pl->get_state();
(*i)->region.trim_front (new_bound, this);
- session->add_redo_no_execute ((*i)->region.playlist()->get_memento());
+ after = pl->get_state();
+ session->add_command(MementoCommand<Playlist>(*pl, before, after));
}
}
} else {
if (!rv->region.locked()) {
- session->add_undo (rv->region.playlist()->get_memento());
+ XMLNode &before, &after;
+ Playlist *pl = rv->region.playlist();
+ before = pl->get_state();
rv->region.trim_front (new_bound, this);
- session->add_redo_no_execute (rv->region.playlist()->get_memento());
+ after = pl->get_state();
+ session->add_command(MementoCommand<Playlist>(*pl, before, after));
}
}
@@ -4227,18 +4254,24 @@ Editor::point_trim (GdkEvent* event)
for (list<AudioRegionView*>::const_iterator i = selection->audio_regions.by_layer().begin(); i != selection->audio_regions.by_layer().end(); ++i)
{
if (!(*i)->region.locked()) {
- session->add_undo ((*i)->region.playlist()->get_memento());
+ XMLNode &before, &after;
+ Playlist *pl = (*i)->region.playlist();
+ before = pl->get_state();
(*i)->region.trim_end (new_bound, this);
- session->add_redo_no_execute ((*i)->region.playlist()->get_memento());
+ after = pl->get_state();
+ session->add_command(MementoCommand<Playlist>(*pl, before, after));
}
}
} else {
if (!rv->region.locked()) {
- session->add_undo (rv->region.playlist()->get_memento());
+ XMLNode &before, &after;
+ Playlist *pl = rv->region.playlist();
+ before = pl->get_state();
rv->region.trim_end (new_bound, this);
- session->add_redo_no_execute (rv->region.playlist()->get_memento());
+ after = pl->get_state();
+ session->add_command (MementoCommand<Playlist>(*pl, before, after));
}
}
@@ -4398,10 +4431,12 @@ Editor::end_range_markerbar_op (ArdourCanvas::Item* item, GdkEvent* event)
switch (range_marker_op) {
case CreateRangeMarker:
begin_reversible_command (_("new range marker"));
- session->add_undo (session->locations()->get_memento());
+ XMLNode &before, &after;
+ before = session->locations()->get_state();
newloc = new Location(temp_location->start(), temp_location->end(), "unnamed", Location::IsRangeMarker);
session->locations()->add (newloc, true);
- session->add_redo_no_execute (session->locations()->get_memento());
+ after = session->locations()->get_state();
+ session->add_command(MementoCommand<Locations>(session->locations(), before, after));
commit_reversible_command ();
range_bar_drag_rect->hide();
@@ -4776,9 +4811,11 @@ Editor::mouse_brush_insert_region (AudioRegionView* rv, jack_nframes_t pos)
Playlist* playlist = atv->playlist();
double speed = atv->get_diskstream()->speed();
- session->add_undo (playlist->get_memento());
+ XMLNode &before, &after;
+ before = playlist->get_state();
playlist->add_region (*(new AudioRegion (rv->region)), (jack_nframes_t) (pos * speed));
- session->add_redo_no_execute (playlist->get_memento());
+ after = playlist->get_state();
+ session->add_command(MementoCommand<Playlist>(*playlist, before, after));
// playlist is frozen, so we have to update manually