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
This commit is contained in:
Paul Davis 2010-08-30 17:34:12 +00:00
parent 80084dcdf3
commit a8e86b8f09
3 changed files with 37 additions and 11 deletions

View File

@ -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());
}
}

View File

@ -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;

View File

@ -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);
}