summaryrefslogtreecommitdiff
path: root/gtk2_ardour/midi_time_axis.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/midi_time_axis.cc')
-rw-r--r--gtk2_ardour/midi_time_axis.cc41
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