diff options
Diffstat (limited to 'gtk2_ardour/selection.cc')
-rw-r--r-- | gtk2_ardour/selection.cc | 68 |
1 files changed, 67 insertions, 1 deletions
diff --git a/gtk2_ardour/selection.cc b/gtk2_ardour/selection.cc index cbe5975e87..be7552b0bd 100644 --- a/gtk2_ardour/selection.cc +++ b/gtk2_ardour/selection.cc @@ -53,6 +53,7 @@ Selection::operator= (const Selection& other) tracks = other.tracks; time = other.time; lines = other.lines; + midi = other.midi; } return *this; } @@ -66,7 +67,8 @@ operator== (const Selection& a, const Selection& b) a.time.group == b.time.group && a.time == b.time && a.lines == b.lines && - a.playlists == b.playlists; + a.playlists == b.playlists && + a.midi == b.midi; } /** Clear everything from the Selection */ @@ -79,6 +81,7 @@ Selection::clear () clear_lines(); clear_time (); clear_playlists (); + clear_midi (); } void @@ -110,6 +113,15 @@ Selection::clear_tracks () } void +Selection::clear_midi () +{ + if (!midi.empty()) { + midi.clear (); + MidiChanged (); + } +} + +void Selection::clear_time () { time.track = 0; @@ -208,6 +220,20 @@ Selection::toggle (RegionView* r) } void +Selection::toggle (MidiRegionView* mrv) +{ + MidiSelection::iterator i; + + if ((i = find (midi.begin(), midi.end(), mrv)) == midi.end()) { + add (mrv); + } else { + midi.erase (i); + } + + MidiChanged (); +} + +void Selection::toggle (vector<RegionView*>& r) { RegionSelection::iterator i; @@ -349,6 +375,21 @@ Selection::add (RegionView* r) } } +void +Selection::add (MidiRegionView* mrv) +{ + if (find (midi.begin(), midi.end(), mrv) == midi.end()) { + midi.push_back (mrv); + /* XXX should we do this? */ +#if 0 + if (Config->get_link_region_and_track_selection()) { + add (&mrv->get_trackview()); + } +#endif + MidiChanged (); + } +} + long Selection::add (nframes_t start, nframes_t end) { @@ -473,6 +514,24 @@ Selection::remove (RegionView* r) } } +void +Selection::remove (MidiRegionView* mrv) +{ + MidiSelection::iterator x; + + if ((x = find (midi.begin(), midi.end(), mrv)) != midi.end()) { + midi.erase (x); + MidiChanged (); + } + +#if 0 + /* XXX fix this up ? */ + if (Config->get_link_region_and_track_selection() && !regions.involves (r->get_trackview())) { + remove (&r->get_trackview()); + } +#endif +} + void Selection::remove (uint32_t selection_id) @@ -543,6 +602,13 @@ Selection::set (const RegionSelection& rs) } void +Selection::set (MidiRegionView* mrv) +{ + clear_midi (); + add (mrv); +} + +void Selection::set (RegionView* r, bool also_clear_tracks) { clear_regions (); |