diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 204d076e2..23ee6507e 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -80,6 +80,8 @@ class Display(QtGui.QGraphicsView): if self.isLive and log.getEffectiveLevel() == logging.DEBUG: self.webView.settings().setAttribute( QtWebKit.QWebSettings.DeveloperExtrasEnabled, True) + QtCore.QObject.connect(self.webView, + QtCore.SIGNAL(u'loadFinished(bool)'), self.isWebLoaded) self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.frame.setScrollBarPolicy(QtCore.Qt.Vertical, @@ -91,6 +93,13 @@ class Display(QtGui.QGraphicsView): self.webView.setGeometry(0, 0, self.width(), self.height()) + def isWebLoaded(self): + """ + Called by webView event to show display is fully loaded + """ + log.debug(u'Webloaded') + self.webLoaded = True + class MainDisplay(Display): """ diff --git a/openlp/core/ui/media/mediacontroller.py b/openlp/core/ui/media/mediacontroller.py index 0db17468c..86d9ba995 100644 --- a/openlp/core/ui/media/mediacontroller.py +++ b/openlp/core/ui/media/mediacontroller.py @@ -87,9 +87,14 @@ class MediaController(object): def set_active_players(self): playerSettings = str(QtCore.QSettings().value(u'media/players', QtCore.QVariant(u'webkit')).toString()) + if len(playerSettings) == 0: + playerSettings = u'webkit' savedPlayers = playerSettings.split(u',') - for player in savedPlayers: - self.mediaPlayers[player].isActive = True + for player in self.mediaPlayers.keys(): + if player in savedPlayers: + self.mediaPlayers[player].isActive = True + else: + self.mediaPlayers[player].isActive = False def register_controllers(self, controller): """ @@ -255,6 +260,8 @@ class MediaController(object): """ # clean up possible running old media files self.finalise() + # update player status + self.set_active_players() display.hasAudio = True if not self.withLivePreview and \ display == self.parent.liveController.previewDisplay: @@ -395,11 +402,11 @@ class MediaController(object): if not self.curDisplayMediaPlayer[display].play(display): return False if status: + display.frame.evaluateJavaScript(u'show_blank("desktop");') + self.curDisplayMediaPlayer[display].set_visible(display, True) if controller.isLive: if controller.hideMenu.defaultAction().isChecked(): controller.hideMenu.defaultAction().trigger() - self.curDisplayMediaPlayer[display].set_visible(display, True) - display.frame.evaluateJavaScript(u'show_blank("desktop");') # Start Timer for ui updates if not self.timer.isActive(): self.timer.start() diff --git a/openlp/core/ui/media/webkitplayer.py b/openlp/core/ui/media/webkitplayer.py index fc65113d7..8bacca4b8 100644 --- a/openlp/core/ui/media/webkitplayer.py +++ b/openlp/core/ui/media/webkitplayer.py @@ -79,8 +79,8 @@ VIDEO_JS = u""" } switch(state){ case 'init': - vid.src = path; - vid2.src = path; + vid.src = 'file:///' + path; + vid2.src = 'file:///' + path; if(loop == null) loop = false; vid.looping = loop; vid2.looping = loop; @@ -92,7 +92,6 @@ VIDEO_JS = u""" break; case 'play': vid.play(); - //vid.style.visibility = 'visible'; if(vid.looping){ video_timer = setInterval( function() { @@ -109,6 +108,7 @@ VIDEO_JS = u""" break; case 'stop': show_video('pause'); + vid.currentTime = 0; break; case 'poll': if(vid.ended||vid.currentTime+0.2>vid.duration) @@ -313,7 +313,7 @@ class WebkitPlayer(MediaPlayer): js = u'show_flash("load","%s");' % \ (path.replace(u'\\', u'\\\\')) else: - js = u'show_video("init", "file:///%s", %s, %s);' % \ + js = u'show_video("init", "%s", %s, %s);' % \ (path.replace(u'\\', u'\\\\'), str(vol), loop) display.frame.evaluateJavaScript(js) return True @@ -351,6 +351,7 @@ class WebkitPlayer(MediaPlayer): display.frame.evaluateJavaScript(u'show_flash("stop");') else: display.frame.evaluateJavaScript(u'show_video("stop");') + controller.seekSlider.setSliderPosition(0) self.state = MediaState.Stopped def volume(self, display, vol): diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index b66f8d897..e701c3a82 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -94,6 +94,10 @@ class SlideController(Controller): self.songEditList = [ u'Edit Song', ] + self.nextPreviousList = [ + u'Previous Slide', + u'Next Slide' + ] self.timer_id = 0 self.songEdit = False self.selectedRow = 0 @@ -157,14 +161,14 @@ class SlideController(Controller): self.toolbar.sizePolicy().hasHeightForWidth()) self.toolbar.setSizePolicy(sizeToolbarPolicy) self.previousItem = self.toolbar.addToolbarButton( - translate('OpenLP.SlideController', 'Previous Slide'), + u'Previous Slide', u':/slides/slide_previous.png', translate('OpenLP.SlideController', 'Move to previous.'), self.onSlideSelectedPrevious, shortcuts=[QtCore.Qt.Key_Up, QtCore.Qt.Key_PageUp], context=QtCore.Qt.WidgetWithChildrenShortcut) self.nextItem = self.toolbar.addToolbarButton( - translate('OpenLP.SlideController', 'Next Slide'), + u'Next Slide', u':/slides/slide_next.png', translate('OpenLP.SlideController', 'Move to next.'), self.onSlideSelectedNext, @@ -685,13 +689,11 @@ class SlideController(Controller): self.toolbar.makeWidgetsVisible(self.loopList) if item.is_media(): self.mediabar.setVisible(True) - self.previousItem.setVisible(False) - self.nextItem.setVisible(False) + self.toolbar.makeWidgetsInvisible(self.nextPreviousList) else: # Work-around for OS X, hide and then show the toolbar # See bug #791050 - self.previousItem.setVisible(True) - self.nextItem.setVisible(True) + self.toolbar.makeWidgetsVisible(self.nextPreviousList) self.toolbar.show() def enablePreviewToolBar(self, item): @@ -707,13 +709,11 @@ class SlideController(Controller): self.toolbar.makeWidgetsVisible(self.songEditList) elif item.is_media(): self.mediabar.setVisible(True) - self.previousItem.setVisible(False) - self.nextItem.setVisible(False) + self.toolbar.makeWidgetsInvisible(self.nextPreviousList) if not item.is_media(): # Work-around for OS X, hide and then show the toolbar # See bug #791050 - self.previousItem.setVisible(True) - self.nextItem.setVisible(True) + self.toolbar.makeWidgetsVisible(self.nextPreviousList) self.toolbar.show() def refreshServiceItem(self): diff --git a/openlp/plugins/media/lib/mediatab.py b/openlp/plugins/media/lib/mediatab.py index c390ca82f..2b2485dea 100644 --- a/openlp/plugins/media/lib/mediatab.py +++ b/openlp/plugins/media/lib/mediatab.py @@ -28,7 +28,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import SettingsTab, translate, Receiver -from openlp.core.lib.ui import UiStrings +from openlp.core.lib.ui import UiStrings, critical_error_message_box class MediaTab(SettingsTab): """ @@ -145,6 +145,11 @@ class MediaTab(SettingsTab): self.playerOrderlistWidget.clear() for player in self.usedPlayers: if player in self.PlayerCheckBoxes.keys(): + if len(self.usedPlayers) == 1: + # at least one media player have to stay active + self.PlayerCheckBoxes[u'%s' % player].setEnabled(False) + else: + self.PlayerCheckBoxes[u'%s' % player].setEnabled(True) self.playerOrderlistWidget.addItem(player) def onOrderingUpButtonPressed(self): @@ -199,4 +204,5 @@ class MediaTab(SettingsTab): if override_changed: Receiver.send_message(u'mediaitem_media_rebuild') if player_string_changed: + Receiver.send_message(u'mediaitem_media_rebuild') Receiver.send_message(u'config_screen_changed') diff --git a/scripts/windows-builder.py b/scripts/windows-builder.py index 9076971cb..dcfc44c7f 100644 --- a/scripts/windows-builder.py +++ b/scripts/windows-builder.py @@ -233,6 +233,19 @@ def copy_plugins(): copy(os.path.join(root, filename), os.path.join(dest_path, filename)) +def copy_media_player(): + print u'Copying media player...' + source = os.path.join(source_path, u'core', u'ui', u'media') + dest = os.path.join(dist_path, u'core', u'ui', u'media') + for root, dirs, files in os.walk(source): + for filename in files: + if not filename.endswith(u'.pyc'): + dest_path = os.path.join(dest, root[len(source)+1:]) + if not os.path.exists(dest_path): + os.makedirs(dest_path) + copy(os.path.join(root, filename), + os.path.join(dest_path, filename)) + def copy_windows_files(): print u'Copying extra files for Windows...' copy(os.path.join(winres_path, u'OpenLP.ico'), @@ -355,6 +368,7 @@ def main(): run_pyinstaller() write_version_file() copy_plugins() + copy_media_player() if os.path.exists(manual_path): run_sphinx() run_htmlhelp()