Gtk UI: Initial hack for embedded shownotes display

Add configuration option to embed shownotes in main window.
This commit is contained in:
Thomas Perl 2012-07-12 21:14:53 +02:00
parent 5e205ecb7c
commit c1dae9e9f6
4 changed files with 36 additions and 18 deletions

View file

@ -146,6 +146,7 @@ defaults = {
'descriptions': True,
'view_mode': 1,
'columns': int('101', 2), # bitfield of visible columns
'embed_shownotes': False, # show shownotes below episode list
},
'download_list': {

View file

@ -54,6 +54,9 @@ SHOWNOTES_HTML_TEMPLATE = """
class gPodderShownotes(gPodderShownotesBase):
def on_create_window(self):
if self._config.ui.gtk.episode_list.embed_shownotes:
self.main_window.hide()
self.textview.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('#ffffff'))
if self._config.enable_html_shownotes:
try:
@ -106,6 +109,7 @@ class gPodderShownotes(gPodderShownotesBase):
vsb.set_value(vsb.get_value() - step)
def on_show_window(self):
self.main_window.vbox.show()
self.download_progress.set_fraction(0)
self.download_progress.set_text(_('Please wait...'))
self.main_window.set_title(self.episode.title)
@ -149,6 +153,7 @@ class gPodderShownotes(gPodderShownotesBase):
self.b.place_cursor(self.b.get_start_iter())
def on_hide_window(self):
self.main_window.vbox.hide()
self.episode = None
if self.have_webkit:
self.htmlview.load_html_string('', '')

View file

@ -141,19 +141,19 @@ class gPodderShownotesBase(BuilderWidget):
def _download_status_changed(self, task):
"""Called from main window for download status changes"""
if self.main_window.get_property('visible'):
if self.main_window.vbox.get_property('visible'):
self.task = task
self.on_episode_status_changed()
def _download_status_progress(self):
"""Called from main window for progress updates"""
if self.main_window.get_property('visible'):
if self.main_window.vbox.get_property('visible'):
self.on_download_status_progress()
#############################################################
def show(self, episode):
if self.main_window.get_property('visible'):
if self.episode is not None:
if episode == self.episode:
return
@ -165,8 +165,11 @@ class gPodderShownotesBase(BuilderWidget):
self.on_show_window()
self.on_episode_status_changed()
self.main_window.show()
self.main_window.present()
if not self._config.ui.gtk.episode_list.embed_shownotes:
if not self.main_window.get_property('visible'):
self.main_window.show()
self.main_window.present()
# Make sure the window comes up quick
while gtk.events_pending():

View file

@ -508,16 +508,6 @@ class gPodder(BuilderWidget, dbus.service.Object):
util.idle_add(indicator.on_finished)
def on_podcast_selected(self, treeview, path, column):
# for Maemo 5's UI
model = treeview.get_model()
channel = model.get_value(model.get_iter(path), \
PodcastListModel.C_CHANNEL)
self.active_channel = channel
self.update_episode_list_model()
self.episodes_window.channel = self.active_channel
self.episodes_window.show()
def on_button_subscribe_clicked(self, button):
self.on_itemImportChannels_activate(button)
@ -907,8 +897,20 @@ class gPodder(BuilderWidget, dbus.service.Object):
selection = self.treeAvailable.get_selection()
selection.set_mode(gtk.SELECTION_MULTIPLE)
# Update the sensitivity of the toolbar buttons on the Desktop
selection.connect('changed', lambda s: self.play_or_download())
selection.connect('changed', self.on_episode_list_selection_changed)
def on_episode_list_selection_changed(self, selection):
# Update the toolbar buttons
self.play_or_download()
if (self.episode_shownotes_window is not None and
self.episode_shownotes_window.episode is not None):
rows = selection.count_selected_rows()
if rows != 1:
self.episode_shownotes_window.on_close_button_clicked()
else:
episode = self.get_selected_episodes()[0]
self.show_episode_shownotes(episode)
def init_download_list_treeview(self):
# enable multiple selection support
@ -3302,7 +3304,8 @@ class gPodder(BuilderWidget, dbus.service.Object):
episodes = self.get_selected_episodes()
if episodes:
episode = episodes.pop(0)
self.show_episode_shownotes(episode)
if episode is not None:
self.show_episode_shownotes(episode)
else:
self.show_message(_('Please select an episode from the episode list to display shownotes.'), _('No episode selected'), widget=self.treeAvailable)
@ -3325,6 +3328,12 @@ class gPodder(BuilderWidget, dbus.service.Object):
_episode_list_status_changed=self.episode_list_status_changed, \
_cancel_task_list=self.cancel_task_list, \
_streaming_possible=self.streaming_possible())
if self.config.ui.gtk.episode_list.embed_shownotes:
self.episode_shownotes_window.main_window.vbox.reparent(self.vbox_episode_list)
self.episode_shownotes_window.main_window.vbox.set_border_width(0)
self.episode_shownotes_window.vbox1.set_border_width(0)
self.episode_shownotes_window.show(episode)
if episode.downloading:
self.update_downloads_list()