diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2009-08-27 03:09:30 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2009-08-27 03:09:30 +0000 |
commit | 3845af6ce92ef15637ffb09410f442e7b4a104c3 (patch) | |
tree | 218a29f23c83c3ac57c857d3b1f599f1e6d97a14 /gtk2_ardour/editor_ops.cc | |
parent | c6be9b688802198e04a07dc902c49d1d6b66340e (diff) |
lots of MIDI editing stuff. to be explained on the website when its done
git-svn-id: svn://localhost/ardour2/branches/3.0@5596 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_ops.cc')
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 72 |
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(); |