Started work on an alarm notifier
[gregoa/zavai.git] / src / app_alarm.vala
1 /*
2  * app_alarm - zavai alarm system
3  *
4  * Copyright (C) 2010  Enrico Zini <enrico@enricozini.org>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20
21 using GLib;
22
23 namespace zavai {
24 namespace ui {
25 namespace alarm {
26
27 // Compute a-b in microseconds
28 static long timediff(Posix.timeval* a, Posix.timeval* b)
29 {
30     return (a->tv_sec - b->tv_sec) * 1000000 + (a->tv_usec - b->tv_usec);
31 }
32
33 public class AlarmNotifier : zavai.Resource, Gtk.Window
34 {
35     protected Gtk.VBox vbox;
36     protected bool shown;
37     protected Gtk.Label message;
38     protected Gtk.Button ack;
39
40     public AlarmNotifier()
41     {
42         Object(
43             type: Gtk.WindowType.TOPLEVEL,
44             title: "Alarm"
45         );
46         shown = false;
47         destroy_with_parent = true;
48         set_transient_for(zavai.app);
49         set_modal(true);
50         set_position(Gtk.WindowPosition.CENTER_ON_PARENT);
51         set_size_request(300, 500);
52
53         vbox = new Gtk.VBox(false, 0);
54         add(vbox);
55
56         //destroy += Gtk.main_quit;
57         //set_events(get_events() | Gdk.EventMask.VISIBILITY_NOTIFY_MASK);
58         //visibility_notify_event += on_visibility;
59         set_skip_pager_hint(true);
60         set_skip_taskbar_hint(true);
61         set_type_hint(Gdk.WindowTypeHint.POPUP_MENU);
62
63         message = new Gtk.Label("no message");
64         vbox.pack_start(message, false, true, 0);
65
66         ack = new Gtk.Button.with_label("Ack");
67         ack.clicked += on_ack;
68         vbox.pack_start(ack, true, true, 0);
69
70         //vbox.show_all();
71         zavai.registry.register(this);
72     }
73
74     protected void on_ack()
75     {
76         confirm();
77     }
78
79     public void trigger(string text)
80     {
81         message.set_text(text);
82
83         if (!shown)
84         {
85             show_all();
86             show();
87             visible = true;
88             present();
89             shown = true;
90         } else {
91             // TODO: do more in case it is visible but has no visibility (is covered by others)
92             visible = !visible;
93             if (visible)
94                 present();
95         }
96     }
97
98     public void confirm()
99     {
100         visible = false;
101     }
102
103     public void cancel()
104     {
105         visible = false;
106     }
107
108     public void shutdown() {}
109 }
110
111 public AlarmNotifier notifier;
112
113 public void init()
114 {
115     notifier = new AlarmNotifier();
116
117     //zavai.registry.getmenu("menu.main").add_applet("menu.power");
118     //tpm = new TogglePowerMenu();
119     //zavai.registry.getmenu("menu.main").add_widget(tpm);
120
121     /*
122     raise_icon = new RaiseIcon();
123     raise_icon.set_visible(true);
124
125     close_or_back = new CloseOrBack();
126     close_or_back.set_visible(true);
127
128     window_list = new WindowList("Current apps");
129     zavai.registry.register_applet("wm.list", window_list);
130     zavai.registry.getmenu("menu.main").add_applet("wm.list");
131
132     try {
133         launcher = new Launcher("Run program");
134     } catch (Error e) {
135         zavai.log.error("Not running launcher: " + e.message);
136         launcher = null;
137     }
138
139     if (launcher != null)
140     {
141         zavai.registry.register_applet("wm.launcher", launcher);
142         zavai.registry.getmenu("menu.main").add_applet("wm.launcher");
143     }
144     */
145 }
146
147 }
148 }
149 }