diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index c107a1872..dfcad984a 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -35,7 +35,6 @@ import uuid from PyQt4 import QtGui from openlp.core.lib import build_icon, resize_image -from openlp.core.utils import AppLocation log = logging.getLogger(__name__) @@ -93,7 +92,6 @@ class ServiceItem(object): self.is_valid = True self.cache = {} self.icon = None - self.serviceItemPath = AppLocation.get_section_data_path(u'serviceItems') def add_capability(self, capability): """ @@ -155,12 +153,9 @@ class ServiceItem(object): del self.cache[len(self._display_frames)] log.log(15, u'Formatting took %4s' % (time.time() - before)) elif self.service_item_type == ServiceItemType.Image: - for count, slide in enumerate(self._raw_frames): + for slide in self._raw_frames: slide[u'image'] = resize_image(slide[u'image'], self.render_manager.width, self.render_manager.height) - path = os.path.join(self.serviceItemPath, self._uuid + unicode(count) + u'.png') - slide[u'image'].save(path) - slide[u'display'] = path elif self.service_item_type == ServiceItemType.Command: pass else: @@ -376,8 +371,7 @@ class ServiceItem(object): if self.service_item_type == ServiceItemType.Text: return self.render_individual(row) else: - return {u'main':self._raw_frames[row][u'image'], - u'trans':None, u'display':self._raw_frames[row][u'display']} + return {u'main':self._raw_frames[row][u'image'], u'trans':None} def get_frame_title(self, row=0): """ diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 7bbab097d..d6819cb1c 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -32,7 +32,6 @@ from PyQt4.phonon import Phonon from openlp.core.lib import Receiver, resize_image from openlp.core.ui import HideMode -from openlp.core.utils import AppLocation log = logging.getLogger(__name__) @@ -105,11 +104,17 @@ class DisplayManager(QtGui.QWidget): """ self.mainDisplay.addAlert(alertMessage, location) - def displayImage(self, path): + def displayImageWithText(self, frame): """ Handles the addition of a background Image to the displays """ - self.mainDisplay.displayImage(path) + self.mainDisplay.addImageWithText(frame) + + def displayImage(self, frame): + """ + Handles the addition of a background Image to the displays + """ + self.mainDisplay.displayImage(frame) def displayVideo(self, path): """ @@ -213,6 +218,7 @@ class MainDisplay(DisplayWidget): pass self.screens = screens self.setupScene() + self.setupVideo() self.setupImage() self.setupText() self.setupAlert() @@ -249,7 +255,7 @@ class MainDisplay(DisplayWidget): (self.screen[u'size'].width() - splash_image.width()) / 2, (self.screen[u'size'].height() - splash_image.height()) / 2, splash_image) - #self.display_image.setPixmap(QtGui.QPixmap.fromImage(self.InitialFrame)) + self.displayImage(self.InitialFrame) self.repaint() #Build a Black screen painter = QtGui.QPainter() @@ -278,18 +284,23 @@ class MainDisplay(DisplayWidget): self.scene.setSceneRect(0,0,self.size().width(), self.size().height()) self.setScene(self.scene) - def setupImage(self): + def setupVideo(self): self.webView = QtWebKit.QWebView() self.page = self.webView.page() - self.imageDisplay = self.page.mainFrame() - self.imageDisplay.setScrollBarPolicy(QtCore.Qt.Vertical, QtCore.Qt.ScrollBarAlwaysOff) - self.imageDisplay.setScrollBarPolicy(QtCore.Qt.Horizontal, QtCore.Qt.ScrollBarAlwaysOff) + self.videoDisplay = self.page.mainFrame() + self.videoDisplay.setScrollBarPolicy(QtCore.Qt.Vertical, QtCore.Qt.ScrollBarAlwaysOff) + self.videoDisplay.setScrollBarPolicy(QtCore.Qt.Horizontal, QtCore.Qt.ScrollBarAlwaysOff) self.proxy = QtGui.QGraphicsProxyWidget() self.proxy.setWidget(self.webView) self.proxy.setWindowFlags(QtCore.Qt.Window | QtCore.Qt.FramelessWindowHint) - self.proxy.setZValue(2) + self.proxy.setZValue(1) self.scene.addItem(self.proxy) + def setupImage(self): + self.imageDisplay = QtGui.QGraphicsPixmapItem() + self.imageDisplay.setZValue(2) + self.scene.addItem(self.imageDisplay) + def setupText(self): #self.displayText = QtGui.QGraphicsTextItem() self.displayText = QtGui.QGraphicsPixmapItem() @@ -305,9 +316,9 @@ class MainDisplay(DisplayWidget): self.scene.addItem(self.alertText) def setupBlank(self): - self.display_blank = QtGui.QGraphicsPixmapItem() - self.display_blank.setZValue(10) - self.scene.addItem(self.display_blank) + self.displayBlank = QtGui.QGraphicsPixmapItem() + self.displayBlank.setZValue(10) + self.scene.addItem(self.displayBlank) def resetDisplay(self): log.debug(u'resetDisplay') @@ -334,14 +345,14 @@ class MainDisplay(DisplayWidget): #self.display_image.setPixmap(self.transparent) self.setVisible(False) elif mode == HideMode.Blank: - self.display_blank.setPixmap( + self.displayBlank.setPixmap( QtGui.QPixmap.fromImage(self.blankFrame)) else: if self.parent.renderManager.renderer.bg_frame: - self.display_blank.setPixmap(QtGui.QPixmap.fromImage( + self.displayBlank.setPixmap(QtGui.QPixmap.fromImage( self.parent.renderManager.renderer.bg_frame)) else: - self.display_blank.setPixmap( + self.displayBlank.setPixmap( QtGui.QPixmap.fromImage(self.blankFrame)) def showDisplay(self, message=u''): @@ -351,7 +362,7 @@ class MainDisplay(DisplayWidget): Make the stored images None to release memory. """ log.debug(u'showDisplay') - self.display_blank.setPixmap(self.transparent) + self.displayBlank.setPixmap(self.transparent) #Trigger actions when display is active again Receiver.send_message(u'maindisplay_active') @@ -359,7 +370,8 @@ class MainDisplay(DisplayWidget): log.debug(u'addImageWithText') frame = resize_image( frame, self.screen[u'size'].width(), self.screen[u'size'].height()) - self.display_image.setPixmap(QtGui.QPixmap.fromImage(frame)) + self.imageDisplay.setPixmap(QtGui.QPixmap.fromImage(frame)) + self.videoDisplay.setHtml(u'') def addAlert(self, message, location): """ @@ -379,14 +391,18 @@ class MainDisplay(DisplayWidget): self.alertText.setPos(0,self.size().height() - 76) self.alertText.setHtml(message) - def displayImage(self, path): + def displayImage(self, frame): """ Places the Image passed on the display screen - ``path`` - The path to the image to be displayed + ``frame`` + The image to be displayed """ log.debug(u'adddisplayImage') - self.imageDisplay.setHtml(HTMLIMAGE % path) + if isinstance(frame, QtGui.QImage): + self.imageDisplay.setPixmap(QtGui.QPixmap.fromImage(frame)) + else: + self.imageDisplay.setPixmap(frame) + self.videoDisplay.setHtml(u'') def displayVideo(self, path): """ @@ -395,8 +411,9 @@ class MainDisplay(DisplayWidget): The path to the image to be displayed """ log.debug(u'adddisplayVideo') - self.imageDisplay.setHtml(HTMLVIDEO % + self.videoDisplay.setHtml(HTMLVIDEO % (path, self.screen[u'size'].width(), self.screen[u'size'].height())) + self.displayImage(self.transparent) def frameView(self, frame, transition=False): """ @@ -433,20 +450,6 @@ class MainDisplay(DisplayWidget): if not self.isVisible() and self.screens.display: self.setVisible(True) - def closeEvent(self, event): - """ - Shutting down cleans up background files - """ - serviceItemPath = AppLocation.get_section_data_path(u'serviceItems') - for file in os.listdir(serviceItemPath): - file_path = os.path.join(serviceItemPath, file) - try: - if os.path.isfile(file_path): - os.remove(file_path) - except OSError: - log.exception(u'Failed to clean up servicePath') - - class VideoDisplay(Phonon.VideoWidget): """ This is the form that is used to display videos on the projector. diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 5a34d09f8..8f9242764 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -785,7 +785,7 @@ class SlideController(QtGui.QWidget): if self.serviceItem.is_text(): self.mainDisplay.frameView(frame, True) else: - self.displayManager.displayImage(frame[u'display']) + self.displayManager.displayImage(frame[u'main']) self.selectedRow = row Receiver.send_message(u'slidecontroller_%s_changed' % self.typePrefix, row) diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index ee7a22106..c83de7836 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -173,11 +173,12 @@ class ImageMediaItem(MediaManagerItem): if check_item_selected(self.ListView, translate('ImagePlugin.MediaItem', 'You must select an item to process.')): - item = self.buildServiceItem() - item.render() - self.parent.live_controller.displayManager. \ - displayImage(item.get_rendered_frame(0)[u'display']) - + items = self.ListView.selectedIndexes() + for item in items: + bitem = self.ListView.item(item.row()) + filename = unicode(bitem.data(QtCore.Qt.UserRole).toString()) + frame = QtGui.QImage(unicode(filename)) + self.parent.live_controller.displayManager.displayImageWithText(frame) def onPreviewClick(self): MediaManagerItem.onPreviewClick(self)