forked from openlp/openlp
Add media Preview code
bzr-revno: 666
This commit is contained in:
commit
0170d09c21
@ -107,7 +107,6 @@ class MainDisplay(DisplayWidget):
|
|||||||
self.blankFrame = None
|
self.blankFrame = None
|
||||||
self.frame = None
|
self.frame = None
|
||||||
self.alertactive = False
|
self.alertactive = False
|
||||||
self.alertTab = None
|
|
||||||
self.timer_id = 0
|
self.timer_id = 0
|
||||||
self.firstTime = True
|
self.firstTime = True
|
||||||
self.mediaLoaded = False
|
self.mediaLoaded = False
|
||||||
@ -130,7 +129,6 @@ class MainDisplay(DisplayWidget):
|
|||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'media_stop'), self.onMediaStop)
|
QtCore.SIGNAL(u'media_stop'), self.onMediaStop)
|
||||||
|
|
||||||
|
|
||||||
def setup(self, screenNumber):
|
def setup(self, screenNumber):
|
||||||
"""
|
"""
|
||||||
Sets up the screen on a particular screen.
|
Sets up the screen on a particular screen.
|
||||||
@ -264,14 +262,15 @@ class MainDisplay(DisplayWidget):
|
|||||||
self.firstTime = False
|
self.firstTime = False
|
||||||
else:
|
else:
|
||||||
self.mediaObject.enqueue(Phonon.MediaSource(file))
|
self.mediaObject.enqueue(Phonon.MediaSource(file))
|
||||||
self.onMediaPlay()
|
self.onMediaPlay(message[3])
|
||||||
|
|
||||||
def onMediaPlay(self):
|
def onMediaPlay(self, live=True):
|
||||||
log.debug(u'Play the new media')
|
log.debug(u'Play the new media, Live %s', live)
|
||||||
if not self.mediaLoaded and not self.displayBlank:
|
if not self.mediaLoaded and not self.displayBlank:
|
||||||
self.blankDisplay()
|
self.blankDisplay()
|
||||||
self.firstTime = True
|
self.firstTime = True
|
||||||
self.mediaLoaded = True
|
self.mediaLoaded = True
|
||||||
|
if live:
|
||||||
self.display.hide()
|
self.display.hide()
|
||||||
self.video.setFullScreen(True)
|
self.video.setFullScreen(True)
|
||||||
self.mediaObject.play()
|
self.mediaObject.play()
|
||||||
|
@ -536,6 +536,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
|||||||
self.settingsForm.postSetUp()
|
self.settingsForm.postSetUp()
|
||||||
|
|
||||||
def versionCheck(self):
|
def versionCheck(self):
|
||||||
|
"""
|
||||||
|
Checks the version of the Application called from openlp.pyw
|
||||||
|
"""
|
||||||
applicationVersion = self.applicationVersion[u'Full']
|
applicationVersion = self.applicationVersion[u'Full']
|
||||||
version = check_latest_version(self.generalConfig, applicationVersion)
|
version = check_latest_version(self.generalConfig, applicationVersion)
|
||||||
if applicationVersion != version:
|
if applicationVersion != version:
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# OpenLP - Open Source Lyrics Projection #
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
# --------------------------------------------------------------------------- #
|
# --------------------------------------------------------------------------- #
|
||||||
@ -24,8 +23,11 @@
|
|||||||
|
|
||||||
import logging
|
import logging
|
||||||
import time
|
import time
|
||||||
|
import os
|
||||||
|
|
||||||
from PyQt4 import QtCore, QtGui
|
from PyQt4 import QtCore, QtGui
|
||||||
|
from PyQt4.phonon import Phonon
|
||||||
|
|
||||||
from openlp.core.lib import OpenLPToolbar, Receiver, ServiceItemType, \
|
from openlp.core.lib import OpenLPToolbar, Receiver, ServiceItemType, \
|
||||||
str_to_bool, PluginConfig
|
str_to_bool, PluginConfig
|
||||||
|
|
||||||
@ -80,20 +82,9 @@ class SlideController(QtGui.QWidget):
|
|||||||
u'Loop Separator',
|
u'Loop Separator',
|
||||||
u'Image SpinBox'
|
u'Image SpinBox'
|
||||||
]
|
]
|
||||||
self.media_list = [
|
|
||||||
u'Media Start',
|
|
||||||
u'Media Stop',
|
|
||||||
u'Media Pause'
|
|
||||||
]
|
|
||||||
self.song_edit_list = [
|
self.song_edit_list = [
|
||||||
u'Edit Song',
|
u'Edit Song',
|
||||||
]
|
]
|
||||||
self.song_list = [
|
|
||||||
u'First Slide',
|
|
||||||
u'Previous Slide',
|
|
||||||
u'Next Slide',
|
|
||||||
u'Last Slide',
|
|
||||||
]
|
|
||||||
self.timer_id = 0
|
self.timer_id = 0
|
||||||
self.commandItem = None
|
self.commandItem = None
|
||||||
self.songEdit = False
|
self.songEdit = False
|
||||||
@ -109,10 +100,12 @@ class SlideController(QtGui.QWidget):
|
|||||||
self.TypeLabel.setText(u'<strong>%s</strong>' %
|
self.TypeLabel.setText(u'<strong>%s</strong>' %
|
||||||
self.trUtf8(u'Live'))
|
self.trUtf8(u'Live'))
|
||||||
self.split = 1
|
self.split = 1
|
||||||
|
prefix = u'live_slidecontroller'
|
||||||
else:
|
else:
|
||||||
self.TypeLabel.setText(u'<strong>%s</strong>' %
|
self.TypeLabel.setText(u'<strong>%s</strong>' %
|
||||||
self.trUtf8(u'Preview'))
|
self.trUtf8(u'Preview'))
|
||||||
self.split = 0
|
self.split = 0
|
||||||
|
prefix = u'preview_slidecontroller'
|
||||||
self.TypeLabel.setAlignment(QtCore.Qt.AlignCenter)
|
self.TypeLabel.setAlignment(QtCore.Qt.AlignCenter)
|
||||||
self.PanelLayout.addWidget(self.TypeLabel)
|
self.PanelLayout.addWidget(self.TypeLabel)
|
||||||
# Splitter
|
# Splitter
|
||||||
@ -190,16 +183,24 @@ class SlideController(QtGui.QWidget):
|
|||||||
u'Image SpinBox', self.DelaySpinBox)
|
u'Image SpinBox', self.DelaySpinBox)
|
||||||
self.DelaySpinBox.setSuffix(self.trUtf8(u's'))
|
self.DelaySpinBox.setSuffix(self.trUtf8(u's'))
|
||||||
self.DelaySpinBox.setToolTip(self.trUtf8(u'Delay between slides in seconds'))
|
self.DelaySpinBox.setToolTip(self.trUtf8(u'Delay between slides in seconds'))
|
||||||
self.Toolbar.addToolbarButton(
|
self.ControllerLayout.addWidget(self.Toolbar)
|
||||||
|
#Build a Media ToolBar
|
||||||
|
self.Mediabar = OpenLPToolbar(self)
|
||||||
|
self.Mediabar.addToolbarButton(
|
||||||
u'Media Start', u':/slides/media_playback_start.png',
|
u'Media Start', u':/slides/media_playback_start.png',
|
||||||
self.trUtf8(u'Start playing media'), self.onMediaPlay)
|
self.trUtf8(u'Start playing media'), self.onMediaPlay)
|
||||||
self.Toolbar.addToolbarButton(
|
self.Mediabar.addToolbarButton(
|
||||||
u'Media Pause', u':/slides/media_playback_pause.png',
|
u'Media Pause', u':/slides/media_playback_pause.png',
|
||||||
self.trUtf8(u'Start playing media'), self.onMediaPause)
|
self.trUtf8(u'Start playing media'), self.onMediaPause)
|
||||||
self.Toolbar.addToolbarButton(
|
self.Mediabar.addToolbarButton(
|
||||||
u'Media Stop', u':/slides/media_playback_stop.png',
|
u'Media Stop', u':/slides/media_playback_stop.png',
|
||||||
self.trUtf8(u'Start playing media'), self.onMediaStop)
|
self.trUtf8(u'Start playing media'), self.onMediaStop)
|
||||||
self.ControllerLayout.addWidget(self.Toolbar)
|
self.volumeSlider = Phonon.VolumeSlider()
|
||||||
|
self.volumeSlider.setGeometry(QtCore.QRect(90, 260, 221, 24))
|
||||||
|
self.volumeSlider.setObjectName("volumeSlider")
|
||||||
|
self.Mediabar.addToolbarWidget(
|
||||||
|
u'Audio Volume', self.volumeSlider)
|
||||||
|
self.ControllerLayout.addWidget(self.Mediabar)
|
||||||
# Build the Song Toolbar
|
# Build the Song Toolbar
|
||||||
if isLive:
|
if isLive:
|
||||||
self.Songbar = OpenLPToolbar(self)
|
self.Songbar = OpenLPToolbar(self)
|
||||||
@ -229,8 +230,21 @@ class SlideController(QtGui.QWidget):
|
|||||||
self.grid = QtGui.QGridLayout(self.PreviewFrame)
|
self.grid = QtGui.QGridLayout(self.PreviewFrame)
|
||||||
self.grid.setMargin(8)
|
self.grid.setMargin(8)
|
||||||
self.grid.setObjectName(u'grid')
|
self.grid.setObjectName(u'grid')
|
||||||
|
|
||||||
|
self.SlideLayout = QtGui.QVBoxLayout()
|
||||||
|
self.SlideLayout.setSpacing(0)
|
||||||
|
self.SlideLayout.setMargin(0)
|
||||||
|
self.SlideLayout.setObjectName(u'SlideLayout')
|
||||||
|
self.mediaObject = Phonon.MediaObject(self)
|
||||||
|
self.video = Phonon.VideoWidget()
|
||||||
|
self.video.setVisible(False)
|
||||||
|
self.audio = Phonon.AudioOutput(Phonon.VideoCategory, self.mediaObject)
|
||||||
|
Phonon.createPath(self.mediaObject, self.video)
|
||||||
|
Phonon.createPath(self.mediaObject, self.audio)
|
||||||
|
self.SlideLayout.insertWidget(0, self.video)
|
||||||
|
|
||||||
# Actual preview screen
|
# Actual preview screen
|
||||||
self.SlidePreview = QtGui.QLabel(self.parent)
|
self.SlidePreview = QtGui.QLabel(self)
|
||||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
|
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
|
||||||
QtGui.QSizePolicy.Fixed)
|
QtGui.QSizePolicy.Fixed)
|
||||||
sizePolicy.setHorizontalStretch(0)
|
sizePolicy.setHorizontalStretch(0)
|
||||||
@ -245,7 +259,11 @@ class SlideController(QtGui.QWidget):
|
|||||||
self.SlidePreview.setLineWidth(1)
|
self.SlidePreview.setLineWidth(1)
|
||||||
self.SlidePreview.setScaledContents(True)
|
self.SlidePreview.setScaledContents(True)
|
||||||
self.SlidePreview.setObjectName(u'SlidePreview')
|
self.SlidePreview.setObjectName(u'SlidePreview')
|
||||||
self.grid.addWidget(self.SlidePreview, 0, 0, 1, 1)
|
self.SlideLayout.insertWidget(0, self.SlidePreview)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
self.grid.addLayout(self.SlideLayout, 0, 0, 1, 1)
|
||||||
# Signals
|
# Signals
|
||||||
QtCore.QObject.connect(self.PreviewListWidget,
|
QtCore.QObject.connect(self.PreviewListWidget,
|
||||||
QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected)
|
QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected)
|
||||||
@ -259,13 +277,9 @@ class SlideController(QtGui.QWidget):
|
|||||||
Receiver().send_message(u'request_spin_delay')
|
Receiver().send_message(u'request_spin_delay')
|
||||||
if isLive:
|
if isLive:
|
||||||
self.Toolbar.makeWidgetsInvisible(self.image_list)
|
self.Toolbar.makeWidgetsInvisible(self.image_list)
|
||||||
self.Toolbar.makeWidgetsInvisible(self.media_list)
|
|
||||||
else:
|
else:
|
||||||
self.Toolbar.makeWidgetsInvisible(self.song_edit_list)
|
self.Toolbar.makeWidgetsInvisible(self.song_edit_list)
|
||||||
if isLive:
|
self.Mediabar.setVisible(False)
|
||||||
prefix = u'live_slidecontroller'
|
|
||||||
else:
|
|
||||||
prefix = u'preview_slidecontroller'
|
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'%s_first' % prefix), self.onSlideSelectedFirst)
|
QtCore.SIGNAL(u'%s_first' % prefix), self.onSlideSelectedFirst)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
@ -291,10 +305,9 @@ class SlideController(QtGui.QWidget):
|
|||||||
self.PreviewListWidget.setColumnWidth(0, width)
|
self.PreviewListWidget.setColumnWidth(0, width)
|
||||||
for framenumber, frame in enumerate(self.commandItem.frames):
|
for framenumber, frame in enumerate(self.commandItem.frames):
|
||||||
if frame[u'text']:
|
if frame[u'text']:
|
||||||
break
|
return
|
||||||
self.PreviewListWidget.setRowHeight(framenumber, height)
|
self.PreviewListWidget.setRowHeight(framenumber, height)
|
||||||
|
|
||||||
|
|
||||||
def trackSplitter(self, tab, pos):
|
def trackSplitter(self, tab, pos):
|
||||||
"""
|
"""
|
||||||
Splitter between the slide list and the preview panel
|
Splitter between the slide list and the preview panel
|
||||||
@ -333,10 +346,10 @@ class SlideController(QtGui.QWidget):
|
|||||||
"""
|
"""
|
||||||
Allows the live toolbar to be customised
|
Allows the live toolbar to be customised
|
||||||
"""
|
"""
|
||||||
|
self.Toolbar.setVisible(True)
|
||||||
self.Songbar.setVisible(False)
|
self.Songbar.setVisible(False)
|
||||||
|
self.Mediabar.setVisible(False)
|
||||||
self.Toolbar.makeWidgetsInvisible(self.image_list)
|
self.Toolbar.makeWidgetsInvisible(self.image_list)
|
||||||
self.Toolbar.makeWidgetsInvisible(self.media_list)
|
|
||||||
self.Toolbar.makeWidgetsVisible(self.song_list)
|
|
||||||
if item.service_item_type == ServiceItemType.Text:
|
if item.service_item_type == ServiceItemType.Text:
|
||||||
self.Toolbar.makeWidgetsInvisible(self.image_list)
|
self.Toolbar.makeWidgetsInvisible(self.image_list)
|
||||||
if item.name == u'Songs' and \
|
if item.name == u'Songs' and \
|
||||||
@ -360,17 +373,24 @@ class SlideController(QtGui.QWidget):
|
|||||||
self.Toolbar.makeWidgetsVisible(self.image_list)
|
self.Toolbar.makeWidgetsVisible(self.image_list)
|
||||||
elif item.service_item_type == ServiceItemType.Command and \
|
elif item.service_item_type == ServiceItemType.Command and \
|
||||||
item.name == u'Media':
|
item.name == u'Media':
|
||||||
self.Toolbar.makeWidgetsInvisible(self.song_list)
|
self.Toolbar.setVisible(False)
|
||||||
self.Toolbar.makeWidgetsVisible(self.media_list)
|
self.Mediabar.setVisible(True)
|
||||||
|
self.volumeSlider.setAudioOutput(self.parent.mainDisplay.audio)
|
||||||
|
|
||||||
def enablePreviewToolBar(self, item):
|
def enablePreviewToolBar(self, item):
|
||||||
"""
|
"""
|
||||||
Allows the Preview toolbar to be customised
|
Allows the Preview toolbar to be customised
|
||||||
"""
|
"""
|
||||||
|
self.Toolbar.setVisible(True)
|
||||||
|
self.Mediabar.setVisible(False)
|
||||||
|
self.Toolbar.makeWidgetsInvisible(self.song_edit_list)
|
||||||
if (item.name == u'Songs' or item.name == u'Custom') and item.fromPlugin:
|
if (item.name == u'Songs' or item.name == u'Custom') and item.fromPlugin:
|
||||||
self.Toolbar.makeWidgetsVisible(self.song_edit_list)
|
self.Toolbar.makeWidgetsVisible(self.song_edit_list)
|
||||||
else:
|
elif item.service_item_type == ServiceItemType.Command and \
|
||||||
self.Toolbar.makeWidgetsInvisible(self.song_edit_list)
|
item.name == u'Media':
|
||||||
|
self.Toolbar.setVisible(False)
|
||||||
|
self.Mediabar.setVisible(True)
|
||||||
|
self.volumeSlider.setAudioOutput(self.audio)
|
||||||
|
|
||||||
def addServiceItem(self, item):
|
def addServiceItem(self, item):
|
||||||
"""
|
"""
|
||||||
@ -382,16 +402,20 @@ class SlideController(QtGui.QWidget):
|
|||||||
#If old item was a command tell it to stop
|
#If old item was a command tell it to stop
|
||||||
if self.commandItem and \
|
if self.commandItem and \
|
||||||
self.commandItem.service_item_type == ServiceItemType.Command:
|
self.commandItem.service_item_type == ServiceItemType.Command:
|
||||||
Receiver().send_message(u'%s_stop'% self.commandItem.name.lower())
|
self.onMediaStop()
|
||||||
self.commandItem = item
|
self.commandItem = item
|
||||||
before = time.time()
|
before = time.time()
|
||||||
item.render()
|
item.render()
|
||||||
log.info(u'Rendering took %4s' % (time.time() - before))
|
log.info(u'Rendering took %4s' % (time.time() - before))
|
||||||
self.enableToolBar(item)
|
self.enableToolBar(item)
|
||||||
if item.service_item_type == ServiceItemType.Command:
|
if item.service_item_type == ServiceItemType.Command:
|
||||||
|
if self.isLive:
|
||||||
Receiver().send_message(u'%s_start' % item.name.lower(), \
|
Receiver().send_message(u'%s_start' % item.name.lower(), \
|
||||||
[item.shortname, item.service_item_path,
|
[item.shortname, item.service_item_path,
|
||||||
item.service_frames[0][u'title'], self.isLive])
|
item.service_frames[0][u'title'], self.isLive])
|
||||||
|
else:
|
||||||
|
if item.name == u'Media':
|
||||||
|
self.onMediaStart(item)
|
||||||
slideno = 0
|
slideno = 0
|
||||||
if self.songEdit:
|
if self.songEdit:
|
||||||
slideno = self.row
|
slideno = self.row
|
||||||
@ -415,13 +439,17 @@ class SlideController(QtGui.QWidget):
|
|||||||
#If old item was a command tell it to stop
|
#If old item was a command tell it to stop
|
||||||
if self.commandItem and \
|
if self.commandItem and \
|
||||||
self.commandItem.service_item_type == ServiceItemType.Command:
|
self.commandItem.service_item_type == ServiceItemType.Command:
|
||||||
Receiver().send_message(u'%s_stop'% self.commandItem.name.lower())
|
self.onMediaStop()
|
||||||
self.commandItem = item
|
self.commandItem = item
|
||||||
self.enableToolBar(item)
|
self.enableToolBar(item)
|
||||||
if item.service_item_type == ServiceItemType.Command:
|
if item.service_item_type == ServiceItemType.Command:
|
||||||
|
if self.isLive:
|
||||||
Receiver().send_message(u'%s_start' % item.name.lower(), \
|
Receiver().send_message(u'%s_start' % item.name.lower(), \
|
||||||
[item.shortname, item.service_item_path,
|
[item.shortname, item.service_item_path,
|
||||||
item.service_frames[0][u'title'], slideno, self.isLive])
|
item.service_frames[0][u'title'], slideno, self.isLive])
|
||||||
|
else:
|
||||||
|
if item.name == u'Media':
|
||||||
|
self.onMediaStart(item)
|
||||||
self.displayServiceManagerItems(item, slideno)
|
self.displayServiceManagerItems(item, slideno)
|
||||||
|
|
||||||
def displayServiceManagerItems(self, serviceitem, slideno):
|
def displayServiceManagerItems(self, serviceitem, slideno):
|
||||||
@ -623,11 +651,32 @@ class SlideController(QtGui.QWidget):
|
|||||||
self.parent.LiveController.addServiceManagerItem(
|
self.parent.LiveController.addServiceManagerItem(
|
||||||
self.commandItem, row)
|
self.commandItem, row)
|
||||||
|
|
||||||
|
def onMediaStart(self, item):
|
||||||
|
self.mediaObject.stop()
|
||||||
|
self.mediaObject.clearQueue()
|
||||||
|
file = os.path.join(item.service_item_path, item.service_frames[0][u'title'])
|
||||||
|
self.mediaObject.setCurrentSource(Phonon.MediaSource(file))
|
||||||
|
self.onMediaPlay()
|
||||||
|
|
||||||
def onMediaPause(self):
|
def onMediaPause(self):
|
||||||
|
if self.isLive:
|
||||||
Receiver().send_message(u'%s_pause'% self.commandItem.name.lower())
|
Receiver().send_message(u'%s_pause'% self.commandItem.name.lower())
|
||||||
|
else:
|
||||||
|
self.mediaObject.pause()
|
||||||
|
|
||||||
def onMediaPlay(self):
|
def onMediaPlay(self):
|
||||||
Receiver().send_message(u'%s_play'% self.commandItem.name.lower())
|
if self.isLive:
|
||||||
|
Receiver().send_message(u'%s_play'% self.commandItem.name.lower(), self.isLive)
|
||||||
|
else:
|
||||||
|
self.SlidePreview.hide()
|
||||||
|
self.video.show()
|
||||||
|
self.mediaObject.play()
|
||||||
|
|
||||||
def onMediaStop(self):
|
def onMediaStop(self):
|
||||||
|
if self.isLive:
|
||||||
Receiver().send_message(u'%s_stop'% self.commandItem.name.lower())
|
Receiver().send_message(u'%s_stop'% self.commandItem.name.lower())
|
||||||
|
else:
|
||||||
|
self.mediaObject.stop()
|
||||||
|
self.video.hide()
|
||||||
|
self.SlidePreview.clear()
|
||||||
|
self.SlidePreview.show()
|
||||||
|
@ -1 +1 @@
|
|||||||
1.9.0-665
|
1.9.0-666
|
||||||
|
Loading…
Reference in New Issue
Block a user