X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=ui%2Fhildon_ui.py;h=fd78cc247c723dd34c00a766906b5e6671bdd10a;hb=31f40d982b1bf03a446d73f458d7a1e57b421bc7;hp=0aaabeb83b5990a1b8573e9c76041a43d7927705;hpb=8a5ccebdee72815e51cf161f201e226c443059a7;p=meabook diff --git a/ui/hildon_ui.py b/ui/hildon_ui.py index 0aaabeb..fd78cc2 100644 --- a/ui/hildon_ui.py +++ b/ui/hildon_ui.py @@ -10,7 +10,6 @@ from meabook.ui.ui import MeabookUI _ = gettext.gettext - def create_button(title, value): """Create HildonButton.""" @@ -31,11 +30,13 @@ class HildonMeabook(MeabookUI): self.window.connect('destroy', self.exit) # create menu buttons - menu = hildon.AppMenu() + self.menu = hildon.AppMenu() settings_button = hildon.Button(gtk.HILDON_SIZE_AUTO, \ hildon.BUTTON_ARRANGEMENT_HORIZONTAL, _('Settings')) about_button = hildon.Button(gtk.HILDON_SIZE_AUTO, \ hildon.BUTTON_ARRANGEMENT_HORIZONTAL, _('About')) + import_button = hildon.Button(gtk.HILDON_SIZE_AUTO, \ + hildon.BUTTON_ARRANGEMENT_HORIZONTAL, _('Import')) # create filter widgets and connect signals self.level1_filter = gtk.RadioButton(None, _('level1')) @@ -52,19 +53,28 @@ class HildonMeabook(MeabookUI): # 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) self.handler = self.selector.connect('changed', self.select_item_cb) # 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.window.set_app_menu(menu) + 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(about_button) + self.menu.show_all() + self.window.set_app_menu(self.menu) self.window.show_all() + def _unfreeze_ui(self): + while gtk.events_pending(): + gtk.main_iteration(False) + + def _update_title(self, title): + self.window.set_title(title) + def _set_selector_content(self, selector, handler, items): """Updates selector content.""" @@ -76,12 +86,10 @@ class HildonMeabook(MeabookUI): model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_INT, \ gobject.TYPE_STRING) for name, internal_name, item_type in items: - _iter = model.append() - model.set(_iter, 0, name) - model.set(_iter, 1, internal_name) - model.set(_iter, 2, item_type) - selector.remove_column(0) - selector.append_text_column(model, False) + model.append((name, internal_name, item_type)) + if selector.get_num_columns(): + selector.remove_column(0) + selector.append_text_column(model, True) selector.unselect_all(0) # reconnect callback @@ -98,6 +106,23 @@ class HildonMeabook(MeabookUI): self._set_selector_content(selector, handler, items) window.show_all() + def _show_item_dialog(self, title, entry): + """Shows detailed item information.""" + + window = hildon.StackableWindow() + window.set_title(title) + pannable_area = hildon.PannableArea() + vbox = gtk.VBox() + + for fname, fvalue in entry: + button = create_button(_(fname) , fvalue) + vbox.pack_start(button, expand=False) + + pannable_area.add_with_viewport(vbox) + window.add(pannable_area) + window.show_all() + + # Implementation of Base UI interface def start(self): self.apply_filter_cb(self.level1_filter) @@ -107,7 +132,16 @@ class HildonMeabook(MeabookUI): gtk.main_quit() self.controller.stop() - def show_about_dialog(self): + def create_information_dialog(self, title, message): + dialog = hildon.Dialog() + dialog.set_title(title) + label = gtk.Label(message) + dialog.vbox.add(label) + dialog.vbox.show_all() + dialog.run() + dialog.destroy() + + def create_about_dialog(self): dialog = hildon.Dialog() dialog.set_title(_('About')) label = gtk.Label('\nMeabook v0.1\n') @@ -116,23 +150,45 @@ class HildonMeabook(MeabookUI): dialog.run() dialog.destroy() - def show_fields_to_show_dialog(self): - ConfigurationDialog(self.controller, page=1) + def create_import_dialog(self): + chooser = gobject.new(hildon.FileChooserDialog, \ + action=gtk.FILE_CHOOSER_ACTION_OPEN) + chooser.set_property('show-files', True) + chooser.run() + path = chooser.get_filename() + chooser.destroy() + + hildon.hildon_gtk_window_set_progress_indicator(self.window, 1) + self._update_title(_('Importing...')) + self.selector.hide() + self._unfreeze_ui() + return path - def show_fileds_order_dialog(self): - ConfigurationDialog(self.controller, page=2) + def create_progress_dialog(self): + hildon.hildon_gtk_window_set_progress_indicator(self.window, 1) + + def create_configuration_dialog(self, controller, config): + ConfigurationDialog(controller, config) # Hildon UI callbacks def show_about_dialog_cb(self, widget): """Shows About Dialog.""" - self.show_about_dialog() + self.controller.show_about_dialog() + + def show_import_dialog_cb(self, widget): + """Shows Import Dialog.""" + + self.controller.show_import_dialog() + 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): """Shows Config dialog.""" - ConfigurationDialog(self.controller) + self.controller.show_configuration_dialog() def apply_filter_cb(self, widget): """Updates toplevel selector with different level items.""" @@ -140,7 +196,11 @@ class HildonMeabook(MeabookUI): if not widget.get_active(): return - self.window.set_title(' - '.join([_('Meabook'), widget.get_label()])) + self._update_title(' - '.join([_('Meabook'), widget.get_label()])) + + # hide menu if next is longtime operation + self.menu.hide() + self._unfreeze_ui() if widget == self.level1_filter: self._set_selector_content(self.selector, self.handler, \ @@ -160,35 +220,20 @@ class HildonMeabook(MeabookUI): selected_item_index = widget.get_active(0) _iter = widget.get_model(0)[selected_item_index] - if _iter[2] == 'folder': + if _iter[2] == 'fo': self._show_items_dialog(_iter[0], self.controller.get_items(\ _iter[1])) else: self._show_item_dialog(_iter[0], self.controller.get_item(_iter[1])) - def _show_item_dialog(self, title, item): - """Shows detailed item information.""" - - window = hildon.StackableWindow() - window.set_title(title) - pannable_area = hildon.PannableArea() - vbox = gtk.VBox() - - for key, value in item.items(): - button = create_button(_(key) , value) - vbox.pack_start(button) - - pannable_area.add_with_viewport(vbox) - window.add(pannable_area) - window.show_all() - class ConfigurationDialog: """Configuration dialog""" - def __init__(self, controller, page=1): + def __init__(self, controller, config): + self.config = config self.controller = controller self.window = hildon.StackableWindow() @@ -198,7 +243,9 @@ class ConfigurationDialog: # create menu menu = hildon.AppMenu() self.button_order = gtk.RadioButton(None, _('Order')) + self.button_order.connect('clicked', self.show_order_settings_cb) self.button_fields = gtk.RadioButton(self.button_order, _('Fields')) + self.button_fields.connect('clicked', self.show_fields_settings_cb) self.button_order.set_mode(False) self.button_fields.set_mode(False) menu.add_filter(self.button_fields) @@ -217,16 +264,7 @@ class ConfigurationDialog: self.window.show_all() # switches to necessary page - if page == 1: - self.button_fields.set_active(True) - self.show_fields_settings_cb(None) - else: - self.button_order.set_active(True) - self.show_order_settings_cb(None) - - # connect signals - self.button_order.connect('clicked', self.show_order_settings_cb) - self.button_fields.connect('clicked', self.show_fields_settings_cb) + self.button_fields.set_active(True) def show_fields_settings_cb(self, widget): """Shows dialog for selecting fields to show.""" @@ -245,7 +283,7 @@ class ConfigurationDialog: self.selector.unselect_all(0) # mark necessary fields - fields_to_select = self.controller.config.get_fields() + fields_to_select = self.config.get_fields() model = self.selector.get_model(0) for index, field in enumerate(fields): if field in fields_to_select: @@ -297,6 +335,7 @@ class ConfigurationDialog: try: self.controller.config.set_order([button.get_value() for button in \ - self.pannable_area.get_child().get_children()[0].get_children()]) + self.pannable_area.get_child().get_children()[0].\ + get_children()]) except AttributeError: pass