First version of a WiFi app.
[gregoa/zavai.git] / src / app_wifi.vala
1 /*
2  * app_wifi - WiFi buttons
3  * copied from app_gps.vala
4  *
5  * Copyright (C) 2009  Enrico Zini <enrico@enricozini.org>
6  * Copyright (C) 2009  gregor herrmann <gregor.herrmann@comodo.priv.at>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  */
22
23 using GLib;
24
25 namespace zavai {
26 namespace ui {
27 namespace wifi {
28
29 public class WiFiRequest : Gtk.ToggleButton
30 {
31         protected string service_name;
32         protected string label_start;
33         protected string label_stop;
34         protected zavai.StatusIcon status_icon;
35         protected bool power = false;
36
37         public WiFiRequest()
38         {
39                 service_name = "wifi.wifi";
40                 label_start = "Start WiFi";
41                 label_stop = "Stop WiFi";
42                 set_size_request(0, zavai.config.min_button_height);
43                 toggled += on_toggled;
44
45                 set_label(get_active() ? label_stop : label_start);
46
47                 //tooltip = "WiFi status";
48                 try {
49                         power = zavai.wifi.wifi.device.GetPower();
50                 } catch (Error e) {
51                         power = false;
52                 }
53                 zavai.wifi.wifi.device.Power += on_power_status_changed;
54
55                 // WiFi status icon
56                 status_icon = new zavai.StatusIcon();
57                 status_icon.install();
58                 status_icon.clicked += on_status_clicked;
59                 update_icon();
60         }
61
62         protected void update_icon()
63         {
64                 string name;
65                 if (power)
66                         name = zavai.config.icondir + "/" + "wifi_1.png";
67                 else
68                         name = zavai.config.icondir + "/" + "wifi_0.png";
69                 status_icon.set_from_file(name);
70         }
71
72         private void on_power_status_changed(dynamic DBus.Object pos, string device, bool power)
73         {
74                 this.power = power;
75                 update_icon();
76         }
77
78         private void on_toggled(Gtk.Button src)
79         {
80                 Service s = zavai.registry.gets(service_name);
81                 if (get_active()) {
82                         s.request("servicerequestlink");
83         }
84                 else {
85                         s.release("servicerequestlink");
86         }
87                 set_label(get_active() ? label_stop : label_start);
88                 update_icon();
89         }
90
91         private void on_status_clicked(Gtk.Button b)
92         {
93                 set_active(!get_active());
94         }
95 }
96
97 WiFiRequest wifirequest;
98
99 public void init()
100 {
101     wifirequest = new WiFiRequest();
102 }
103
104 }
105 }
106 }