summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_mouse.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/editor_mouse.cc')
-rw-r--r--gtk2_ardour/editor_mouse.cc41
1 files changed, 15 insertions, 26 deletions
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index 5820218a2a..ee28ff6804 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -31,6 +31,7 @@
#include <gtkmm2ext/tearoff.h>
#include "pbd/memento_command.h"
#include "pbd/basename.h"
+#include "pbd/stateful_diff_command.h"
#include "ardour_ui.h"
#include "actions.h"
@@ -2287,23 +2288,17 @@ Editor::point_trim (GdkEvent* event, nframes64_t new_bound)
}
if (!(*i)->region()->locked()) {
- boost::shared_ptr<Playlist> pl = (*i)->region()->playlist();
- XMLNode &before = pl->get_state();
-
+ (*i)->region()->clear_history ();
(*i)->region()->trim_front (new_bound, this);
-
- XMLNode &after = pl->get_state();
- _session->add_command(new MementoCommand<Playlist>(*pl.get(), &before, &after));
+ _session->add_command(new StatefulDiffCommand ((*i)->region()));
}
}
} else {
if (!rv->region()->locked()) {
- boost::shared_ptr<Playlist> pl = rv->region()->playlist();
- XMLNode &before = pl->get_state();
+ rv->region()->clear_history ();
rv->region()->trim_front (new_bound, this);
- XMLNode &after = pl->get_state();
- _session->add_command(new MementoCommand<Playlist>(*pl.get(), &before, &after));
+ _session->add_command(new StatefulDiffCommand (rv->region()));
}
}
@@ -2318,22 +2313,18 @@ Editor::point_trim (GdkEvent* event, nframes64_t new_bound)
for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ++i)
{
if (!(*i)->region()->locked()) {
- boost::shared_ptr<Playlist> pl = (*i)->region()->playlist();
- XMLNode &before = pl->get_state();
+ (*i)->region()->clear_history();
(*i)->region()->trim_end (new_bound, this);
- XMLNode &after = pl->get_state();
- _session->add_command(new MementoCommand<Playlist>(*pl.get(), &before, &after));
+ _session->add_command(new StatefulDiffCommand ((*i)->region()));
}
}
} else {
if (!rv->region()->locked()) {
- boost::shared_ptr<Playlist> pl = rv->region()->playlist();
- XMLNode &before = pl->get_state();
+ rv->region()->clear_history ();
rv->region()->trim_end (new_bound, this);
- XMLNode &after = pl->get_state();
- _session->add_command (new MementoCommand<Playlist>(*pl.get(), &before, &after));
+ _session->add_command (new StatefulDiffCommand (rv->region()));
}
}
@@ -2354,7 +2345,7 @@ Editor::thaw_region_after_trim (RegionView& rv)
return;
}
- region->thaw ();
+ region->resume_property_changes ();
AudioRegionView* arv = dynamic_cast<AudioRegionView*>(&rv);
@@ -2453,11 +2444,10 @@ Editor::mouse_brush_insert_region (RegionView* rv, nframes64_t pos)
boost::shared_ptr<Playlist> playlist = rtv->playlist();
double speed = rtv->get_diskstream()->speed();
- XMLNode &before = playlist->get_state();
+ playlist->clear_history ();
boost::shared_ptr<Region> new_region (RegionFactory::create (rv->region()));
- playlist->add_region (new_region, (nframes64_t) (pos * speed));
- XMLNode &after = playlist->get_state();
- _session->add_command(new MementoCommand<Playlist>(*playlist.get(), &before, &after));
+ playlist->add_region (new_region, (nframes64_t) (pos * speed));
+ _session->add_command (new StatefulDiffCommand (playlist));
// playlist is frozen, so we have to update manually XXX this is disgusting
@@ -2560,10 +2550,9 @@ Editor::start_selection_grab (ArdourCanvas::Item* /*item*/, GdkEvent* event)
boost::shared_ptr<Playlist> playlist = clicked_axisview->playlist();
- XMLNode *before = &(playlist->get_state());
+ playlist->clear_history ();
clicked_routeview->playlist()->add_region (region, selection->time[clicked_selection].start);
- XMLNode *after = &(playlist->get_state());
- _session->add_command(new MementoCommand<Playlist>(*playlist, before, after));
+ _session->add_command(new StatefulDiffCommand (playlist));
commit_reversible_command ();