From 4e6c56c43019f2e49bb1d26a2259daedb3aa6e05 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Thu, 29 Apr 2010 21:56:27 +0100 Subject: [PATCH] Video clean ups and bug fixes from 800 --- openlp/core/lib/serviceitem.py | 1 - openlp/core/ui/__init__.py | 10 ++ openlp/core/ui/maindisplay.py | 93 +++++++------------ openlp/core/ui/slidecontroller.py | 61 ++++++------ openlp/plugins/images/lib/mediaitem.py | 2 +- openlp/plugins/media/lib/mediaitem.py | 3 +- openlp/plugins/presentations/lib/mediaitem.py | 3 +- 7 files changed, 74 insertions(+), 99 deletions(-) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 4374f98aa..25f08717f 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -49,7 +49,6 @@ class ItemCapabilities(object): RequiresMedia = 4 AllowsLoop = 5 - class ServiceItem(object): """ The service item is a base class for the plugins to use to interact with diff --git a/openlp/core/ui/__init__.py b/openlp/core/ui/__init__.py index 0c1ec731a..76b84503e 100644 --- a/openlp/core/ui/__init__.py +++ b/openlp/core/ui/__init__.py @@ -23,6 +23,16 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### +class HideMode(object): + """ + This is basically an enumeration class which specifies the mode of a Bible. + Mode refers to whether or not a Bible in OpenLP is a full Bible or needs to + be downloaded from the Internet on an as-needed basis. + """ + Blank = 1 + Theme = 2 + Screen = 3 + from slidecontroller import HideMode from servicenoteform import ServiceNoteForm from serviceitemeditform import ServiceItemEditForm diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index f3bad6bb1..321e28e1b 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -131,16 +131,10 @@ class MainDisplay(DisplayWidget): self.displayBlank = False self.blankFrame = None self.frame = None - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'maindisplay_blank'), self.blankDisplay) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'maindisplay_hide'), self.hideDisplay) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'maindisplay_show'), self.showDisplay) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'maindisplay_hide_theme'), self.hideThemeDisplay) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'videodisplay_start'), self.hideDisplay) def setup(self): """ @@ -203,67 +197,26 @@ class MainDisplay(DisplayWidget): else: self.showFullScreen() - def blankDisplay(self):#, blankType=HideMode.Blank, blanked=True): - log.debug(u'Blank main Display ') + def hideDisplay(self, mode=HideMode.Screen): """ Hide the display by making all layers transparent Store the images so they can be replaced when required """ + log.debug(u'hideDisplay mode = %d', mode) self.storeImage = QtGui.QPixmap(self.display_image.pixmap()) self.storeText = QtGui.QPixmap(self.display_text.pixmap()) - self.display_image.setPixmap(QtGui.QPixmap.fromImage(self.blankFrame)) self.display_alert.setPixmap(self.transparent) self.display_text.setPixmap(self.transparent) - self.moveToTop() -# if blanked: -# self.displayBlank = True -# if blankType == HideMode.Blank: -# self.display_text.setPixmap( -# QtGui.QPixmap.fromImage(self.blankFrame)) -# elif blankType == HideMode.Theme: -# theme = self.parent.RenderManager.renderer.bg_frame -# if not theme: -# theme = self.blankFrame -# self.display_text.setPixmap(QtGui.QPixmap.fromImage(theme)) -# self.waitingFrame = None -# self.waitingFrameTrans = False -# else: -# self.displayBlank = False -# if self.waitingFrame: -# self.frameView(self.waitingFrame, self.waitingFrameTrans) -# elif self.display_frame: -# self.frameView(self.display_frame) - - def hideDisplay(self): - """ - Hide the display by making all layers transparent - Store the images so they can be replaced when required - """ - log.debug(u'hideDisplay') - self.storeImage = QtGui.QPixmap(self.display_image.pixmap()) - self.storeText = QtGui.QPixmap(self.display_text.pixmap()) - self.display_image.setPixmap(self.transparent) - self.display_alert.setPixmap(self.transparent) - self.display_text.setPixmap(self.transparent) - self.moveToTop() - - def hideThemeDisplay(self): - """ - Hide the display by making all layers transparent - Add the theme background to the image layer unless it has - not been generated in which case make it black. - Store the images so they can be replaced when required - """ - log.debug(u'hideDisplay') - self.storeImage = QtGui.QPixmap(self.display_image.pixmap()) - self.storeText = QtGui.QPixmap(self.display_text.pixmap()) - if self.parent.renderManager.renderer.bg_frame: - self.display_image.setPixmap(QtGui.QPixmap.fromImage(\ - self.parent.renderManager.renderer.bg_frame)) - else: + if mode == HideMode.Screen: + self.display_image.setPixmap(self.transparent) + elif mode == HideMode.Blank: self.display_image.setPixmap(QtGui.QPixmap.fromImage(self.blankFrame)) - self.display_alert.setPixmap(self.transparent) - self.display_text.setPixmap(self.transparent) + else: + if self.parent.renderManager.renderer.bg_frame: + self.display_image.setPixmap(QtGui.QPixmap.fromImage(\ + self.parent.renderManager.renderer.bg_frame)) + else: + self.display_image.setPixmap(QtGui.QPixmap.fromImage(self.blankFrame)) self.moveToTop() def moveToTop(self): @@ -370,6 +323,7 @@ class VideoDisplay(Phonon.VideoWidget): self.setWindowTitle(u'OpenLP Video Display') self.parent = parent self.screens = screens + self.hidden = False self.mediaObject = Phonon.MediaObject() self.setAspectRatio(aspect) self.audioObject = Phonon.AudioOutput(Phonon.VideoCategory) @@ -377,6 +331,10 @@ class VideoDisplay(Phonon.VideoWidget): Phonon.createPath(self.mediaObject, self.audioObject) self.setWindowFlags(QtCore.Qt.WindowStaysOnBottomHint \ | QtCore.Qt.FramelessWindowHint | QtCore.Qt.Dialog) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'maindisplay_hide'), self.mediaHide) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'maindisplay_show'), self.mediaShow) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'videodisplay_start'), self.onMediaQueue) QtCore.QObject.connect(Receiver.get_receiver(), @@ -421,10 +379,15 @@ class VideoDisplay(Phonon.VideoWidget): file = os.path.join(message[0].get_frame_path(), message[0].get_frame_title()) source = self.mediaObject.setCurrentSource(Phonon.MediaSource(file)) - self.onMediaPlay() + self._play() def onMediaPlay(self): - log.debug(u'VideoDisplay Play the new media, Live ') + if not self.hidden: + log.debug(u'VideoDisplay Play the new media, Live ') + self._play() + + def _play(self): + log.debug(u'VideoDisplay _play called') self.mediaObject.play() self.setVisible(True) self.showFullScreen() @@ -444,3 +407,13 @@ class VideoDisplay(Phonon.VideoWidget): self.mediaObject.clearQueue() self.setVisible(False) + def mediaHide(self): + self.mediaObject.pause() + self.hidden = True + self.setVisible(False) + + def mediaShow(self): + if self.hidden: + self.hidden = False + self._play() + diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index c5326aaa8..32b301111 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -30,18 +30,9 @@ import os from PyQt4 import QtCore, QtGui from PyQt4.phonon import Phonon -from openlp.core.lib import ItemCapabilities - -class HideMode(object): - """ - This is basically an enumeration class which specifies the mode of a Bible. - Mode refers to whether or not a Bible in OpenLP is a full Bible or needs to - be downloaded from the Internet on an as-needed basis. - """ - Blank = 1 - Theme = 2 - -from openlp.core.lib import OpenLPToolbar, Receiver, resize_image +from openlp.core.ui import HideMode +from openlp.core.lib import OpenLPToolbar, Receiver, resize_image, \ +ItemCapabilities log = logging.getLogger(__name__) @@ -599,7 +590,7 @@ class SlideController(QtGui.QWidget): self.generalSettingsSection + u'/screen blank', QtCore.QVariant(checked)) if checked: - Receiver.send_message(u'maindisplay_blank') + Receiver.send_message(u'maindisplay_hide', HideMode.Blank) else: Receiver.send_message(u'maindisplay_show') @@ -611,7 +602,7 @@ class SlideController(QtGui.QWidget): self.blankButton.setChecked(False) self.hideButton.setChecked(False) if checked: - Receiver.send_message(u'maindisplay_hide_theme') + Receiver.send_message(u'maindisplay_hide', HideMode.Theme) else: Receiver.send_message(u'maindisplay_show') @@ -623,30 +614,10 @@ class SlideController(QtGui.QWidget): self.blankButton.setChecked(False) self.themeButton.setChecked(False) if checked: - Receiver.send_message(u'maindisplay_hide') + Receiver.send_message(u'maindisplay_hide', HideMode.Screen) else: Receiver.send_message(u'maindisplay_show') - def blankScreen(self, checked): - """ - Blank the display screen. - """ - self.hideButton.setChecked(False) - self.themeButton.setChecked(False) -# if self.serviceItem is not None: -# if checked: -# Receiver.send_message( -# u'%s_blank' % self.serviceItem.name.lower(), -# [self.serviceItem, self.isLive]) -# else: -# Receiver.send_message(u'%s_unblank' -# % self.serviceItem.name.lower(), -# [self.serviceItem, self.isLive]) - if checked: - Receiver.send_message(u'maindisplay_blank') - else: - Receiver.send_message(u'maindisplay_show4') - def onSlideSelected(self): """ Generate the preview when you click on a slide. @@ -787,6 +758,9 @@ class SlideController(QtGui.QWidget): self.onSlideSelectedNext() def onEditSong(self): + """ + From the preview display requires the service Item to be editied + """ self.songEdit = True Receiver.send_message(u'%s_edit' % self.serviceItem.name.lower(), u'P:%s' % self.serviceItem.editId) @@ -801,9 +775,14 @@ class SlideController(QtGui.QWidget): self.serviceItem, row) def onMediaStart(self, item): + """ + Respond to the arrival of a media service item + """ + log.debug(u'SlideController onMediaStart') if self.isLive: Receiver.send_message(u'videodisplay_start', [item, self.blankButton.isChecked()]) + Receiver.send_message(u'maindisplay_hide', HideMode.Screen) else: self.mediaObject.stop() self.mediaObject.clearQueue() @@ -814,12 +793,20 @@ class SlideController(QtGui.QWidget): self.onMediaPlay() def onMediaPause(self): + """ + Respond to the Pause from the media Toolbar + """ + log.debug(u'SlideController onMediaPause') if self.isLive: Receiver.send_message(u'videodisplay_pause') else: self.mediaObject.pause() def onMediaPlay(self): + """ + Respond to the Play from the media Toolbar + """ + log.debug(u'SlideController onMediaPlay') if self.isLive: Receiver.send_message(u'videodisplay_play') else: @@ -828,6 +815,10 @@ class SlideController(QtGui.QWidget): self.mediaObject.play() def onMediaStop(self): + """ + Respond to the Stop from the media Toolbar + """ + log.debug(u'SlideController onMediaStop') if self.isLive: Receiver.send_message(u'videodisplay_stop') else: diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index e3a3084c4..0907a8222 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -122,7 +122,7 @@ class ImageMediaItem(MediaManagerItem): #if not present do not worry pass self.ListView.takeItem(item.row()) - SettingsManager.set_list( + SettingsManager.set_list(self.SettingsSection,\ self.SettingsSection, self.getFileList()) def loadList(self, list): diff --git a/openlp/plugins/media/lib/mediaitem.py b/openlp/plugins/media/lib/mediaitem.py index f594fe54c..fc7895fb1 100644 --- a/openlp/plugins/media/lib/mediaitem.py +++ b/openlp/plugins/media/lib/mediaitem.py @@ -97,7 +97,8 @@ class MediaMediaItem(MediaManagerItem): if item: row = self.ListView.row(item) self.ListView.takeItem(row) - SettingsManager.set_list(self.SettingsSection, self.getFileList()) + SettingsManager.set_list(self.SettingsSection, \ + self.SettingsSection, self.getFileList()) def loadList(self, list): for file in list: diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index f547f0633..3b91b3b94 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -167,7 +167,8 @@ class PresentationMediaItem(MediaManagerItem): if item: row = self.ListView.row(item) self.ListView.takeItem(row) - SettingsManager.set_list(self.SettingsSection, self.getFileList()) + SettingsManager.set_list(self.SettingsSection,\ + self.SettingsSection, self.getFileList()) filepath = unicode((item.data(QtCore.Qt.UserRole)).toString()) #not sure of this has errors #John please can you look at .