major rewrite
[wifi-assistant] / package / src / wifi_assistant / gui / config_gui.py
diff --git a/package/src/wifi_assistant/gui/config_gui.py b/package/src/wifi_assistant/gui/config_gui.py
new file mode 100644 (file)
index 0000000..8a4fa49
--- /dev/null
@@ -0,0 +1,156 @@
+#!/usr/bin/python2.5
+import gtk, hildon
+
+def _(str):
+    return str
+
+class ConfigGui():
+    
+    def __init__(self, launcher, application_settings, network_settings, hildon_program, hildon_window, list_store):
+        self._launcher = launcher
+        self._application_settings = application_settings
+        self._network_settings = network_settings
+        self._program = hildon_program
+        self._win = hildon_window
+        self._model= list_store
+
+
+    def main(self):
+        self._win.set_title(_("Wifi Assistant"))
+        ssid_list = self._createNetworkSettingsView(self._model)
+        pannable_area= hildon.PannableArea()
+        pannable_area.add(ssid_list)
+        self._win.add(pannable_area)
+        self._win.set_app_menu(self._createMenu())
+        self._win.connect("destroy", gtk.main_quit, None)
+        self._win.show_all()
+
+    
+    def _createMenu(self):
+        menu = hildon.AppMenu()
+        
+        about = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
+        about.set_label(_("About"))
+        about.connect("clicked", self._showAboutDialog)
+        menu.append(about)
+     
+        settings = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
+        settings.set_label(_("Settings"))
+        settings.connect("clicked",self._editApplicationSettings)
+        menu.append(settings)
+        
+        add = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
+        add.set_label(_("Add network"))
+        add.connect("clicked", self._addNetworkSetting)
+        menu.append(add)
+        
+        delete = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
+        delete.set_label(_("Delete networks"))
+        delete.connect("clicked", self._deleteNetworkSetting)
+        menu.append(delete)
+        
+        menu.show_all()
+        return menu
+    
+
+    def _showAboutDialog(self, x):
+        from wifi_assistant.gui.about_dialog import AboutDialog
+        AboutDialog(self._launcher, self._win).show()
+    
+        
+    def _editApplicationSettings(self, x):
+        from wifi_assistant.gui.application_settings_dialog import ApplicationSettingsDialog
+        use_popup = self._application_settings.getUsePopup()
+        url_to_open = self._network_settings.getDefaultSettings().getBrowserOptions()['url']
+        ApplicationSettingsDialog(self._win, self._editApplicationSettingsCallback).show(use_popup, url_to_open)
+    
+    def _editApplicationSettingsCallback(self, popup, url):
+        self._application_settings.setUsePopup(popup)
+        settings = self._network_settings.getDefaultSettings()
+        settings.getBrowserOptions()['url'] = url
+        self._network_settings.save(settings)
+    
+
+    def _editNetworkSetting(self, ssid, model, iter):
+        from wifi_assistant.gui.edit_network_dialog import EditNetworkDialog
+        network_name, x = model.get(iter, 0, 1)  
+        EditNetworkDialog(self._win, self._editNetworkSettingCallback).show(iter, network_name)
+
+    def _editNetworkSettingCallback(self, iter, ssid, launch_browser):
+        # TODO: REMOVE ssid from arg list, extract like delete networks do? 
+        #self._settings.setLaunchSetting(ssid, launch_browser)    
+        settings = self._network_settings.get(ssid)
+        settings.setLaunchingOfBrowserEnabled(launch_browser)
+        self._network_settings.save(settings)
+        self._model.set(iter, 1, launch_browser)
+    
+    
+    def _addNetworkSetting(self, x):
+        from wifi_assistant.gui.add_network_dialog import AddNetworkDialog
+        AddNetworkDialog(self._win, self._addNetworkSettingCallback).show()
+        
+    def _addNetworkSettingCallback(self, network_name, launch_browser):
+        settings = self._network_settings.getDefaultSettings()
+        settings.setNetworkName(network_name)
+        settings.setLaunchingOfBrowserEnabled(launch_browser)
+        self._network_settings.save(settings)
+        self._model.append([network_name, launch_browser])
+        
+        # FIXME: on append, if len == 1, change main view from label to tree view
+        # but do this with the model
+
+
+    def _deleteNetworkSetting(self, x):
+        from wifi_assistant.gui.delete_networks_dialog import DeleteNetworksDialog
+        DeleteNetworksDialog(self._model, self._deleteNetworkSettingCallback).show()
+    
+    def _deleteNetworkSettingCallback(self, model, row_references):
+        for ref in row_references:
+            path = ref.get_path()
+            iter = model.get_iter(path)
+            ssid, x = model.get(iter, 0, 1)  
+            settings = self._network_settings.get(ssid)
+            self._network_settings.delete(settings)
+            model.remove(iter)
+
+        
+    def _createNetworkSettingsView(self, model):
+#        view = hildon.GtkTreeView(gtk.HILDON_UI_MODE_NORMAL, model)
+#        view = hildon.GtkTreeView(gtk.HILDON_UI_MODE_NORMAL, model)
+
+        if len(model) == 0:
+            return gtk.Label(_('There are no launch settings saved for any network'))
+
+        view = gtk.TreeView(model)
+        view.set_border_width(5)
+        
+        def boolean_func(column, cell, model, iter):
+            if model.get_value(iter, 1):
+                stock_id = 'gtk-yes'
+            else:
+                stock_id = 'gtk-no'
+            cell.set_property('stock-id', stock_id)
+        
+        launch_cell = gtk.CellRendererPixbuf()
+        launch_cell.set_fixed_size(100, 50)
+        view.insert_column_with_data_func(1, _('Launch'), launch_cell, boolean_func)
+#        toggle_cell = gtk.CellRendererToggle()
+#        toggle_cell.set_fixed_size(100, 50)
+#        view.append_column( gtk.TreeViewColumn( '', toggle_cell, active=1))
+         
+        tvcolumn = gtk.TreeViewColumn(_('SSID'), gtk.CellRendererText(), text = 0)
+        tvcolumn.set_expand(True)
+        view.append_column(tvcolumn)
+    
+        view.connect('row-activated', self._rowActivatedCallback)
+        view.set_search_column(0)
+        tvcolumn.set_sort_column_id(0)
+        
+        return view
+
+
+    def _rowActivatedCallback(self, treeview, path, view_column):
+        model = treeview.get_model()
+        iter = model.get_iter(path)
+        ssid = model.get_value(iter, 0)
+        self._editNetworkSetting(ssid, model, iter)