8 from gettext import gettext as _
9 from meabook.ui.fremantle_ui.common import create_button
12 class ConfigurationDialog:
13 """Main configuration dialog."""
15 def __init__(self, controller, fields_to_show, ordered_fields):
16 dialog = hildon.Dialog()
17 dialog.set_title(_('Settings'))
18 button_fields = create_button(_('Fields to show'), \
19 self._update_value(None, fields_to_show))
20 button_fields.connect('clicked', self.show_fields_settings_cb, dialog)
21 button_order = create_button(_('Fields order'), \
22 self._update_value(None, ordered_fields))
23 dialog.vbox.pack_start(button_fields, expand=False)
24 button_order.connect('clicked', self.show_order_settings_cb)
25 dialog.vbox.pack_start(button_order, expand=False)
26 dialog.vbox.show_all()
27 # create class attributes
29 self.controller = controller
35 def _update_value(self, widget, fields):
36 """Updates widget title."""
40 value = ', '.join([_(field) for field in fields])
41 if widget is not None:
42 widget.set_value(value)
45 def show_fields_settings_cb(self, widget, parent):
46 """Shows dialog for selecting fields to show."""
48 selected_fields = self.controller.show_fields_configuration_dialog( \
50 self._update_value(widget, selected_fields)
52 def show_order_settings_cb(self, widget):
53 """Shows dialog for setting fields order."""
56 self.controller.show_fields_order_configuration_dialog()
57 self._update_value(widget, selected_fields)
61 class FieldsConfigurationDialog():
62 """Fields to show configuration dialog."""
64 def __init__(self, fields, fields_to_select, parent):
65 dialog = hildon.PickerDialog(parent)
66 dialog.set_title(_('Fields to show'))
68 selector = hildon.TouchSelector(text=True)
69 model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING)
70 for name, internal_name in fields.items():
71 model.append((name, internal_name))
72 if selector.get_num_columns():
73 selector.remove_column(0)
74 selector.append_text_column(model, True)
75 selector.get_column(0).set_property('text-column', 0)
76 selector.set_column_selection_mode( \
77 hildon.TOUCH_SELECTOR_SELECTION_MODE_MULTIPLE)
78 selector.unselect_all(0)
79 # mark necessary fields
80 for index, field in enumerate(fields.values()):
81 if field in fields_to_select:
82 selector.select_iter(0, model.get_iter(index), False)
83 dialog.set_selector(selector)
84 # creates class attributes
87 self.selector = selector
90 if self.dialog.run() == gtk.RESPONSE_OK:
91 indexes_of_selected_rows = [row[0] for row in \
92 self.selector.get_selected_rows(0)]
93 model = self.selector.get_model(0)
95 return [model[index][1] for index in indexes_of_selected_rows]
101 class FieldsOrderConfigurationDialog():
102 """Fields order configuration dialog."""
104 def __init__(self, fields, ordered_fields):
105 dialog = hildon.Dialog()
106 dialog.set_title(_('Fields order'))
107 pannable_area = hildon.PannableArea()
108 pannable_area.set_size_request_policy(hildon.SIZE_REQUEST_CHILDREN)
110 for index, field in enumerate(ordered_fields):
111 button = create_button(' '.join([_('Position'), str(index)]), \
113 button.connect('clicked', self.show_fields_chooser, fields, \
115 button.set_data('field', field)
116 vbox.pack_start(button, expand=False)
117 pannable_area.add_with_viewport(vbox)
118 dialog.add_button(_('Done'), gtk.RESPONSE_OK)
119 dialog.vbox.pack_start(pannable_area)
120 dialog.vbox.show_all()
121 # create class attributes
124 self.widgets_box = vbox
127 if self.dialog.run() == gtk.RESPONSE_OK:
128 selected_fields = [button.get_data('field') for button in \
129 self.widgets_box.get_children()]
130 self.dialog.destroy()
131 return selected_fields
132 self.dialog.destroy()
135 def show_fields_chooser(self, widget, fields, parent):
136 """Shows dialog to select field from fields list."""
138 dialog = hildon.PickerDialog(parent)
139 dialog.set_title(_('Fields'))
141 selector = hildon.TouchSelector(text=True)
142 model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING)
143 for name, internal_name in fields.items():
144 model.append((name, internal_name))
145 if selector.get_num_columns():
146 selector.remove_column(0)
147 selector.append_text_column(model, True)
148 selector.get_column(0).set_property('text-column', 0)
149 selector.set_column_selection_mode( \
150 hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE)
151 selector.unselect_all(0)
152 dialog.set_selector(selector)
154 field = selector.get_model(0)[selector.get_active(0)][1]
155 widget.set_value(selector.get_current_text())
156 widget.set_data('field', field)