4f3e8260e72d7e597378e51182e106d53c0f2d06
[wifi-assistant] / package / src / wifi_assistant / config_gui.py
1 #!/usr/bin/python2.5
2 import gtk, hildon
3
4 def _(str):
5     return str
6
7 class ConfigGui():
8     
9     def __init__(self, launcher, application_settings, network_settings, hildon_program, hildon_window, list_store):
10         self._launcher = launcher
11         self._application_settings = application_settings
12         self._network_settings = network_settings
13         self._program = hildon_program
14         self._win = hildon_window
15         self._model= list_store
16
17
18     def main(self):
19         self._win.set_title(_("Wifi Jail Breakout Assistant"))
20         ssid_list = self._create_ssid_view(self._model)
21         pannable_area= hildon.PannableArea()
22         pannable_area.add(ssid_list)
23         self._win.add(pannable_area)
24         self._win.set_app_menu(self._create_menu())
25         self._win.connect("destroy", gtk.main_quit, None)
26         self._win.show_all()
27
28      
29      # FIXME: refactor out
30     def _launch_browser(self, url):
31         self._launcher.openUrl(url)
32     
33     
34     def _show_about(self, x):
35         from wifi_assistant.gui.about_dialog import AboutDialog
36         AboutDialog(self._launcher, self._win).show()
37     
38         
39     def _show_settings(self, x):
40         from wifi_assistant.gui.application_settings_dialog import ApplicationSettingsDialog
41         use_popup = self._application_settings.getUsePopup()
42         url_to_open = self._network_settings.getDefaultSettings().getBrowserOptions()['url']
43         ApplicationSettingsDialog(self._win, self._save_callback).show(use_popup, url_to_open)
44     
45     
46     def _save_callback(self, popup, url):
47         self._application_settings.setUsePopup(popup)
48         settings = self._network_settings.getDefaultSettings()
49         settings.getBrowserOptions()['url'] = url
50         self._network_settings.save(settings)
51     
52     
53     def _create_menu(self):
54         menu = hildon.AppMenu()
55         
56         about = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
57         about.set_label(_("About"))
58         about.connect("clicked", self._show_about)
59         menu.append(about)
60      
61         settings = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
62         settings.set_label(_("Settings"))
63         settings.connect("clicked",self._show_settings)
64         menu.append(settings)
65         
66         add = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
67         add.set_label(_("Add network"))
68         add.connect("clicked", self._add_ssid)
69         menu.append(add)
70         
71         delete = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
72         delete.set_label(_("Delete networks"))
73         delete.connect("clicked", self._delete_ssid)
74         menu.append(delete)
75         
76         menu.show_all()
77         return menu
78     
79
80     def _edit_ssid(self, ssid, model, iter):
81         dialog = gtk.Dialog(ssid, self._win)
82         dialog.vbox.set_homogeneous(False)
83         
84         dialog.add_button(_('No'), gtk.RESPONSE_NO)
85         dialog.add_button(_('Yes'), gtk.RESPONSE_YES)
86         
87         label = gtk.Label(_('After being connected to ' + ssid + ' do you wish to launch a browser?')) #FIXME: l10n
88         label.set_line_wrap(True)
89         label.set_justify(gtk.JUSTIFY_LEFT)
90         label.set_alignment(0, 0.5)
91         dialog.vbox.add(label)
92     
93         dialog.show_all()
94         result = dialog.run()
95         dialog.hide()
96         
97         launchBrowser = None
98         if result == gtk.RESPONSE_YES:
99             launchBrowser = True
100         elif result == gtk.RESPONSE_NO:
101             launchBrowser = False
102         
103         if launchBrowser is not None:
104             self._settings.setLaunchSetting(ssid, launchBrowser)
105             model.set(iter, 1, launchBrowser)
106     
107     
108     def _add_ssid(self, x):
109         from wifi_assistant.gui.add_network_dialog import AddNetworkDialog
110         AddNetworkDialog(self._win, self._add_ssid_callback).show()
111         
112         
113     def _add_ssid_callback(self, ssid, launch_browser):
114         settings = self._network_settings.getDefaultSettings()
115         settings.setNetworkName(ssid)
116         settings.setLaunchingOfBrowserEnabled(launch_browser)
117         self._network_settings.save(settings)
118         self._model.append([ssid, launchBrowser])
119
120
121     def _delete_ssid(self, x):
122         window = hildon.StackableWindow()
123         window.set_border_width(6)
124         toolbar = hildon.EditToolbar(_("Choose network settings to delete"), _("Delete"))
125         window.set_edit_toolbar(toolbar)
126      
127         area = hildon.PannableArea()
128         tree_view = self._create_delete_view()
129         area.add(tree_view)
130         window.add(area)
131      
132         toolbar.connect("button-clicked", self._delete_button_clicked, tree_view)
133         toolbar.connect_object("arrow-clicked", gtk.Window.destroy, window)
134      
135         window.show_all()
136         window.fullscreen()
137
138
139     def _delete_button_clicked(self, button, treeview):
140         selection = treeview.get_selection()
141      
142         (model, selected_rows) = selection.get_selected_rows()
143         
144         # TODO: are you sure?
145      
146         row_references = []
147         for path in selected_rows:
148             ref = gtk.TreeRowReference(model, path)
149             row_references.append(ref)
150      
151         for ref in row_references:
152             path = ref.get_path()
153             iter = model.get_iter(path)
154             ssid, x = model.get(iter, 0, 1)  
155             self._settings.deleteLaunchSetting(ssid)
156             model.remove(iter)
157
158         # TODO: close delete window?
159
160         
161     def _create_delete_view(self):
162         tv = hildon.GtkTreeView(gtk.HILDON_UI_MODE_EDIT)
163         renderer = gtk.CellRendererText()
164         col = gtk.TreeViewColumn("Title", renderer, text=0)
165      
166         tv.append_column(col)
167      
168         # Set multiple selection mode
169         selection = tv.get_selection()
170         selection.set_mode(gtk.SELECTION_MULTIPLE)
171      
172         tv.set_model(self._model)
173      
174         return tv
175
176
177     def _create_ssid_view(self, model):
178 #        view = hildon.GtkTreeView(gtk.HILDON_UI_MODE_NORMAL, model)
179 #        view = hildon.GtkTreeView(gtk.HILDON_UI_MODE_NORMAL, model)
180
181         if len(model) == 0:
182             return gtk.Label(_('There are no launch settings saved for any network'))
183
184         view = gtk.TreeView(model)
185         view.set_border_width(5)
186         
187         def boolean_func(column, cell, model, iter):
188             if model.get_value(iter, 1):
189                 stock_id = 'gtk-yes'
190             else:
191                 stock_id = 'gtk-no'
192             cell.set_property('stock-id', stock_id)
193         
194         launch_cell = gtk.CellRendererPixbuf()
195         launch_cell.set_fixed_size(100, 50)
196         view.insert_column_with_data_func(1, _('Launch'), launch_cell, boolean_func)
197 #        toggle_cell = gtk.CellRendererToggle()
198 #        toggle_cell.set_fixed_size(100, 50)
199 #        view.append_column( gtk.TreeViewColumn( '', toggle_cell, active=1))
200          
201         tvcolumn = gtk.TreeViewColumn(_('SSID'), gtk.CellRendererText(), text = 0)
202         tvcolumn.set_expand(True)
203         view.append_column(tvcolumn)
204     
205         view.connect('row-activated', self._row_activated)
206         view.set_search_column(0)
207         tvcolumn.set_sort_column_id(0)
208         
209         return view
210
211
212     def _row_activated(self, treeview, path, view_column):
213         model = treeview.get_model()
214         iter = model.get_iter(path)
215         ssid = model.get_value(iter, 0)
216         self._edit_ssid(ssid, model, iter)