diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 92d6085cb5..b32f718f88 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -3829,7 +3829,8 @@ Editor::set_stationary_playhead (bool yn) } } -void Editor::toggle_enable_group_edit () +void +Editor::toggle_enable_group_edit () { RefPtr act = ActionManager::get_action (X_("Editor"), X_("toggle-enable-group-edit")); if (act) { diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 1e2edc3c96..a546088591 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -263,6 +263,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void play_with_preroll (); void select_all_in_track (Selection::Operation op); void select_all_objects (Selection::Operation op); + void select_all_regions (); + void invert_region_selection (); void invert_selection_in_track (); void invert_selection (); void deselect_all (); diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index bea8da6b2f..5afa3ec59e 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -197,8 +197,8 @@ Editor::register_actions () reg_sens (editor_actions, "select-all-objects", _("Select All Objects"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_objects), Selection::Set)); reg_sens (editor_actions, "select-all-tracks", _("Select All Tracks"), sigc::mem_fun(*this, &Editor::select_all_tracks)); - reg_sens (editor_actions, "deselect-all", _("Select All/Deselect All"), sigc::mem_fun(*this, &Editor::deselect_all)); - reg_sens (editor_actions, "invert-selection", _("Invert Selection"), sigc::mem_fun(*this, &Editor::invert_selection)); + reg_sens (editor_actions, "select-all", _("Select All"), sigc::mem_fun(*this, &Editor::select_all_regions )); + reg_sens (editor_actions, "invert-selection", _("Invert Selection"), sigc::mem_fun(*this, &Editor::invert_selection )); toggle_reg_sens (editor_actions, "toggle-enable-group-edit", _("Enable Group Edit"), sigc::mem_fun (*this, &Editor::toggle_enable_group_edit)); reg_sens (editor_actions, "select-all-after-edit-cursor", _("Select All After Edit Point"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_selectables_using_edit), true)); diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc index 3c89f09f6a..ded877bd38 100644 --- a/gtk2_ardour/editor_selection.cc +++ b/gtk2_ardour/editor_selection.cc @@ -1596,6 +1596,48 @@ Editor::select_all_objects (Selection::Operation op) commit_reversible_command (); } +void +Editor::select_all_regions () +{ + list touched; + TrackViewList ts = track_views; + + begin_reversible_command (_("select all")); + + for (TrackViewList::iterator iter = ts.begin(); iter != ts.end(); ++iter) { + if ((*iter)->hidden()) { + continue; + } + + RouteTimeAxisView* rtv = dynamic_cast(*iter); + rtv->get_selectable_regionviews (0, max_framepos, 0, DBL_MAX, touched); + } + selection->set (touched); + + commit_reversible_command (); +} + +void +Editor::invert_region_selection () +{ + list touched; + TrackViewList ts = track_views; + + begin_reversible_command (_("invert selection")); + + for (TrackViewList::iterator iter = ts.begin(); iter != ts.end(); ++iter) { + if ((*iter)->hidden()) { + continue; + } + + RouteTimeAxisView* rtv = dynamic_cast(*iter); + rtv->get_inverted_selectable_regionviews (*selection, touched); + } + selection->set (touched); + + commit_reversible_command (); +} + void Editor::invert_selection_in_track () { diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index 961506a493..503e05644d 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -1373,6 +1373,31 @@ RouteTimeAxisView::get_inverted_selectables (Selection& sel, list& return; } +void +RouteTimeAxisView::get_selectable_regionviews (framepos_t start, framepos_t end, double top, double bot, list& results) +{ + double speed = 1.0; + + if (track() != 0) { + speed = track()->speed(); + } + + framepos_t const start_adjusted = session_frame_to_track_frame(start, speed); + framepos_t const end_adjusted = session_frame_to_track_frame(end, speed); + + if ((_view && ((top < 0.0 && bot < 0.0))) || touched (top, bot)) { + _view->get_selectables (start_adjusted, end_adjusted, top, bot, results); + } +} + +void +RouteTimeAxisView::get_inverted_selectable_regionviews (Selection& sel, list& results) +{ + if (_view) { + _view->get_inverted_selectables (sel, results); + } +} + RouteGroup* RouteTimeAxisView::route_group () const { diff --git a/gtk2_ardour/route_time_axis.h b/gtk2_ardour/route_time_axis.h index b51ba772a4..7b258cb320 100644 --- a/gtk2_ardour/route_time_axis.h +++ b/gtk2_ardour/route_time_axis.h @@ -97,6 +97,10 @@ public: void set_selected_regionviews (RegionSelection&); void get_selectables (ARDOUR::framepos_t start, ARDOUR::framepos_t end, double top, double bot, std::list&); void get_inverted_selectables (Selection&, std::list&); + + void get_selectable_regionviews (framepos_t start, framepos_t end, double top, double bot, std::list& results); + void get_inverted_selectable_regionviews (Selection& sel, std::list& results); + void set_layer_display (LayerDisplay d, bool apply_to_selection = false); LayerDisplay layer_display () const; diff --git a/gtk2_ardour/trackslive.menus.in b/gtk2_ardour/trackslive.menus.in index 8b667f3651..cdaac9c0d5 100644 --- a/gtk2_ardour/trackslive.menus.in +++ b/gtk2_ardour/trackslive.menus.in @@ -83,7 +83,7 @@ - +