From a8e86b8f09e603e7b6cb2eb73471b80b89781ef2 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 30 Aug 2010 17:34:12 +0000 Subject: tweak track selection during range drag; "all group" button in editor is now working, but not mapped to display the right setting at startup git-svn-id: svn://localhost/ardour2/branches/3.0@7712 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/editor_route_groups.cc | 13 ++++++++++++- gtk2_ardour/editor_route_groups.h | 1 + gtk2_ardour/editor_selection.cc | 34 ++++++++++++++++++++++++---------- 3 files changed, 37 insertions(+), 11 deletions(-) diff --git a/gtk2_ardour/editor_route_groups.cc b/gtk2_ardour/editor_route_groups.cc index d4ab4542ea..31ab21c2bf 100644 --- a/gtk2_ardour/editor_route_groups.cc +++ b/gtk2_ardour/editor_route_groups.cc @@ -48,7 +48,7 @@ using Gtkmm2ext::Keyboard; EditorRouteGroups::EditorRouteGroups (Editor* e) : EditorComponent (e) - , _all_group_active_button (_("\"all\" group")) + , _all_group_active_button (_("No Selection = All Tracks")) , _in_row_change (false) { @@ -163,6 +163,8 @@ EditorRouteGroups::EditorRouteGroups (Editor* e) _display_packer.pack_start (_scroller, true, true); _display_packer.pack_start (_all_group_active_button, false, false); _display_packer.pack_start (*button_box, false, false); + + _all_group_active_button.signal_toggled().connect (sigc::mem_fun (*this, &EditorRouteGroups::all_group_toggled)); } void @@ -499,3 +501,12 @@ EditorRouteGroups::run_new_group_dialog () return _editor->_group_tabs->run_new_group_dialog (rl); } + +void +EditorRouteGroups::all_group_toggled () +{ + if (_session) { + _session->all_route_group().set_select (_all_group_active_button.get_active()); + } +} + diff --git a/gtk2_ardour/editor_route_groups.h b/gtk2_ardour/editor_route_groups.h index 5610596be1..127eedd0e2 100644 --- a/gtk2_ardour/editor_route_groups.h +++ b/gtk2_ardour/editor_route_groups.h @@ -71,6 +71,7 @@ private: void property_changed (ARDOUR::RouteGroup*, const PBD::PropertyChange &); void remove_selected (); void run_new_group_dialog (); + void all_group_toggled(); Glib::RefPtr _model; Glib::RefPtr _selection; diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc index bde72e5374..1ee275955e 100644 --- a/gtk2_ardour/editor_selection.cc +++ b/gtk2_ardour/editor_selection.cc @@ -176,10 +176,6 @@ Editor::select_all_tracks () void Editor::set_selected_track_as_side_effect (Selection::Operation op, bool force) { - cerr << "E::sstase ca = " << clicked_axisview << " cr = " << clicked_routeview - << " op = " << op << " force = " << force - << endl; - if (!clicked_axisview) { return; } @@ -189,12 +185,14 @@ Editor::set_selected_track_as_side_effect (Selection::Operation op, bool force) return; } + bool had_tracks = !selection->tracks.empty(); RouteGroup* group = clicked_routeview->route()->route_group(); + RouteGroup& arg (_session->all_route_group()); switch (op) { case Selection::Toggle: if (selection->selected (clicked_axisview)) { - if (_session->all_route_group().is_active()) { + if (arg.is_select() && arg.is_active()) { for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) { selection->remove(*i); } @@ -207,7 +205,7 @@ Editor::set_selected_track_as_side_effect (Selection::Operation op, bool force) selection->remove (clicked_axisview); } } else { - if (_session->all_route_group().is_active()) { + if (arg.is_select() && arg.is_active()) { for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) { selection->add(*i); } @@ -223,13 +221,29 @@ Editor::set_selected_track_as_side_effect (Selection::Operation op, bool force) break; case Selection::Add: - selection->clear(); - cerr << ("Editor::set_selected_track_as_side_effect case Selection::Add not yet implemented\n"); + if (!had_tracks && arg.is_select() && arg.is_active()) { + /* nothing was selected already, and all group is active etc. so use + all tracks. + */ + for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) { + selection->add(*i); + } + } else if (group && group->is_active()) { + for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) { + if ((*i)->route_group() == group) + selection->add(*i); + } + } else { + selection->add (clicked_axisview); + } break; case Selection::Set: - selection->clear(); - if (_session->all_route_group().is_active()) { + selection->clear(); + if (!had_tracks && arg.is_select() && arg.is_active()) { + /* nothing was selected already, and all group is active etc. so use + all tracks. + */ for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) { selection->add(*i); } -- cgit v1.2.3