Switching to the approved backgrounds which encouraged me to also implement landscape...
authorepage <epage@1a2a05ed-a369-0410-af37-574249971199>
Wed, 2 Jun 2010 00:30:04 +0000 (00:30 +0000)
committerepage <epage@1a2a05ed-a369-0410-af37-574249971199>
Wed, 2 Jun 2010 00:30:04 +0000 (00:30 +0000)
git-svn-id: https://dev.lds.org/svn/mormonchannel/trunk/maemo/trunk@521 1a2a05ed-a369-0410-af37-574249971199

17 files changed:
data/background_conference_l.png [new file with mode: 0644]
data/background_conference_p.png [new file with mode: 0644]
data/background_magazines_l.png [new file with mode: 0644]
data/background_magazines_p.png [new file with mode: 0644]
data/background_radio_l.png [new file with mode: 0644]
data/background_radio_p.png [new file with mode: 0644]
data/background_scriptures_l.png [new file with mode: 0644]
data/background_scriptures_p.png [new file with mode: 0644]
data/conference_bg.png [deleted file]
data/magazine_bg.png [deleted file]
data/scripture_bg.png [deleted file]
src/imagestore.py
src/windows/_base.py
src/windows/conferences.py
src/windows/magazines.py
src/windows/scriptures.py
src/windows/source.py

diff --git a/data/background_conference_l.png b/data/background_conference_l.png
new file mode 100644 (file)
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 (file)
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 (file)
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 (file)
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 (file)
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 (file)
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 (file)
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 (file)
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 (file)
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 (file)
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 (file)
index dcd095d..0000000
Binary files a/data/scripture_bg.png and /dev/null differ
index 0cb4813..5e9d333 100644 (file)
@@ -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",
index 04ee835..aeccf0b 100644 (file)
@@ -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
index 1b31755..8d10ce0 100644 (file)
@@ -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)
index 7d74ab5..7fd169e 100644 (file)
@@ -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)
index 9ef47a1..bd9078a 100644 (file)
@@ -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)
index fee997c..cbcc15e 100644 (file)
@@ -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]