refactoring and fixes for Bug #11209
authorFredrik Wendt <fredrik@wendt.se>
Sat, 28 Aug 2010 20:41:03 +0000 (21:41 +0100)
committerFredrik Wendt <fredrik@wendt.se>
Sat, 28 Aug 2010 20:41:03 +0000 (21:41 +0100)
package/src/wifi_assistant/gui/config_gui.py
package/src/wifi_assistant/gui/network_settings_view.py [new file with mode: 0644]
package/test/automatic_tests.py
package/test/unit/gui/network_settings_view_test.py [new file with mode: 0644]

index 8a4fa49..edc934f 100644 (file)
@@ -12,17 +12,19 @@ class ConfigGui():
         self._network_settings = network_settings
         self._program = hildon_program
         self._win = hildon_window
         self._network_settings = network_settings
         self._program = hildon_program
         self._win = hildon_window
-        self._model= list_store
+        self._model = list_store
 
 
     def main(self):
         self._win.set_title(_("Wifi Assistant"))
 
 
     def main(self):
         self._win.set_title(_("Wifi Assistant"))
-        ssid_list = self._createNetworkSettingsView(self._model)
-        pannable_area= hildon.PannableArea()
-        pannable_area.add(ssid_list)
+        pannable_area = hildon.PannableArea()
+        from wifi_assistant.gui.network_settings_view import NetworkSettingsView
+        view = NetworkSettingsView(self._model, pannable_area, self._editNetworkSetting)
         self._win.add(pannable_area)
         self._win.set_app_menu(self._createMenu())
         self._win.connect("destroy", gtk.main_quit, None)
         self._win.add(pannable_area)
         self._win.set_app_menu(self._createMenu())
         self._win.connect("destroy", gtk.main_quit, None)
+
+        view.update()
         self._win.show_all()
 
     
         self._win.show_all()
 
     
@@ -36,7 +38,7 @@ class ConfigGui():
      
         settings = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
         settings.set_label(_("Settings"))
      
         settings = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
         settings.set_label(_("Settings"))
-        settings.connect("clicked",self._editApplicationSettings)
+        settings.connect("clicked", self._editApplicationSettings)
         menu.append(settings)
         
         add = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
         menu.append(settings)
         
         add = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
@@ -112,45 +114,3 @@ class ConfigGui():
             settings = self._network_settings.get(ssid)
             self._network_settings.delete(settings)
             model.remove(iter)
             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)
diff --git a/package/src/wifi_assistant/gui/network_settings_view.py b/package/src/wifi_assistant/gui/network_settings_view.py
new file mode 100644 (file)
index 0000000..cf393b8
--- /dev/null
@@ -0,0 +1,92 @@
+#!/usr/bin/python2.5
+import gtk, hildon
+
+def _(str):
+    return str
+
+class NetworkSettingsView():
+    
+    def __init__(self, list_store, parent_container, edit_network_settings_callback):
+        """edit_network_settings_callback(ssid, model, iter)""" # FIXME: abstraction layer violation
+        self._parent = parent_container
+        self._model = list_store
+        self._edit_network_settings_callback = edit_network_settings_callback
+        
+        self._active_widget = None
+        self._zero_settings_label = gtk.Label(_('There are no settings saved for any network.'))
+        self._network_settings_list = self._createNetworkSettingsList()
+
+        self._registerListeners()
+        
+        
+    def update(self, *args):
+        if len(self._model) == 0:
+            self._activateZeroSettingsLabel()
+        else:
+            self._activateNetworkSettingsList()
+    
+    
+    def _activateNetworkSettingsList(self):
+        self._activateWidget(self._network_settings_list)
+        
+    
+    def _activateZeroSettingsLabel(self):
+        self._activateWidget(self._zero_settings_label)
+        
+
+    def _activateWidget(self, widget):
+        if self._active_widget is not None:
+            self._parent.remove(self._active_widget)
+            self._active_widget = None
+        self._parent.add(widget)
+        self._parent.show_all()
+        self._active_widget = widget
+    
+    
+    def _createNetworkSettingsList(self):
+#        view = hildon.GtkTreeView(gtk.HILDON_UI_MODE_NORMAL, model)
+#        view = hildon.GtkTreeView(gtk.HILDON_UI_MODE_NORMAL, model)
+
+        view = gtk.TreeView(self._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 _registerListeners(self):
+        self._model.connect("row-deleted", self.update)
+        self._model.connect("row-inserted", self.update)
+        
+    # FIXME: use this to test:
+    # _model.row_deleted(path)
+    # _model.row_inserted(path, iter) 
+
+
+    def _rowActivatedCallback(self, treeview, path, view_column):
+        model = treeview.get_model()
+        iter = model.get_iter(path)
+        ssid = model.get_value(iter, 0)
+        self._edit_network_settings_callback(ssid, model, iter)
+
index 00e38ff..2413ba9 100644 (file)
@@ -13,6 +13,7 @@ from unit.gui.about_dialog_test import AboutDialogTest
 from unit.gui.add_network_dialog_test import AddNetworkDialogTest
 from unit.gui.application_settings_dialog_test import ApplicationSettingsDialogTest
 from unit.gui.edit_network_dialog_test import EditNetworkDialogTest
 from unit.gui.add_network_dialog_test import AddNetworkDialogTest
 from unit.gui.application_settings_dialog_test import ApplicationSettingsDialogTest
 from unit.gui.edit_network_dialog_test import EditNetworkDialogTest
+from unit.gui.network_settings_view_test import NetworkSettingsViewTest
 from unit.gui.popup_dialog_test import PopupDialogTest
 
 from unit.settings.application_settings_test import ApplicationSettingsTest
 from unit.gui.popup_dialog_test import PopupDialogTest
 
 from unit.settings.application_settings_test import ApplicationSettingsTest
diff --git a/package/test/unit/gui/network_settings_view_test.py b/package/test/unit/gui/network_settings_view_test.py
new file mode 100644 (file)
index 0000000..4a9c92f
--- /dev/null
@@ -0,0 +1,40 @@
+from wifi_assistant.gui.network_settings_view import NetworkSettingsView
+import gtk
+
+import unittest
+from unit.pie import *
+
+class NetworkSettingsViewTest(unittest.TestCase):
+
+    def setUp(self):
+        self._list_store = gtk.ListStore('gboolean', str)
+        self._parent_container = Mock()
+        self._edit_callback = Mock()
+        
+        given(self._edit_callback).save().willReturn(True)
+        
+        self.testee = NetworkSettingsView(self._list_store, self._parent_container, self._edit_callback.save)
+
+
+    def test_bug_11209_addingAndRemovingNetworkSettingsChangesActiveWidget(self):
+        assert len(self._list_store) == 0
+        
+        self._replayMocks()
+        self._list_store.append([True, 'a row'])
+        
+        widget = self.testee._active_widget
+        verify(self._parent_container).add(widget)
+        
+        self._list_store.clear()
+        
+        verify(self._parent_container).remove(widget)
+        
+        
+    def _replayMocks(self):
+        self._parent_container.replay()
+        self._edit_callback.replay()
+
+        
+    
+if __name__ == '__main__':
+    unittest.main()