+Selection::clear_markers ()
+{
+ if (!markers.empty()) {
+ markers.clear ();
+ MarkersChanged();
+ }
+}
+
+void
+Selection::toggle (boost::shared_ptr<Playlist> pl)
+{
+ PlaylistSelection::iterator i;
+
+ if ((i = find (playlists.begin(), playlists.end(), pl)) == playlists.end()) {
+ pl->use ();
+ playlists.push_back(pl);
+ } else {
+ playlists.erase (i);
+ }
+
+ PlaylistsChanged ();
+}
+
+void
+Selection::toggle (const TrackViewList& track_list)
+{
+ for (TrackViewList::const_iterator i = track_list.begin(); i != track_list.end(); ++i) {
+ toggle ((*i));
+ }
+}
+
+void
+Selection::toggle (TimeAxisView* track)
+{
+ TrackSelection::iterator i;
+
+ if ((i = find (tracks.begin(), tracks.end(), track)) == tracks.end()) {
+ tracks.push_back (track);
+ } else {
+ tracks.erase (i);
+ }
+
+ TracksChanged();
+}
+
+void
+Selection::toggle (const MidiNoteSelection& midi_note_list)
+{
+ for (MidiNoteSelection::const_iterator i = midi_note_list.begin(); i != midi_note_list.end(); ++i) {
+ toggle ((*i));
+ }
+}
+
+void
+Selection::toggle (MidiCutBuffer* midi)
+{
+ MidiNoteSelection::iterator i;
+
+ if ((i = find (midi_notes.begin(), midi_notes.end(), midi)) == midi_notes.end()) {
+ midi_notes.push_back (midi);
+ } else {
+ /* remember that we own the MCB */
+ delete *i;
+ midi_notes.erase (i);
+ }
+
+ MidiNotesChanged();
+}
+
+
+void
+Selection::toggle (RegionView* r)
+{
+ RegionSelection::iterator i;
+
+ if ((i = find (regions.begin(), regions.end(), r)) == regions.end()) {
+ add (r);
+ } else {
+ remove (*i);
+ }
+
+ RegionsChanged ();
+}
+
+void
+Selection::toggle (MidiRegionView* mrv)