Implemented scheduling a new alarm
authorEnrico Zini <enrico@enricozini.org>
Mon, 17 Aug 2009 18:36:15 +0000 (19:36 +0100)
committerEnrico Zini <enrico@enricozini.org>
Mon, 17 Aug 2009 18:36:15 +0000 (19:36 +0100)
src/app_gps.vala
src/app_main.vala
src/app_polygen.vala
src/zavai.vala

index a4b8ce93a7f0b22266d253fb1f9f5d987e54e5c6..72545bcfd10a5f1a16a29f71643a36b9ea799449 100644 (file)
@@ -171,15 +171,11 @@ public void init()
     var menu_gpsrequest = new GPSRequestLink();
 
     // Menus
-    var menu_gps = new zavai.Menu("GPS");
-    //menu_gps.add_applet("app.debug.useless");
+    var menu_gps = zavai.registry.getmenu("menu.gps");
     menu_gps.add_service_toggle("gps.gpx", "Start GPX trace", "Stop GPX trace");
     menu_gps.add_applet("ui.gps.monitor");
     menu_gps.add_widget(menu_waypoint);
     menu_gps.add_widget(menu_gpsrequest);
-
-    zavai.registry.register_menu("menu.gps", menu_gps);
-    zavai.registry.getmenu("menu.main").add_applet("menu.gps");
 }
 
 }
index 1e62b2f295d1bf618a1aee0d106f3652df5963cf..1eca6497d9c4bd2030db8f2fb793de663f22f0d3 100644 (file)
@@ -137,12 +137,173 @@ public class Status : Applet
        }
 }
 
+public class IncDec : Gtk.HButtonBox
+{
+    protected Gtk.Button b_dec;
+    protected Gtk.Button b_inc;
+
+    public signal void tweaked(IncDec id, int amount);
+
+    public IncDec()
+    {
+        b_dec = new Gtk.Button.with_label("-");
+        b_inc = new Gtk.Button.with_label("+");
+        pack_start(b_dec, false, false, 0);
+        pack_start(b_inc, false, false, 0);
+        b_dec.clicked += on_clicked;
+        b_inc.clicked += on_clicked;
+    }
+
+    protected void on_clicked(Gtk.Button b)
+    {
+        tweaked(this, b == b_dec ? -1 : 1);
+    }
+}
+
+public class LabelEntry : Gtk.Entry
+{
+    public LabelEntry()
+    {
+    }
+}
+
+public class AddAbsoluteDeadline : Applet
+{
+    protected LabelEntry dl_label;
+    protected Gtk.Label dl_day;
+    protected IncDec dl_day_tweak;
+    protected Gtk.Label dl_hour;
+    protected IncDec dl_hour_tweak;
+    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);
+        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);
+        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);
+        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);
+        pack_start(hbox, false, false, 0);
+
+        dl_min = new Gtk.Label("");
+        dl_min_tweak = new IncDec();
+        dl_min_tweak.tweaked += on_tweak;
+        hbox = new Gtk.HBox(false, 0);
+        hbox.pack_start(new Gtk.Label("Minute: "), false, false, 0);
+        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();
+    }
+
+    protected 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);
+    }
+
+    protected void on_tweak(IncDec id, int amount)
+    {
+        time_t old = dl_time;
+        if (id == dl_day_tweak)
+            dl_time += amount * 3600 * 24;
+        else if (id == dl_hour_tweak)
+            dl_time += amount * 3600;
+        else if (id == dl_min_tweak)
+            dl_time += amount * 60;
+        time_t now = time_t();
+        if (dl_time < now)
+            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 AddRelativeDeadline()
+    {
+        _label = "Add relative deadline";
+    }
+}
+
+public class AddDailyDeadline : Applet
+{
+    public AddDailyDeadline()
+    {
+        _label = "Add daily deadline";
+    }
+}
+
 Status status;
+AddAbsoluteDeadline aad;
+AddRelativeDeadline ard;
+AddDailyDeadline add;
 
 public void init()
 {
     status = new Status("Zavai");
     zavai.registry.register_applet("zavai.status", status);
+
+    aad = new AddAbsoluteDeadline();
+    zavai.registry.register_applet("clock.addabsolute", aad);
+    ard = new AddRelativeDeadline();
+    zavai.registry.register_applet("clock.addrelative", ard);
+    add = new AddDailyDeadline();
+    zavai.registry.register_applet("clock.adddaily", add);
+
+    var menu_misc = zavai.registry.getmenu("menu.misc");
+       menu_misc.add_applet("clock.addabsolute");
+       menu_misc.add_applet("clock.addrelative");
+       menu_misc.add_applet("clock.adddaily");
 }
 
 }
index 44f56ddbbd04734af41a0e586c67efccce7c5a93..719ba886e880084df6300ccd5c15a72a5fd2f56b 100644 (file)
@@ -234,10 +234,6 @@ Polygen polygen;
 
 public void init()
 {
-    var menu_misc = new zavai.Menu("Misc");
-    zavai.registry.register_menu("menu.misc", menu_misc);
-    zavai.registry.getmenu("menu.main").add_applet("menu.misc");
-
     try {
         var data = new IOChannel.file(zavai.config.homedir + "/polygen-info", "r");
         polygen = new Polygen("Polygen", data);
index c01452a4b4a088c7620e33900e28510d06a660e4..17dfbb0e12b7b6677704a92724aa0dd779a9d530 100644 (file)
@@ -60,8 +60,17 @@ static int main (string[] args) {
        zavai.clock.clock.check_alarms();
        */
 
+       // Create menus
        zavai.registry.register_menu("menu.main", new zavai.Menu("Main menu"));
 
+    var menu_gps = new zavai.Menu("GPS");
+    zavai.registry.register_menu("menu.gps", menu_gps);
+    zavai.registry.getmenu("menu.main").add_applet("menu.gps");
+
+    var menu_misc = new zavai.Menu("Misc");
+    zavai.registry.register_menu("menu.misc", menu_misc);
+    zavai.registry.getmenu("menu.main").add_applet("menu.misc");
+
        // User interface
        zavai.ui.main.init();
        zavai.ui.gps.init();