+RegionSelection
+Editor::get_equivalent_regions (RegionSelection & basis, PBD::PropertyID prop) const
+{
+ RegionSelection equivalent;
+
+ for (RegionSelection::const_iterator i = basis.begin(); i != basis.end(); ++i) {
+
+ vector<RegionView*> eq;
+
+ mapover_tracks (
+ sigc::bind (sigc::mem_fun (*this, &Editor::mapped_get_equivalent_regions), *i, &eq),
+ &(*i)->get_trackview(), prop
+ );
+
+ for (vector<RegionView*>::iterator j = eq.begin(); j != eq.end(); ++j) {
+ equivalent.add (*j);
+ }
+
+ equivalent.add (*i);
+ }
+
+ return equivalent;
+}
+
+
+int
+Editor::get_regionview_count_from_region_list (boost::shared_ptr<Region> region)
+{
+ int region_count = 0;
+
+ for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
+
+ RouteTimeAxisView* tatv;
+
+ if ((tatv = dynamic_cast<RouteTimeAxisView*> (*i)) != 0) {
+
+ boost::shared_ptr<Playlist> pl;
+ vector<boost::shared_ptr<Region> > results;
+ RegionView* marv;
+ boost::shared_ptr<Track> tr;
+
+ if ((tr = tatv->track()) == 0) {
+ /* bus */
+ continue;
+ }
+
+ if ((pl = (tr->playlist())) != 0) {
+ pl->get_region_list_equivalent_regions (region, results);
+ }
+
+ for (vector<boost::shared_ptr<Region> >::iterator ir = results.begin(); ir != results.end(); ++ir) {
+ if ((marv = tatv->view()->find_view (*ir)) != 0) {
+ region_count++;
+ }
+ }
+
+ }
+ }
+
+ return region_count;
+}
+
+