#include "i18n.h"
using namespace ARDOUR;
+using namespace PBD;
using namespace sigc;
struct AudioRangeComparator {
}
}
+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<AudioRegionView*>& r)
+{
+ AudioRegionSelection::iterator i;
+
+ for (vector<AudioRegionView*>::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)
{
{
AudioRangeComparator cmp;
+ /* XXX this implementation is incorrect */
+
time.push_back (AudioRange (start, end, next_time_id++));
time.consolidate ();
time.sort (cmp);
points.push_back (**i);
delete *i;
}
-
+
PointsChanged ();
}