summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_ops.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/editor_ops.cc')
-rw-r--r--gtk2_ardour/editor_ops.cc72
1 files changed, 62 insertions, 10 deletions
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index d9491a21b0..feeae881f0 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -79,6 +79,7 @@
#include "strip_silence_dialog.h"
#include "editor_routes.h"
#include "editor_regions.h"
+#include "quantize_dialog.h"
#include "i18n.h"
@@ -2535,6 +2536,13 @@ Editor::edit_region ()
selection->foreach_regionview (&RegionView::show_region_editor);
}
+/** Show the midi list editor for the selected MIDI regions */
+void
+Editor::show_midi_list_editor ()
+{
+ selection->foreach_midi_regionview (&MidiRegionView::show_list_editor);
+}
+
void
Editor::rename_region()
{
@@ -4801,6 +4809,48 @@ Editor::strip_region_silence ()
}
}
+void
+Editor::apply_midi_note_edit_op_to_region (MidiOperator& op, MidiRegionView& mrv)
+{
+ vector<Evoral::Sequence<Evoral::MusicalTime>::Notes> v;
+ Evoral::Sequence<Evoral::MusicalTime>::Notes selected;
+
+ v.push_back (selected);
+
+ mrv.selection_as_notelist (v.front());
+ op (v);
+ mrv.replace_selected (v.front());
+}
+
+void
+Editor::apply_midi_note_edit_op (MidiOperator& op)
+{
+ RegionSelection rs;
+
+ get_regions_for_action (rs);
+
+ if (rs.empty()) {
+ return;
+ }
+
+ begin_reversible_command (op.name ());
+
+ for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ) {
+ RegionSelection::iterator tmp = r;
+ ++tmp;
+
+ MidiRegionView* const mrv = dynamic_cast<MidiRegionView*> (*r);
+
+ if (mrv) {
+ apply_midi_note_edit_op_to_region (op, *mrv);
+ }
+
+ r = tmp;
+ }
+
+ commit_reversible_command ();
+ rs.clear ();
+}
void
Editor::quantize_region ()
@@ -4809,9 +4859,18 @@ Editor::quantize_region ()
return;
}
- // FIXME: varying meter?
- Quantize quant (*session, snap_length_beats(0));
- apply_filter (quant, _("quantize regions"));
+ QuantizeDialog* qd = new QuantizeDialog (*this);
+
+ qd->present ();
+ qd->run ();
+ qd->hide ();
+
+ Quantize quant (*session, Plain,
+ qd->snap_start(), qd->snap_end(),
+ qd->start_grid_size(), qd->end_grid_size(),
+ qd->strength(), qd->swing(), qd->threshold());
+
+ apply_midi_note_edit_op (quant);
}
void
@@ -4834,13 +4893,6 @@ Editor::apply_filter (Filter& filter, string command)
RegionSelection::iterator tmp = r;
++tmp;
- MidiRegionView* const mrv = dynamic_cast<MidiRegionView*>(*r);
- if (mrv) {
- if (mrv->midi_region()->apply(filter) == 0) {
- mrv->redisplay_model();
- }
- }
-
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*r);
if (arv) {
boost::shared_ptr<Playlist> playlist = arv->region()->playlist();