8a4fa4949a9c072ec7a92ffb2622df20ce0ef9ef
[wifi-assistant] / package / src / wifi_assistant / gui / 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 Assistant"))
20         ssid_list = self._createNetworkSettingsView(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._createMenu())
25         self._win.connect("destroy", gtk.main_quit, None)
26         self._win.show_all()
27
28     
29     def _createMenu(self):
30         menu = hildon.AppMenu()
31         
32         about = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
33         about.set_label(_("About"))
34         about.connect("clicked", self._showAboutDialog)
35         menu.append(about)
36      
37         settings = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
38         settings.set_label(_("Settings"))
39         settings.connect("clicked",self._editApplicationSettings)
40         menu.append(settings)
41         
42         add = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
43         add.set_label(_("Add network"))
44         add.connect("clicked", self._addNetworkSetting)
45         menu.append(add)
46         
47         delete = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
48         delete.set_label(_("Delete networks"))
49         delete.connect("clicked", self._deleteNetworkSetting)
50         menu.append(delete)
51         
52         menu.show_all()
53         return menu
54     
55
56     def _showAboutDialog(self, x):
57         from wifi_assistant.gui.about_dialog import AboutDialog
58         AboutDialog(self._launcher, self._win).show()
59     
60         
61     def _editApplicationSettings(self, x):
62         from wifi_assistant.gui.application_settings_dialog import ApplicationSettingsDialog
63         use_popup = self._application_settings.getUsePopup()
64         url_to_open = self._network_settings.getDefaultSettings().getBrowserOptions()['url']
65         ApplicationSettingsDialog(self._win, self._editApplicationSettingsCallback).show(use_popup, url_to_open)
66     
67     def _editApplicationSettingsCallback(self, popup, url):
68         self._application_settings.setUsePopup(popup)
69         settings = self._network_settings.getDefaultSettings()
70         settings.getBrowserOptions()['url'] = url
71         self._network_settings.save(settings)
72     
73
74     def _editNetworkSetting(self, ssid, model, iter):
75         from wifi_assistant.gui.edit_network_dialog import EditNetworkDialog
76         network_name, x = model.get(iter, 0, 1)  
77         EditNetworkDialog(self._win, self._editNetworkSettingCallback).show(iter, network_name)
78
79     def _editNetworkSettingCallback(self, iter, ssid, launch_browser):
80         # TODO: REMOVE ssid from arg list, extract like delete networks do? 
81         #self._settings.setLaunchSetting(ssid, launch_browser)    
82         settings = self._network_settings.get(ssid)
83         settings.setLaunchingOfBrowserEnabled(launch_browser)
84         self._network_settings.save(settings)
85         self._model.set(iter, 1, launch_browser)
86     
87     
88     def _addNetworkSetting(self, x):
89         from wifi_assistant.gui.add_network_dialog import AddNetworkDialog
90         AddNetworkDialog(self._win, self._addNetworkSettingCallback).show()
91         
92     def _addNetworkSettingCallback(self, network_name, launch_browser):
93         settings = self._network_settings.getDefaultSettings()
94         settings.setNetworkName(network_name)
95         settings.setLaunchingOfBrowserEnabled(launch_browser)
96         self._network_settings.save(settings)
97         self._model.append([network_name, launch_browser])
98         
99         # FIXME: on append, if len == 1, change main view from label to tree view
100         # but do this with the model
101
102
103     def _deleteNetworkSetting(self, x):
104         from wifi_assistant.gui.delete_networks_dialog import DeleteNetworksDialog
105         DeleteNetworksDialog(self._model, self._deleteNetworkSettingCallback).show()
106     
107     def _deleteNetworkSettingCallback(self, model, row_references):
108         for ref in row_references:
109             path = ref.get_path()
110             iter = model.get_iter(path)
111             ssid, x = model.get(iter, 0, 1)  
112             settings = self._network_settings.get(ssid)
113             self._network_settings.delete(settings)
114             model.remove(iter)
115
116         
117     def _createNetworkSettingsView(self, model):
118 #        view = hildon.GtkTreeView(gtk.HILDON_UI_MODE_NORMAL, model)
119 #        view = hildon.GtkTreeView(gtk.HILDON_UI_MODE_NORMAL, model)
120
121         if len(model) == 0:
122             return gtk.Label(_('There are no launch settings saved for any network'))
123
124         view = gtk.TreeView(model)
125         view.set_border_width(5)
126         
127         def boolean_func(column, cell, model, iter):
128             if model.get_value(iter, 1):
129                 stock_id = 'gtk-yes'
130             else:
131                 stock_id = 'gtk-no'
132             cell.set_property('stock-id', stock_id)
133         
134         launch_cell = gtk.CellRendererPixbuf()
135         launch_cell.set_fixed_size(100, 50)
136         view.insert_column_with_data_func(1, _('Launch'), launch_cell, boolean_func)
137 #        toggle_cell = gtk.CellRendererToggle()
138 #        toggle_cell.set_fixed_size(100, 50)
139 #        view.append_column( gtk.TreeViewColumn( '', toggle_cell, active=1))
140          
141         tvcolumn = gtk.TreeViewColumn(_('SSID'), gtk.CellRendererText(), text = 0)
142         tvcolumn.set_expand(True)
143         view.append_column(tvcolumn)
144     
145         view.connect('row-activated', self._rowActivatedCallback)
146         view.set_search_column(0)
147         tvcolumn.set_sort_column_id(0)
148         
149         return view
150
151
152     def _rowActivatedCallback(self, treeview, path, view_column):
153         model = treeview.get_model()
154         iter = model.get_iter(path)
155         ssid = model.get_value(iter, 0)
156         self._editNetworkSetting(ssid, model, iter)