Generalize Maemo fullscreening; Maemo shownotes dialog

This commit is contained in:
Thomas Perl 2009-09-02 00:58:55 +02:00
parent be099296d7
commit ee4a732a93
7 changed files with 181 additions and 18 deletions

View file

@ -13,7 +13,7 @@
</columns>
<data/>
</object>
<object class="GtkDialog" id="gPodderDiabloPreferences">
<object class="GtkDialog" id="gPodderPreferences">
<property name="title" translatable="yes">Preferences</property>
<property name="modal">True</property>
<child internal-child="vbox">

View file

@ -0,0 +1,131 @@
<?xml version="1.0"?>
<interface>
<object class="HildonWindow" id="gPodderShownotes">
<child>
<object class="GtkVBox" id="vbox">
<property name="visible">True</property>
<property name="border_width">6</property>
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkScrolledWindow" id="scrolled_window">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
<child>
<object class="GtkTextView" id="textview">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="editable">False</property>
<property name="wrap_mode">word</property>
</object>
</child>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkProgressBar" id="download_progress">
<property name="visible">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkHButtonBox" id="buttonbox">
<property name="visible">True</property>
<property name="spacing">12</property>
<property name="layout_style">end</property>
<child>
<object class="GtkButton" id="btnPlay">
<property name="label">gtk-media-play</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
<signal name="clicked" handler="on_playback"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btnDownload">
<property name="label" translatable="yes">Download</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="on_download"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btnCancel">
<property name="label">gtk-cancel</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
<signal name="clicked" handler="on_cancel"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btnClose">
<property name="label">gtk-close</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
<signal name="clicked" handler="on_close"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkAction" id="action_play">
<property name="label">Play</property>
<property name="stock_id">gtk-media-play</property>
<signal name="activate" handler="on_playback"/>
</object>
<object class="GtkAction" id="action_download">
<property name="label">Download</property>
<property name="stock_id">gtk-go-down</property>
<signal name="activate" handler="on_download"/>
</object>
<object class="GtkAction" id="action_cancel">
<property name="label">Cancel</property>
<property name="stock_id">gtk-cancel</property>
<signal name="activate" handler="on_cancel"/>
</object>
<object class="GtkAction" id="action_close">
<property name="label">Close</property>
<property name="stock_id">gtk-close</property>
<signal name="activate" handler="on_close"/>
</object>
</interface>

View file

@ -54,6 +54,14 @@ class BuilderWidget(GtkBuilderWidget):
def __init__(self, parent, **kwargs):
GtkBuilderWidget.__init__(self, gpodder.ui_folders, gpodder.textdomain, **kwargs)
# Enable support for fullscreen toggle key on Maemo
if gpodder.interface == gpodder.MAEMO:
self._maemo_fullscreen = False
self.main_window.connect('key-press-event', \
self._on_key_press_event_maemo)
self.main_window.connect('window-state-event', \
self._on_window_state_event_maemo)
# Set widgets to finger-friendly mode if on Maemo
for widget_name in self.finger_friendly_widgets:
if hasattr(self, widget_name):
@ -73,6 +81,26 @@ class BuilderWidget(GtkBuilderWidget):
else:
self.main_window.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
def _on_key_press_event_maemo(self, widget, event):
if event.keyval == gtk.keysyms.F6:
if self._maemo_fullscreen:
self.main_window.unfullscreen()
self.main_window.set_border_width(0)
else:
self.main_window.fullscreen()
self.main_window.set_border_width(12)
return True
else:
return False
def _on_window_state_event_maemo(self, widget, event):
if event.new_window_state & gtk.gdk.WINDOW_STATE_FULLSCREEN:
self._maemo_fullscreen = True
else:
self._maemo_fullscreen = False
return False
def notification(self, message, title=None, important=False, widget=None):
util.idle_add(self.show_message, message, title, important, widget)

View file

@ -62,6 +62,16 @@ class gPodderShownotes(BuilderWidget):
setattr(self, 'have_gtkhtml2', False)
self.gPodderShownotes.connect('key-press-event', self.on_key_press)
if gpodder.interface == gpodder.MAEMO:
menu = gtk.Menu()
menu.append(self.action_play.create_menu_item())
menu.append(gtk.SeparatorMenuItem())
menu.append(self.action_download.create_menu_item())
menu.append(self.action_cancel.create_menu_item())
menu.append(gtk.SeparatorMenuItem())
menu.append(self.action_close.create_menu_item())
self.gPodderShownotes.set_menu(self.set_finger_friendly(menu))
def on_key_press(self, widget, event):
if not hasattr(self.scrolled_window, 'get_vscrollbar'):
return
@ -195,6 +205,11 @@ class gPodderShownotes(BuilderWidget):
self.btnPlay.hide_all()
self.btnDownload.show_all()
if gpodder.interface == gpodder.MAEMO:
self.action_play.set_sensitive(self.btnPlay.get_property('visible'))
self.action_download.set_sensitive(self.btnDownload.get_property('visible'))
self.action_cancel.set_sensitive(self.btnCancel.get_property('visible'))
def on_download(self, widget):
if self.download_callback:
self.download_callback()

View file

@ -27,7 +27,7 @@ from gpodder.gtkui.interface.common import BuilderWidget
from gpodder.gtkui.interface.configeditor import gPodderConfigEditor
class gPodderDiabloPreferences(BuilderWidget):
class gPodderPreferences(BuilderWidget):
finger_friendly_widgets = ['btn_close', 'btn_advanced']
audio_players = [
('default', 'Media Player'),
@ -82,7 +82,7 @@ class gPodderDiabloPreferences(BuilderWidget):
self.combo_videoplayer.set_active(len(self.combo_videoplayer_model)-1)
self.userconfigured_videoplayer = self._config.videoplayer
self.gPodderDiabloPreferences.show()
self.gPodderPreferences.show()
def on_combo_player_changed(self, combobox):
index = combobox.get_active()
@ -99,9 +99,9 @@ class gPodderDiabloPreferences(BuilderWidget):
self._config.videoplayer = self.userconfigured_videoplayer
def on_btn_advanced_clicked(self, widget):
gPodderConfigEditor(self.gPodderDiabloPreferences, _config=self._config)
self.gPodderDiabloPreferences.destroy()
gPodderConfigEditor(self.gPodderPreferences, _config=self._config)
self.gPodderPreferences.destroy()
def on_btn_close_clicked(self, widget):
self.gPodderDiabloPreferences.destroy()
self.gPodderPreferences.destroy()

View file

@ -103,7 +103,7 @@ if gpodder.interface == gpodder.GUI:
from gpodder.gtkui.interface.syncprogress import gPodderSyncProgress
from gpodder.gtkui.interface.deviceplaylist import gPodderDevicePlaylist
else:
from gpodder.gtkui.maemo.preferences import gPodderDiabloPreferences as gPodderPreferences
from gpodder.gtkui.maemo.preferences import gPodderPreferences
from gpodder.gtkui.interface.shownotes import gPodderShownotes
from gpodder.gtkui.interface.podcastdirectory import gPodderPodcastDirectory
@ -261,7 +261,6 @@ class gPodder(BuilderWidget, dbus.service.Object):
self.download_status_model = DownloadStatusModel()
self.download_queue_manager = download.DownloadQueueManager(self.config)
self.fullscreen = False
self.minimized = False
self.gPodder.connect('window-state-event', self.window_state_event)
@ -3061,11 +3060,6 @@ class gPodder(BuilderWidget, dbus.service.Object):
if gpodder.interface != gpodder.MAEMO:
return False
if event.keyval == gtk.keysyms.F6:
if self.fullscreen:
self.window.unfullscreen()
else:
self.window.fullscreen()
if event.keyval == gtk.keysyms.Escape:
new_visibility = not self.vboxChannelNavigator.get_property('visible')
self.vboxChannelNavigator.set_property('visible', new_visibility)
@ -3089,11 +3083,6 @@ class gPodder(BuilderWidget, dbus.service.Object):
return False
def window_state_event(self, widget, event):
if event.new_window_state & gtk.gdk.WINDOW_STATE_FULLSCREEN:
self.fullscreen = True
else:
self.fullscreen = False
old_minimized = self.minimized
self.minimized = bool(event.new_window_state & gtk.gdk.WINDOW_STATE_ICONIFIED)