diff options
Diffstat (limited to 'gtk2_ardour/midi_time_axis.cc')
-rw-r--r-- | gtk2_ardour/midi_time_axis.cc | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/gtk2_ardour/midi_time_axis.cc b/gtk2_ardour/midi_time_axis.cc index 5d8dc83bc1..33d192aa1c 100644 --- a/gtk2_ardour/midi_time_axis.cc +++ b/gtk2_ardour/midi_time_axis.cc @@ -1308,6 +1308,8 @@ MidiTimeAxisView::set_note_selection (uint8_t note) { uint16_t chn_mask = midi_track()->get_playback_channel_mask(); + _editor.begin_reversible_selection_op(_("Set Note Selection")); + if (_view->num_selected_regionviews() == 0) { _view->foreach_regionview ( sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_note_selection_region_view), @@ -1317,6 +1319,8 @@ MidiTimeAxisView::set_note_selection (uint8_t note) sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_note_selection_region_view), note, chn_mask)); } + + _editor.commit_reversible_selection_op(); } void @@ -1324,6 +1328,8 @@ MidiTimeAxisView::add_note_selection (uint8_t note) { const uint16_t chn_mask = midi_track()->get_playback_channel_mask(); + _editor.begin_reversible_selection_op(_("Add Note Selection")); + if (_view->num_selected_regionviews() == 0) { _view->foreach_regionview ( sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::add_note_selection_region_view), @@ -1333,6 +1339,8 @@ MidiTimeAxisView::add_note_selection (uint8_t note) sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::add_note_selection_region_view), note, chn_mask)); } + + _editor.commit_reversible_selection_op(); } void @@ -1340,6 +1348,8 @@ MidiTimeAxisView::extend_note_selection (uint8_t note) { const uint16_t chn_mask = midi_track()->get_playback_channel_mask(); + _editor.begin_reversible_selection_op(_("Extend Note Selection")); + if (_view->num_selected_regionviews() == 0) { _view->foreach_regionview ( sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::extend_note_selection_region_view), @@ -1349,6 +1359,8 @@ MidiTimeAxisView::extend_note_selection (uint8_t note) sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::extend_note_selection_region_view), note, chn_mask)); } + + _editor.commit_reversible_selection_op(); } void @@ -1356,6 +1368,8 @@ MidiTimeAxisView::toggle_note_selection (uint8_t note) { const uint16_t chn_mask = midi_track()->get_playback_channel_mask(); + _editor.begin_reversible_selection_op(_("Toggle Note Selection")); + if (_view->num_selected_regionviews() == 0) { _view->foreach_regionview ( sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::toggle_note_selection_region_view), @@ -1365,6 +1379,15 @@ MidiTimeAxisView::toggle_note_selection (uint8_t note) sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::toggle_note_selection_region_view), note, chn_mask)); } + + _editor.commit_reversible_selection_op(); +} + +void +MidiTimeAxisView::get_per_region_note_selection (list<pair<PBD::ID, set<boost::shared_ptr<Evoral::Note<Evoral::Beats> > > > >& selection) +{ + _view->foreach_regionview ( + sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::get_per_region_note_selection_region_view), sigc::ref(selection))); } void @@ -1392,6 +1415,24 @@ MidiTimeAxisView::toggle_note_selection_region_view (RegionView* rv, uint8_t not } void +MidiTimeAxisView::get_per_region_note_selection_region_view (RegionView* rv, list<pair<PBD::ID, std::set<boost::shared_ptr<Evoral::Note<Evoral::Beats> > > > > &selection) +{ + Evoral::Sequence<Evoral::Beats>::Notes selected; + dynamic_cast<MidiRegionView*>(rv)->selection_as_notelist (selected, false); + + std::set<boost::shared_ptr<Evoral::Note<Evoral::Beats> > > notes; + + Evoral::Sequence<Evoral::Beats>::Notes::iterator sel_it; + for (sel_it = selected.begin(); sel_it != selected.end(); ++sel_it) { + notes.insert (*sel_it); + } + + if (!notes.empty()) { + selection.push_back (make_pair ((rv)->region()->id(), notes)); + } +} + +void MidiTimeAxisView::set_channel_mode (ChannelMode, uint16_t) { /* hide all automation tracks that use the wrong channel(s) and show all those that use |