From: tanya Date: Mon, 21 Jun 2010 13:30:09 +0000 (+0300) Subject: started full search X-Git-Url: https://vcs.maemo.org/git/?p=meabook;a=commitdiff_plain;h=79660ba7ff6dc8c6970e084278050cd519130af0 started full search --- diff --git a/controller.py b/controller.py index f696a7c..3701b64 100644 --- a/controller.py +++ b/controller.py @@ -2,8 +2,9 @@ Meabook controller class """ -from meabook.constants import * -from gettext import gettext as _ +import gettext + +_ = gettext.gettext class MeabookController: @@ -23,7 +24,7 @@ class MeabookController: """Gets from model items with selected level.""" folders_list = list(self.get_all_folders(parent)) - files_list = [(fields['cn'], int_name, TYPE_FILE) for int_name, \ + files_list = [(fields['cn'], internal_name, 'f') for internal_name, \ fields in self.model.get_files(['cn'], parent).items()] return folders_list + files_list @@ -48,27 +49,22 @@ class MeabookController: def get_all_folders(self, parent=0): """Gets all filials.""" - return [(name, internal_name, TYPE_DIRECTORY) for name, internal_name \ - in self.model.get_folders(parent)] + return [(name, internal_name, 'd') for name, internal_name in \ + self.model.get_folders(parent)] def get_all_subfolders(self): """Gets all departments.""" - return self.get_all_folders(parent=None) + return [(name, internal_name, 'd') for name, internal_name in \ + self.model.get_folders()] def get_all_files(self): """Gets all peoples.""" # FIXME: read field names from Config files_dict = self.model.get_files(['cn']) - return [(files_dict[internal_name]['cn'], internal_name, TYPE_FILE) \ - for internal_name in files_dict] - - def get_all_files_by_pattern(self, pattern): - """Gets all peoples matched pattern.""" - - return [(name, internal_name, TYPE_FILE) for internal_name, name in \ - self.model.get_files_by_pattern(pattern)] + return [(files_dict[internal_name]['cn'], internal_name, 'f') for \ + internal_name in files_dict] def get_fields(self): """Returns all exists fields from model.""" @@ -85,6 +81,11 @@ class MeabookController: self.view.create_configuration_dialog(self, self.config) + def show_search_dialog(self): + """Shows view Search Dialog.""" + + self.view.create_search_dialog(self) + def show_import_dialog(self): """Shows view IMport Dialog.""" diff --git a/ui/__init__.pyo b/ui/__init__.pyo index 0830c1e..7a1c3eb 100644 Binary files a/ui/__init__.pyo and b/ui/__init__.pyo differ diff --git a/ui/hildon_ui.py b/ui/hildon_ui.py index 171f60b..0c83250 100644 --- a/ui/hildon_ui.py +++ b/ui/hildon_ui.py @@ -6,12 +6,11 @@ import gtk import hildon import gobject from gettext import gettext as _ -from meabook.constants import * from meabook.ui.ui import MeabookUI def create_button(title, value): - """Creates HildonButton.""" + """Create HildonButton.""" button = hildon.Button(gtk.HILDON_SIZE_AUTO | \ gtk.HILDON_SIZE_FINGER_HEIGHT, \ @@ -22,8 +21,6 @@ def create_button(title, value): def create_menu_button(title): - """Creates Hildon menu button.""" - return hildon.Button(gtk.HILDON_SIZE_AUTO, \ hildon.BUTTON_ARRANGEMENT_HORIZONTAL, title) @@ -41,6 +38,7 @@ class HildonMeabook(MeabookUI): 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')) @@ -54,25 +52,21 @@ class HildonMeabook(MeabookUI): # create items list self.selector = hildon.TouchSelector() - widgets_box = gtk.VBox() - self.search_entry = hildon.Entry(gtk.HILDON_SIZE_AUTO) - # connect signals settings_button.connect('clicked', self.show_settings_dialog_cb) about_button.connect('clicked', self.show_about_dialog_cb) import_button.connect('clicked', self.show_import_dialog_cb) + search_button.connect('clicked', self.show_search_dialog_cb) self.handler = self.selector.connect('changed', self.select_item_cb) - self.search_entry.connect('key-release-event', self.search_item_cb) # packing widgets - widgets_box.pack_start(self.selector, expand=True) - widgets_box.pack_end(self.search_entry, expand=False) - self.window.add(widgets_box) + self.window.add(self.selector) 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) @@ -83,12 +77,10 @@ class HildonMeabook(MeabookUI): gtk.main_iteration(False) def _update_title(self, title): - """Set window title text.""" - if title is not None: self.window.set_title(title) - def _set_selector_content(self, selector, handler, items=[]): + def _set_selector_content(self, selector, handler, items): """Updates selector content.""" # temporary block handler @@ -98,8 +90,8 @@ class HildonMeabook(MeabookUI): # model: name, internal_name, type model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_INT, \ gobject.TYPE_STRING) - for item in items: - model.append(item) + 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) @@ -209,6 +201,7 @@ class HildonMeabook(MeabookUI): "foreground='white' size='small'>Max Usachev | maxusachev@gmail.com" \ "\n" % version) + dialog.vbox.add(info_label) dialog.vbox.show_all() dialog.run() @@ -233,6 +226,12 @@ class HildonMeabook(MeabookUI): dialog = ConfigurationDialog(controller, config) dialog.run() + def create_search_dialog(self, controller): + dialog = SearchDialog(controller) + param = dialog.run() + if param: + print(param) + # Hildon UI callbacks def show_about_dialog_cb(self, widget): @@ -253,6 +252,11 @@ class HildonMeabook(MeabookUI): self.controller.show_configuration_dialog() + def show_search_dialog_cb(self, widget): + """Show Search dialog.""" + + self.controller.show_search_dialog() + def apply_filter_cb(self, widget): """Updates toplevel selector with different level items.""" @@ -260,7 +264,6 @@ class HildonMeabook(MeabookUI): return self._update_title(' - '.join([_('Meabook'), widget.get_label()])) - self.search_entry.hide() if widget == self.level1_filter: self._set_selector_content(self.selector, self.handler, \ @@ -269,10 +272,8 @@ class HildonMeabook(MeabookUI): self._set_selector_content(self.selector, self.handler, \ self.controller.get_all_subfolders()) else: - self.search_entry.set_text('') - self.search_entry.set_placeholder(_('Enter search text here')) - self.search_entry.show() - self._set_selector_content(self.selector, self.handler) + self._set_selector_content(self.selector, self.handler, \ + self.controller.get_all_files()) def select_item_cb(self, widget, column): """ @@ -280,22 +281,50 @@ class HildonMeabook(MeabookUI): Opens new StackableWindow with new content. """ - item_name, internal_name, item_type = \ - widget.get_model(0)[widget.get_active(0)] - if item_type == TYPE_DIRECTORY: - self._show_items_dialog(item_name, self.controller.get_items( \ - internal_name)) + selected_item_index = widget.get_active(0) + _iter = widget.get_model(0)[selected_item_index] + if _iter[2] == 'd': + self._show_items_dialog(_iter[0], self.controller.get_items(\ + _iter[1])) else: - self._show_item_dialog(item_name, internal_name) + self._show_item_dialog(_iter[0], _iter[1]) - def search_item_cb(self, widget, event): - """Search items from database.""" +class SearchDialog: + """Search dialog""" - self._set_selector_content(self.selector, self.handler, \ - self.controller.get_all_files_by_pattern(widget.get_text())) - widget.grab_focus() + def __init__(self, controller): + self.controller = controller + def run(self): + dialog = hildon.Dialog() + dialog.set_title(_('Search')) + select_keys = 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) + + 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) + + entry = hildon.Entry(gtk.HILDON_SIZE_AUTO | gtk.HILDON_SIZE_FINGER_HEIGHT) + entry.set_placeholder("") + + dialog.vbox.pack_start(button, expand=False) + dialog.vbox.pack_end(entry, expand=False) + dialog.vbox.show_all() + dialog.add_button(_('Search'), gtk.RESPONSE_OK) + response = dialog.run() + if response == gtk.RESPONSE_OK: + ret = (button.get_value(), entry.get_text()) + dialog.destroy() + return ret + else: + dialog.destroy() + return False class ConfigurationDialog: diff --git a/ui/hildon_ui.pyo b/ui/hildon_ui.pyo index d647345..25cf7bd 100644 Binary files a/ui/hildon_ui.pyo and b/ui/hildon_ui.pyo differ