From 200d7baff72b377ab2fd7c4c838c87d839b108e2 Mon Sep 17 00:00:00 2001 From: Sampo Savolainen Date: Tue, 4 Nov 2008 20:55:24 +0000 Subject: [PATCH] Skip non active and hidden tracks with prev/next track. Also prevent ensuring the visibility of a hidden track. git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@4095 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/editor_ops.cc | 64 ++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 28 deletions(-) diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 6c99f03bdd..b4cb4c688c 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -5147,23 +5147,26 @@ Editor::select_next_route() TimeAxisView* current = selection->tracks.front(); - TimeAxisView* selected; - - for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { - if (*i == current) { - ++i; - if (i != track_views.end()) { - selected = (*i); - selection->set (*i); - } else { - selected = (*(track_views.begin())); - selection->set (*(track_views.begin())); + RouteUI *rui; + do { + for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { + if (*i == current) { + ++i; + if (i != track_views.end()) { + current = (*i); + } else { + current = (*(track_views.begin())); + //selection->set (*(track_views.begin())); + } + break; } - break; } - } + rui = dynamic_cast(current); + } while ( current->hidden() || (rui != NULL && !rui->route()->active())); - ensure_track_visible(selected); + selection->set(current); + + ensure_track_visible(current); } void @@ -5176,28 +5179,33 @@ Editor::select_prev_route() TimeAxisView* current = selection->tracks.front(); - TimeAxisView* selected; - - for (TrackViewList::reverse_iterator i = track_views.rbegin(); i != track_views.rend(); ++i) { - if (*i == current) { - ++i; - if (i != track_views.rend()) { - selected = (*i); - selection->set (*i); - } else { - selected = *(track_views.rbegin()); - selection->set (*(track_views.rbegin())); + RouteUI *rui; + do { + for (TrackViewList::reverse_iterator i = track_views.rbegin(); i != track_views.rend(); ++i) { + if (*i == current) { + ++i; + if (i != track_views.rend()) { + current = (*i); + } else { + current = *(track_views.rbegin()); + } + break; } - break; } - } + rui = dynamic_cast(current); + } while ( current->hidden() || (rui != NULL && !rui->route()->active())); - ensure_track_visible(selected); + selection->set (current); + + ensure_track_visible(current); } void Editor::ensure_track_visible(TimeAxisView *track) { + if (track->hidden()) + return; + double current_view_min_y = vertical_adjustment.get_value(); double current_view_max_y = vertical_adjustment.get_value() + vertical_adjustment.get_page_size() - canvas_timebars_vsize;