From: Max Usachev Date: Fri, 11 Jun 2010 10:52:27 +0000 (+0300) Subject: implemented level switching X-Git-Url: https://vcs.maemo.org/git/?a=commitdiff_plain;h=d61ae09f46a07b7fed5985f56ed0a2f80e75872c;hp=ecfc080b47741624c68333b74256c51f730c869f;p=meabook implemented level switching --- diff --git a/ui/hildon_ui.py b/ui/hildon_ui.py index cc69d98..d3d6a81 100644 --- a/ui/hildon_ui.py +++ b/ui/hildon_ui.py @@ -26,7 +26,8 @@ class HildonMeabook(MeabookUI): def __init__(self, controller): MeabookUI.__init__(self, controller) self.internal_names = [] - self.callback_id = None + self.handler = None + self.level = 1 self.window = hildon.StackableWindow() self.window.set_title(_('Meabook')) self.window.connect('destroy', self.exit) @@ -52,6 +53,7 @@ class HildonMeabook(MeabookUI): # connect signals settings_button.connect('clicked', self.show_settings_dialog_cb) about_button.connect('clicked', self.show_about_dialog_cb) + self.handler = self.selector.connect('changed', self.select_item_cb) self.level1_filter.connect('toggled', self.apply_filter_cb, \ self.controller.get_level1_items) self.level2_filter.connect('toggled', self.apply_filter_cb, \ @@ -70,11 +72,36 @@ class HildonMeabook(MeabookUI): self.window.set_app_menu(menu) self.window.show_all() - def _set_selector_content(self, items): + def _set_selector_content(self, selector, handler, items): + """Updates selector content.""" + + # temporary block handler + selector.handler_block(handler) + self.internal_names = [] + selector.get_model(0).clear() for item in items: - self.selector.append_text(item[0]) + selector.append_text(item[0]) self.internal_names.append(item[1]) + selector.unselect_all(0) + + # reconnect callback + selector.handler_unblock(handler) + + def _show_items_dialog(self, title, items): + """Creates dialog with items.""" + + selector = hildon.TouchSelector(text=True) + window = hildon.StackableWindow() + window.set_title(title) + window.connect('destroy', self._decrease_level) + window.add(selector) + handler = selector.connect('changed', self.select_item_cb) + self._set_selector_content(selector, handler, items) + window.show_all() + + def _decrease_level(self, widget): + self.level -= 1 # Implementation of Base UI interface def start(self): @@ -85,11 +112,10 @@ class HildonMeabook(MeabookUI): self.controller.stop() def get_current_level(self): - if self.level1_filter.get_active(): return 1 - elif self.level2_filter.get_active(): return 2 - else: return 3 + return self.level def show_items(self, items, level): + self.level = level if level == 1: # level1_button is not in gorup, process separately self.level1_filter.set_active(True) self.apply_filter_cb(self.level1_filter, \ @@ -132,47 +158,30 @@ class HildonMeabook(MeabookUI): if not widget.get_active(): return - # blocks 'change' event for selector - try: - self.selector.handler_block(self.callback_id) - except: - pass + if widget == self.level1_filter: self.level = 1 + elif widget == self.level2_filter: self.level = 2 + else: self.level = 3 # update list content - self.selector.get_model(0).clear() - self._set_selector_content(items or func()) - self.selector.unselect_all(0) + self._set_selector_content(self.selector, self.handler, items or func()) self.window.set_title(' - '.join([_('Meabook'), widget.get_label()])) - 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_dialog) - for item in self.database.get_lowlevel_entries(): - selector.append_text(item) - window.show_all() + def select_item_cb(self, widget, column): + """Emits when changes selector content.""" + + name, internal_name = widget.get_current_text(), \ + widget.get_active(0) + if self.level == 1: + items = self.controller.get_level2_items((name, internal_name)) + self._show_items_dialog(name, items) + self.level = 2 + elif self.level == 2: + items = self.controller.get_level3_items((name, internal_name)) + self._show_items_dialog(name, items) + self.level = 3 + else: + print 'show item details' def show_item_dialog(self, widget, column): """Shows detailed item information.""" @@ -202,7 +211,7 @@ class ConfigurationDialog: self.controller = controller self.window = hildon.StackableWindow() - self.window.set_title(_('Configuration')) + self.window.set_title(_('Settings')) self.window.connect('destroy', self.close_dialog_cb) # create menu