Ensure that the newly selected track is visible on the canvas when scrolling through...
authorSampo Savolainen <v2@iki.fi>
Sun, 2 Nov 2008 20:26:33 +0000 (20:26 +0000)
committerSampo Savolainen <v2@iki.fi>
Sun, 2 Nov 2008 20:26:33 +0000 (20:26 +0000)
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@4082 d708f5d6-7413-0410-9779-e7cbd77b26cf

SConstruct
gtk2_ardour/editor.h
gtk2_ardour/editor_ops.cc

index d841472956ee544964d399ff71666655b139c98c..e82bcdcca8e8c9375762c2e315bd609851e25d0d 100644 (file)
@@ -907,13 +907,21 @@ if conf.CheckHeader('linux/input.h'):
 else:
     have_linux_input = False
 
-# let's continue checking, check for libcwiid
-if not conf.CheckHeader('cwiid.h'):
-    if env['WIIMOTE']:
+libraries['usb'] = conf.Finish ()
+
+#
+# Check for wiimote dependencies
+
+if env['WIIMOTE']:
+    wiimoteConf = env.Configure ( )
+    if not wiimoteConf.CheckHeader('cwiid.h'):
        print 'WIIIMOTE configured but you are missing libcwiid!'
         sys.exit(1)
+    if not wiimoteConf.CheckHeader('bluetooth/bluetooth.h'):
+        print 'WIIMOTE configured, but you are libbluetooth headers, which you need for libcwiid!'
+        sys.exit(1)
+    wiimoteConf.Finish()
 
-libraries['usb'] = conf.Finish ()
 
 #
 # Check for FLAC
index 7e0126bb0452bd7ec227e02221be0f9876dbc847..137108dcdd53ec03627047805876746dd4b1f05f 100644 (file)
@@ -2128,6 +2128,7 @@ public:
        bool entered_track_canvas (GdkEventCrossing*);
        void set_entered_track (TimeAxisView*);
        void set_entered_regionview (RegionView*);
+       void ensure_track_visible (TimeAxisView*);
        gint left_automation_track ();
 
        bool _new_regionviews_show_envelope;
index 43dd06780c4b106ff8187ebd07bf330e74063f69..6c99f03bdd5c7fb3414b3a8c3b7d7ed0ae8f9563 100644 (file)
@@ -5147,17 +5147,23 @@ 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()));
                        }
                        break;
                }
        }
+
+       ensure_track_visible(selected);
 }
 
 void
@@ -5170,17 +5176,50 @@ 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()));
                        }
                        break;
                }
        }
+
+       ensure_track_visible(selected);
+}
+
+void
+Editor::ensure_track_visible(TimeAxisView *track)
+{
+       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;
+
+       double track_min_y = track->y_position;
+       double track_max_y = track->y_position + (double)track->effective_height;
+
+       if (track_min_y >= current_view_min_y &&
+            track_max_y <= current_view_max_y) {
+               return;
+       }
+
+       double new_value;
+
+       if (track_min_y < current_view_min_y) {
+               // Track is above the current view
+               new_value = track_min_y;
+       } else {
+               // Track is below the current view
+               new_value = track->y_position + (double)track->effective_height + canvas_timebars_vsize - vertical_adjustment.get_page_size();
+       }
+
+       vertical_adjustment.set_value(new_value);
 }
 
 void