fixed bugs with configuration dialogs (removed localization dependency)
authorMax Usachev <maxusachev@gmail.com>
Thu, 24 Jun 2010 12:59:01 +0000 (15:59 +0300)
committerMax Usachev <maxusachev@gmail.com>
Thu, 24 Jun 2010 13:12:59 +0000 (16:12 +0300)
ui/fremantle_ui/configuration.py

index 84f6924..27012bc 100644 (file)
@@ -4,6 +4,7 @@ Configuration dialogs
 
 import gtk
 import hildon
+import gobject
 from gettext import gettext as _
 from meabook.ui.fremantle_ui.common import create_button
 
@@ -63,15 +64,19 @@ class FieldsConfigurationDialog():
     def __init__(self, fields, fields_to_select, parent):
         dialog = hildon.PickerDialog(parent)
         dialog.set_title(_('Fields to show'))
+        # fill fields list
         selector = hildon.TouchSelector(text=True)
-        # fill items list
-        for field in fields.keys():
-            selector.append_text(field)
+        model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING)
+        for name, internal_name in fields.items():
+            model.append((name, internal_name))
+        if selector.get_num_columns():
+            selector.remove_column(0)
+        selector.append_text_column(model, True)
+        selector.get_column(0).set_property('text-column', 0)
         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)
@@ -83,9 +88,11 @@ class FieldsConfigurationDialog():
 
     def run(self):
         if self.dialog.run() == gtk.RESPONSE_OK:
-            indexes = [item[0] for item in self.selector.get_selected_rows(0)]
+            indexes_of_selected_rows = [row[0] for row in \
+                self.selector.get_selected_rows(0)]
+            model = self.selector.get_model(0)
             self.dialog.destroy()
-            return [self.fields.values()[index] for index in indexes]
+            return [model[index][1] for index in indexes_of_selected_rows]
         self.dialog.destroy()
         return None
 
@@ -103,8 +110,9 @@ class FieldsOrderConfigurationDialog():
         for index, field in enumerate(ordered_fields):
             button = create_button(' '.join([_('Position'), str(index)]), \
                 _(field))
-            button.connect('clicked', self.show_fields_chooser, fields.keys(), \
+            button.connect('clicked', self.show_fields_chooser, fields, \
                 dialog)
+            button.set_data('field', field)
             vbox.pack_start(button, expand=False)
         pannable_area.add_with_viewport(vbox)
         dialog.add_button(_('Done'), gtk.RESPONSE_OK)
@@ -117,8 +125,8 @@ class FieldsOrderConfigurationDialog():
 
     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()]
+            selected_fields = [button.get_data('field') for button in \
+                self.widgets_box.get_children()]
             self.dialog.destroy()
             return selected_fields
         self.dialog.destroy()
@@ -129,14 +137,22 @@ class FieldsOrderConfigurationDialog():
 
         dialog = hildon.PickerDialog(parent)
         dialog.set_title(_('Fields'))
+        # fill fields list
         selector = hildon.TouchSelector(text=True)
-        dialog.set_selector(selector)
+        model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING)
+        for name, internal_name in fields.items():
+            model.append((name, internal_name))
+        if selector.get_num_columns():
+            selector.remove_column(0)
+        selector.append_text_column(model, True)
+        selector.get_column(0).set_property('text-column', 0)
         selector.set_column_selection_mode( \
             hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE)
-        # fill fields list
-        for field in fields:
-            selector.append_text(field)
+        selector.unselect_all(0)
+        dialog.set_selector(selector)
         dialog.run()
+        field = selector.get_model(0)[selector.get_active(0)][1]
         widget.set_value(selector.get_current_text())
+        widget.set_data('field', field)
         dialog.destroy()