8 from meabook.database.SQLite import SQLite
12 class HildonMeabook():
13 def __init__(self, basedir):
14 self.database = SQLite(basedir)
15 self.window = hildon.StackableWindow()
16 self.window.set_title(_('Meabook'))
17 self.window.connect('destroy', self.exit)
20 menu = hildon.AppMenu()
21 settings_button = hildon.Button(gtk.HILDON_SIZE_AUTO, \
22 hildon.BUTTON_ARRANGEMENT_HORIZONTAL, _('Settings'))
23 about_button = hildon.Button(gtk.HILDON_SIZE_AUTO, \
24 hildon.BUTTON_ARRANGEMENT_HORIZONTAL, _('About'))
26 # create filter widgets
27 self.level1_filter = gtk.RadioButton(None, _('Filiation'))
28 self.level2_filter = gtk.RadioButton(self.level1_filter, _('Depart'))
29 self.level3_filter = gtk.RadioButton(self.level1_filter, _('People'))
30 for filter_widget in [self.level1_filter, self.level2_filter, \
32 filter_widget.set_mode(False)
35 self.selector = hildon.TouchSelector(text=True)
38 self.callback_id = self.selector.connect('changed', \
39 self.show_middlelevel_dialog)
40 settings_button.connect('clicked', self.show_settings_dialog)
41 about_button.connect('clicked', self.show_about_dialog)
42 self.level1_filter.connect('clicked', self.apply_filter, \
43 self.database.get_toplevel_entries)
44 self.level2_filter.connect('clicked', self.apply_filter, \
45 self.database.get_middlelevel_entries)
46 self.level3_filter.connect('clicked', self.apply_filter, \
47 self.database.get_lowlevel_entries)
50 for filter_widget in [self.level1_filter, self.level2_filter, \
52 if filter_widget.get_active():
53 self.apply_filter(filter_widget, self.database.get_toplevel_entries)
57 self.window.add(self.selector)
58 menu.add_filter(self.level1_filter)
59 menu.add_filter(self.level2_filter)
60 menu.add_filter(self.level3_filter)
61 menu.append(settings_button)
62 menu.append(about_button)
64 self.window.set_app_menu(menu)
65 self.window.show_all()
68 """Start the program."""
72 def exit(self, event):
73 """Exit the program."""
78 def show_settings_dialog(self, widget):
81 def show_about_dialog(self, widget):
84 def apply_filter(self, widget, db_function):
85 """Updates toplevel selector with different level items."""
87 # blocks 'change' event for selector
88 self.selector.handler_block(self.callback_id)
91 self.selector.get_model(0).clear()
92 for item in db_function():
93 self.selector.append_text(item)
94 self.selector.unselect_all(0)
96 self.window.set_title(' - '.join([_('Meabook'), widget.get_label()]))
97 # reconnect signal. depends on current filter
98 if widget == self.level1_filter:
99 self.callback_id = self.selector.connect('changed', \
100 self.show_middlelevel_dialog)
101 elif widget == self.level2_filter:
102 self.callback_id = self.selector.connect('changed', \
103 self.show_lowlevel_dialog)
105 def _create_items_dialog(self, title):
106 """Creates dialog for showing items."""
108 selector = hildon.TouchSelector(text=True)
109 window = hildon.StackableWindow()
110 window.set_title(title)
112 return window, selector
114 def show_middlelevel_dialog(self, widget, column):
115 """Shows subitems of selected level1-item."""
117 selected_item = widget.get_current_text()
118 window, selector = self._create_items_dialog(selected_item)
119 selector.connect('changed', self.show_lowlevel_dialog)
120 for item in self.database.get_middlelevel_entries(selected_item):
121 selector.append_text(item)
124 def show_lowlevel_dialog(self, widget, column):
125 """Shows lowlevel items."""
127 selected_item = widget.get_current_text()
128 window, selector = self._create_items_dialog(selected_item)
129 selector.connect('changed', self.show_item_info)
130 for item in self.database.get_lowlevel_entries():
131 selector.append_text(item)
134 def show_item_info(self, widget, column):
135 """Shows detailed item information."""
137 def create_button(title, value):
138 """Create HildonButton."""
140 button = hildon.Button(gtk.HILDON_SIZE_AUTO | \
141 gtk.HILDON_SIZE_FINGER_HEIGHT, \
142 hildon.BUTTON_ARRANGEMENT_VERTICAL, title, value)
143 button.set_style(hildon.BUTTON_STYLE_PICKER)
144 button.set_alignment(0, 0, 0, 0)
148 'givenName': _('Name'),
149 'cn': _('Full Name'),
151 'ou': _('Department'),
153 'mobile': _('Phone (Mobile)'),
154 'telephoneNumber': _('Phone (General)'),
155 'homePhone': _('Phone (Home)'),
156 'uid': _('Unique identificator'),
158 selected_item = widget.get_current_text()
159 entry = self.database.get_entry(selected_item)
160 window = hildon.StackableWindow()
161 window.set_title(selected_item)
162 pannable_area = hildon.PannableArea()
166 button = create_button(attrs.get(key, key) , entry[key])
167 vbox.pack_start(button)
169 pannable_area.add_with_viewport(vbox)
170 window.add(pannable_area)