From: Max Usachev Date: Tue, 15 Jun 2010 12:02:31 +0000 (+0300) Subject: redesigned Configuration dialogs X-Git-Url: https://vcs.maemo.org/git/?p=meabook;a=commitdiff_plain;h=8677b652dd56e9f93814c618f25fa80a094488e8 redesigned Configuration dialogs --- diff --git a/ui/hildon_ui.py b/ui/hildon_ui.py index 270c959..588c191 100644 --- a/ui/hildon_ui.py +++ b/ui/hildon_ui.py @@ -232,106 +232,103 @@ class ConfigurationDialog: self.config = config self.controller = controller - self.window = hildon.StackableWindow() - self.window.set_title(_('Settings')) - self.window.connect('destroy', self.close_dialog_cb) - - # create menu - menu = hildon.AppMenu() - self.button_order = gtk.RadioButton(None, _('Order')) - self.button_order.connect('clicked', self.show_order_settings_cb) - self.button_fields = gtk.RadioButton(self.button_order, _('Fields')) - self.button_fields.connect('clicked', self.show_fields_settings_cb) - self.button_order.set_mode(False) - self.button_fields.set_mode(False) - menu.add_filter(self.button_fields) - menu.add_filter(self.button_order) - menu.show_all() - - # create other widgets - self.window.set_app_menu(menu) - self.selector = hildon.TouchSelector(text=True) - self.pannable_area = hildon.PannableArea() - vbox = gtk.VBox() - vbox.pack_start(self.selector) - vbox.pack_start(self.pannable_area) - self.window.add(vbox) + dialog = hildon.Dialog() + dialog.set_title(_('Settings')) - self.window.show_all() + button_order = create_button(_('Fields order'), self._update_value( \ + None, self.config.get_order())) + button_order.connect('clicked', self.show_order_settings_cb, dialog) + button_fields = create_button(_('Fields to show'), self._update_value( \ + None, self.config.get_fields())) + button_fields.connect('clicked', self.show_fields_settings_cb, dialog) - # switches to necessary page - self.button_fields.set_active(True) + dialog.vbox.pack_start(button_fields, expand=False) + dialog.vbox.pack_start(button_order, expand=False) + dialog.vbox.show_all() + dialog.run() + dialog.destroy() - def show_fields_settings_cb(self, widget): + def _update_value(self, widget, fields): + """Updates widget title.""" + + value = ', '.join([_(field) for field in fields]) + if widget is not None: + widget.set_value(value) + return value + + def show_fields_settings_cb(self, widget, parent): """Shows dialog for selecting fields to show.""" - self.pannable_area.hide() + dialog = hildon.PickerDialog(parent) + dialog.set_title(_('Fields to show')) + selector = hildon.TouchSelector(text=True) fields = self.controller.get_fields() - # fill items list - self.selector.get_model(0).clear() for field in fields: - self.selector.append_text(_(field)) + selector.append_text(_(field)) - self.selector.set_column_selection_mode( \ - hildon.TOUCH_SELECTOR_SELECTION_MODE_MULTIPLE) - self.selector.unselect_all(0) + selector.set_column_selection_mode( \ + hildon.TOUCH_SELECTOR_SELECTION_MODE_MULTIPLE) + selector.unselect_all(0) # mark necessary fields fields_to_select = self.config.get_fields() - model = self.selector.get_model(0) + model = selector.get_model(0) for index, field in enumerate(fields): if field in fields_to_select: - self.selector.select_iter(0, model.get_iter(index), False) - - self.selector.show_all() + selector.select_iter(0, model.get_iter(index), False) + + dialog.set_selector(selector) + response = dialog.run() + if response == gtk.RESPONSE_OK: + model = selector.get_model(0) + selected_items = [model[index][0] for index in [item[0] for item \ + in selector.get_selected_rows(0)]] + self.config.set_fields(selected_items) + self._update_value(widget, selected_items) + dialog.destroy() - def show_order_settings_cb(self, widget): + def show_order_settings_cb(self, widget, parent): """Shows dialog for setting fields order.""" - def show_fields_chooser(widget): + def show_fields_chooser(widget, parent): """Shows dialog to select field from fields list.""" - dialog = hildon.PickerDialog(self.window) - dialog.set_title(_('Field selection')) + dialog = hildon.PickerDialog(parent) + dialog.set_title(_('Fields')) selector = hildon.TouchSelector(text=True) dialog.set_selector(selector) selector.set_column_selection_mode( \ hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE) - # fill fields list for field in self.controller.get_fields(): selector.append_text(field) - dialog.run() widget.set_value(selector.get_current_text()) dialog.destroy() - self.selector.hide() + + dialog = hildon.Dialog() + dialog.set_title(_('Fields order')) + pannable_area = hildon.PannableArea() + pannable_area.set_size_request_policy(hildon.SIZE_REQUEST_CHILDREN) vbox = gtk.VBox() - for index, field in enumerate(self.controller.config.get_order()): + for index, field in enumerate(self.config.get_order()): button = create_button(' '.join([_('Position'), str(index)]), \ _(field)) - button.connect('clicked', show_fields_chooser) + button.connect('clicked', show_fields_chooser, dialog) vbox.pack_start(button, expand=False) + pannable_area.add_with_viewport(vbox) - self.pannable_area.add_with_viewport(vbox) - self.pannable_area.show_all() - - def close_dialog_cb(self, event): - """Save selected options.""" - - model = self.selector.get_model(0) - selected_items = [model[index][0] for index in [item[0] for item in \ - self.selector.get_selected_rows(0)]] - self.controller.config.set_fields(selected_items) - - try: - self.controller.config.set_order([button.get_value() for button in \ - self.pannable_area.get_child().get_children()[0].\ - get_children()]) - except AttributeError: - pass + dialog.add_button(_('Done'), gtk.RESPONSE_OK) + dialog.vbox.pack_start(pannable_area) + dialog.vbox.show_all() + response = dialog.run() + if response == gtk.RESPONSE_OK: + fields = [button.get_value() for button in vbox.get_children()] + self.config.set_order(fields) + self._update_value(widget, fields) + dialog.destroy()