"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",
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
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)
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
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)
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,
)
self._window.set_title(self._node.get_parent().title)
- def _get_background(self):
+ def _get_background(self, orientation):
raise NotImplementedError()
def show(self):
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
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)
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)
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)
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)
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
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
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
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)
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)
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)
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)
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)
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]