+
+ def apply_filter(self, widget, db_function):
+ """Updates toplevel selector with different level items."""
+
+ # blocks 'change' event for selector
+ self.selector.handler_block(self.callback_id)
+
+ # update list content
+ self.selector.get_model(0).clear()
+ for item in db_function():
+ self.selector.append_text(item)
+ self.selector.unselect_all(0)
+
+ self.window.set_title(' - '.join([_('Meabook'), widget.get_label()]))
+ # reconnect signal. depends on current filter
+ if widget == self.level1_filter:
+ self.callback_id = self.selector.connect('changed', \
+ self.show_middlelevel_dialog)
+ elif widget == self.level2_filter:
+ self.callback_id = self.selector.connect('changed', \
+ self.show_lowlevel_dialog)
+
+ def _create_items_dialog(self, title):
+ """Creates dialog for showing items."""
+
+ selector = hildon.TouchSelector(text=True)
+ window = hildon.StackableWindow()
+ window.set_title(title)
+ window.add(selector)
+ return window, selector
+
+ def show_middlelevel_dialog(self, widget, column):
+ """Shows subitems of selected level1-item."""
+
+ selected_item = widget.get_current_text()
+ window, selector = self._create_items_dialog(selected_item)
+ selector.connect('changed', self.show_lowlevel_dialog)
+ for item in self.database.get_middlelevel_entries(selected_item):
+ selector.append_text(item)
+ window.show_all()
+
+ def show_lowlevel_dialog(self, widget, column):
+ """Shows lowlevel items."""
+
+ selected_item = widget.get_current_text()
+ window, selector = self._create_items_dialog(selected_item)
+ selector.connect('changed', self.show_item_info)
+ for item in self.database.get_lowlevel_entries():
+ selector.append_text(item)
+ window.show_all()
+
+ def show_item_info(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
+
+ attrs = {
+ 'givenName': _('Name'),
+ 'cn': _('Full Name'),
+ 'o': _('Filiation'),
+ 'ou': _('Department'),
+ 'title': _('Job'),
+ 'mobile': _('Phone (Mobile)'),
+ 'telephoneNumber': _('Phone (General)'),
+ 'homePhone': _('Phone (Home)'),
+ 'uid': _('Unique identificator'),
+ }
+ selected_item = widget.get_current_text()
+ entry = self.database.get_entry(selected_item)
+ window = hildon.StackableWindow()
+ window.set_title(selected_item)
+ pannable_area = hildon.PannableArea()
+ vbox = gtk.VBox()
+
+ for key in entry:
+ button = create_button(attrs.get(key, key) , entry[key])
+ vbox.pack_start(button)
+
+ pannable_area.add_with_viewport(vbox)
+ window.add(pannable_area)
+ window.show_all()