added Configuration dialog
authorMax Usachev <maxusachev@gmail.com>
Wed, 9 Jun 2010 13:22:43 +0000 (16:22 +0300)
committerMax Usachev <maxusachev@gmail.com>
Wed, 9 Jun 2010 13:22:43 +0000 (16:22 +0300)
ui/hildon_ui.py

index 8ecfe65..6c424c9 100644 (file)
@@ -5,13 +5,28 @@ Hildon UI for Meabook
 import gtk
 import hildon
 import gettext
+from meabook.config import Config
 from meabook.database.SQLite import SQLite
 
 _ = gettext.gettext
 
+
+
+def create_button(title, value):
+    """Create HildonButton."""
+
+    button = hildon.Button(gtk.HILDON_SIZE_AUTO | \
+        gtk.HILDON_SIZE_FINGER_HEIGHT, \
+        hildon.BUTTON_ARRANGEMENT_VERTICAL, title, value)
+    button.set_style(hildon.BUTTON_STYLE_PICKER)
+    button.set_alignment(0, 0, 0, 0)
+    return button
+
+
 class HildonMeabook():
     def __init__(self, basedir):
         self.database = SQLite(basedir)
+        self.config = Config(basedir, self.database)
         self.window = hildon.StackableWindow()
         self.window.set_title(_('Meabook'))
         self.window.connect('destroy', self.exit)
@@ -76,7 +91,10 @@ class HildonMeabook():
         gtk.main_quit()
 
     def show_settings_dialog(self, widget):
-        print 'settings'
+        """Shows Config dialog."""
+
+        dialog = ConfigurationDialog(self.database, self.config)
+        dialog.run()
 
     def show_about_dialog(self, widget):
         """Shows About dialog."""
@@ -109,6 +127,9 @@ class HildonMeabook():
         elif widget == self.level2_filter:
             self.callback_id = self.selector.connect('changed', \
                 self.show_lowlevel_dialog)
+        else:
+            self.callback_id = self.selector.connect('changed', \
+                self.show_item_dialog)
 
     def _create_items_dialog(self, title):
         """Creates dialog for showing items."""
@@ -134,24 +155,14 @@ class HildonMeabook():
 
         selected_item = widget.get_current_text()
         window, selector = self._create_items_dialog(selected_item)
-        selector.connect('changed', self.show_item_info)
+        selector.connect('changed', self.show_item_dialog)
         for item in self.database.get_lowlevel_entries():
             selector.append_text(item)
         window.show_all()
 
-    def show_item_info(self, widget, column):
+    def show_item_dialog(self, widget, column):
         """Shows detailed item information."""
 
-        def create_button(title, value):
-            """Create HildonButton."""
-
-            button = hildon.Button(gtk.HILDON_SIZE_AUTO | \
-                gtk.HILDON_SIZE_FINGER_HEIGHT, \
-                hildon.BUTTON_ARRANGEMENT_VERTICAL, title, value)
-            button.set_style(hildon.BUTTON_STYLE_PICKER)
-            button.set_alignment(0, 0, 0, 0)
-            return button
-
         selected_item = widget.get_current_text()
         entry = self.database.get_entry(selected_item)
         window = hildon.StackableWindow()
@@ -166,3 +177,79 @@ class HildonMeabook():
         pannable_area.add_with_viewport(vbox)
         window.add(pannable_area)
         window.show_all()
+
+
+
+
+class ConfigurationDialog:
+    """Configuration dialog"""
+
+    def __init__(self, database, config):
+        self.config = config
+        self.database = database
+        self.window = hildon.StackableWindow()
+        self.window.set_title(_('Configuration'))
+
+        # create menu
+        menu = hildon.AppMenu()
+        self.button_order = gtk.RadioButton(None, _('Order'))
+        self.button_order.set_mode(False)
+        self.button_order.connect('clicked', self.show_order_settings, \
+            self.database.get_fields())
+        self.button_items = gtk.RadioButton(self.button_order, _('Items'))
+        self.button_items.set_mode(False)
+        self.button_items.connect('clicked', self.show_items_settings, \
+            self.database.get_fields())
+        menu.add_filter(self.button_items)
+        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)
+
+    def show_items_settings(self, widget, items):
+        """Shows dialog for selecting necessary items."""
+
+        self.pannable_area.hide()
+
+        # fill items list
+        for item in items:
+            self.selector.append_text(_(item))
+
+        self.selector.set_column_selection_mode( \
+                hildon.TOUCH_SELECTOR_SELECTION_MODE_MULTIPLE)
+        self.selector.unselect_all(0)
+
+        # mark necessary items
+        items_to_select = self.config.get_fields()
+        model = self.selector.get_model(0)
+        for index, item in enumerate(items_to_select):
+            self.selector.select_iter(0, model.get_iter(index), False)
+
+        self.selector.show()
+
+    def show_order_settings(self, widget, items):
+        """Shows dialog for selecting items order."""
+
+        self.selector.hide()
+        vbox = gtk.VBox()
+        for item in items:
+            button = create_button(item, '')
+            button.set_style(hildon.BUTTON_STYLE_NORMAL)
+            button.set_alignment(0, 0.5, 0, 0)
+            vbox.pack_start(button)
+        self.pannable_area.add_with_viewport(vbox)
+        self.pannable_area.show_all()
+
+    def run(self):
+        """Runs dialog."""
+
+        # activate first tab
+        # FIXME: read from config
+        self.window.show_all()