From 95acdbfde0d0f4343c13df7db26aec8cf523ad26 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Mon, 9 Nov 2009 00:11:01 +0000 Subject: [PATCH 01/15] Fix import --- openlp/core/ui/maindisplay.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 3195f8de9..9a001b0f2 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -28,7 +28,7 @@ import os from PyQt4 import QtCore, QtGui from PyQt4.phonon import Phonon -from openlp.core.lib import Receiver, str_to_bool +from openlp.core.lib import Receiver class DisplayWidget(QtGui.QWidget): """ From bf63b2ae2f1ef65735236e6ff73d918409ecb978 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 9 Nov 2009 05:58:45 +0000 Subject: [PATCH 02/15] Fix up toolbar handing to stop toolbar going off screen Added Media Toolbar for the media items Added it to Preview Added and wired in a volume control --- openlp/core/ui/maindisplay.py | 8 ++-- openlp/core/ui/mainwindow.py | 3 ++ openlp/core/ui/slidecontroller.py | 71 ++++++++++++++++--------------- 3 files changed, 44 insertions(+), 38 deletions(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 3195f8de9..f79bb0b61 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -264,18 +264,18 @@ class MainDisplay(DisplayWidget): self.firstTime = False else: 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') - if not self.mediaLoaded and not self.displayBlank: + if not self.mediaLoaded and not self.displayBlank and live: self.blankDisplay() self.firstTime = True self.mediaLoaded = True self.display.hide() self.video.setFullScreen(True) self.mediaObject.play() - if self.primary: + if self.primary and not live: self.setVisible(True) def onMediaPaws(self): diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index c725948a7..5ca29c874 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -536,6 +536,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.settingsForm.postSetUp() def versionCheck(self): + """ + Checks the version of the Application called from openlp.pyw + """ applicationVersion = self.applicationVersion[u'Full'] version = check_latest_version(self.generalConfig, applicationVersion) if applicationVersion != version: diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 4ec414a80..fea8f9378 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -26,6 +26,8 @@ import logging import time from PyQt4 import QtCore, QtGui +from PyQt4.phonon import Phonon + from openlp.core.lib import OpenLPToolbar, Receiver, ServiceItemType, \ str_to_bool, PluginConfig @@ -80,20 +82,9 @@ class SlideController(QtGui.QWidget): u'Loop Separator', u'Image SpinBox' ] - self.media_list = [ - u'Media Start', - u'Media Stop', - u'Media Pause' - ] self.song_edit_list = [ u'Edit Song', ] - self.song_list = [ - u'First Slide', - u'Previous Slide', - u'Next Slide', - u'Last Slide', - ] self.timer_id = 0 self.commandItem = None self.songEdit = False @@ -109,10 +100,12 @@ class SlideController(QtGui.QWidget): self.TypeLabel.setText(u'%s' % self.trUtf8(u'Live')) self.split = 1 + prefix = u'live_slidecontroller' else: self.TypeLabel.setText(u'%s' % self.trUtf8(u'Preview')) self.split = 0 + prefix = u'preview_slidecontroller' self.TypeLabel.setAlignment(QtCore.Qt.AlignCenter) self.PanelLayout.addWidget(self.TypeLabel) # Splitter @@ -190,16 +183,24 @@ class SlideController(QtGui.QWidget): u'Image SpinBox', self.DelaySpinBox) self.DelaySpinBox.setSuffix(self.trUtf8(u's')) self.DelaySpinBox.setToolTip(self.trUtf8(u'Delay between slides in seconds')) - self.Toolbar.addToolbarButton( - u'Media Start', u':/slides/media_playback_start.png', - self.trUtf8(u'Start playing media'), self.onMediaPlay) - self.Toolbar.addToolbarButton( - u'Media Pause', u':/slides/media_playback_pause.png', - self.trUtf8(u'Start playing media'), self.onMediaPause) - self.Toolbar.addToolbarButton( - u'Media Stop', u':/slides/media_playback_stop.png', - self.trUtf8(u'Start playing media'), self.onMediaStop) 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', + self.trUtf8(u'Start playing media'), self.onMediaPlay) + self.Mediabar.addToolbarButton( + u'Media Pause', u':/slides/media_playback_pause.png', + self.trUtf8(u'Start playing media'), self.onMediaPause) + self.Mediabar.addToolbarButton( + u'Media Stop', u':/slides/media_playback_stop.png', + self.trUtf8(u'Start playing media'), self.onMediaStop) + 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 if isLive: self.Songbar = OpenLPToolbar(self) @@ -259,13 +260,9 @@ class SlideController(QtGui.QWidget): Receiver().send_message(u'request_spin_delay') if isLive: self.Toolbar.makeWidgetsInvisible(self.image_list) - self.Toolbar.makeWidgetsInvisible(self.media_list) else: self.Toolbar.makeWidgetsInvisible(self.song_edit_list) - if isLive: - prefix = u'live_slidecontroller' - else: - prefix = u'preview_slidecontroller' + self.Mediabar.setVisible(False) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'%s_first' % prefix), self.onSlideSelectedFirst) QtCore.QObject.connect(Receiver.get_receiver(), @@ -291,10 +288,9 @@ class SlideController(QtGui.QWidget): self.PreviewListWidget.setColumnWidth(0, width) for framenumber, frame in enumerate(self.commandItem.frames): if frame[u'text']: - break + return self.PreviewListWidget.setRowHeight(framenumber, height) - def trackSplitter(self, tab, pos): """ Splitter between the slide list and the preview panel @@ -333,10 +329,10 @@ class SlideController(QtGui.QWidget): """ Allows the live toolbar to be customised """ + self.Toolbar.setVisible(True) self.Songbar.setVisible(False) + self.Mediabar.setVisible(False) 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: self.Toolbar.makeWidgetsInvisible(self.image_list) if item.name == u'Songs' and \ @@ -360,17 +356,24 @@ class SlideController(QtGui.QWidget): self.Toolbar.makeWidgetsVisible(self.image_list) elif item.service_item_type == ServiceItemType.Command and \ item.name == u'Media': - self.Toolbar.makeWidgetsInvisible(self.song_list) - self.Toolbar.makeWidgetsVisible(self.media_list) + self.Toolbar.setVisible(False) + self.Mediabar.setVisible(True) + self.volumeSlider.setAudioOutput(self.parent.mainDisplay.audio) def enablePreviewToolBar(self, item): """ 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: self.Toolbar.makeWidgetsVisible(self.song_edit_list) - else: - self.Toolbar.makeWidgetsInvisible(self.song_edit_list) + elif item.service_item_type == ServiceItemType.Command and \ + item.name == u'Media': + self.Toolbar.setVisible(False) + self.Mediabar.setVisible(True) + self.volumeSlider.setAudioOutput(self.parent.mainDisplay.audio) def addServiceItem(self, item): """ @@ -627,7 +630,7 @@ class SlideController(QtGui.QWidget): Receiver().send_message(u'%s_pause'% self.commandItem.name.lower()) def onMediaPlay(self): - Receiver().send_message(u'%s_play'% self.commandItem.name.lower()) + Receiver().send_message(u'%s_play'% self.commandItem.name.lower(), self.isLive) def onMediaStop(self): Receiver().send_message(u'%s_stop'% self.commandItem.name.lower()) From 9eb88a4300e2402af34a8ad5bdb9f273fdb5e7d0 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 9 Nov 2009 06:11:26 +0000 Subject: [PATCH 03/15] Try to hide display screens for previews --- openlp/core/ui/maindisplay.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index f79bb0b61..cada31aad 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -130,7 +130,6 @@ class MainDisplay(DisplayWidget): QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'media_stop'), self.onMediaStop) - def setup(self, screenNumber): """ Sets up the screen on a particular screen. @@ -267,13 +266,14 @@ class MainDisplay(DisplayWidget): self.onMediaPlay(message[3]) 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 and live: self.blankDisplay() self.firstTime = True self.mediaLoaded = True - self.display.hide() - self.video.setFullScreen(True) + if live: + self.display.hide() + self.video.setFullScreen(True) self.mediaObject.play() if self.primary and not live: self.setVisible(True) From b6332e7ff5a0faa215e694c8d136e03a3e0ad2cb Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 9 Nov 2009 16:37:37 +0000 Subject: [PATCH 04/15] Fix media previews ti work and not display the extra screens --- openlp/core/ui/maindisplay.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index cada31aad..ddffeb6d4 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -275,7 +275,7 @@ class MainDisplay(DisplayWidget): self.display.hide() self.video.setFullScreen(True) self.mediaObject.play() - if self.primary and not live: + if self.primary and live: self.setVisible(True) def onMediaPaws(self): From 1c3c672e9b9544462531f7788f13a1a07fd8c0aa Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 9 Nov 2009 20:27:25 +0000 Subject: [PATCH 05/15] Add Media Preview to slideController --- openlp/core/ui/maindisplay.py | 1 - openlp/core/ui/slidecontroller.py | 75 ++++++++++++++++++++++++------- 2 files changed, 60 insertions(+), 16 deletions(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index ddffeb6d4..1abc33ad6 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -107,7 +107,6 @@ class MainDisplay(DisplayWidget): self.blankFrame = None self.frame = None self.alertactive = False - self.alertTab = None self.timer_id = 0 self.firstTime = True self.mediaLoaded = False diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index fea8f9378..550574d3a 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- # vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 - ############################################################################### # OpenLP - Open Source Lyrics Projection # # --------------------------------------------------------------------------- # @@ -24,6 +23,7 @@ import logging import time +import os from PyQt4 import QtCore, QtGui from PyQt4.phonon import Phonon @@ -230,8 +230,21 @@ class SlideController(QtGui.QWidget): self.grid = QtGui.QGridLayout(self.PreviewFrame) self.grid.setMargin(8) 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 - self.SlidePreview = QtGui.QLabel(self.parent) + self.SlidePreview = QtGui.QLabel(self) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) @@ -246,7 +259,11 @@ class SlideController(QtGui.QWidget): self.SlidePreview.setLineWidth(1) self.SlidePreview.setScaledContents(True) 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 QtCore.QObject.connect(self.PreviewListWidget, QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected) @@ -373,7 +390,7 @@ class SlideController(QtGui.QWidget): item.name == u'Media': self.Toolbar.setVisible(False) self.Mediabar.setVisible(True) - self.volumeSlider.setAudioOutput(self.parent.mainDisplay.audio) + self.volumeSlider.setAudioOutput(self.audio) def addServiceItem(self, item): """ @@ -385,16 +402,20 @@ class SlideController(QtGui.QWidget): #If old item was a command tell it to stop if self.commandItem and \ self.commandItem.service_item_type == ServiceItemType.Command: - Receiver().send_message(u'%s_stop'% self.commandItem.name.lower()) + self.onMediaStop() self.commandItem = item before = time.time() item.render() log.info(u'Rendering took %4s' % (time.time() - before)) self.enableToolBar(item) if item.service_item_type == ServiceItemType.Command: - Receiver().send_message(u'%s_start' % item.name.lower(), \ - [item.shortname, item.service_item_path, - item.service_frames[0][u'title'], self.isLive]) + if self.isLive: + Receiver().send_message(u'%s_start' % item.name.lower(), \ + [item.shortname, item.service_item_path, + item.service_frames[0][u'title'], self.isLive]) + else: + if item.name == u'Media': + self.onMediaStart(item) slideno = 0 if self.songEdit: slideno = self.row @@ -418,13 +439,17 @@ class SlideController(QtGui.QWidget): #If old item was a command tell it to stop if self.commandItem and \ self.commandItem.service_item_type == ServiceItemType.Command: - Receiver().send_message(u'%s_stop'% self.commandItem.name.lower()) + self.onMediaStop() self.commandItem = item self.enableToolBar(item) if item.service_item_type == ServiceItemType.Command: - Receiver().send_message(u'%s_start' % item.name.lower(), \ - [item.shortname, item.service_item_path, - item.service_frames[0][u'title'], slideno, self.isLive]) + if self.isLive: + Receiver().send_message(u'%s_start' % item.name.lower(), \ + [item.shortname, item.service_item_path, + item.service_frames[0][u'title'], slideno, self.isLive]) + else: + if item.name == u'Media': + self.onMediaStart(item) self.displayServiceManagerItems(item, slideno) def displayServiceManagerItems(self, serviceitem, slideno): @@ -626,11 +651,31 @@ class SlideController(QtGui.QWidget): self.parent.LiveController.addServiceManagerItem( 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): - Receiver().send_message(u'%s_pause'% self.commandItem.name.lower()) + if self.isLive: + Receiver().send_message(u'%s_pause'% self.commandItem.name.lower()) + else: + self.mediaObject.pause() def onMediaPlay(self): - Receiver().send_message(u'%s_play'% self.commandItem.name.lower(), self.isLive) + 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): - Receiver().send_message(u'%s_stop'% self.commandItem.name.lower()) + if self.isLive: + Receiver().send_message(u'%s_stop'% self.commandItem.name.lower()) + else: + self.mediaObject.stop() + self.video.hide() + self.SlidePreview.show() From d4d1b69d8e496a9ee132ed3998048c69a9706d74 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Tue, 10 Nov 2009 20:12:51 +0000 Subject: [PATCH 06/15] Change version number bzr-revno: 667 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index e8a209645..8f651f547 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.9.0-666 +1.9.0-667 From ab12f73a21e374969bfe1827a23140a4e5aa2293 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Tue, 10 Nov 2009 20:44:02 +0000 Subject: [PATCH 07/15] spacing cleanups --- openlp/core/ui/maindisplay.py | 11 +++++------ openlp/core/ui/slidecontroller.py | 5 ----- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index ebd810c5c..0a442e6bb 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -262,17 +262,16 @@ class MainDisplay(DisplayWidget): self.firstTime = False else: self.mediaObject.enqueue(Phonon.MediaSource(file)) - self.onMediaPlay(message[3]) + self.onMediaPlay() - def onMediaPlay(self, live=True): - log.debug(u'Play the new media, Live %s', live) + def onMediaPlay(self): + log.debug(u'Play the new media, Live ') if not self.mediaLoaded and not self.displayBlank: self.blankDisplay() self.firstTime = True self.mediaLoaded = True - if live: - self.display.hide() - self.video.setFullScreen(True) + self.display.hide() + self.video.setFullScreen(True) self.mediaObject.play() if self.primary: self.setVisible(True) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 331597c61..d73637ade 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -230,7 +230,6 @@ class SlideController(QtGui.QWidget): self.grid = QtGui.QGridLayout(self.PreviewFrame) self.grid.setMargin(8) self.grid.setObjectName(u'grid') - self.SlideLayout = QtGui.QVBoxLayout() self.SlideLayout.setSpacing(0) self.SlideLayout.setMargin(0) @@ -242,7 +241,6 @@ class SlideController(QtGui.QWidget): Phonon.createPath(self.mediaObject, self.video) Phonon.createPath(self.mediaObject, self.audio) self.SlideLayout.insertWidget(0, self.video) - # Actual preview screen self.SlidePreview = QtGui.QLabel(self) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, @@ -260,9 +258,6 @@ class SlideController(QtGui.QWidget): self.SlidePreview.setScaledContents(True) self.SlidePreview.setObjectName(u'SlidePreview') self.SlideLayout.insertWidget(0, self.SlidePreview) - - - self.grid.addLayout(self.SlideLayout, 0, 0, 1, 1) # Signals QtCore.QObject.connect(self.PreviewListWidget, From 1eb41aab78a8e0de849803c4af1df416d20d64a0 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 11 Nov 2009 19:10:38 +0000 Subject: [PATCH 08/15] SlideController cleanups --- openlp.pyw | 3 +++ openlp/core/lib/serviceitem.py | 7 +++++++ openlp/core/ui/maindisplay.py | 6 ++++++ openlp/core/ui/servicemanager.py | 2 -- openlp/core/ui/slidecontroller.py | 16 +++++++--------- 5 files changed, 23 insertions(+), 11 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 4eaf8ee22..7d123a9de 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -81,6 +81,8 @@ class OpenLP(QtGui.QApplication): bits = unicode(line).split(u'-') applicationVersion = {u'Full':unicode(line).rstrip(), u'version':bits[0], u'build':bits[1]} + log.info(u'Openlp version %s build %s' % + (applicationVersion[u'version'],applicationVersion[u'build'] )) except: applicationVersion = {u'Full':u'1.9.0-000', u'version':u'1.9.0', u'build':u'000'} @@ -139,6 +141,7 @@ def main(): logfile.setFormatter(logging.Formatter( u'%(asctime)s %(name)-15s %(levelname)-8s %(message)s')) log.addHandler(logfile) + logging.addLevelName(15, u'Timer') # Parse command line options and deal with them. (options, args) = parser.parse_args() if options.debug: diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index fe50c220d..e217781c8 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -279,3 +279,10 @@ class ServiceItem(object): """ return self.uuid != other.uuid + def isSong(self): + return self.name == u'Songs' + + def isMedia(self): + return self.name == u'Media' + + diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 0a442e6bb..249cd3827 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -24,6 +24,7 @@ import logging import os +import time from PyQt4 import QtCore, QtGui from PyQt4.phonon import Phonon @@ -196,11 +197,16 @@ class MainDisplay(DisplayWidget): if self.timer_id != 0 : self.displayAlert() elif not self.displayBlank: + #self.setWindowOpacity(0.5) self.display.setPixmap(QtGui.QPixmap.fromImage(frame)) + #QtCore.QTimer.singleShot(500, self.aa ) if not self.isVisible(): self.setVisible(True) self.showFullScreen() +# def aa(self): +# self.setWindowOpacity(1) + def blankDisplay(self): if not self.displayBlank: self.displayBlank = True diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 245140e31..bb39b573e 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -56,7 +56,6 @@ class ServiceManagerList(QtGui.QTreeWidget): # else: # event.ignore() - def keyPressEvent(self, event): if type(event) == QtGui.QKeyEvent: #here accept the event and do something @@ -99,7 +98,6 @@ class ServiceManagerList(QtGui.QTreeWidget): mimeData.setText(u'ServiceManager') dropAction = drag.start(QtCore.Qt.CopyAction) - class ServiceManager(QtGui.QWidget): """ Manages the services. This involves taking text strings from plugins and diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index d73637ade..b90038a0d 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -347,7 +347,7 @@ class SlideController(QtGui.QWidget): self.Toolbar.makeWidgetsInvisible(self.image_list) if item.service_item_type == ServiceItemType.Text: self.Toolbar.makeWidgetsInvisible(self.image_list) - if item.name == u'Songs' and \ + if item.isSong() and \ str_to_bool(self.songsconfig.get_config(u'display songbar', True)): for action in self.Songbar.actions: self.Songbar.actions[action].setVisible(False) @@ -366,8 +366,7 @@ class SlideController(QtGui.QWidget): #Not sensible to allow loops with 1 frame if len(item.frames) > 1: self.Toolbar.makeWidgetsVisible(self.image_list) - elif item.service_item_type == ServiceItemType.Command and \ - item.name == u'Media': + elif item.isMedia(): self.Toolbar.setVisible(False) self.Mediabar.setVisible(True) self.volumeSlider.setAudioOutput(self.parent.mainDisplay.audio) @@ -379,10 +378,9 @@ class SlideController(QtGui.QWidget): 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.editEnabled and item.fromPlugin: self.Toolbar.makeWidgetsVisible(self.song_edit_list) - elif item.service_item_type == ServiceItemType.Command and \ - item.name == u'Media': + elif item.isMedia(): self.Toolbar.setVisible(False) self.Mediabar.setVisible(True) self.volumeSlider.setAudioOutput(self.audio) @@ -401,7 +399,7 @@ class SlideController(QtGui.QWidget): self.commandItem = item before = time.time() item.render() - log.info(u'Rendering took %4s' % (time.time() - before)) + log.log(15, u'Rendering took %4s' % (time.time() - before)) self.enableToolBar(item) if item.service_item_type == ServiceItemType.Command: if self.isLive: @@ -490,7 +488,7 @@ class SlideController(QtGui.QWidget): self.PreviewListWidget.selectRow(slideno) self.onSlideSelected() self.PreviewListWidget.setFocus() - log.info(u'Display Rendering took %4s' % (time.time() - before)) + log.log(15, u'Display Rendering took %4s' % (time.time() - before)) if self.serviceitem.audit and self.isLive: Receiver().send_message(u'songusage_live', self.serviceitem.audit) log.debug(u'displayServiceManagerItems End') @@ -539,7 +537,7 @@ class SlideController(QtGui.QWidget): if frame is None: frame = self.serviceitem.render_individual(row) self.SlidePreview.setPixmap(QtGui.QPixmap.fromImage(frame)) - log.info(u'Slide Rendering took %4s' % (time.time() - before)) + log.log(15, u'Slide Rendering took %4s' % (time.time() - before)) if self.isLive: self.parent.mainDisplay.frameView(frame) self.row = row From b100731dc4b2ff86c07932806d217c5143823fd0 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Thu, 12 Nov 2009 00:44:26 +0000 Subject: [PATCH 09/15] A unicode fix for songs --- openlp/core/lib/songxmlhandler.py | 6 ++++-- openlp/plugins/songs/lib/mediaitem.py | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/openlp/core/lib/songxmlhandler.py b/openlp/core/lib/songxmlhandler.py index 4543464bb..37bbe25e4 100644 --- a/openlp/core/lib/songxmlhandler.py +++ b/openlp/core/lib/songxmlhandler.py @@ -134,7 +134,8 @@ class SongXMLParser(object): The XML of the song to be parsed. """ try: - self.song_xml = ElementTree(element=XML(xml)) + self.song_xml = ElementTree( + element=XML(unicode(xml).encode('unicode-escape'))) except: log.exception(u'Invalid xml %s', xml) @@ -147,7 +148,8 @@ class SongXMLParser(object): verse_list = [] for element in iter: if element.tag == u'verse': - verse_list.append([element.attrib, element.text]) + verse_list.append([element.attrib, + unicode(element.text).decode('unicode-escape')]) return verse_list def dump_xml(self): diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 33ee028e2..f69faed8b 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -291,7 +291,7 @@ class SongMediaItem(MediaManagerItem): service_item.editId = item_id service_item.verse_order = song.verse_order if song.lyrics.startswith(u' Date: Thu, 12 Nov 2009 00:49:55 +0000 Subject: [PATCH 10/15] A unicode fix for themes --- openlp/core/lib/themexmlhandler.py | 3 ++- openlp/core/ui/amendthemeform.py | 4 ++-- openlp/core/ui/mainwindow.py | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/openlp/core/lib/themexmlhandler.py b/openlp/core/lib/themexmlhandler.py index 0501fb06f..1ffece78b 100644 --- a/openlp/core/lib/themexmlhandler.py +++ b/openlp/core/lib/themexmlhandler.py @@ -30,7 +30,7 @@ from xml.etree.ElementTree import ElementTree, XML from openlp.core.lib import str_to_bool blankthemexml=\ -''' +''' BlankStyle @@ -348,6 +348,7 @@ class ThemeXML(object): iter = theme_xml.getiterator() master = u'' for element in iter: + element.text = unicode(element.text).decode('unicode-escape') if len(element.getchildren()) > 0: master = element.tag + u'_' else: diff --git a/openlp/core/ui/amendthemeform.py b/openlp/core/ui/amendthemeform.py index 27197c5af..4e5b9cd9d 100644 --- a/openlp/core/ui/amendthemeform.py +++ b/openlp/core/ui/amendthemeform.py @@ -126,7 +126,7 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): def accept(self): new_theme = ThemeXML() theme_name = unicode(self.ThemeNameEdit.displayText()) - new_theme.new_document(theme_name) + new_theme.new_document(theme_name.encode('unicode-escape')) save_from = None save_to = None if self.theme.background_mode == u'transparent': @@ -144,7 +144,7 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): (path, filename) = \ os.path.split(unicode(self.theme.background_filename)) new_theme.add_background_image(filename) - save_to= os.path.join(self.path, theme_name, filename ) + save_to = os.path.join(self.path, theme_name, filename) save_from = self.theme.background_filename new_theme.add_font(unicode(self.theme.font_main_name), diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index c725948a7..22e2087bc 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -676,7 +676,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.setWindowTitle(title) def defaultThemeChanged(self, theme): - self.DefaultThemeLabel.setText(self.defaultThemeText + theme) + self.DefaultThemeLabel.setText( + u'%s %s' % (self.defaultThemeText, theme)) def toggleMediaManager(self, visible): if self.MediaManagerDock.isVisible() != visible: From e62c482a2e56edfa4c9676c002511333c3601652 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Thu, 12 Nov 2009 17:21:15 +0000 Subject: [PATCH 11/15] Slide Controller and Transition changes --- openlp/core/lib/serviceitem.py | 7 ++++++ openlp/core/ui/maindisplay.py | 8 +++--- openlp/core/ui/slidecontroller.py | 41 ++++++++++++++----------------- 3 files changed, 29 insertions(+), 27 deletions(-) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index e217781c8..19f5f4bda 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -285,4 +285,11 @@ class ServiceItem(object): def isMedia(self): return self.name == u'Media' + def isCommand(self): + return self.service_item_type == ServiceItemType.Command + def isImage(self): + return self.service_item_type == ServiceItemType.Image + + def isText(self): + return self.service_item_type == ServiceItemType.Text diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 249cd3827..50781ad8d 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -197,15 +197,15 @@ class MainDisplay(DisplayWidget): if self.timer_id != 0 : self.displayAlert() elif not self.displayBlank: - #self.setWindowOpacity(0.5) + self.setWindowOpacity(0.5) self.display.setPixmap(QtGui.QPixmap.fromImage(frame)) - #QtCore.QTimer.singleShot(500, self.aa ) + QtCore.QTimer.singleShot(250, self.aa ) if not self.isVisible(): self.setVisible(True) self.showFullScreen() -# def aa(self): -# self.setWindowOpacity(1) + def aa(self): + self.setWindowOpacity(1) def blankDisplay(self): if not self.displayBlank: diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index b90038a0d..88e81bfae 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -345,7 +345,7 @@ class SlideController(QtGui.QWidget): self.Songbar.setVisible(False) self.Mediabar.setVisible(False) self.Toolbar.makeWidgetsInvisible(self.image_list) - if item.service_item_type == ServiceItemType.Text: + if item.isText(): self.Toolbar.makeWidgetsInvisible(self.image_list) if item.isSong() and \ str_to_bool(self.songsconfig.get_config(u'display songbar', True)): @@ -362,7 +362,7 @@ class SlideController(QtGui.QWidget): #More than 20 verses hard luck pass self.Songbar.setVisible(True) - elif item.service_item_type == ServiceItemType.Image: + elif item.isImage(): #Not sensible to allow loops with 1 frame if len(item.frames) > 1: self.Toolbar.makeWidgetsVisible(self.image_list) @@ -393,21 +393,20 @@ class SlideController(QtGui.QWidget): """ log.debug(u'addServiceItem') #If old item was a command tell it to stop - if self.commandItem and \ - self.commandItem.service_item_type == ServiceItemType.Command: + if self.commandItem and self.commandItem.isCommand(): self.onMediaStop() self.commandItem = item before = time.time() item.render() log.log(15, u'Rendering took %4s' % (time.time() - before)) self.enableToolBar(item) - if item.service_item_type == ServiceItemType.Command: + if item.isCommand(): if self.isLive: Receiver().send_message(u'%s_start' % item.name.lower(), \ [item.shortname, item.service_item_path, item.service_frames[0][u'title'], self.isLive]) else: - if item.name == u'Media': + if item.isMedia(): self.onMediaStart(item) slideno = 0 if self.songEdit: @@ -430,18 +429,17 @@ class SlideController(QtGui.QWidget): """ log.debug(u'addServiceManagerItem') #If old item was a command tell it to stop - if self.commandItem and \ - self.commandItem.service_item_type == ServiceItemType.Command: + if self.commandItem and self.commandItem.isCommand(): self.onMediaStop() self.commandItem = item self.enableToolBar(item) - if item.service_item_type == ServiceItemType.Command: + if item.isCommand(): if self.isLive: Receiver().send_message(u'%s_start' % item.name.lower(), \ [item.shortname, item.service_item_path, item.service_frames[0][u'title'], slideno, self.isLive]) else: - if item.name == u'Media': + if item.isMedia(): self.onMediaStart(item) self.displayServiceManagerItems(item, slideno) @@ -498,8 +496,7 @@ class SlideController(QtGui.QWidget): """ Go to the first slide. """ - if self.commandItem and \ - self.commandItem.service_item_type == ServiceItemType.Command: + if self.commandItem and self.commandItem.isCommand(): Receiver().send_message(u'%s_first'% self.commandItem.name.lower()) self.updatePreview() else: @@ -510,8 +507,7 @@ class SlideController(QtGui.QWidget): """ Blank the screen. """ - if self.commandItem and \ - self.commandItem.service_item_type == ServiceItemType.Command: + if self.commandItem and self.commandItem.isCommand(): if blanked: Receiver().send_message(u'%s_blank'% self.commandItem.name.lower()) else: @@ -527,7 +523,7 @@ class SlideController(QtGui.QWidget): row = self.PreviewListWidget.currentRow() self.row = 0 if row > -1 and row < self.PreviewListWidget.rowCount(): - if self.commandItem.service_item_type == ServiceItemType.Command: + if self.commandItem.isCommand(): Receiver().send_message(u'%s_slide'% self.commandItem.name.lower(), [row]) if self.isLive: self.updatePreview() @@ -556,22 +552,23 @@ class SlideController(QtGui.QWidget): QtCore.QTimer.singleShot(0.5, self.grabMainDisplay) QtCore.QTimer.singleShot(2.5, self.grabMainDisplay) else: - label = self.PreviewListWidget.cellWidget(self.PreviewListWidget.currentRow(), 0) + label = self.PreviewListWidget.cellWidget( + self.PreviewListWidget.currentRow(), 0) self.SlidePreview.setPixmap(label.pixmap()) def grabMainDisplay(self): rm = self.parent.RenderManager winid = QtGui.QApplication.desktop().winId() rect = rm.screen_list[rm.current_display][u'size'] - winimg = QtGui.QPixmap.grabWindow(winid, rect.x(), rect.y(), rect.width(), rect.height()) + winimg = QtGui.QPixmap.grabWindow(winid, rect.x(), + rect.y(), rect.width(), rect.height()) self.SlidePreview.setPixmap(winimg) def onSlideSelectedNext(self): """ Go to the next slide. """ - if self.commandItem and \ - self.commandItem.service_item_type == ServiceItemType.Command: + if self.commandItem and self.commandItem.isCommand(): Receiver().send_message(u'%s_next'% self.commandItem.name.lower()) self.updatePreview() else: @@ -585,8 +582,7 @@ class SlideController(QtGui.QWidget): """ Go to the previous slide. """ - if self.commandItem and \ - self.commandItem.service_item_type == ServiceItemType.Command: + if self.commandItem and self.commandItem.isCommand(): Receiver().send_message( u'%s_previous'% self.commandItem.name.lower()) self.updatePreview() @@ -601,8 +597,7 @@ class SlideController(QtGui.QWidget): """ Go to the last slide. """ - if self.commandItem and \ - self.commandItem.service_item_type == ServiceItemType.Command: + if self.commandItem and self.commandItem.isCommand(): Receiver().send_message(u'%s_last'% self.commandItem.name.lower()) self.updatePreview() else: From 9970ae82813b7cfb7f2f8ae53a91d7085dd55b97 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Thu, 12 Nov 2009 17:48:49 +0000 Subject: [PATCH 12/15] Transitions between slides --- openlp/core/ui/maindisplay.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 0d8ceedb0..2c83cac00 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -198,8 +198,9 @@ class MainDisplay(DisplayWidget): self.displayAlert() elif not self.displayBlank: self.setWindowOpacity(0.5) + self.show() self.display.setPixmap(QtGui.QPixmap.fromImage(frame)) - QtCore.QTimer.singleShot(250, self.aa ) + QtCore.QTimer.singleShot(500, self.aa ) if not self.isVisible(): self.setVisible(True) self.showFullScreen() From 124c51138507c912df8a826f76b88f49f7742a61 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Thu, 12 Nov 2009 18:44:45 +0000 Subject: [PATCH 13/15] Fix saving and reloading of media items --- openlp/core/lib/serviceitem.py | 18 ++++-------------- openlp/plugins/media/lib/mediaitem.py | 2 +- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 19f5f4bda..577013159 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -38,7 +38,6 @@ class ServiceItemType(object): Text = 1 Image = 2 Command = 3 - Video = 4 class ServiceItem(object): """ @@ -156,12 +155,6 @@ class ServiceItem(object): self.service_frames.append( {u'title': frame_title, u'text': None, u'image': image}) - def add_from_media(self, path, frame_title, image): - self.service_item_type = ServiceItemType.Video - self.service_item_path = path - self.service_frames.append( - {u'title': frame_title, u'text': None, u'image': image}) - def add_from_text(self, frame_title, raw_slide): """ Add a text slide to the service item. @@ -216,10 +209,7 @@ class ServiceItem(object): service_data.append(slide[u'title']) elif self.service_item_type == ServiceItemType.Command: for slide in self.service_frames: - service_data.append(slide[u'title']) - elif self.service_item_type == ServiceItemType.Video: - for slide in self.service_frames: - service_data.append(slide[u'title']) + service_data.append({u'title':slide[u'title'], u'image':slide[u'image']}) return {u'header': service_header, u'data': service_data} def set_from_service(self, serviceitem, path=None): @@ -252,8 +242,8 @@ class ServiceItem(object): self.add_from_image(path, text_image, real_image) elif self.service_item_type == ServiceItemType.Command: for text_image in serviceitem[u'serviceitem'][u'data']: - filename = os.path.join(path, text_image) - self.add_from_command(path, text_image) + filename = os.path.join(path, text_image[u'title']) + self.add_from_command(path, text_image[u'title'], text_image[u'image'] ) elif self.service_item_type == ServiceItemType.Video: pass @@ -283,7 +273,7 @@ class ServiceItem(object): return self.name == u'Songs' def isMedia(self): - return self.name == u'Media' + return self.name.lower() == u'media' def isCommand(self): return self.service_item_type == ServiceItemType.Command diff --git a/openlp/plugins/media/lib/mediaitem.py b/openlp/plugins/media/lib/mediaitem.py index 708307868..bd9739e4a 100644 --- a/openlp/plugins/media/lib/mediaitem.py +++ b/openlp/plugins/media/lib/mediaitem.py @@ -79,7 +79,7 @@ class MediaMediaItem(MediaManagerItem): items = self.ListView.selectedIndexes() if len(items) > 1: return False - service_item.title = self.trUtf8(u'Media') + service_item.title = unicode(self.trUtf8(u'Media')) for item in items: bitem = self.ListView.item(item.row()) filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString()) From 04873758e96a78e7cffec9083ed48c5436d06bf2 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Thu, 12 Nov 2009 19:05:24 +0000 Subject: [PATCH 14/15] Remove extra Video --- openlp/core/lib/serviceitem.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 577013159..e9de1f832 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -244,8 +244,6 @@ class ServiceItem(object): for text_image in serviceitem[u'serviceitem'][u'data']: filename = os.path.join(path, text_image[u'title']) self.add_from_command(path, text_image[u'title'], text_image[u'image'] ) - elif self.service_item_type == ServiceItemType.Video: - pass def merge(self, other): """ From 6df4e5a36935f2132796ca1dadc02246eea85168 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Thu, 12 Nov 2009 19:12:13 +0000 Subject: [PATCH 15/15] Remove transition code --- openlp/core/ui/maindisplay.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 2c83cac00..5fea3268e 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -197,16 +197,16 @@ class MainDisplay(DisplayWidget): if self.timer_id != 0 : self.displayAlert() elif not self.displayBlank: - self.setWindowOpacity(0.5) - self.show() +# self.setWindowOpacity(0.5) +# self.show() self.display.setPixmap(QtGui.QPixmap.fromImage(frame)) - QtCore.QTimer.singleShot(500, self.aa ) +# QtCore.QTimer.singleShot(500, self.aa ) if not self.isVisible(): self.setVisible(True) self.showFullScreen() - - def aa(self): - self.setWindowOpacity(1) +# +# def aa(self): +# self.setWindowOpacity(1) def blankDisplay(self): if not self.displayBlank: