Abstracted common parts
authorEnrico Zini <enrico@enricozini.org>
Mon, 17 Aug 2009 20:48:23 +0000 (21:48 +0100)
committerEnrico Zini <enrico@enricozini.org>
Mon, 17 Aug 2009 20:48:23 +0000 (21:48 +0100)
src/app_main.vala

index 76c04d38455b934054d458c6049de1fac1339382..66749d9ee93d00d89af32ba280d43dcaec49dcca 100644 (file)
@@ -189,9 +189,54 @@ public class LabelEntry : Gtk.Entry
     }
 }
 
-public class AddAbsoluteDeadline : Applet
+public abstract class AddDeadline : Applet
 {
     protected LabelEntry dl_label;
+    protected Gtk.Button dl_submit;
+
+    public AddDeadline()
+    {
+        dl_label = new LabelEntry();
+        dl_label.changed += on_label_changed;
+
+        var hbox = new Gtk.HBox(false, 0);
+        hbox.pack_start(new Gtk.Label("Label: "), false, false, 0);
+        hbox.pack_start(dl_label, true, true, 0);
+        pack_start(hbox, false, false, 0);
+
+        dl_submit = new Gtk.Button.with_label("Activate");
+        dl_submit.set_sensitive(false);
+        dl_submit.clicked += on_submit;
+        button_box.pack_start(dl_submit, true, true, 0);
+    }
+
+       public override void start()
+    {
+        dl_label.set_text("");
+        update();
+    }
+
+    protected virtual void update()
+    {
+        dl_submit.set_sensitive(dl_label.text == "" ? false : true);
+    }
+
+    protected abstract time_t get_deadline();
+
+    protected void on_label_changed(LabelEntry e)
+    {
+        update();
+    }
+
+    protected void on_submit(Gtk.Button b)
+    {
+        zavai.clock.clock.schedule(new zavai.clock.Alarm(get_deadline(), dl_label.text));
+        back();
+    }
+}
+
+public class AddAbsoluteDeadline : AddDeadline
+{
     protected Gtk.Label dl_day;
     protected IncDec dl_day_tweak;
     protected Gtk.Label dl_hour;
@@ -199,24 +244,16 @@ public class AddAbsoluteDeadline : Applet
     protected Gtk.Label dl_min;
     protected IncDec dl_min_tweak;
     protected time_t dl_time;
-    protected Gtk.Button dl_submit;
 
     public AddAbsoluteDeadline()
     {
         _label = "Add absolute deadline";
         dl_time = 0;
 
-        dl_label = new LabelEntry();
-        dl_label.changed += on_label_changed;
-        var hbox = new Gtk.HBox(false, 0);
-        hbox.pack_start(new Gtk.Label("Label: "), false, false, 0);
-        hbox.pack_start(dl_label, true, true, 0);
-        pack_start(hbox, false, false, 0);
-
         dl_day = new Gtk.Label("");
         dl_day_tweak = new IncDec();
         dl_day_tweak.tweaked += on_tweak;
-        hbox = new Gtk.HBox(false, 0);
+        var hbox = new Gtk.HBox(false, 0);
         hbox.pack_start(new Gtk.Label("Day: "), false, false, 0);
         hbox.pack_start(dl_day, true, true, 0);
         hbox.pack_start(dl_day_tweak, false, false, 0);
@@ -239,27 +276,26 @@ public class AddAbsoluteDeadline : Applet
         hbox.pack_start(dl_min, true, true, 0);
         hbox.pack_start(dl_min_tweak, false, false, 0);
         pack_start(hbox, false, false, 0);
-
-        dl_submit = new Gtk.Button.with_label("Activate");
-        dl_submit.set_sensitive(false);
-        dl_submit.clicked += on_submit;
-        button_box.pack_start(dl_submit, true, true, 0);
     }
 
        public override void start()
     {
         dl_time = time_t();
-        dl_label.set_text("");
-        update();
+        base.start();
     }
 
-    protected void update()
+    protected override void update()
     {
         Time t = Time.local(dl_time);
         dl_day.set_text(t.format("%a %d %b"));
         dl_hour.set_text(t.format("%H"));
         dl_min.set_text(t.format("%M"));
-        dl_submit.set_sensitive(dl_label.text == "" ? false : true);
+        base.update();
+    }
+
+    protected override time_t get_deadline()
+    {
+        return dl_time;
     }
 
     protected void on_tweak(IncDec id, int amount)
@@ -276,45 +312,25 @@ public class AddAbsoluteDeadline : Applet
             dl_time = old;
         update();
     }
-
-    protected void on_submit(Gtk.Button b)
-    {
-        zavai.clock.clock.schedule(new zavai.clock.Alarm(dl_time, dl_label.text));
-        back();
-    }
-
-    protected void on_label_changed(LabelEntry e)
-    {
-        update();
-    }
 }
 
-public class AddRelativeDeadline : Applet
+public class AddRelativeDeadline : AddDeadline
 {
-    protected LabelEntry dl_label;
     protected Gtk.Label dl_hour;
     protected IncDec dl_hour_tweak;
     protected Gtk.Label dl_min;
     protected IncDec dl_min_tweak;
     protected int dl_time;
-    protected Gtk.Button dl_submit;
 
     public AddRelativeDeadline()
     {
         _label = "Add relative deadline";
         dl_time = 0;
 
-        dl_label = new LabelEntry();
-        dl_label.changed += on_label_changed;
-        var hbox = new Gtk.HBox(false, 0);
-        hbox.pack_start(new Gtk.Label("Label: "), false, false, 0);
-        hbox.pack_start(dl_label, true, true, 0);
-        pack_start(hbox, false, false, 0);
-
         dl_hour = new Gtk.Label("");
         dl_hour_tweak = new IncDec();
         dl_hour_tweak.tweaked += on_tweak;
-        hbox = new Gtk.HBox(false, 0);
+        var hbox = new Gtk.HBox(false, 0);
         hbox.pack_start(new Gtk.Label("Hour: "), false, false, 0);
         hbox.pack_start(dl_hour, true, true, 0);
         hbox.pack_start(dl_hour_tweak, false, false, 0);
@@ -328,25 +344,19 @@ public class AddRelativeDeadline : Applet
         hbox.pack_start(dl_min, true, true, 0);
         hbox.pack_start(dl_min_tweak, false, false, 0);
         pack_start(hbox, false, false, 0);
-
-        dl_submit = new Gtk.Button.with_label("Activate");
-        dl_submit.set_sensitive(false);
-        dl_submit.clicked += on_submit;
-        button_box.pack_start(dl_submit, true, true, 0);
     }
 
        public override void start()
     {
         dl_time = 0;
-        dl_label.set_text("");
-        update();
+        base.start();
     }
 
-    protected void update()
+    protected override void update()
     {
         dl_hour.set_text("%2d".printf(dl_time/60));
         dl_min.set_text("%2d".printf(dl_time%60));
-        dl_submit.set_sensitive(dl_label.text == "" ? false : true);
+        base.update();
     }
 
     protected void on_tweak(IncDec id, int amount)
@@ -361,15 +371,9 @@ public class AddRelativeDeadline : Applet
         update();
     }
 
-    protected void on_submit(Gtk.Button b)
-    {
-        zavai.clock.clock.schedule(new zavai.clock.Alarm(time_t() + dl_time * 60, dl_label.text));
-        back();
-    }
-
-    protected void on_label_changed(LabelEntry e)
+    protected override time_t get_deadline()
     {
-        update();
+        return time_t() + dl_time * 60;
     }
 }