summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-08-30 17:34:12 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-08-30 17:34:12 +0000
commita8e86b8f09e603e7b6cb2eb73471b80b89781ef2 (patch)
tree1673ff39f551d55bb64dd80ad1180b7fd8388c51
parent80084dcdf32e0deb59e6b3642263ab0ea1e940e0 (diff)
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
-rw-r--r--gtk2_ardour/editor_route_groups.cc13
-rw-r--r--gtk2_ardour/editor_route_groups.h1
-rw-r--r--gtk2_ardour/editor_selection.cc34
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<Gtk::ListStore> _model;
Glib::RefPtr<Gtk::TreeSelection> _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);
}