summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSampo Savolainen <v2@iki.fi>2008-11-04 20:55:24 +0000
committerSampo Savolainen <v2@iki.fi>2008-11-04 20:55:24 +0000
commit200d7baff72b377ab2fd7c4c838c87d839b108e2 (patch)
treef789c11c6728cc309194e5a4a24bfe4fbe50b7b1
parent596aa3a4feb47b6c7247a117b3302cdd73583a26 (diff)
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
-rw-r--r--gtk2_ardour/editor_ops.cc64
1 files 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<RouteUI *>(current);
+ } while ( current->hidden() || (rui != NULL && !rui->route()->active()));
+
+ selection->set(current);
- ensure_track_visible(selected);
+ 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<RouteUI *>(current);
+ } while ( current->hidden() || (rui != NULL && !rui->route()->active()));
+
+ selection->set (current);
- ensure_track_visible(selected);
+ 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;