From 1e18492d26695fe72dcbdba0045b68017a540546 Mon Sep 17 00:00:00 2001 From: Fredrik Wendt Date: Sat, 28 Aug 2010 21:41:03 +0100 Subject: [PATCH] refactoring and fixes for Bug #11209 --- package/src/wifi_assistant/gui/config_gui.py | 54 ++---------- .../wifi_assistant/gui/network_settings_view.py | 92 ++++++++++++++++++++ package/test/automatic_tests.py | 1 + .../test/unit/gui/network_settings_view_test.py | 40 +++++++++ 4 files changed, 140 insertions(+), 47 deletions(-) create mode 100644 package/src/wifi_assistant/gui/network_settings_view.py create mode 100644 package/test/unit/gui/network_settings_view_test.py diff --git a/package/src/wifi_assistant/gui/config_gui.py b/package/src/wifi_assistant/gui/config_gui.py index 8a4fa49..edc934f 100644 --- a/package/src/wifi_assistant/gui/config_gui.py +++ b/package/src/wifi_assistant/gui/config_gui.py @@ -12,17 +12,19 @@ class ConfigGui(): 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")) - 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) + + view.update() self._win.show_all() @@ -36,7 +38,7 @@ class ConfigGui(): 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) @@ -112,45 +114,3 @@ class ConfigGui(): 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 index 0000000..cf393b8 --- /dev/null +++ b/package/src/wifi_assistant/gui/network_settings_view.py @@ -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) + diff --git a/package/test/automatic_tests.py b/package/test/automatic_tests.py index 00e38ff..2413ba9 100644 --- a/package/test/automatic_tests.py +++ b/package/test/automatic_tests.py @@ -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.network_settings_view_test import NetworkSettingsViewTest 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 index 0000000..4a9c92f --- /dev/null +++ b/package/test/unit/gui/network_settings_view_test.py @@ -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() -- 1.7.9.5