diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index fe20b33b12..e4ad54eca6 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -268,6 +268,8 @@ public: bool get_selection_extents (samplepos_t &start, samplepos_t &end) const; // the time extents of the current selection, whether Range, Region(s), Control Points, or Notes Selection& get_cut_buffer() const { return *cut_buffer; } + void get_regionviews_at_or_after (ARDOUR::samplepos_t, RegionSelection&); + void set_selection (std::list, Selection::Operation); void set_selected_midi_region_view (MidiRegionView&); diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc index 23c72e9821..1e025013ea 100644 --- a/gtk2_ardour/editor_selection.cc +++ b/gtk2_ardour/editor_selection.cc @@ -2257,6 +2257,14 @@ Editor::select_all_selectables_between (bool within) commit_reversible_selection_op (); } +void +Editor::get_regionviews_at_or_after (samplepos_t pos, RegionSelection& regions) +{ + for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) { + (*iter)->get_regionviews_at_or_after (pos, regions); + } +} + void Editor::select_range_between () { diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index 1935df90c1..df9a1c91de 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -1170,6 +1170,16 @@ RouteTimeAxisView::get_inverted_selectables (Selection& sel, list& StripableTimeAxisView::get_inverted_selectables (sel, results); } +void +RouteTimeAxisView::get_regionviews_at_or_after (samplepos_t pos, RegionSelection& regions) +{ + if (!_view) { + return; + } + + _view->get_regionviews_at_or_after (pos, regions); +} + RouteGroup* RouteTimeAxisView::route_group () const { diff --git a/gtk2_ardour/route_time_axis.h b/gtk2_ardour/route_time_axis.h index 7f4bb2a054..e7c80bb2d5 100644 --- a/gtk2_ardour/route_time_axis.h +++ b/gtk2_ardour/route_time_axis.h @@ -102,6 +102,7 @@ public: void set_selected_regionviews (RegionSelection&); void get_selectables (ARDOUR::samplepos_t start, ARDOUR::samplepos_t end, double top, double bot, std::list&, bool within = false); void get_inverted_selectables (Selection&, std::list&); + void get_regionviews_at_or_after (ARDOUR::samplepos_t, RegionSelection&); void set_layer_display (LayerDisplay d); void toggle_layer_display (); LayerDisplay layer_display () const; diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc index e5b1325b31..6638b3462b 100644 --- a/gtk2_ardour/streamview.cc +++ b/gtk2_ardour/streamview.cc @@ -601,6 +601,16 @@ StreamView::get_inverted_selectables (Selection& sel, list& results } } +void +StreamView::get_regionviews_at_or_after (samplepos_t pos, RegionSelection& regions) +{ + for (list::iterator i = region_views.begin(); i != region_views.end(); ++i) { + if ((*i)->region()->position() >= pos) { + regions.push_back (*i); + } + } +} + /** @return height of a child region view, depending on stacked / overlaid mode */ double StreamView::child_height () const diff --git a/gtk2_ardour/streamview.h b/gtk2_ardour/streamview.h index cc5e3d9299..504c4b2c5f 100644 --- a/gtk2_ardour/streamview.h +++ b/gtk2_ardour/streamview.h @@ -106,6 +106,7 @@ public: void set_selected_regionviews (RegionSelection&); void get_selectables (ARDOUR::samplepos_t, ARDOUR::samplepos_t, double, double, std::list&, bool within = false); void get_inverted_selectables (Selection&, std::list& results); + void get_regionviews_at_or_after (ARDOUR::samplepos_t, RegionSelection&); virtual void update_contents_metrics(boost::shared_ptr) {} diff --git a/gtk2_ardour/time_axis_view.h b/gtk2_ardour/time_axis_view.h index f5a6dc2fdc..f783db5743 100644 --- a/gtk2_ardour/time_axis_view.h +++ b/gtk2_ardour/time_axis_view.h @@ -212,6 +212,7 @@ public: virtual void get_selectables (ARDOUR::samplepos_t, ARDOUR::samplepos_t, double, double, std::list&, bool within = false); virtual void get_inverted_selectables (Selection&, std::list& results); + virtual void get_regionviews_at_or_after (ARDOUR::samplepos_t, RegionSelection&) {} void add_ghost (RegionView*); void remove_ghost (RegionView*);