[california/wip/725767-week] Scroll to 6am in week view, unless current date, switch to curr. time



commit 6e8599545b36c9bcbc6747ad3531909bb00ee79c
Author: Jim Nelson <jim yorba org>
Date:   Thu May 22 15:29:39 2014 -0700

    Scroll to 6am in week view, unless current date, switch to curr. time

 src/view/week/week-grid.vala |   26 ++++++++++++++++++++++++--
 src/view/week/week-pane.vala |    4 ++--
 2 files changed, 26 insertions(+), 4 deletions(-)
---
diff --git a/src/view/week/week-grid.vala b/src/view/week/week-grid.vala
index d55da22..8936e98 100644
--- a/src/view/week/week-grid.vala
+++ b/src/view/week/week-grid.vala
@@ -44,8 +44,9 @@ internal class Grid : Gtk.Box {
     private Gee.HashMap<Calendar.Date, AllDayCell> date_to_all_day = new Gee.HashMap<Calendar.Date,
         AllDayCell>();
     private Toolkit.ButtonConnector day_pane_button_connector = new Toolkit.ButtonConnector();
-    Gtk.ScrolledWindow scrolled_panes;
-    Gtk.Widget right_spacer;
+    private Gtk.ScrolledWindow scrolled_panes;
+    private Gtk.Widget right_spacer;
+    private bool vadj_init = false;
     
     public Grid(Controller owner, Calendar.Week week) {
         Object(orientation: Gtk.Orientation.VERTICAL, spacing: 0);
@@ -160,6 +161,27 @@ internal class Grid : Gtk.Box {
             
             return false;
         });
+        
+        // watch for vertical adjustment to initialize to set the starting scroll position
+        scrolled_panes.vadjustment.changed.connect(on_vadjustment_changed);
+    }
+    
+    private void on_vadjustment_changed(Gtk.Adjustment vadj) {
+        // wait for vadjustment to look like something reasonable; also, only do this once
+        if (vadj.upper <= 1.0 || vadj_init)
+            return;
+        
+        // scroll to 6am when first created, unless in the current date, in which case scroll to
+        // current time
+        Calendar.WallTime start_time = Calendar.System.today in week
+            ? new Calendar.WallTime.from_exact_time(Calendar.System.now)
+            : new Calendar.WallTime(6, 0, 0);
+        
+        // scroll there
+        scrolled_panes.vadjustment.value = date_to_panes.get(week.start_date).get_line_y(start_time);
+        
+        // don't do this again
+        vadj_init = true;
     }
     
     private bool on_draw_top_line(Gtk.Widget widget, Cairo.Context ctx) {
diff --git a/src/view/week/week-pane.vala b/src/view/week/week-pane.vala
index 96292fc..b9603ec 100644
--- a/src/view/week/week-pane.vala
+++ b/src/view/week/week-pane.vala
@@ -92,7 +92,7 @@ internal abstract class Pane : Gtk.EventBox {
      *
      * If displaying text, use { link get_text_y}, as that will deduct padding.
      */
-    protected int get_line_y(Calendar.WallTime wall_time) {
+    public int get_line_y(Calendar.WallTime wall_time) {
         // every hour gets two "lines" of text
         int line_y = line_height_px * 2 * wall_time.hour;
         
@@ -112,7 +112,7 @@ internal abstract class Pane : Gtk.EventBox {
      *
      * Use this when displaying text.  Drawing lines, borders, etc. should use { link get_line_y}.
      */
-    protected int get_text_y(Calendar.WallTime wall_time) {
+    public int get_text_y(Calendar.WallTime wall_time) {
         return get_line_y(wall_time) + Palette.LINE_PADDING_PX;
     }
     


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]