+ if (!_session) {
+ return;
+ }
+
+ Reverse rev (*_session);
+ apply_filter (rev, _("reverse regions"));
+}
+
+void
+Editor::strip_region_silence ()
+{
+ if (!_session) {
+ return;
+ }
+
+ RegionSelection rs;
+ get_regions_for_action (rs);
+
+ if (rs.empty()) {
+ return;
+ }
+
+ std::list<boost::shared_ptr<AudioRegion> > ar;
+
+ for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
+ AudioRegionView* const arv = dynamic_cast<AudioRegionView*> (*i);
+ if (arv) {
+ ar.push_back (arv->audio_region ());
+ }
+ }
+
+ StripSilenceDialog d (_session, ar);
+ int const r = d.run ();
+
+ if (r == Gtk::RESPONSE_OK) {
+ StripSilence s (*_session, d.threshold (), d.minimum_length (), d.fade_length ());
+ apply_filter (s, _("strip silence"));
+ }
+}
+
+Command*
+Editor::apply_midi_note_edit_op_to_region (MidiOperator& op, MidiRegionView& mrv)
+{
+ Evoral::Sequence<Evoral::MusicalTime>::Notes selected;
+ mrv.selection_as_notelist (selected, true);
+
+ vector<Evoral::Sequence<Evoral::MusicalTime>::Notes> v;
+ v.push_back (selected);
+
+ return op (mrv.midi_region()->model(), v);
+}
+
+void
+Editor::apply_midi_note_edit_op (MidiOperator& op)
+{
+ RegionSelection rs;
+ Command* cmd;
+
+ get_regions_for_action (rs);
+
+ if (rs.empty()) {