Video clean ups and bug fixes from 800

This commit is contained in:
Tim Bentley 2010-04-29 21:56:27 +01:00
parent 39a4593bd3
commit 4e6c56c430
7 changed files with 74 additions and 99 deletions

View File

@ -49,7 +49,6 @@ class ItemCapabilities(object):
RequiresMedia = 4 RequiresMedia = 4
AllowsLoop = 5 AllowsLoop = 5
class ServiceItem(object): class ServiceItem(object):
""" """
The service item is a base class for the plugins to use to interact with The service item is a base class for the plugins to use to interact with

View File

@ -23,6 +23,16 @@
# Temple Place, Suite 330, Boston, MA 02111-1307 USA # # 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 slidecontroller import HideMode
from servicenoteform import ServiceNoteForm from servicenoteform import ServiceNoteForm
from serviceitemeditform import ServiceItemEditForm from serviceitemeditform import ServiceItemEditForm

View File

@ -131,16 +131,10 @@ class MainDisplay(DisplayWidget):
self.displayBlank = False self.displayBlank = False
self.blankFrame = None self.blankFrame = None
self.frame = None self.frame = None
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'maindisplay_blank'), self.blankDisplay)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'maindisplay_hide'), self.hideDisplay) QtCore.SIGNAL(u'maindisplay_hide'), self.hideDisplay)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'maindisplay_show'), self.showDisplay) 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): def setup(self):
""" """
@ -203,67 +197,26 @@ class MainDisplay(DisplayWidget):
else: else:
self.showFullScreen() self.showFullScreen()
def blankDisplay(self):#, blankType=HideMode.Blank, blanked=True): def hideDisplay(self, mode=HideMode.Screen):
log.debug(u'Blank main Display ')
""" """
Hide the display by making all layers transparent Hide the display by making all layers transparent
Store the images so they can be replaced when required 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.storeImage = QtGui.QPixmap(self.display_image.pixmap())
self.storeText = QtGui.QPixmap(self.display_text.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_alert.setPixmap(self.transparent)
self.display_text.setPixmap(self.transparent) self.display_text.setPixmap(self.transparent)
self.moveToTop() if mode == HideMode.Screen:
# if blanked: self.display_image.setPixmap(self.transparent)
# self.displayBlank = True elif mode == HideMode.Blank:
# 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:
self.display_image.setPixmap(QtGui.QPixmap.fromImage(self.blankFrame)) self.display_image.setPixmap(QtGui.QPixmap.fromImage(self.blankFrame))
self.display_alert.setPixmap(self.transparent) else:
self.display_text.setPixmap(self.transparent) 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() self.moveToTop()
def moveToTop(self): def moveToTop(self):
@ -370,6 +323,7 @@ class VideoDisplay(Phonon.VideoWidget):
self.setWindowTitle(u'OpenLP Video Display') self.setWindowTitle(u'OpenLP Video Display')
self.parent = parent self.parent = parent
self.screens = screens self.screens = screens
self.hidden = False
self.mediaObject = Phonon.MediaObject() self.mediaObject = Phonon.MediaObject()
self.setAspectRatio(aspect) self.setAspectRatio(aspect)
self.audioObject = Phonon.AudioOutput(Phonon.VideoCategory) self.audioObject = Phonon.AudioOutput(Phonon.VideoCategory)
@ -377,6 +331,10 @@ class VideoDisplay(Phonon.VideoWidget):
Phonon.createPath(self.mediaObject, self.audioObject) Phonon.createPath(self.mediaObject, self.audioObject)
self.setWindowFlags(QtCore.Qt.WindowStaysOnBottomHint \ self.setWindowFlags(QtCore.Qt.WindowStaysOnBottomHint \
| QtCore.Qt.FramelessWindowHint | QtCore.Qt.Dialog) | 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.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'videodisplay_start'), self.onMediaQueue) QtCore.SIGNAL(u'videodisplay_start'), self.onMediaQueue)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
@ -421,10 +379,15 @@ class VideoDisplay(Phonon.VideoWidget):
file = os.path.join(message[0].get_frame_path(), file = os.path.join(message[0].get_frame_path(),
message[0].get_frame_title()) message[0].get_frame_title())
source = self.mediaObject.setCurrentSource(Phonon.MediaSource(file)) source = self.mediaObject.setCurrentSource(Phonon.MediaSource(file))
self.onMediaPlay() self._play()
def onMediaPlay(self): 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.mediaObject.play()
self.setVisible(True) self.setVisible(True)
self.showFullScreen() self.showFullScreen()
@ -444,3 +407,13 @@ class VideoDisplay(Phonon.VideoWidget):
self.mediaObject.clearQueue() self.mediaObject.clearQueue()
self.setVisible(False) 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()

View File

@ -30,18 +30,9 @@ import os
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from PyQt4.phonon import Phonon from PyQt4.phonon import Phonon
from openlp.core.lib import ItemCapabilities from openlp.core.ui import HideMode
from openlp.core.lib import OpenLPToolbar, Receiver, resize_image, \
class HideMode(object): ItemCapabilities
"""
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
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -599,7 +590,7 @@ class SlideController(QtGui.QWidget):
self.generalSettingsSection + u'/screen blank', self.generalSettingsSection + u'/screen blank',
QtCore.QVariant(checked)) QtCore.QVariant(checked))
if checked: if checked:
Receiver.send_message(u'maindisplay_blank') Receiver.send_message(u'maindisplay_hide', HideMode.Blank)
else: else:
Receiver.send_message(u'maindisplay_show') Receiver.send_message(u'maindisplay_show')
@ -611,7 +602,7 @@ class SlideController(QtGui.QWidget):
self.blankButton.setChecked(False) self.blankButton.setChecked(False)
self.hideButton.setChecked(False) self.hideButton.setChecked(False)
if checked: if checked:
Receiver.send_message(u'maindisplay_hide_theme') Receiver.send_message(u'maindisplay_hide', HideMode.Theme)
else: else:
Receiver.send_message(u'maindisplay_show') Receiver.send_message(u'maindisplay_show')
@ -623,30 +614,10 @@ class SlideController(QtGui.QWidget):
self.blankButton.setChecked(False) self.blankButton.setChecked(False)
self.themeButton.setChecked(False) self.themeButton.setChecked(False)
if checked: if checked:
Receiver.send_message(u'maindisplay_hide') Receiver.send_message(u'maindisplay_hide', HideMode.Screen)
else: else:
Receiver.send_message(u'maindisplay_show') 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): def onSlideSelected(self):
""" """
Generate the preview when you click on a slide. Generate the preview when you click on a slide.
@ -787,6 +758,9 @@ class SlideController(QtGui.QWidget):
self.onSlideSelectedNext() self.onSlideSelectedNext()
def onEditSong(self): def onEditSong(self):
"""
From the preview display requires the service Item to be editied
"""
self.songEdit = True self.songEdit = True
Receiver.send_message(u'%s_edit' % self.serviceItem.name.lower(), Receiver.send_message(u'%s_edit' % self.serviceItem.name.lower(),
u'P:%s' % self.serviceItem.editId) u'P:%s' % self.serviceItem.editId)
@ -801,9 +775,14 @@ class SlideController(QtGui.QWidget):
self.serviceItem, row) self.serviceItem, row)
def onMediaStart(self, item): def onMediaStart(self, item):
"""
Respond to the arrival of a media service item
"""
log.debug(u'SlideController onMediaStart')
if self.isLive: if self.isLive:
Receiver.send_message(u'videodisplay_start', Receiver.send_message(u'videodisplay_start',
[item, self.blankButton.isChecked()]) [item, self.blankButton.isChecked()])
Receiver.send_message(u'maindisplay_hide', HideMode.Screen)
else: else:
self.mediaObject.stop() self.mediaObject.stop()
self.mediaObject.clearQueue() self.mediaObject.clearQueue()
@ -814,12 +793,20 @@ class SlideController(QtGui.QWidget):
self.onMediaPlay() self.onMediaPlay()
def onMediaPause(self): def onMediaPause(self):
"""
Respond to the Pause from the media Toolbar
"""
log.debug(u'SlideController onMediaPause')
if self.isLive: if self.isLive:
Receiver.send_message(u'videodisplay_pause') Receiver.send_message(u'videodisplay_pause')
else: else:
self.mediaObject.pause() self.mediaObject.pause()
def onMediaPlay(self): def onMediaPlay(self):
"""
Respond to the Play from the media Toolbar
"""
log.debug(u'SlideController onMediaPlay')
if self.isLive: if self.isLive:
Receiver.send_message(u'videodisplay_play') Receiver.send_message(u'videodisplay_play')
else: else:
@ -828,6 +815,10 @@ class SlideController(QtGui.QWidget):
self.mediaObject.play() self.mediaObject.play()
def onMediaStop(self): def onMediaStop(self):
"""
Respond to the Stop from the media Toolbar
"""
log.debug(u'SlideController onMediaStop')
if self.isLive: if self.isLive:
Receiver.send_message(u'videodisplay_stop') Receiver.send_message(u'videodisplay_stop')
else: else:

View File

@ -122,7 +122,7 @@ class ImageMediaItem(MediaManagerItem):
#if not present do not worry #if not present do not worry
pass pass
self.ListView.takeItem(item.row()) self.ListView.takeItem(item.row())
SettingsManager.set_list( SettingsManager.set_list(self.SettingsSection,\
self.SettingsSection, self.getFileList()) self.SettingsSection, self.getFileList())
def loadList(self, list): def loadList(self, list):

View File

@ -97,7 +97,8 @@ class MediaMediaItem(MediaManagerItem):
if item: if item:
row = self.ListView.row(item) row = self.ListView.row(item)
self.ListView.takeItem(row) self.ListView.takeItem(row)
SettingsManager.set_list(self.SettingsSection, self.getFileList()) SettingsManager.set_list(self.SettingsSection, \
self.SettingsSection, self.getFileList())
def loadList(self, list): def loadList(self, list):
for file in list: for file in list:

View File

@ -167,7 +167,8 @@ class PresentationMediaItem(MediaManagerItem):
if item: if item:
row = self.ListView.row(item) row = self.ListView.row(item)
self.ListView.takeItem(row) 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()) filepath = unicode((item.data(QtCore.Qt.UserRole)).toString())
#not sure of this has errors #not sure of this has errors
#John please can you look at . #John please can you look at .