From aa089b3e039926d330ab31479d3aa0e48521a8c0 Mon Sep 17 00:00:00 2001 From: Thomas Perl Date: Mon, 21 Sep 2009 19:38:35 +0200 Subject: [PATCH] Improve the Maemo 5 / Fremantle user experience Fix up the welcome window and progress dialog, and show the welcome window when clicking on the podcasts dialog when there are no subscriptions. --- data/ui/frmntl/gpodderwelcome.ui | 37 ++++++++++++++++++++++++++++ src/gpodder/gtkui/frmntl/podcastdirectory.py | 12 ++++----- src/gpodder/gtkui/interface/progress.py | 16 +++++++++--- src/gpodder/gtkui/interface/welcome.py | 5 ++++ src/gpodder/gui.py | 16 +++++++++--- 5 files changed, 73 insertions(+), 13 deletions(-) create mode 100644 data/ui/frmntl/gpodderwelcome.ui diff --git a/data/ui/frmntl/gpodderwelcome.ui b/data/ui/frmntl/gpodderwelcome.ui new file mode 100644 index 00000000..46c986f2 --- /dev/null +++ b/data/ui/frmntl/gpodderwelcome.ui @@ -0,0 +1,37 @@ + + + + + True + Your podcast list is empty. What do you want to do? + False + + + True + + + 12 + 12 + True + + + Choose from a list of example podcasts + True + HILDON_SIZE_THUMB_HEIGHT + + + + + + Download my list from my.gpodder.org + True + HILDON_SIZE_THUMB_HEIGHT + + + + + + + + + diff --git a/src/gpodder/gtkui/frmntl/podcastdirectory.py b/src/gpodder/gtkui/frmntl/podcastdirectory.py index f2969756..d38748df 100644 --- a/src/gpodder/gtkui/frmntl/podcastdirectory.py +++ b/src/gpodder/gtkui/frmntl/podcastdirectory.py @@ -60,8 +60,8 @@ class gPodderPodcastDirectory(BuilderWidget): selection.set_mode(gtk.SELECTION_MULTIPLE) selection.unselect_all() self.app_menu = hildon.AppMenu() - for action in (self.action_load_opml, \ - self.action_load_toplist, \ + for action in (self.action_load_toplist, \ + self.action_load_opml, \ self.action_load_search, \ self.action_load_youtube, \ self.action_select_all, \ @@ -91,9 +91,6 @@ class gPodderPodcastDirectory(BuilderWidget): def on_treeview_expose_event(self, treeview, event): if event.window == treeview.get_bin_window(): model = treeview.get_model() - if not self._is_updating: - return False - if (model is not None and model.get_iter_first() is not None): return False @@ -103,7 +100,10 @@ class gPodderPodcastDirectory(BuilderWidget): ctx.clip() x, y, width, height, depth = event.window.get_geometry() - text = _('Downloading podcast list, please wait...') + if self._is_updating: + text = _('Downloading podcast list, please wait...') + else: + text = _('No podcasts') from gpodder.gtkui.frmntl import style font_desc = style.get_font_desc('LargeSystemFont') diff --git a/src/gpodder/gtkui/interface/progress.py b/src/gpodder/gtkui/interface/progress.py index c81f24bc..f3d58b7f 100644 --- a/src/gpodder/gtkui/interface/progress.py +++ b/src/gpodder/gtkui/interface/progress.py @@ -38,7 +38,7 @@ class ProgressIndicator(object): self.title = title self.subtitle = subtitle self.cancellable = cancellable - self.parent = None + self.parent = parent self.dialog = None self.progressbar = None self.indicator = None @@ -46,13 +46,20 @@ class ProgressIndicator(object): self._initial_progress = None self.source_id = gobject.timeout_add(self.DELAY, self._create_progress) + def _on_delete_event(self, window, event): + if self.cancellable: + self.dialog.response(gtk.RESPONSE_CANCEL) + return True + def _create_progress(self): self.dialog = gtk.MessageDialog(self.parent, \ 0, 0, gtk.BUTTONS_CANCEL, self.subtitle or self.title) + self.dialog.connect('delete-event', self._on_delete_event) if gpodder.ui.fremantle: import hildon hildon.hildon_gtk_window_set_progress_indicator(self.dialog, True) self.dialog.set_title(self.title) + self.dialog.set_deletable(self.cancellable) self.dialog.label.set_selectable(False) self.dialog.set_response_sensitive(gtk.RESPONSE_CANCEL, \ @@ -69,8 +76,11 @@ class ProgressIndicator(object): self.progressbar.set_text(self._initial_message) self.dialog.vbox.add(self.progressbar) - self.indicator = SpinningProgressIndicator() - self.dialog.set_image(self.indicator) + if gpodder.ui.fremantle: + self.dialog.set_image(gtk.Image()) + else: + self.indicator = SpinningProgressIndicator() + self.dialog.set_image(self.indicator) self.dialog.show_all() gobject.source_remove(self.source_id) diff --git a/src/gpodder/gtkui/interface/welcome.py b/src/gpodder/gtkui/interface/welcome.py index dd17c529..ae6d4b58 100644 --- a/src/gpodder/gtkui/interface/welcome.py +++ b/src/gpodder/gtkui/interface/welcome.py @@ -35,6 +35,11 @@ class gPodderWelcome(BuilderWidget): child.set_padding(20, 20, 20, 20) else: child.set_padding(20, 20) + + if gpodder.ui.fremantle: + self.btnOPML.set_name('HildonButton-thumb') + self.btnMygPodder.set_name('HildonButton-thumb') + self.gPodderWelcome.show() def on_show_example_podcasts(self, button): diff --git a/src/gpodder/gui.py b/src/gpodder/gui.py index 2215ee18..553a0808 100644 --- a/src/gpodder/gui.py +++ b/src/gpodder/gui.py @@ -375,14 +375,19 @@ class gPodder(BuilderWidget, dbus.service.Object): self.button_downloads.set_sensitive(True) # First-time users should be asked if they want to see the OPML - if not self.channels: + if not self.channels and not gpodder.ui.fremantle: util.idle_add(self.on_itemUpdate_activate) def on_button_subscribe_clicked(self, button): self.on_itemImportChannels_activate(button) def on_button_podcasts_clicked(self, widget): - self.podcasts_window.show() + if self.channels: + self.podcasts_window.show() + else: + gPodderWelcome(self.gPodder, \ + show_example_podcasts_callback=self.on_itemImportChannels_activate, \ + setup_my_gpodder_callback=self.on_download_from_mygpo) def on_button_downloads_clicked(self, widget): self.downloads_window.show() @@ -798,8 +803,6 @@ class gPodder(BuilderWidget, dbus.service.Object): self.tray_icon.downloads_finished(self.download_tasks_seen) if gpodder.ui.diablo: hildon.hildon_banner_show_information(self.gPodder, None, 'gPodder: %s' % _('All downloads finished')) - elif gpodder.ui.fremantle: - self.show_message(_('All downloads finished')) log('All downloads have finished.', sender=self) if self.config.cmd_all_downloads_complete: util.run_external_command(self.config.cmd_all_downloads_complete) @@ -1679,6 +1682,9 @@ class gPodder(BuilderWidget, dbus.service.Object): else: banner = None + if gpodder.ui.fremantle: + hildon.hildon_gtk_window_set_progress_indicator(self.episodes_window.main_window, True) + self.currently_updating = True self.episode_list_model.clear() def do_update_episode_list_model(): @@ -1691,6 +1697,8 @@ class gPodder(BuilderWidget, dbus.service.Object): def on_episode_list_model_updated(): if banner is not None: banner.destroy() + if gpodder.ui.fremantle: + hildon.hildon_gtk_window_set_progress_indicator(self.episodes_window.main_window, False) self.treeAvailable.columns_autosize() self.currently_updating = False self.play_or_download() -- 2.11.4.GIT