import gtk
import hildon
import gettext
+from meabook.database.SQLite import SQLite
_ = gettext.gettext
-class HildonMeabook(Meabook):
+class HildonMeabook():
def __init__(self, basedir):
+ self.database = SQLite(basedir)
self.window = hildon.StackableWindow()
self.window.set_title(_('Meabook'))
self.window.connect('destroy', self.exit)
- # creating menu
+
+ # create menu buttons
menu = hildon.AppMenu()
- self.window.set_app_menu(menu)
settings_button = hildon.Button(gtk.HILDON_SIZE_AUTO, \
hildon.BUTTON_ARRANGEMENT_HORIZONTAL, _('Settings'))
- settings_button.connect('clicked', self.show_settings_dialog)
about_button = hildon.Button(gtk.HILDON_SIZE_AUTO, \
hildon.BUTTON_ARRANGEMENT_HORIZONTAL, _('About'))
+
+ # create filter widgets
+ self.level1_filter = gtk.RadioButton(None, _('Filiation'))
+ self.level2_filter = gtk.RadioButton(self.level1_filter, _('Depart'))
+ self.level3_filter = gtk.RadioButton(self.level1_filter, _('People'))
+ for filter_widget in [self.level1_filter, self.level2_filter, \
+ self.level3_filter]:
+ filter_widget.set_mode(False)
+
+ # create items list
+ self.selector = hildon.TouchSelector(text=True)
+
+ # connect signals
+ self.callback_id = self.selector.connect('changed', \
+ self.show_middlelevel_dialog)
+ settings_button.connect('clicked', self.show_settings_dialog)
about_button.connect('clicked', self.show_about_dialog)
+ self.level1_filter.connect('clicked', self.apply_filter, \
+ self.database.get_toplevel_entries)
+ self.level2_filter.connect('clicked', self.apply_filter, \
+ self.database.get_middlelevel_entries)
+ self.level3_filter.connect('clicked', self.apply_filter, \
+ self.database.get_lowlevel_entries)
+
+ # fill items list
+ for filter_widget in [self.level1_filter, self.level2_filter, \
+ self.level3_filter]:
+ if filter_widget.get_active():
+ self.apply_filter(filter_widget, self.database.get_toplevel_entries)
+ break
+
+ # packing widgets
+ self.window.add(self.selector)
+ menu.add_filter(self.level1_filter)
+ menu.add_filter(self.level2_filter)
+ menu.add_filter(self.level3_filter)
menu.append(settings_button)
menu.append(about_button)
menu.show_all()
- self.parea = hildon.PannableArea()
- self.window.add(self.parea)
+ self.window.set_app_menu(menu)
self.window.show_all()
def start(self):
+ """Start the program."""
+
gtk.main()
def exit(self, event):
- # add here DB disconnect
+ """Exit the program."""
+
+ self.database.close()
gtk.main_quit()
def show_settings_dialog(self, widget):
def show_about_dialog(self, widget):
print 'about'
+
+ 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()