From: epage Date: Wed, 2 Jun 2010 00:30:04 +0000 (+0000) Subject: Switching to the approved backgrounds which encouraged me to also implement landscape... X-Git-Url: http://vcs.maemo.org/git/?a=commitdiff_plain;h=40482a47b943a24ea3bba42cf285bd1ddabc78c7;hp=8c0616ea665e9ef909e49b9acfe2ce6f2116dbfc;p=watersofshiloah Switching to the approved backgrounds which encouraged me to also implement landscape support git-svn-id: https://dev.lds.org/svn/mormonchannel/trunk/maemo/trunk@521 1a2a05ed-a369-0410-af37-574249971199 --- diff --git a/data/background_conference_l.png b/data/background_conference_l.png new file mode 100644 index 0000000..9ae766d Binary files /dev/null and b/data/background_conference_l.png differ diff --git a/data/background_conference_p.png b/data/background_conference_p.png new file mode 100644 index 0000000..57d9a70 Binary files /dev/null and b/data/background_conference_p.png differ diff --git a/data/background_magazines_l.png b/data/background_magazines_l.png new file mode 100644 index 0000000..eb4a771 Binary files /dev/null and b/data/background_magazines_l.png differ diff --git a/data/background_magazines_p.png b/data/background_magazines_p.png new file mode 100644 index 0000000..0be9cca Binary files /dev/null and b/data/background_magazines_p.png differ diff --git a/data/background_radio_l.png b/data/background_radio_l.png new file mode 100644 index 0000000..04ec814 Binary files /dev/null and b/data/background_radio_l.png differ diff --git a/data/background_radio_p.png b/data/background_radio_p.png new file mode 100644 index 0000000..3fe4558 Binary files /dev/null and b/data/background_radio_p.png differ diff --git a/data/background_scriptures_l.png b/data/background_scriptures_l.png new file mode 100644 index 0000000..f66b108 Binary files /dev/null and b/data/background_scriptures_l.png differ diff --git a/data/background_scriptures_p.png b/data/background_scriptures_p.png new file mode 100644 index 0000000..885668f Binary files /dev/null and b/data/background_scriptures_p.png differ diff --git a/data/conference_bg.png b/data/conference_bg.png deleted file mode 100644 index e769494..0000000 Binary files a/data/conference_bg.png and /dev/null differ diff --git a/data/magazine_bg.png b/data/magazine_bg.png deleted file mode 100644 index a6d8300..0000000 Binary files a/data/magazine_bg.png and /dev/null differ diff --git a/data/scripture_bg.png b/data/scripture_bg.png deleted file mode 100644 index dcd095d..0000000 Binary files a/data/scripture_bg.png and /dev/null differ diff --git a/src/imagestore.py b/src/imagestore.py index 0cb4813..5e9d333 100644 --- a/src/imagestore.py +++ b/src/imagestore.py @@ -40,9 +40,12 @@ class ImageStore(object): "loading": "loading.gif", "radio_header": "radio_header.png", - "conference_background": "conference_bg.png", - "magazine_background": "magazine_bg.png", - "scripture_background": "scripture_bg.png", + "conference_background": "background_conference_p.png", + "conference_background_landscape": "background_conference_l.png", + "magazine_background": "background_magazines_p.png", + "magazine_background_landscape": "background_magazines_l.png", + "scripture_background": "background_scriptures_p.png", + "scripture_background_landscape": "background_scriptures_l.png", "conferences": "conference.png", "magazines": "magazines.png", diff --git a/src/windows/_base.py b/src/windows/_base.py index 04ee835..aeccf0b 100644 --- a/src/windows/_base.py +++ b/src/windows/_base.py @@ -48,11 +48,17 @@ class BasicWindow(gobject.GObject, go_utils.AutoSignal): gobject.TYPE_NONE, (gobject.TYPE_BOOLEAN, ), ), + 'rotate' : ( + gobject.SIGNAL_RUN_LAST, + gobject.TYPE_NONE, + (gobject.TYPE_PYOBJECT, ), + ), } def __init__(self, app, player, store): gobject.GObject.__init__(self) self._isDestroyed = False + self._isPortrait = True self._app = app self._player = player @@ -132,20 +138,43 @@ class BasicWindow(gobject.GObject, go_utils.AutoSignal): def jump_to(self, node): raise NotImplementedError("On %s" % self) - @misc_utils.log_exception(_moduleLogger) - def _on_about(self, *args): - sourceWindow = AboutWindow(self._app, self._player, self._store) + def set_orientation(self, orientation): + oldIsPortrait = self._isPortrait + if orientation == gtk.ORIENTATION_VERTICAL: + hildonize.window_to_portrait(self._window) + self._isPortrait = True + elif orientation == gtk.ORIENTATION_HORIZONTAL: + hildonize.window_to_landscape(self._window) + self._isPortrait = False + else: + raise NotImplementedError(orientation) + didChange = oldIsPortrait != self._isPortrait + if didChange: + self.emit("rotate", orientation) + return didChange + + def _configure_child(self, childWindow): if not hildonize.IS_FREMANTLE_SUPPORTED: - sourceWindow.window.set_modal(True) - sourceWindow.window.set_transient_for(self._window) - sourceWindow.window.set_default_size(*self._window.get_size()) + childWindow.window.set_modal(True) + childWindow.window.set_transient_for(self._window) + childWindow.window.set_default_size(*self._window.get_size()) if self._windowInFullscreen: - sourceWindow.window.fullscreen() + childWindow.window.fullscreen() else: - sourceWindow.window.unfullscreen() - sourceWindow.connect("quit", self._on_quit) - sourceWindow.connect("jump-to", self._on_jump) - sourceWindow.connect("fullscreen", self._on_child_fullscreen) + childWindow.window.unfullscreen() + childWindow.set_orientation( + gtk.ORIENTATION_VERTICAL if self._isPortrait else gtk.ORIENTATION_HORIZONTAL + ) + childWindow.connect_auto(childWindow, "quit", self._on_quit) + childWindow.connect_auto(childWindow, "home", self._on_home) + childWindow.connect_auto(childWindow, "jump-to", self._on_jump) + childWindow.connect_auto(childWindow, "fullscreen", self._on_child_fullscreen) + childWindow.connect_auto(childWindow, "rotate", self._on_child_rotate) + + @misc_utils.log_exception(_moduleLogger) + def _on_about(self, *args): + sourceWindow = AboutWindow(self._app, self._player, self._store) + self._configure_child(sourceWindow) sourceWindow.show() @misc_utils.log_exception(_moduleLogger) @@ -177,6 +206,12 @@ class BasicWindow(gobject.GObject, go_utils.AutoSignal): else: self._window.fullscreen () return True + elif event.keyval == gtk.keysyms.o and event.get_state() & gtk.gdk.CONTROL_MASK: + if self._isPortrait: + self.set_orientation(gtk.ORIENTATION_HORIZONTAL) + else: + self.set_orientation(gtk.ORIENTATION_VERTICAL) + return True elif ( event.keyval in (gtk.keysyms.w, ) and event.get_state() & gtk.gdk.CONTROL_MASK @@ -210,6 +245,10 @@ class BasicWindow(gobject.GObject, go_utils.AutoSignal): self._window.unfullscreen() @misc_utils.log_exception(_moduleLogger) + def _on_child_rotate(self, source, orientation): + self.set_orientation(orientation) + + @misc_utils.log_exception(_moduleLogger) def _on_jump(self, source, node): raise NotImplementedError("On %s" % self) @@ -392,7 +431,9 @@ class PresenterWindow(BasicWindow): self._presenter = presenter.StreamPresenter(self._store) self._presenter.set_context( - self._get_background(), + self._get_background( + gtk.ORIENTATION_VERTICAL if self._isPortrait else gtk.ORIENTATION_HORIZONTAL + ), self._node.title, self._node.subtitle, ) @@ -410,7 +451,7 @@ class PresenterWindow(BasicWindow): self._window.set_title(self._node.get_parent().title) - def _get_background(self): + def _get_background(self, orientation): raise NotImplementedError() def show(self): @@ -424,6 +465,16 @@ class PresenterWindow(BasicWindow): def jump_to(self, node): assert self._node is node + def set_orientation(self, orientation): + didChange = BasicWindow.set_orientation(self, orientation) + if didChange: + self._presenter.set_orientation(orientation) + self._presenter.set_context( + self._get_background(orientation), + self._node.title, + self._node.subtitle, + ) + @property def _active(self): return self._playerNode is self._node diff --git a/src/windows/conferences.py b/src/windows/conferences.py index 1b31755..8d10ce0 100644 --- a/src/windows/conferences.py +++ b/src/windows/conferences.py @@ -68,20 +68,10 @@ class ConferencesWindow(windows._base.ListWindow): self._errorBanner.push_message(str(exception)) def _window_from_node(self, node): - sessionsWindow = ConferenceSessionsWindow(self._app, self._player, self._store, node) - if not hildonize.IS_FREMANTLE_SUPPORTED: - sessionsWindow.window.set_modal(True) - sessionsWindow.window.set_transient_for(self._window) - if self._windowInFullscreen: - sessionsWindow.window.fullscreen() - else: - sessionsWindow.window.unfullscreen() - sessionsWindow.connect_auto(sessionsWindow, "quit", self._on_quit) - sessionsWindow.connect_auto(sessionsWindow, "home", self._on_home) - sessionsWindow.connect_auto(sessionsWindow, "jump-to", self._on_jump) - sessionsWindow.connect_auto(sessionsWindow, "fullscreen", self._on_child_fullscreen) - sessionsWindow.show() - return sessionsWindow + childWindow = ConferenceSessionsWindow(self._app, self._player, self._store, node) + self._configure_child(childWindow) + childWindow.show() + return childWindow gobject.type_register(ConferencesWindow) @@ -133,20 +123,10 @@ class ConferenceSessionsWindow(windows._base.ListWindow): self._errorBanner.push_message(str(exception)) def _window_from_node(self, node): - sessionsWindow = ConferenceTalksWindow(self._app, self._player, self._store, node) - if not hildonize.IS_FREMANTLE_SUPPORTED: - sessionsWindow.window.set_modal(True) - sessionsWindow.window.set_transient_for(self._window) - if self._windowInFullscreen: - sessionsWindow.window.fullscreen() - else: - sessionsWindow.window.unfullscreen() - sessionsWindow.connect_auto(sessionsWindow, "quit", self._on_quit) - sessionsWindow.connect_auto(sessionsWindow, "home", self._on_home) - sessionsWindow.connect_auto(sessionsWindow, "jump-to", self._on_jump) - sessionsWindow.connect_auto(sessionsWindow, "fullscreen", self._on_child_fullscreen) - sessionsWindow.show() - return sessionsWindow + childWindow = ConferenceTalksWindow(self._app, self._player, self._store, node) + self._configure_child(childWindow) + childWindow.show() + return childWindow gobject.type_register(ConferenceSessionsWindow) @@ -197,20 +177,10 @@ class ConferenceTalksWindow(windows._base.ListWindow): self._errorBanner.push_message(str(exception)) def _window_from_node(self, node): - sessionsWindow = ConferenceTalkWindow(self._app, self._player, self._store, node) - if not hildonize.IS_FREMANTLE_SUPPORTED: - sessionsWindow.window.set_modal(True) - sessionsWindow.window.set_transient_for(self._window) - if self._windowInFullscreen: - sessionsWindow.window.fullscreen() - else: - sessionsWindow.window.unfullscreen() - sessionsWindow.connect_auto(sessionsWindow, "quit", self._on_quit) - sessionsWindow.connect_auto(sessionsWindow, "home", self._on_home) - sessionsWindow.connect_auto(sessionsWindow, "jump-to", self._on_jump) - sessionsWindow.connect_auto(sessionsWindow, "fullscreen", self._on_child_fullscreen) - sessionsWindow.show() - return sessionsWindow + childWindow = ConferenceTalkWindow(self._app, self._player, self._store, node) + self._configure_child(childWindow) + childWindow.show() + return childWindow gobject.type_register(ConferenceTalksWindow) @@ -221,8 +191,13 @@ class ConferenceTalkWindow(windows._base.PresenterWindow): def __init__(self, app, player, store, node): windows._base.PresenterWindow.__init__(self, app, player, store, node) - def _get_background(self): - return self._store.STORE_LOOKUP["conference_background"] + def _get_background(self, orientation): + if orientation == gtk.ORIENTATION_VERTICAL: + return self._store.STORE_LOOKUP["conference_background"] + elif orientation == gtk.ORIENTATION_HORIZONTAL: + return self._store.STORE_LOOKUP["conference_background_landscape"] + else: + raise NotImplementedError("Unknown orientation %s" % orientation) gobject.type_register(ConferenceTalkWindow) diff --git a/src/windows/magazines.py b/src/windows/magazines.py index 7d74ab5..7fd169e 100644 --- a/src/windows/magazines.py +++ b/src/windows/magazines.py @@ -93,17 +93,7 @@ class MagazinesWindow(windows._base.ListWindow): def _window_from_node(self, node): issuesWindow = MagazineIssuesWindow(self._app, self._player, self._store, node) - if not hildonize.IS_FREMANTLE_SUPPORTED: - issuesWindow.window.set_modal(True) - issuesWindow.window.set_transient_for(self._window) - if self._windowInFullscreen: - issuesWindow.window.fullscreen() - else: - issuesWindow.window.unfullscreen() - issuesWindow.connect_auto(issuesWindow, "quit", self._on_quit) - issuesWindow.connect_auto(issuesWindow, "home", self._on_home) - issuesWindow.connect_auto(issuesWindow, "jump-to", self._on_jump) - issuesWindow.connect_auto(issuesWindow, "fullscreen", self._on_child_fullscreen) + self._configure_child(issuesWindow) issuesWindow.show() return issuesWindow @@ -188,17 +178,7 @@ class MagazineIssuesWindow(windows._base.ListWindow): def _window_from_node(self, node): issuesWindow = MagazineArticlesWindow(self._app, self._player, self._store, node) - if not hildonize.IS_FREMANTLE_SUPPORTED: - issuesWindow.window.set_modal(True) - issuesWindow.window.set_transient_for(self._window) - if self._windowInFullscreen: - issuesWindow.window.fullscreen() - else: - issuesWindow.window.unfullscreen() - issuesWindow.connect_auto(issuesWindow, "quit", self._on_quit) - issuesWindow.connect_auto(issuesWindow, "home", self._on_home) - issuesWindow.connect_auto(issuesWindow, "jump-to", self._on_jump) - issuesWindow.connect_auto(issuesWindow, "fullscreen", self._on_child_fullscreen) + self._configure_child(issuesWindow) issuesWindow.show() return issuesWindow @@ -252,17 +232,7 @@ class MagazineArticlesWindow(windows._base.ListWindow): def _window_from_node(self, node): issuesWindow = MagazineArticleWindow(self._app, self._player, self._store, node) - if not hildonize.IS_FREMANTLE_SUPPORTED: - issuesWindow.window.set_modal(True) - issuesWindow.window.set_transient_for(self._window) - if self._windowInFullscreen: - issuesWindow.window.fullscreen() - else: - issuesWindow.window.unfullscreen() - issuesWindow.connect_auto(issuesWindow, "quit", self._on_quit) - issuesWindow.connect_auto(issuesWindow, "home", self._on_home) - issuesWindow.connect_auto(issuesWindow, "jump-to", self._on_jump) - issuesWindow.connect_auto(issuesWindow, "fullscreen", self._on_child_fullscreen) + self._configure_child(issuesWindow) issuesWindow.show() return issuesWindow @@ -275,8 +245,13 @@ class MagazineArticleWindow(windows._base.PresenterWindow): def __init__(self, app, player, store, node): windows._base.PresenterWindow.__init__(self, app, player, store, node) - def _get_background(self): - return self._store.STORE_LOOKUP["magazine_background"] + def _get_background(self, orientation): + if orientation == gtk.ORIENTATION_VERTICAL: + return self._store.STORE_LOOKUP["magazine_background"] + elif orientation == gtk.ORIENTATION_HORIZONTAL: + return self._store.STORE_LOOKUP["magazine_background_landscape"] + else: + raise NotImplementedError("Unknown orientation %s" % orientation) gobject.type_register(MagazineArticleWindow) diff --git a/src/windows/scriptures.py b/src/windows/scriptures.py index 9ef47a1..bd9078a 100644 --- a/src/windows/scriptures.py +++ b/src/windows/scriptures.py @@ -59,20 +59,10 @@ class ScripturesWindow(windows._base.ListWindow): self._errorBanner.push_message(str(exception)) def _window_from_node(self, node): - booksWindow = ScriptureBooksWindow(self._app, self._player, self._store, node) - if not hildonize.IS_FREMANTLE_SUPPORTED: - booksWindow.window.set_modal(True) - booksWindow.window.set_transient_for(self._window) - if self._windowInFullscreen: - booksWindow.window.fullscreen() - else: - booksWindow.window.unfullscreen() - booksWindow.connect_auto(booksWindow, "quit", self._on_quit) - booksWindow.connect_auto(booksWindow, "home", self._on_home) - booksWindow.connect_auto(booksWindow, "jump-to", self._on_jump) - booksWindow.connect_auto(booksWindow, "fullscreen", self._on_child_fullscreen) - booksWindow.show() - return booksWindow + childWindow = ScriptureBooksWindow(self._app, self._player, self._store, node) + self._configure_child(childWindow) + childWindow.show() + return childWindow gobject.type_register(ScripturesWindow) @@ -124,20 +114,10 @@ class ScriptureBooksWindow(windows._base.ListWindow): self._errorBanner.push_message(str(exception)) def _window_from_node(self, node): - booksWindow = ScriptureChaptersWindow(self._app, self._player, self._store, node) - if not hildonize.IS_FREMANTLE_SUPPORTED: - booksWindow.window.set_modal(True) - booksWindow.window.set_transient_for(self._window) - if self._windowInFullscreen: - booksWindow.window.fullscreen() - else: - booksWindow.window.unfullscreen() - booksWindow.connect_auto(booksWindow, "quit", self._on_quit) - booksWindow.connect_auto(booksWindow, "home", self._on_home) - booksWindow.connect_auto(booksWindow, "jump-to", self._on_jump) - booksWindow.connect_auto(booksWindow, "fullscreen", self._on_child_fullscreen) - booksWindow.show() - return booksWindow + childWindow = ScriptureChaptersWindow(self._app, self._player, self._store, node) + self._configure_child(childWindow) + childWindow.show() + return childWindow gobject.type_register(ScriptureBooksWindow) @@ -189,20 +169,10 @@ class ScriptureChaptersWindow(windows._base.ListWindow): self._errorBanner.push_message(str(exception)) def _window_from_node(self, node): - booksWindow = ScriptureChapterWindow(self._app, self._player, self._store, node) - if not hildonize.IS_FREMANTLE_SUPPORTED: - booksWindow.window.set_modal(True) - booksWindow.window.set_transient_for(self._window) - if self._windowInFullscreen: - booksWindow.window.fullscreen() - else: - booksWindow.window.unfullscreen() - booksWindow.connect_auto(booksWindow, "quit", self._on_quit) - booksWindow.connect_auto(booksWindow, "home", self._on_home) - booksWindow.connect_auto(booksWindow, "jump-to", self._on_jump) - booksWindow.connect_auto(booksWindow, "fullscreen", self._on_child_fullscreen) - booksWindow.show() - return booksWindow + childWindow = ScriptureChapterWindow(self._app, self._player, self._store, node) + self._configure_child(childWindow) + childWindow.show() + return childWindow gobject.type_register(ScriptureChaptersWindow) @@ -213,8 +183,13 @@ class ScriptureChapterWindow(windows._base.PresenterWindow): def __init__(self, app, player, store, node): windows._base.PresenterWindow.__init__(self, app, player, store, node) - def _get_background(self): - return self._store.STORE_LOOKUP["scripture_background"] + def _get_background(self, orientation): + if orientation == gtk.ORIENTATION_VERTICAL: + return self._store.STORE_LOOKUP["scripture_background"] + elif orientation == gtk.ORIENTATION_HORIZONTAL: + return self._store.STORE_LOOKUP["scripture_background_landscape"] + else: + raise NotImplementedError("Unknown orientation %s" % orientation) gobject.type_register(ScriptureChapterWindow) diff --git a/src/windows/source.py b/src/windows/source.py index fee997c..cbcc15e 100644 --- a/src/windows/source.py +++ b/src/windows/source.py @@ -115,18 +115,15 @@ class SourceSelector(windows._base.BasicWindow): if not hildonize.IS_FREMANTLE_SUPPORTED: sourceWindow.window.set_modal(True) sourceWindow.window.set_transient_for(self._window) - sourceWindow.window.set_default_size(*self._window.get_size()) - if self._windowInFullscreen: - sourceWindow.window.fullscreen() - else: - sourceWindow.window.unfullscreen() - sourceWindow.connect("quit", self._on_quit) - sourceWindow.connect("jump-to", self._on_jump) - sourceWindow.connect("fullscreen", self._on_child_fullscreen) + self._configure_child(sourceWindow) sourceWindow.show() return sourceWindow @misc_utils.log_exception(_moduleLogger) + def _on_home(self, *args): + pass + + @misc_utils.log_exception(_moduleLogger) def _on_jump(self, source, node): targetNodePath = list(reversed(list(stream_index.walk_ancestors(node)))) ancestor = targetNodePath[0]