X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=ui%2Ffremantle_ui%2Fconfiguration.py;fp=ui%2Ffremantle_ui%2Fconfiguration.py;h=84f692448b874183df06234d074f6521d1dc0fec;hb=a7fcea4a9819bebbc27fdc2c521bada96b03d625;hp=0000000000000000000000000000000000000000;hpb=469a3b869154372bbce8192ef21a3d5de88f745e;p=meabook diff --git a/ui/fremantle_ui/configuration.py b/ui/fremantle_ui/configuration.py new file mode 100644 index 0000000..84f6924 --- /dev/null +++ b/ui/fremantle_ui/configuration.py @@ -0,0 +1,142 @@ +""" +Configuration dialogs +""" + +import gtk +import hildon +from gettext import gettext as _ +from meabook.ui.fremantle_ui.common import create_button + + +class ConfigurationDialog: + """Main configuration dialog.""" + + def __init__(self, controller, fields_to_show, ordered_fields): + dialog = hildon.Dialog() + dialog.set_title(_('Settings')) + button_fields = create_button(_('Fields to show'), \ + self._update_value(None, fields_to_show)) + button_fields.connect('clicked', self.show_fields_settings_cb, dialog) + button_order = create_button(_('Fields order'), \ + self._update_value(None, ordered_fields)) + dialog.vbox.pack_start(button_fields, expand=False) + button_order.connect('clicked', self.show_order_settings_cb) + dialog.vbox.pack_start(button_order, expand=False) + dialog.vbox.show_all() + # create class attributes + self.dialog = dialog + self.controller = controller + + def run(self): + self.dialog.run() + self.dialog.destroy() + + def _update_value(self, widget, fields): + """Updates widget title.""" + + if fields is None: + return + 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.""" + + selected_fields = self.controller.show_fields_configuration_dialog( \ + parent) + self._update_value(widget, selected_fields) + + def show_order_settings_cb(self, widget): + """Shows dialog for setting fields order.""" + + selected_fields = \ + self.controller.show_fields_order_configuration_dialog() + self._update_value(widget, selected_fields) + + + +class FieldsConfigurationDialog(): + """Fields to show configuration dialog.""" + + def __init__(self, fields, fields_to_select, parent): + dialog = hildon.PickerDialog(parent) + dialog.set_title(_('Fields to show')) + selector = hildon.TouchSelector(text=True) + # fill items list + for field in fields.keys(): + selector.append_text(field) + selector.set_column_selection_mode( \ + hildon.TOUCH_SELECTOR_SELECTION_MODE_MULTIPLE) + selector.unselect_all(0) + # mark necessary fields + model = selector.get_model(0) + for index, field in enumerate(fields.values()): + if field in fields_to_select: + selector.select_iter(0, model.get_iter(index), False) + dialog.set_selector(selector) + # creates class attributes + self.fields = fields + self.dialog = dialog + self.selector = selector + + def run(self): + if self.dialog.run() == gtk.RESPONSE_OK: + indexes = [item[0] for item in self.selector.get_selected_rows(0)] + self.dialog.destroy() + return [self.fields.values()[index] for index in indexes] + self.dialog.destroy() + return None + + + +class FieldsOrderConfigurationDialog(): + """Fields order configuration dialog.""" + + def __init__(self, fields, ordered_fields): + 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(ordered_fields): + button = create_button(' '.join([_('Position'), str(index)]), \ + _(field)) + button.connect('clicked', self.show_fields_chooser, fields.keys(), \ + dialog) + vbox.pack_start(button, expand=False) + pannable_area.add_with_viewport(vbox) + dialog.add_button(_('Done'), gtk.RESPONSE_OK) + dialog.vbox.pack_start(pannable_area) + dialog.vbox.show_all() + # create class attributes + self.dialog = dialog + self.fields = fields + self.widgets_box = vbox + + def run(self): + if self.dialog.run() == gtk.RESPONSE_OK: + selected_fields = [self.fields[button.get_value().decode('utf-8')] \ + for button in self.widgets_box.get_children()] + self.dialog.destroy() + return selected_fields + self.dialog.destroy() + return None + + def show_fields_chooser(self, widget, fields, parent): + """Shows dialog to select field from fields list.""" + + 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 fields: + selector.append_text(field) + dialog.run() + widget.set_value(selector.get_current_text()) + dialog.destroy() +