initial commit/release
[wifi-assistant] / package / src / config-gui.py
1 import gtk, hildon, gobject
2 from gnome import gconf
3 import webbrowser
4 import osso
5
6 def _(str):
7     return str
8
9 _gc = gconf.client_get_default()
10 prefix = '/apps/maemo/wbl/launch'
11 GCONF_KEY_URL = '/apps/maemo/wbl/url_to_open'
12 GCONF_KEY_POPUP = '/apps/maemo/wbl/popup'
13
14 program = hildon.Program.get_instance()
15
16 # Create the main window
17 win = hildon.StackableWindow()
18
19 def launch_browser(url):
20     osso_context = osso.Context("org.maemo.touchsearch", "1.1", False)
21     osso_rpc = osso.Rpc(osso_context)
22     osso_rpc.rpc_run_with_defaults("osso_browser", "open_new_window", (url,))
23
24 def show_about(x):
25     dialog = gtk.Dialog('About', win)
26     
27     text = "I got tired of not being able to connect easily to networks guarded by a login page, " + \
28         "so I created this app to scratch that itch. It's free to use, inspect, adapt and share, " + \
29         "licencsed under a BSD type license.\nI hope you enjoy it!"
30     about_label = gtk.Label(text)
31     about_label.set_line_wrap(True)
32     dialog.vbox.add(about_label)
33     
34     dialog.add_button(_('File a bug'), 1)
35     dialog.add_button(_('Donate'), 2)
36     dialog.add_button(_('Close'), 3)
37     
38     dialog.show_all()
39     result = dialog.run()
40     dialog.hide()
41     
42     if result == 1:
43         launch_browser('http://wifi-assistant.garage.maemo.org/bugs/')
44     if result == 2:
45         launch_browser('http://wifi-assistant.garage.maemo.org/donate/')
46
47     
48 def show_settings(x):
49     checkbox = hildon.CheckButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT)
50     checkbox.set_label('Show popup when connected to a new SSID')
51     checkbox.set_active(_gc.get_bool(GCONF_KEY_POPUP))
52     
53     url_label = gtk.Label('URL to open when launching browser:') # IMPROVEMENT: caption?
54     url_label.set_alignment(0, 0.5)
55     url_label.set_padding(5, 5)
56     url_field = hildon.Entry(gtk.HILDON_SIZE_AUTO)
57     url_field.set_text(_gc.get_string(GCONF_KEY_URL))
58     
59     dialog = gtk.Dialog('Settings', win)
60     dialog.vbox.set_homogeneous(False)
61     
62     dialog.vbox.add(checkbox)
63     dialog.vbox.add(url_label)
64     dialog.vbox.add(url_field)
65     
66     dialog.add_button(_('Cancel'), gtk.RESPONSE_CANCEL)
67     dialog.add_button(_('Save'), gtk.RESPONSE_YES)
68     
69     dialog.show_all()
70     result = dialog.run()
71     dialog.hide()
72     
73     if (result == gtk.RESPONSE_YES):
74         _gc.set_string(GCONF_KEY_URL, url_field.get_text())
75         _gc.set_bool(GCONF_KEY_POPUP, checkbox.get_active())
76
77
78 def create_menu():
79     menu = hildon.AppMenu()
80  
81     settings = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
82     command_id = "Settings"
83     settings.set_label(command_id)
84     settings.connect("clicked", show_settings)
85     menu.append(settings)
86     
87     about = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
88     command_id = "About"
89     about.set_label(command_id)
90     about.connect("clicked", show_about)
91     menu.append(about)
92     
93     menu.show_all()
94     return menu
95
96 def create_ssid_model():
97     store = gtk.ListStore(str, gobject.TYPE_BOOLEAN)
98     
99     entries = _gc.all_entries(prefix)
100     for entry in entries:
101         ssidName = entry.get_key()[len(prefix) + 1:]
102         launchBrowser = entry.get_value().get_bool()
103         store.append([ssidName, launchBrowser])
104         print ssidName
105         print launchBrowser
106     
107     return store
108
109 def edit_ssid(ssid, parent, model, iter):
110     dialog = gtk.Dialog(ssid, parent)
111     dialog.vbox.set_homogeneous(False)
112     
113     dialog.add_button(_('No'), gtk.RESPONSE_NO)
114     dialog.add_button(_('Yes'), gtk.RESPONSE_YES)
115     
116     label = gtk.Label(_('After being connected to ' + ssid + ' do you wish to launch a browser?'))
117     label.set_line_wrap(True)
118     label.set_justify(gtk.JUSTIFY_LEFT)
119     label.set_alignment(0, 0.5)
120     dialog.vbox.add(label)
121
122     dialog.show_all()
123     result = dialog.run()
124     dialog.hide()
125     
126     launchBrowser = (result == gtk.RESPONSE_YES)
127     _gc.set_bool('/apps/maemo/wbl/launch/' + ssid, launchBrowser)
128     model.set(iter, 1, launchBrowser)
129
130
131 def create_ssid_view():
132     model = create_ssid_model()
133     view = gtk.TreeView(model)
134     view.set_border_width(5)
135     
136     tvcolumn = gtk.TreeViewColumn('SSID', gtk.CellRendererText(), text = 0)
137     tvcolumn.set_expand(True)
138     view.append_column(tvcolumn)
139
140     def boolean_func(column, cell, model, iter):
141         if model.get_value(iter, 1):
142             stock_id = 'gtk-yes'
143         else:
144             stock_id = 'gtk-no'
145         cell.set_property('stock-id', stock_id)
146         
147     view.insert_column_with_data_func(1, 'Launch', gtk.CellRendererPixbuf(), boolean_func)
148     
149     def row_activated(treeview, path, view_column):
150         model = treeview.get_model()
151         iter = model.get_iter(path)
152         ssid = model.get_value(iter, 0)
153         print ssid
154         edit_ssid(ssid, win, model, iter)
155     
156     view.connect('row-activated', row_activated)
157     view.set_search_column(0)
158     tvcolumn.set_sort_column_id(0)
159     
160     return view
161     
162 def create_table():
163     table = gtk.Table(rows=10, columns=2)
164     table.set_col_spacings(5)
165     table.set_row_spacings(5)
166     table.set_border_width(5)
167     
168     row = 0
169     entries = xrange(5)
170     for entry in entries:
171         def l(i):
172             if (i == 0):
173                 return ""
174             return "x" + l(i-1)
175         
176         ssid = "SSID " + l(row) 
177         ssid_label = gtk.Label(ssid)
178         ssid_label.set_alignment(0, 0.5)
179         table.attach(ssid_label, 0, 1, row, row+1, xoptions=gtk.FILL)
180         table.attach(gtk.Label("On"), 1, 2, row, row+1, xoptions=gtk.SHRINK)
181         row = row + 1
182     
183     return table
184     
185 def main():
186     win.set_title("Browser Launcher Configuration")
187  
188 #    pannable_area = hildon.PannableArea()
189     
190     ssid_view = create_ssid_view()
191     
192 #    pannable_area.add_with_viewport(ssid_view)
193     
194 #    win.add(pannable_area)
195     win.add(ssid_view)
196         
197     win.set_app_menu(create_menu())
198  
199     win.connect("destroy", gtk.main_quit, None)
200  
201     win.show_all()
202     gtk.main()
203  
204 if __name__ == "__main__":
205     main()