X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=ui%2Fhildon_ui.py;h=c21b5a9e3a53a6f74d3b6a03bafbac7e82ea32d2;hb=e159d0094249d43b06a321a83029746a06247750;hp=43d9446b0b95c05f8524d84bcb9ca6909ee7846a;hpb=f7f6ed680538807c31adf2838d3bb6bd8568639d;p=meabook diff --git a/ui/hildon_ui.py b/ui/hildon_ui.py index 43d9446..c21b5a9 100644 --- a/ui/hildon_ui.py +++ b/ui/hildon_ui.py @@ -6,6 +6,7 @@ import gtk import hildon import gobject from gettext import gettext as _ +from meabook.constants import * from meabook.ui.ui import MeabookUI @@ -21,10 +22,47 @@ def create_button(title, value): def create_menu_button(title): + """Create HildonMenu button.""" + return hildon.Button(gtk.HILDON_SIZE_AUTO, \ hildon.BUTTON_ARRANGEMENT_HORIZONTAL, title) +def set_selector_content(selector, handler, items=[]): + """Updates selector widget content.""" + + selector.handler_block(handler) # temporary block handler + # setting new content + # model: name, internal_name, type + model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_INT, \ + gobject.TYPE_STRING) + for name, internal_name, item_type in items: + model.append((name, internal_name, item_type)) + if selector.get_num_columns(): + selector.remove_column(0) + selector.append_text_column(model, False) + selector.unselect_all(0) + selector.handler_unblock(handler) # reconnect callback + + +def set_box_content(box, handler, items=[]): + """Updates box widget content.""" + + def on_button_click(widget): + handler(widget.get_title(), widget.get_data('iname')) + + for child in box.get_children(): + box.remove(child) + for title, value, internal_name, item_type in items: + button = create_button(title, value) + button.connect('clicked', on_button_click) + button.set_data('iname', internal_name) + button.set_relief(gtk.RELIEF_NONE) + button.show() + box.pack_start(button, expand=False) + + + class HildonMeabook(MeabookUI): def __init__(self, controller, renderer, config): MeabookUI.__init__(self, controller, renderer, config) @@ -32,14 +70,12 @@ class HildonMeabook(MeabookUI): self.window = hildon.StackableWindow() self.window.set_title(_('Meabook')) self.window.connect('destroy', self.exit) - # create menu buttons - self.menu = hildon.AppMenu() + menu = hildon.AppMenu() settings_button = create_menu_button(_('Settings')) about_button = create_menu_button(_('About')) import_button = create_menu_button(_('Import')) search_button = create_menu_button(_('Search')) - # create filter widgets and connect signals self.level1_filter = gtk.RadioButton(None, _('level1')) self.level2_filter = gtk.RadioButton(self.level1_filter, _('level2')) @@ -48,20 +84,18 @@ class HildonMeabook(MeabookUI): self.level3_filter]: filter_widget.set_mode(False) filter_widget.connect('toggled', self.apply_filter_cb) - # create items widgets self.selector = hildon.TouchSelector() self.box_container = hildon.PannableArea() self.box = gtk.VBox() - # create search widgets widgets_box = gtk.VBox() self.search_widgets_box = gtk.HBox() - self.search_entry = hildon.Entry(gtk.HILDON_SIZE_AUTO) + self.search_entry = hildon.Entry(gtk.HILDON_SIZE_AUTO | \ + gtk.HILDON_SIZE_FINGER_HEIGHT) clear_search_entry_container = gtk.EventBox() clear_search_entry_image = gtk.image_new_from_icon_name( \ 'general_delete', gtk.HILDON_SIZE_FINGER_HEIGHT) - # connect signals settings_button.connect('clicked', self.show_settings_dialog_cb) about_button.connect('clicked', self.show_about_dialog_cb) @@ -71,7 +105,6 @@ class HildonMeabook(MeabookUI): self.search_entry.connect('key-release-event', self.search_item_cb) clear_search_entry_container.connect('button-press-event', \ self.clear_search_entry_cb) - # packing widgets # packing search widgets clear_search_entry_container.add(clear_search_entry_image) @@ -85,15 +118,15 @@ class HildonMeabook(MeabookUI): widgets_box.pack_end(self.search_widgets_box, expand=False) self.window.add(widgets_box) # packing menu widgets - self.menu.add_filter(self.level1_filter) - self.menu.add_filter(self.level2_filter) - self.menu.add_filter(self.level3_filter) - self.menu.append(settings_button) - self.menu.append(import_button) - self.menu.append(search_button) - self.menu.append(about_button) - self.menu.show_all() - self.window.set_app_menu(self.menu) + menu.add_filter(self.level1_filter) + menu.add_filter(self.level2_filter) + menu.add_filter(self.level3_filter) + menu.append(settings_button) + menu.append(import_button) + menu.append(search_button) + menu.append(about_button) + menu.show_all() + self.window.set_app_menu(menu) self.window.show_all() def _show_ui(self, view='selector', show_search=False): @@ -105,6 +138,9 @@ class HildonMeabook(MeabookUI): elif view == 'box': self.selector.hide() self.box_container.show_all() + else: + self.selector.hide() + self.box_container.hide() if show_search: self.search_entry.set_text('') self.search_entry.set_placeholder(_('Enter search text here')) @@ -120,39 +156,6 @@ class HildonMeabook(MeabookUI): if title is not None: self.window.set_title(title) - def _set_selector_content(self, selector, handler, items=[]): - """Updates selector widget content.""" - - selector.handler_block(handler) # temporary block handler - # setting new content - # model: name, internal_name, type - model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_INT, \ - gobject.TYPE_STRING) - for name, internal_name, item_type in items: - model.append((name, internal_name, item_type)) - if selector.get_num_columns(): - selector.remove_column(0) - selector.append_text_column(model, False) - selector.unselect_all(0) - selector.handler_unblock(handler) # reconnect callback - - def _set_box_content(self, box, items): - """Updates box widget content.""" - - def on_button_click(widget): - self._show_item_dialog(widget.get_title(), \ - widget.get_data('internal_name')) - - for child in box.get_children(): - box.remove(child) - for title, value, internal_name, item_type in items: - button = create_button(title, value) - button.connect('clicked', on_button_click) - button.set_data('internal_name', internal_name) - button.set_relief(gtk.RELIEF_NONE) - button.show() - box.pack_start(button, expand=False) - def _show_items_dialog(self, title, items, touch_selector_view=True): """Creates dialog with items. If 'touch_selector_view' is True, then items will be shown in TouchSelector widget, else each item @@ -163,12 +166,12 @@ class HildonMeabook(MeabookUI): if touch_selector_view: container = hildon.TouchSelector() handler = container.connect('changed', self.select_item_cb) - self._set_selector_content(container, handler, items) + set_selector_content(container, handler, items) else: widgets_box = gtk.VBox() container = hildon.PannableArea() container.add_with_viewport(items_box) - self._set_box_content(widgets_box, items) + set_box_content(widgets_box, self._show_item_dialog, items) window.add(container) window.show_all() @@ -246,27 +249,7 @@ class HildonMeabook(MeabookUI): dialog.destroy() def create_about_dialog(self): - from meabook.version import version - dialog = hildon.Dialog() - dialog.set_title(_('About')) - info_label = gtk.Label() - info_label.set_use_markup(True) - info_label.set_justify(gtk.JUSTIFY_CENTER) - info_label.set_markup("" \ - "Meabook - " \ - "Enterprise address book\nVersion %s\n\n\nDevelopers:\nTanya Makova | tanyshk@gmail.com\nMax Usachev | maxusachev@gmail.com" \ - "\n" % version) - - dialog.vbox.add(info_label) - dialog.vbox.show_all() - dialog.run() - dialog.destroy() + AboutDialog() def create_import_dialog(self): chooser = gobject.new(hildon.FileChooserDialog, \ @@ -279,13 +262,12 @@ class HildonMeabook(MeabookUI): def create_progress_dialog(self, title=None): self._update_title(title) - self.selector.hide() + self._show_ui('hide', False) hildon.hildon_gtk_window_set_progress_indicator(self.window, 1) self._unfreeze_ui() def create_configuration_dialog(self, controller, config): - dialog = ConfigurationDialog(controller, config) - dialog.run() + ConfigurationDialog(controller, config).run() def create_search_dialog(self, controller): dialog = SearchDialog(controller) @@ -304,8 +286,8 @@ class HildonMeabook(MeabookUI): """Shows Import Dialog.""" if self.controller.show_import_dialog(): + self._show_ui('selector') self.apply_filter_cb(self.level1_filter) - self.selector.show_all() hildon.hildon_gtk_window_set_progress_indicator(self.window, 0) def show_settings_dialog_cb(self, widget): @@ -315,7 +297,7 @@ class HildonMeabook(MeabookUI): def show_search_dialog_cb(self, widget): """Show Search dialog.""" - + self.controller.show_search_dialog() def apply_filter_cb(self, widget): @@ -328,17 +310,15 @@ class HildonMeabook(MeabookUI): if widget == self.level1_filter: self._show_ui() - self._set_selector_content(self.selector, self.handler, \ + set_selector_content(self.selector, self.handler, \ self.controller.get_all_folders()) elif widget == self.level2_filter: self._show_ui() - self._set_selector_content(self.selector, self.handler, \ + set_selector_content(self.selector, self.handler, \ self.controller.get_all_subfolders()) else: - self._show_ui('box', True) + self._show_ui(view='box', show_search=True) - - def select_item_cb(self, widget, column): """ Emits when changes selector content. @@ -352,12 +332,12 @@ class HildonMeabook(MeabookUI): internal_name)) else: self._show_item_dialog(item_name, internal_name) - + def search_item_cb(self, widget, event): """Search items from database.""" - self._set_box_content(self.box, \ - self.controller.get_all_files_by_pattern(widget.get_text(), \ + set_box_content(self.box, self._show_item_dialog, \ + self.controller.get_files_by_pattern(widget.get_text(), \ separated=True)) widget.grab_focus() @@ -365,9 +345,39 @@ class HildonMeabook(MeabookUI): """Clears search entry content.""" self.search_entry.set_text('') + set_box_content(self.box, None) + + + +class AboutDialog(hildon.Dialog): + """Hildon About Dialog.""" + + def __init__(self): + from meabook.version import version + hildon.Dialog.__init__(self) + self.set_title(_('About')) + info_label = gtk.Label() + info_label.set_use_markup(True) + info_label.set_justify(gtk.JUSTIFY_CENTER) + info_label.set_markup("" \ + "Meabook - " \ + "Enterprise address book\nVersion %s\n\n\nDevelopers:\nTanya Makova | tanyshk@gmail.com\nMax Usachev | maxusachev@gmail.com" \ + "\n" % version) + self.vbox.add(info_label) + self.vbox.show_all() + self.run() + self.destroy() + + class SearchDialog: - """Search dialog""" + """Hildon Search Dialog.""" def __init__(self, controller): self.controller = controller @@ -376,19 +386,20 @@ class SearchDialog: dialog = hildon.Dialog() dialog.set_title(_('Search')) - select_keys = hildon.TouchSelector(text=True) + selector = hildon.TouchSelector(text=True) #for item in ('cn', 'mobile'): for item in self.controller.get_fields(): - select_keys.append_text(item) - select_keys.set_active(0, 0) + selector.append_text(_(item)) + selector.set_active(0, 0) - button = hildon.PickerButton(gtk.HILDON_SIZE_AUTO | gtk.HILDON_SIZE_FINGER_HEIGHT, - hildon.BUTTON_ARRANGEMENT_VERTICAL) - button.set_title("Search key") - button.set_selector(select_keys) + button = hildon.PickerButton(gtk.HILDON_SIZE_AUTO | \ + gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL) + button.set_alignment(0, 0, 0, 0) + button.set_title(_("Search criterion")) + button.set_selector(selector) entry = hildon.Entry(gtk.HILDON_SIZE_AUTO | gtk.HILDON_SIZE_FINGER_HEIGHT) - entry.set_placeholder("") + entry.set_placeholder(_("Enter search text here")) dialog.vbox.pack_start(button, expand=False) dialog.vbox.pack_end(entry, expand=False) @@ -396,16 +407,17 @@ class SearchDialog: dialog.add_button(_('Search'), gtk.RESPONSE_OK) response = dialog.run() if response == gtk.RESPONSE_OK: - ret = (button.get_value(), entry.get_text()) + result = (self.controller.get_localized_fields()[ \ + button.get_value().decode('utf-8')], entry.get_text()) dialog.destroy() - return ret - else: - dialog.destroy() - return False + return result + dialog.destroy() + return (False, None) + class ConfigurationDialog: - """Configuration dialog""" + """Hildon Configuration Dialog.""" def __init__(self, controller, config): self.config = config @@ -509,8 +521,7 @@ class ConfigurationDialog: dialog.vbox.show_all() response = dialog.run() if response == gtk.RESPONSE_OK: - fields_dict = dict([(_(field).decode('utf-8'), field) for field \ - in self.controller.get_fields()]) + fields_dict = self.controller.get_localized_fields() new_ordered_fields = [fields_dict[button.get_value().decode( \ 'utf-8')] for button in vbox.get_children()] self.config.set_order(new_ordered_fields)