X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fselection.cc;h=2e4ed8a1176caba4287e60b7d9f78199ba21ac8c;hb=f535b0f4913a9c0b31ca3b21bd717c367676ebfc;hp=f96d649b0467f6796190c80d40b200a50235a670;hpb=e493b2b7c4fbbbfc457f02babf9546289b430177;p=ardour.git diff --git a/gtk2_ardour/selection.cc b/gtk2_ardour/selection.cc index f96d649b04..2e4ed8a117 100644 --- a/gtk2_ardour/selection.cc +++ b/gtk2_ardour/selection.cc @@ -33,6 +33,7 @@ #include "i18n.h" using namespace ARDOUR; +using namespace PBD; using namespace sigc; struct AudioRangeComparator { @@ -149,6 +150,98 @@ Selection::clear_lines () } } +void +Selection::toggle (Redirect* r) +{ + RedirectSelection::iterator i; + + if ((i = find (redirects.begin(), redirects.end(), r)) == redirects.end()) { + redirects.push_back (r); + } else { + redirects.erase (i); + } + RedirectsChanged(); + +} + +void +Selection::toggle (Playlist* pl) +{ + PlaylistSelection::iterator i; + + if ((i = find (playlists.begin(), playlists.end(), pl)) == playlists.end()) { + pl->ref (); + playlists.push_back(pl); + } else { + playlists.erase (i); + } + + PlaylistsChanged (); +} + +void +Selection::toggle (TimeAxisView* track) +{ + TrackSelection::iterator i; + + if ((i = find (tracks.begin(), tracks.end(), track)) == tracks.end()) { + void (Selection::*pmf)(TimeAxisView*) = &Selection::remove; + track->GoingAway.connect (sigc::bind (mem_fun (*this, pmf), track)); + tracks.push_back (track); + } else { + tracks.erase (i); + } + + TracksChanged(); +} + +void +Selection::toggle (AudioRegionView* r) +{ + AudioRegionSelection::iterator i; + + if ((i = find (audio_regions.begin(), audio_regions.end(), r)) == audio_regions.end()) { + audio_regions.add (r); + } else { + audio_regions.erase (i); + } + + RegionsChanged (); +} + +void +Selection::toggle (vector& r) +{ + AudioRegionSelection::iterator i; + + for (vector::iterator x = r.begin(); x != r.end(); ++x) { + if ((i = find (audio_regions.begin(), audio_regions.end(), (*x))) == audio_regions.end()) { + audio_regions.add ((*x)); + } else { + audio_regions.erase (i); + } + } + + RegionsChanged (); +} + +long +Selection::toggle (jack_nframes_t start, jack_nframes_t end) +{ + AudioRangeComparator cmp; + + /* XXX this implementation is incorrect */ + + time.push_back (AudioRange (start, end, next_time_id++)); + time.consolidate (); + time.sort (cmp); + + TimeChanged (); + + return next_time_id - 1; +} + + void Selection::add (Redirect* r) { @@ -247,6 +340,8 @@ Selection::add (jack_nframes_t start, jack_nframes_t end) { AudioRangeComparator cmp; + /* XXX this implementation is incorrect */ + time.push_back (AudioRange (start, end, next_time_id++)); time.consolidate (); time.sort (cmp); @@ -568,6 +663,6 @@ Selection::add (vector& autos) points.push_back (**i); delete *i; } - + PointsChanged (); }