Added relative deadline
[gregoa/zavai.git] / src / app_main.vala
index 7dc4f9638af0d93964b041cd257df0f35acd901f..f8346e47b89bde630698dd13d399f27ee775da78 100644 (file)
@@ -269,9 +269,85 @@ public class AddAbsoluteDeadline : Applet
 
 public class AddRelativeDeadline : Applet
 {
+    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);
+        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 = 0;
+        dl_label.set_text("");
+        update();
+    }
+
+    protected 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);
+    }
+
+    protected void on_tweak(IncDec id, int amount)
+    {
+        int old = dl_time;
+        if (id == dl_hour_tweak)
+            dl_time += amount * 60;
+        else if (id == dl_min_tweak)
+            dl_time += amount * 60;
+        if (dl_time < 0)
+            dl_time = old;
+        update();
+    }
+
+    protected void on_submit(Gtk.Button b)
+    {
+        zavai.clock.clock.schedule(new zavai.clock.Alarm(time_t() + dl_time, dl_label.text));
+        back();
+    }
+
+    protected void on_label_changed(LabelEntry e)
+    {
+        update();
     }
 }