+ /* 2. figure out the boundaries for our search for new objects */
+
+ switch (clicked_regionview->region.coverage (first_frame, last_frame)) {
+ case OverlapNone:
+ cerr << "no overlap, first = " << first_frame << " last = " << last_frame << " region = "
+ << clicked_regionview->region.first_frame() << " .. " << clicked_regionview->region.last_frame() << endl;
+
+ if (last_frame < clicked_regionview->region.first_frame()) {
+ first_frame = last_frame;
+ last_frame = clicked_regionview->region.last_frame();
+ } else {
+ last_frame = first_frame;
+ first_frame = clicked_regionview->region.first_frame();
+ }
+ break;
+
+ case OverlapExternal:
+ cerr << "external overlap, first = " << first_frame << " last = " << last_frame << " region = "
+ << clicked_regionview->region.first_frame() << " .. " << clicked_regionview->region.last_frame() << endl;
+
+ if (last_frame < clicked_regionview->region.first_frame()) {
+ first_frame = last_frame;
+ last_frame = clicked_regionview->region.last_frame();
+ } else {
+ last_frame = first_frame;
+ first_frame = clicked_regionview->region.first_frame();
+ }
+ break;
+
+ case OverlapInternal:
+ cerr << "internal overlap, first = " << first_frame << " last = " << last_frame << " region = "
+ << clicked_regionview->region.first_frame() << " .. " << clicked_regionview->region.last_frame() << endl;
+
+ if (last_frame < clicked_regionview->region.first_frame()) {
+ first_frame = last_frame;
+ last_frame = clicked_regionview->region.last_frame();
+ } else {
+ last_frame = first_frame;
+ first_frame = clicked_regionview->region.first_frame();
+ }
+ break;
+
+ case OverlapStart:
+ case OverlapEnd:
+ /* nothing to do except add clicked region to selection, since it
+ overlaps with the existing selection in this track.
+ */
+ break;
+ }
+
+ /* 2. find all selectable objects (regionviews in this case) between that one and the end of the
+ one that was clicked.
+ */
+
+ set<AudioTimeAxisView*> relevant_tracks;
+
+ get_relevant_audio_tracks (*clicked_audio_trackview, relevant_tracks);
+
+ for (set<AudioTimeAxisView*>::iterator t = relevant_tracks.begin(); t != relevant_tracks.end(); ++t) {
+ (*t)->get_selectables (first_frame, last_frame, -1.0, -1.0, results);
+ }
+
+ /* 3. convert to a vector of audio regions */
+
+ vector<AudioRegionView*> audio_regions;
+
+ for (list<Selectable*>::iterator x = results.begin(); x != results.end(); ++x) {
+ AudioRegionView* arv;
+
+ if ((arv = dynamic_cast<AudioRegionView*>(*x)) != 0) {
+ audio_regions.push_back (arv);
+ }
+ }
+
+ if (!audio_regions.empty()) {
+ selection->add (audio_regions);
+ commit = true;
+ }