- std::set<RegionView*> regions_to_add;
-
- for (RegionSelection::iterator i = regions.begin(); i != regions.end(); ++i) {
- vector<RegionView*> e;
- editor->get_equivalent_regions (*i, e);
- for (vector<RegionView*>::iterator j = e.begin(); j != e.end(); ++j) {
- regions_to_add.insert(*j);
- }
+ clear_markers ();
+ add (m);
+}
+
+void
+Selection::toggle (Marker* m)
+{
+ MarkerSelection::iterator i;
+
+ if ((i = find (markers.begin(), markers.end(), m)) == markers.end()) {
+ add (m);
+ } else {
+ remove (m);
+ }
+}
+
+void
+Selection::remove (Marker* m)
+{
+ MarkerSelection::iterator i;
+
+ if ((i = find (markers.begin(), markers.end(), m)) != markers.end()) {
+ markers.erase (i);
+ MarkersChanged();
+ }
+}
+
+void
+Selection::add (Marker* m)
+{
+ if (find (markers.begin(), markers.end(), m) == markers.end()) {
+
+ /* disambiguate which remove() for the compiler */
+
+ void (Selection::*pmf)(Marker*) = &Selection::remove;
+
+ m->GoingAway.connect (bind (mem_fun (*this, pmf), m));
+
+ markers.push_back (m);
+ MarkersChanged();