diff --git a/openlp.pyw b/openlp.pyw index 81ae3e47f..a9dd877f1 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -35,8 +35,9 @@ log = logging.getLogger() from openlp.core.lib import Receiver from openlp.core.resources import qInitResources -from openlp.core.ui import MainWindow, SplashScreen, ScreenList +from openlp.core.ui import SplashScreen, ScreenList from openlp.core.utils import AppLocation, LanguageManager +from openlp.core.ui.mainwindow import MainWindow application_stylesheet = u""" QMainWindow::separator diff --git a/openlp/core/lib/rendermanager.py b/openlp/core/lib/rendermanager.py index 73e9fa0d8..b7581ac8d 100644 --- a/openlp/core/lib/rendermanager.py +++ b/openlp/core/lib/rendermanager.py @@ -27,7 +27,8 @@ import logging from PyQt4 import QtCore -from openlp.core.lib import Renderer, ThemeLevel +from openlp.core.lib import Renderer, ThemeLevel, ServiceItem +from openlp.core.ui import MainDisplay log = logging.getLogger(__name__) @@ -54,6 +55,8 @@ class RenderManager(object): """ log.debug(u'Initilisation started') self.screens = screens + self.display = self.display = MainDisplay(self, screens, False) + self.display.setup() self.theme_manager = theme_manager self.renderer = Renderer() self.calculate_default(self.screens.current[u'size']) @@ -184,9 +187,14 @@ class RenderManager(object): footer.append(u'CCLI 123456') formatted = self.renderer.format_slide(verse, False) #Only Render the first slide page returned - image = self.previewDisplay.preview(self.renderer.bg_frame, verse, self.themedata) - return image #self.renderer.generate_frame_from_lines(formatted[0], - #footer)[u'main'] + serviceItem = ServiceItem() + serviceItem.add_from_text(u'', verse, u'') + serviceItem.render_manager = self + serviceItem.render() + serviceItem.raw_footer = footer + self.display.buildHtml(serviceItem) + self.display.frame.findFirstElement('div#footer').setInnerXml(serviceItem.foot_text) + return #image def format_slide(self, words): """ @@ -230,4 +238,4 @@ class RenderManager(object): log.debug(u'calculate default %d, %d, %f', self.width, self.height, self.screen_ratio ) # 90% is start of footer - self.footer_start = int(self.height * 0.90) + self.footer_start = int(self.height * 0.90) \ No newline at end of file diff --git a/openlp/core/ui/__init__.py b/openlp/core/ui/__init__.py index 96c9c5616..947b17182 100644 --- a/openlp/core/ui/__init__.py +++ b/openlp/core/ui/__init__.py @@ -36,12 +36,11 @@ class HideMode(object): Theme = 2 Screen = 3 -from maindisplay import WebViewer +from maindisplay import MainDisplay from slidecontroller import HideMode from servicenoteform import ServiceNoteForm from serviceitemeditform import ServiceItemEditForm from screen import ScreenList -from maindisplay import WebViewer from amendthemeform import AmendThemeForm from slidecontroller import SlideController from splashscreen import SplashScreen @@ -54,8 +53,7 @@ from settingsform import SettingsForm from mediadockmanager import MediaDockManager from servicemanager import ServiceManager from thememanager import ThemeManager -from mainwindow import MainWindow __all__ = ['SplashScreen', 'AboutForm', 'SettingsForm', 'MainWindow', 'MainDisplay', 'SlideController', 'ServiceManager', 'ThemeManager', - 'AmendThemeForm', 'MediaDockManager', 'ServiceItemEditForm'] + 'AmendThemeForm', 'MediaDockManager', 'ServiceItemEditForm'] \ No newline at end of file diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 85623937b..b08886d76 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -35,45 +35,7 @@ from openlp.core.ui import HideMode log = logging.getLogger(__name__) #http://www.steveheffernan.com/html5-video-player/demo-video-player.html -HTMLVIDEO = u""" -
- - - - - - - """ -#class DisplayManager(QtGui.QWidget): -# pass -# """ -# Wrapper class to hold the display widgets. -# I will provide API's in future to access the screens allow for -# extra displays to be added. -# RenderManager is poked in by MainWindow -# """ -# def __init__(self, parent, screens): -# QtGui.QWidget.__init__(self) -# self.parent = parent -# self.screens = screens -# self.audioPlayer = AudioPlayer(self) -# # Live display -# #self.mainDisplay = WebViewer(self, screens, True) -# # Display for Preview and Theme previews -# #self.previewDisplay = WebViewer(self, screens, False) ## QtCore.QObject.connect(Receiver.get_receiver(), ## QtCore.SIGNAL(u'maindisplay_hide'), self.hideDisplay) ## QtCore.QObject.connect(Receiver.get_receiver(), @@ -84,97 +46,7 @@ HTMLVIDEO = u""" ## QtCore.SIGNAL(u'videodisplay_stop'), self.onStopVideo) ## QtCore.QObject.connect(Receiver.get_receiver(), ## QtCore.SIGNAL(u'config_updated'), self.setup) -# -# def setup(self): -# log.debug(u'mainDisplay - setup') -# # let the render manager have the preview display. -# #self.parent.RenderManager.previewDisplay = self.previewDisplay -# #Build the initial frame. -# self.initialFrame = QtGui.QImage( -# self.screens.current[u'size'].width(), -# self.screens.current[u'size'].height(), -# QtGui.QImage.Format_ARGB32_Premultiplied) -# splash_image = QtGui.QImage(u':/graphics/openlp-splash-screen.png') -# painter_image = QtGui.QPainter() -# painter_image.begin(self.initialFrame) -# painter_image.fillRect(self.initialFrame.rect(), QtCore.Qt.white) -# painter_image.drawImage( -# (self.screens.current[u'size'].width() - splash_image.width()) / 2, -# (self.screens.current[u'size'].height() - splash_image.height()) / 2, -# splash_image) -# self.mainDisplay.setup() -# self.previewDisplay.setup() -# if self.isLive -# self.mainDisplay.buildHtml(self.initialFrame) -# self.mainDisplay.show() - -# def hideDisplay(self, message): -# """ -# Hide the output displays -# """ -# self.mainDisplay.hideDisplay(message) -# -# def showDisplay(self, message): -# """ -# Hide the output displays -# """ -# self.mainDisplay.showDisplay(message) -# -# def addAlert(self, alertMessage, location): -# """ -# Handles the addition of an Alert Message to the Displays -# """ -# self.mainDisplay.addAlert(alertMessage, location) -# -# def displayImageWithText(self, frame): -# """ -# Handles the addition of a background Image to the displays -# """ -# self.mainDisplay.addImageWithText(frame) -# -# def buildHtml(self, image=None): -# """ -# Handles the addition of a background Image to the displays -# """ -# self.mainDisplay.buildHtml(image) -# -# def text(self, text): -# """ -# Handles the addition of a background Image to the displays -# """ -# self.mainDisplay.text(text) -# -# def displayImage(self, frame): -# """ -# Handles the addition of a background Image to the displays -# """ -# self.mainDisplay.displayImage(frame) -# -# def displayVideo(self, path): -# """ -# Handles the addition of a background Video to the displays -# """ -# self.mainDisplay.displayVideo(path) -# -# def onStartVideo(self, item): -# """ -# Handles the Starting of a Video and Display Management -# """ -# self.mainDisplay.setVisible(False) -# -# def onStopVideo(self): -# """ -# Handles the Stopping of a Video and Display Management -# """ -# self.mainDisplay.setVisible(True) -# -# def close(self): -# """ -# Handles the closure of the displays -# """ -# -# self.mainDisplay.close() class DisplayWidget(QtGui.QGraphicsView): """ @@ -187,46 +59,42 @@ class DisplayWidget(QtGui.QGraphicsView): QtGui.QGraphicsView.__init__(self) self.parent = parent self.live = live +# self.hotkey_map = { +# QtCore.Qt.Key_Return: 'servicemanager_next_item', +# QtCore.Qt.Key_Space: 'slidecontroller_live_next_noloop', +# QtCore.Qt.Key_Enter: 'slidecontroller_live_next_noloop', +# QtCore.Qt.Key_0: 'servicemanager_next_item', +# QtCore.Qt.Key_Backspace: 'slidecontroller_live_previous_noloop'} def keyPressEvent(self, event): - if not live: + # Key events only needed for live + if not self.live: return - if type(event) == QtGui.QKeyEvent: - #here accept the event and do something - if event.key() == QtCore.Qt.Key_Down: - print "down" - self.next() - event.accept() - elif event.key() == QtCore.Qt.Key_Escape: - print "esc" - self.close() - event.accept() - elif event.key() == QtCore.Qt.Key_V: - print "v" - self.video() - event.accept() - elif event.key() == QtCore.Qt.Key_I: - print "I" - self.image() - event.accept() - elif event.key() == QtCore.Qt.Key_P: - print "p" - self.preview() - event.accept() - elif event.key() == QtCore.Qt.Key_A: - print "a" - self.alert() - event.accept() - elif event.key() == QtCore.Qt.Key_S: - print "s" - self.shadow() - event.accept() - else: - event.ignore() - else: - event.ignore() +# if isinstance(event, QtGui.QKeyEvent): +# #here accept the event and do something +# if event.key() == QtCore.Qt.Key_Up: +# Receiver.send_message(u'slidecontroller_live_previous') +# event.accept() +# elif event.key() == QtCore.Qt.Key_Down: +# Receiver.send_message(u'slidecontroller_live_next') +# event.accept() +# elif event.key() == QtCore.Qt.Key_PageUp: +# Receiver.send_message(u'slidecontroller_live_first') +# event.accept() +# elif event.key() == QtCore.Qt.Key_PageDown: +# Receiver.send_message(u'slidecontroller_live_last') +# event.accept() +# elif event.key() in self.hotkey_map: +# Receiver.send_message(self.hotkey_map[event.key()]) +# event.accept() +# elif event.key() == QtCore.Qt.Key_Escape: +# self.resetDisplay() +# event.accept() +# event.ignore() +# else: +# event.ignore() -class WebViewer(DisplayWidget): +class MainDisplay(DisplayWidget): def __init__(self, parent, screens, live): DisplayWidget.__init__(self, live, parent=None) @@ -245,6 +113,41 @@ class WebViewer(DisplayWidget): self.slide2 = "Red Alert! Raise Shields!
" + def setup(self): + log.debug(u'Setup %s for %s ' % ( + self.screens, self.screens.monitor_number)) + self.screen = self.screens.current + self.setVisible(False) + self.setGeometry(self.screen[u'size']) + self.webView = QtWebKit.QWebView(self) + self.webView.setGeometry(0, 0, self.screen[u'size'].width(), self.screen[u'size'].height()) + self.page = self.webView.page() + self.frame = self.page.mainFrame() + QtCore.QObject.connect(self.webView, + QtCore.SIGNAL(u'loadFinished(bool)'), self.loaded) + self.frame.setScrollBarPolicy(QtCore.Qt.Vertical, + QtCore.Qt.ScrollBarAlwaysOff) + self.frame.setScrollBarPolicy(QtCore.Qt.Horizontal, + QtCore.Qt.ScrollBarAlwaysOff) + if self.isLive: + #Build the initial frame. + initialFrame = QtGui.QImage( + self.screens.current[u'size'].width(), + self.screens.current[u'size'].height(), + QtGui.QImage.Format_ARGB32_Premultiplied) + splash_image = QtGui.QImage(u':/graphics/openlp-splash-screen.png') + painter_image = QtGui.QPainter() + painter_image.begin(initialFrame) + painter_image.fillRect(initialFrame.rect(), QtCore.Qt.white) + painter_image.drawImage( + (self.screens.current[u'size'].width() - splash_image.width()) / 2, + (self.screens.current[u'size'].height() - splash_image.height()) / 2, + splash_image) + serviceItem = ServiceItem() + serviceItem.bg_frame = initialFrame + self.webView.setHtml(build_html(serviceItem, self.screen, None)) + self.show() + def next(self): if self.currslide: self.frame.evaluateJavaScript("startfade('" + self.slide2 + "')") @@ -289,41 +192,6 @@ class WebViewer(DisplayWidget): def loaded(self): self.loaded = True - def setup(self): - log.debug(u'Setup %s for %s ' % ( - self.screens, self.screens.monitor_number)) - self.screen = self.screens.current - self.setVisible(False) - self.setGeometry(self.screen[u'size']) - self.webView = QtWebKit.QWebView(self) - self.webView.setGeometry(0, 0, self.screen[u'size'].width(), self.screen[u'size'].height()) - self.page = self.webView.page() - self.frame = self.page.mainFrame() - QtCore.QObject.connect(self.webView, - QtCore.SIGNAL(u'loadFinished(bool)'), self.loaded) - self.frame.setScrollBarPolicy(QtCore.Qt.Vertical, - QtCore.Qt.ScrollBarAlwaysOff) - self.frame.setScrollBarPolicy(QtCore.Qt.Horizontal, - QtCore.Qt.ScrollBarAlwaysOff) - if self.isLive: - #Build the initial frame. - initialFrame = QtGui.QImage( - self.screens.current[u'size'].width(), - self.screens.current[u'size'].height(), - QtGui.QImage.Format_ARGB32_Premultiplied) - splash_image = QtGui.QImage(u':/graphics/openlp-splash-screen.png') - painter_image = QtGui.QPainter() - painter_image.begin(initialFrame) - painter_image.fillRect(initialFrame.rect(), QtCore.Qt.white) - painter_image.drawImage( - (self.screens.current[u'size'].width() - splash_image.width()) / 2, - (self.screens.current[u'size'].height() - splash_image.height()) / 2, - splash_image) - self.serviceItem = ServiceItem() - self.serviceItem.bg_frame = initialFrame - self.webView.setHtml(build_html(self.serviceItem, self.screen, None)) - self.show() - def preview(self): # Wait for the webview to update before geting the preview. # Important otherwise first preview will miss the background ! @@ -353,863 +221,41 @@ class WebViewer(DisplayWidget): if serviceItem.footer: self.frame.findFirstElement('div#footer').setInnerXml(serviceItem.foot_text) -#class DisplayWidget(QtGui.QGraphicsView): -# """ -# Customised version of QTableWidget which can respond to keyboard -# events. -# """ -# log.info(u'MainDisplay loaded') -# -# def __init__(self, parent=None, name=None, primary=False): -# QtGui.QWidget.__init__(self, None) -# self.parent = parent -# self.primary = primary -# self.hotkey_map = { -# QtCore.Qt.Key_Return: 'servicemanager_next_item', -# QtCore.Qt.Key_Space: 'slidecontroller_live_next_noloop', -# QtCore.Qt.Key_Enter: 'slidecontroller_live_next_noloop', -# QtCore.Qt.Key_0: 'servicemanager_next_item', -# QtCore.Qt.Key_Backspace: 'slidecontroller_live_previous_noloop'} -# -# def keyPressEvent(self, event): -# if isinstance(event, QtGui.QKeyEvent): -# #here accept the event and do something -# if event.key() == QtCore.Qt.Key_Up: -# Receiver.send_message(u'slidecontroller_live_previous') -# event.accept() -# elif event.key() == QtCore.Qt.Key_Down: -# Receiver.send_message(u'slidecontroller_live_next') -# event.accept() -# elif event.key() == QtCore.Qt.Key_PageUp: -# Receiver.send_message(u'slidecontroller_live_first') -# event.accept() -# elif event.key() == QtCore.Qt.Key_PageDown: -# Receiver.send_message(u'slidecontroller_live_last') -# event.accept() -# elif event.key() in self.hotkey_map: -# Receiver.send_message(self.hotkey_map[event.key()]) -# event.accept() -# elif event.key() == QtCore.Qt.Key_Escape: -# self.resetDisplay() -# event.accept() -# event.ignore() -# else: -# event.ignore() -# -# def resetDisplay(self): -# log.debug(u'resetDisplay') -# Receiver.send_message(u'slidecontroller_live_stop_loop') -# if self.primary: -# self.setVisible(False) -# else: -# self.setVisible(True) -# -#class MainDisplay(DisplayWidget): -# """ -# This is the form that is used to display things on the projector. -# """ -# log.info(u'MainDisplay Loaded') -# -# def __init__(self, parent, screens): -# """ -# The constructor for the display form. -# -# ``parent`` -# The parent widget. -# -# ``screens`` -# The list of screens. -# """ -# log.debug(u'Initialisation started') -# DisplayWidget.__init__(self, parent, primary=True) -# self.setWindowFlags(QtCore.Qt.Window | QtCore.Qt.FramelessWindowHint) -# self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) -# self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) -# # WA_TranslucentBackground is not available in QT4.4 -# 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(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() -# #self.displayText.setPos(0,0) -# #self.displayText.setTextWidth(self.size().width()) -# self.displayText.setZValue(4) -# self.scene.addItem(self.displayText) -# -# def setupAlert(self): -# self.alertText = QtGui.QGraphicsTextItem() -# self.alertText.setTextWidth(self.size().width()) -# self.alertText.setZValue(8) -# self.scene.addItem(self.alertText) -# -# def setupBlank(self): -# self.displayBlank = QtGui.QGraphicsPixmapItem() -# self.displayBlank.setZValue(10) -# self.scene.addItem(self.displayBlank) -# -## def hideDisplayForVideo(self): -## """ -## Hides the main display if for the video to be played -## """ -## self.hideDisplay(HideMode.Screen) -# -# 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.displayText.setPixmap(self.transparent) -# if mode == HideMode.Screen: -# #self.display_image.setPixmap(self.transparent) -# self.setVisible(False) -# elif mode == HideMode.Blank: -# self.displayBlank.setPixmap( -# QtGui.QPixmap.fromImage(self.blankFrame)) -# else: -# if self.parent.renderManager.renderer.bg_frame: -# self.displayBlank.setPixmap(QtGui.QPixmap.fromImage( -# self.parent.renderManager.renderer.bg_frame)) -# else: -# self.displayBlank.setPixmap( -# QtGui.QPixmap.fromImage(self.blankFrame)) -# if mode != HideMode.Screen and self.isHidden(): -# self.setVisible(True) -# -# def showDisplay(self, message=u''): -# """ -# Show the stored layers so the screen reappears as it was -# originally. -# Make the stored images None to release memory. -# """ -# log.debug(u'showDisplay') -# self.displayBlank.setPixmap(self.transparent) -# if self.isHidden(): -# self.setVisible(True) -# #Trigger actions when display is active again -# Receiver.send_message(u'maindisplay_active') -# -# def addImageWithText(self, frame): -# log.debug(u'addImageWithText') -# frame = resize_image( -# frame, self.screen[u'size'].width(), self.screen[u'size'].height()) -# self.imageDisplay.setPixmap(QtGui.QPixmap.fromImage(frame)) -# self.videoDisplay.setHtml(u'') -# -# def addAlert(self, message, location): -# """ -# Places the Alert text on the display at the correct location -# ``message`` -# Text to be displayed -# ``location`` -# Where on the screen the text should be. From the AlertTab -# Combo box. -# """ -# log.debug(u'addAlertImage') -# if location == 0: -# self.alertText.setPos(0, 0) -# elif location == 1: -# self.alertText.setPos(0, self.size().height() / 2) -# else: -# self.alertText.setPos(0, self.size().height() - 76) -# self.alertText.setHtml(message) -# -# def displayImage(self, frame): -# """ -# Places the Image passed on the display screen -# ``frame`` -# The image to be displayed -# """ -# log.debug(u'adddisplayImage') -# 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): -# """ -# Places the Video passed on the display screen -# ``path`` -# The path to the image to be displayed -# """ -# log.debug(u'adddisplayVideo') -# self.displayImage(self.transparent) -# self.videoDisplay.setHtml(HTMLVIDEO % -# (path, self.screen[u'size'].width(), -# self.screen[u'size'].height())) -# -# def frameView(self, frame, transition=False): -# """ -# Called from a slide controller to display a frame -# if the alert is in progress the alert is added on top -# ``frame`` -# Image frame to be rendered -# ``transition`` -# Are transitions required. -# """ -# log.debug(u'frameView') -# if transition: -# if self.frame is not None: -# self.displayText.setPixmap( -# QtGui.QPixmap.fromImage(self.frame)) -# self.repaint() -# Receiver.send_message(u'openlp_process_events') -# time.sleep(0.1) -# self.frame = None -# if frame[u'trans'] is not None: -# self.displayText.setPixmap( -# QtGui.QPixmap.fromImage(frame[u'trans'])) -# self.repaint() -# Receiver.send_message(u'openlp_process_events') -# time.sleep(0.1) -# self.frame = frame[u'trans'] -# self.displayText.setPixmap( -# QtGui.QPixmap.fromImage(frame[u'main'])) -# else: -# if isinstance(frame, QtGui.QPixmap): -# self.displayText.setPixmap(frame) -# else: -# self.displayText.setPixmap(QtGui.QPixmap.fromImage(frame)) -# if not self.isVisible() and self.screens.display: -# self.setVisible(True) -# -#class VideoDisplay(Phonon.VideoWidget): -# """ -# This is the form that is used to display videos on the projector. -# """ -# log.info(u'VideoDisplay Loaded') -# -# def __init__(self, parent, screens, -# aspect=Phonon.VideoWidget.AspectRatioWidget): -# """ -# The constructor for the display form. -# -# ``parent`` -# The parent widget. -# -# ``screens`` -# The list of screens. -# """ -# log.debug(u'VideoDisplay Initialisation started') -# Phonon.VideoWidget.__init__(self) -# self.setWindowTitle(u'OpenLP Video Display') -# self.parent = parent -# self.screens = screens -# self.hidden = False -# self.message = None -# self.mediaActive = False -# self.mediaObject = Phonon.MediaObject() -# self.setAspectRatio(aspect) -# self.audioObject = Phonon.AudioOutput(Phonon.VideoCategory) -# Phonon.createPath(self.mediaObject, self) -# Phonon.createPath(self.mediaObject, self.audioObject) -# flags = QtCore.Qt.FramelessWindowHint | QtCore.Qt.Dialog -# -# 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(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() -# #self.displayText.setPos(0,0) -# #self.displayText.setTextWidth(self.size().width()) -# self.displayText.setZValue(4) -# self.scene.addItem(self.displayText) -# -# def setupAlert(self): -# self.alertText = QtGui.QGraphicsTextItem() -# self.alertText.setTextWidth(self.size().width()) -# self.alertText.setZValue(8) -# self.scene.addItem(self.alertText) -# -# def setupBlank(self): -# self.displayBlank = QtGui.QGraphicsPixmapItem() -# self.displayBlank.setZValue(10) -# self.scene.addItem(self.displayBlank) -# -## def hideDisplayForVideo(self): -## """ -## Hides the main display if for the video to be played -## """ -## self.hideDisplay(HideMode.Screen) -# -# 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.displayText.setPixmap(self.transparent) -# if mode == HideMode.Screen: -# #self.display_image.setPixmap(self.transparent) -# self.setVisible(False) -# elif mode == HideMode.Blank: -# self.displayBlank.setPixmap( -# QtGui.QPixmap.fromImage(self.blankFrame)) -# else: -# if self.parent.renderManager.renderer.bg_frame: -# self.displayBlank.setPixmap(QtGui.QPixmap.fromImage( -# self.parent.renderManager.renderer.bg_frame)) -# else: -# self.displayBlank.setPixmap( -# QtGui.QPixmap.fromImage(self.blankFrame)) -# if mode != HideMode.Screen and self.isHidden(): -# self.setVisible(True) -# -# def showDisplay(self, message=u''): -# """ -# Show the stored layers so the screen reappears as it was -# originally. -# Make the stored images None to release memory. -# """ -# log.debug(u'showDisplay') -# self.displayBlank.setPixmap(self.transparent) -# if self.isHidden(): -# self.setVisible(True) -# #Trigger actions when display is active again -# Receiver.send_message(u'maindisplay_active') -# -# def addImageWithText(self, frame): -# log.debug(u'addImageWithText') -# frame = resize_image( -# frame, self.screen[u'size'].width(), self.screen[u'size'].height()) -# self.imageDisplay.setPixmap(QtGui.QPixmap.fromImage(frame)) -# self.videoDisplay.setHtml(u'') -# -# def addAlert(self, message, location): -# """ -# Places the Alert text on the display at the correct location -# ``message`` -# Text to be displayed -# ``location`` -# Where on the screen the text should be. From the AlertTab -# Combo box. -# """ -# log.debug(u'addAlertImage') -# if location == 0: -# self.alertText.setPos(0, 0) -# elif location == 1: -# self.alertText.setPos(0, self.size().height() / 2) -# else: -# self.alertText.setPos(0, self.size().height() - 76) -# self.alertText.setHtml(message) -# -# def displayImage(self, frame): -# """ -# Places the Image passed on the display screen -# ``frame`` -# The image to be displayed -# """ -# log.debug(u'adddisplayImage') -# if isinstance(frame, QtGui.QImage): -# self.imageDisplay.setPixmap(QtGui.QPixmap.fromImage(frame)) -# else: -# self.imageDisplay.setPixmap(frame) -# self.frameView(self.transparent) -# self.videoDisplay.setHtml(u'') -# -# def displayVideo(self, path): -# """ -# Places the Video passed on the display screen -# ``path`` -# The path to the image to be displayed -# """ -# log.debug(u'adddisplayVideo') -# self.displayImage(self.transparent) -# self.videoDisplay.setHtml(HTMLVIDEO % -# (path, self.screen[u'size'].width(), -# self.screen[u'size'].height())) -# -# def frameView(self, frame, transition=False): -# """ -# Called from a slide controller to display a frame -# if the alert is in progress the alert is added on top -# ``frame`` -# Image frame to be rendered -# ``transition`` -# Are transitions required. -# """ -# log.debug(u'frameView') -# if transition: -# if self.frame is not None: -# self.displayText.setPixmap( -# QtGui.QPixmap.fromImage(self.frame)) -# self.repaint() -# Receiver.send_message(u'openlp_process_events') -# time.sleep(0.1) -# self.frame = None -# if frame[u'trans'] is not None: -# self.displayText.setPixmap( -# QtGui.QPixmap.fromImage(frame[u'trans'])) -# self.repaint() -# Receiver.send_message(u'openlp_process_events') -# time.sleep(0.1) -# self.frame = frame[u'trans'] -# self.displayText.setPixmap( -# QtGui.QPixmap.fromImage(frame[u'main'])) -# else: -# if isinstance(frame, QtGui.QPixmap): -# self.displayText.setPixmap(frame) -# else: -# self.displayText.setPixmap(QtGui.QPixmap.fromImage(frame)) -# if not self.isVisible() and self.screens.display: -# self.setVisible(True) -# -#class VideoDisplay(Phonon.VideoWidget): -# """ -# This is the form that is used to display videos on the projector. -# """ -# log.info(u'VideoDisplay Loaded') -# -# def __init__(self, parent, screens, -# aspect=Phonon.VideoWidget.AspectRatioWidget): -# """ -# The constructor for the display form. -# -# ``parent`` -# The parent widget. -# -# ``screens`` -# The list of screens. -# """ -# log.debug(u'VideoDisplay Initialisation started') -# Phonon.VideoWidget.__init__(self) -# self.setWindowTitle(u'OpenLP Video Display') -# self.parent = parent -# self.screens = screens -# self.hidden = False -# self.message = None -# self.mediaActive = False -# self.mediaObject = Phonon.MediaObject() -# self.setAspectRatio(aspect) -# self.audioObject = Phonon.AudioOutput(Phonon.VideoCategory) -# Phonon.createPath(self.mediaObject, self) -# Phonon.createPath(self.mediaObject, self.audioObject) -# flags = QtCore.Qt.FramelessWindowHint | QtCore.Qt.Dialog -## # WindowsStaysOnBottomHint is not available in QT4.4 -# try: -# self.setAttribute(QtCore.Qt.WA_TranslucentBackground) -# except AttributeError: -# pass -# self.screens = screens -# self.setupScene() -# self.setupVideo() -# self.setupImage() -# self.setupText() -# self.setupAlert() -# self.setupBlank() -# self.blankFrame = None -# self.frame = None -# #Hide desktop for now until we know where to put it -# #and what size it should be. -# self.setVisible(False) -# -# def setup(self): -# """ -# Sets up the screen on a particular screen. -# """ -# log.debug(u'Setup %s for %s ' % ( -# self.screens, self.screens.monitor_number)) -# self.setVisible(False) -# self.screen = self.screens.current -# #Sort out screen locations and sizes -# self.setGeometry(self.screen[u'size']) -# self.scene.setSceneRect(0, 0, self.size().width(), -# self.size().height()) -# self.webView.setGeometry(0, 0, self.size().width(), -# self.size().height()) -# #Build a custom splash screen -# self.repaint() -# #Build a Black screen -# painter = QtGui.QPainter() -# self.blankFrame = QtGui.QImage( -# self.screen[u'size'].width(), -# self.screen[u'size'].height(), -# QtGui.QImage.Format_ARGB32_Premultiplied) -# painter.begin(self.blankFrame) -# painter.fillRect(self.blankFrame.rect(), QtCore.Qt.black) -# #build a blank transparent image -# self.transparent = QtGui.QPixmap( -# self.screen[u'size'].width(), self.screen[u'size'].height()) -# self.transparent.fill(QtCore.Qt.transparent) -## self.displayText.setPixmap(self.transparent) -# #self.frameView(self.transparent) -# # To display or not to display? -# if not self.screen[u'primary']: -# self.setVisible(True) -# self.primary = False -# else: -# self.setVisible(False) -# self.primary = True -# -# def setupScene(self): -# self.scene = QtGui.QGraphicsScene(self) -# self.scene.setSceneRect(0, 0, self.size().width(), self.size().height()) -# self.setScene(self.scene) -# -# def setupVideo(self): -# self.webView = QtWebKit.QWebView() -# self.page = self.webView.page() -# 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(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() -# #self.displayText.setPos(0,0) -# #self.displayText.setTextWidth(self.size().width()) -# self.displayText.setZValue(4) -# self.scene.addItem(self.displayText) -# -# def setupAlert(self): -# self.alertText = QtGui.QGraphicsTextItem() -# self.alertText.setTextWidth(self.size().width()) -# self.alertText.setZValue(8) -# self.scene.addItem(self.alertText) -# -# def setupBlank(self): -# self.displayBlank = QtGui.QGraphicsPixmapItem() -# self.displayBlank.setZValue(10) -# self.scene.addItem(self.displayBlank) -# -## def hideDisplayForVideo(self): -## """ -## Hides the main display if for the video to be played -## """ -## self.hideDisplay(HideMode.Screen) -# -# 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.displayText.setPixmap(self.transparent) -# if mode == HideMode.Screen: -# #self.display_image.setPixmap(self.transparent) -# self.setVisible(False) -# elif mode == HideMode.Blank: -# self.displayBlank.setPixmap( -# QtGui.QPixmap.fromImage(self.blankFrame)) -# else: -# if self.parent.renderManager.renderer.bg_frame: -# self.displayBlank.setPixmap(QtGui.QPixmap.fromImage( -# self.parent.renderManager.renderer.bg_frame)) -# else: -# self.displayBlank.setPixmap( -# QtGui.QPixmap.fromImage(self.blankFrame)) -# -# def showDisplay(self, message=u''): -# """ -# Show the stored layers so the screen reappears as it was -# originally. -# Make the stored images None to release memory. -# """ -# log.debug(u'showDisplay') -# self.displayBlank.setPixmap(self.transparent) -# #Trigger actions when display is active again -# Receiver.send_message(u'maindisplay_active') -# -# def addImageWithText(self, frame): -# log.debug(u'addImageWithText') -# frame = resize_image( -# frame, self.screen[u'size'].width(), self.screen[u'size'].height()) -# self.imageDisplay.setPixmap(QtGui.QPixmap.fromImage(frame)) -# self.videoDisplay.setHtml(u'') -# -# def addAlert(self, message, location): -# """ -# Places the Alert text on the display at the correct location -# ``message`` -# Text to be displayed -# ``location`` -# Where on the screen the text should be. From the AlertTab -# Combo box. -# """ -# log.debug(u'addAlertImage') -# if location == 0: -# self.alertText.setPos(0, 0) -# elif location == 1: -# self.alertText.setPos(0, self.size().height() / 2) -# else: -# self.alertText.setPos(0, self.size().height() - 76) -# self.alertText.setHtml(message) -# -# def displayImage(self, frame): -# """ -# Places the Image passed on the display screen -# ``frame`` -# The image to be displayed -# """ -# log.debug(u'adddisplayImage') -# 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): -# """ -# Places the Video passed on the display screen -# ``path`` -# The path to the image to be displayed -# """ -# log.debug(u'adddisplayVideo') -# self.displayImage(self.transparent) -# self.videoDisplay.setHtml(HTMLVIDEO % -# (path, self.screen[u'size'].width(), -# self.screen[u'size'].height())) -# -# def frameView(self, frame, transition=False): -# """ -# Called from a slide controller to display a frame -# if the alert is in progress the alert is added on top -# ``frame`` -# Image frame to be rendered -# ``transition`` -# Are transitions required. -# """ -# log.debug(u'frameView') -# if transition: -# if self.frame is not None: -# self.displayText.setPixmap( -# QtGui.QPixmap.fromImage(self.frame)) -# self.repaint() -# Receiver.send_message(u'openlp_process_events') -# time.sleep(0.1) -# self.frame = None -# if frame[u'trans'] is not None: -# self.displayText.setPixmap( -# QtGui.QPixmap.fromImage(frame[u'trans'])) -# self.repaint() -# Receiver.send_message(u'openlp_process_events') -# time.sleep(0.1) -# self.frame = frame[u'trans'] -# self.displayText.setPixmap( -# QtGui.QPixmap.fromImage(frame[u'main'])) -# else: -# if isinstance(frame, QtGui.QPixmap): -# self.displayText.setPixmap(frame) -# else: -# self.displayText.setPixmap(QtGui.QPixmap.fromImage(frame)) -# if not self.isVisible() and self.screens.display: -# self.setVisible(True) -# -#class VideoDisplay(Phonon.VideoWidget): -# """ -# This is the form that is used to display videos on the projector. -# """ -# log.info(u'VideoDisplay Loaded') -# -# def __init__(self, parent, screens, -# aspect=Phonon.VideoWidget.AspectRatioWidget): -# """ -# The constructor for the display form. -# -# ``parent`` -# The parent widget. -# -# ``screens`` -# The list of screens. -# """ -# log.debug(u'VideoDisplay Initialisation started') -# Phonon.VideoWidget.__init__(self) -# self.setWindowTitle(u'OpenLP Video Display') -# self.parent = parent -# self.screens = screens -# self.hidden = False -# self.message = None -# self.mediaActive = False -# self.mediaObject = Phonon.MediaObject() -# self.setAspectRatio(aspect) -# self.audioObject = Phonon.AudioOutput(Phonon.VideoCategory) -# Phonon.createPath(self.mediaObject, self) -# Phonon.createPath(self.mediaObject, self.audioObject) -# flags = QtCore.Qt.FramelessWindowHint | QtCore.Qt.Dialog -### # WindowsStaysOnBottomHint is not available in QT4.4 -## try: -## flags = flags | QtCore.Qt.WindowStaysOnBottomHint -## except AttributeError: -## pass -# self.setWindowFlags(flags) -# QtCore.QObject.connect(Receiver.get_receiver(), -# QtCore.SIGNAL(u'videodisplay_play'), self.onMediaPlay) -# QtCore.QObject.connect(Receiver.get_receiver(), -# QtCore.SIGNAL(u'videodisplay_pause'), self.onMediaPause) -## QtCore.QObject.connect(Receiver.get_receiver(), -## QtCore.SIGNAL(u'videodisplay_background'), self.onMediaBackground) -# -# QtCore.QObject.connect(self.mediaObject, -# QtCore.SIGNAL(u'finished()'), self.onMediaStop) -# self.setVisible(False) -# -# def keyPressEvent(self, event): -# if isinstance(event, QtGui.QKeyEvent): -# #here accept the event and do something -# if event.key() == QtCore.Qt.Key_Escape: -# self.onMediaStop() -# event.accept() -# event.ignore() -# else: -# event.ignore() -# -# def setup(self): -# """ -# Sets up the screen on a particular screen. -# """ -# log.debug(u'VideoDisplay Setup %s for %s ' % (self.screens, -# self.screens.monitor_number)) -# self.screen = self.screens.current -# #Sort out screen locations and sizes -# self.setGeometry(self.screen[u'size']) -# # To display or not to display? -# if not self.screen[u'primary']: # and self.isVisible(): -# #self.showFullScreen() -# self.setVisible(False) -# self.primary = False -# else: -# self.setVisible(False) -# self.primary = True -# -# def closeEvent(self, event): -# """ -# Shutting down so clean up connections -# """ -# self.onMediaStop() -# for path in self.outputPaths(): -# path.disconnect() -# -## def onMediaBackground(self, message=None): -## """ -## Play a video triggered from the video plugin with the -## file name passed in on the event. -## Also triggered from the Finish event so the video will loop -## if it is triggered from the plugin -## """ -## log.debug(u'VideoDisplay Queue new media message %s' % message) -## #If not file take the stored one -## if not message: -## message = self.message -## # still no file name then stop as it was a normal video stopping -## if message: -## self.mediaObject.setCurrentSource(Phonon.MediaSource(message)) -## self.message = message -## self._play() -# -# def onMediaQueue(self, message): -# """ -# Set up a video to play from the serviceitem. -# """ -# log.debug(u'VideoDisplay Queue new media message %s' % message) -# file = os.path.join(message.get_frame_path(), -# message.get_frame_title()) -# self.mediaObject.setCurrentSource(Phonon.MediaSource(file)) -# self.mediaActive = True -# self._play() -# -# def onMediaPlay(self): -# """ -# Respond to the Play button on the slide controller unless the display -# has been hidden by the slidecontroller -# """ -# if not self.hidden: -# log.debug(u'VideoDisplay Play the new media, Live ') -# self._play() -# -# def _play(self): -# """ -# We want to play the video so start it and display the screen -# """ -# log.debug(u'VideoDisplay _play called') -# self.mediaObject.play() -# self.setVisible(True) -# -# def onMediaPause(self): -# """ -# Pause the video and refresh the screen -# """ -# log.debug(u'VideoDisplay Media paused by user') -# self.mediaObject.pause() -# self.show() -# -# def onMediaStop(self): -# """ -# Stop the video and clean up -# """ -# log.debug(u'VideoDisplay Media stopped by user') -# self.message = None -# self.mediaActive = False -# self.mediaObject.stop() -# self.onMediaFinish() -# -# def onMediaFinish(self): -# """ -# Clean up the Object queue -# """ -# log.debug(u'VideoDisplay Reached end of media playlist') -# self.mediaObject.clearQueue() -# self.setVisible(False) -# -# def mediaHide(self, message=u''): -# """ -# Hide the video display -# """ -# self.mediaObject.pause() -# self.hidden = True -# self.setVisible(False) -# -# def mediaShow(self, message=''): -# """ -# Show the video display if it was already hidden -# """ -# if self.hidden: -# self.hidden = False -# if self.mediaActive: -# self._play() + 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.displayText.setPixmap(self.transparent) + if mode == HideMode.Screen: + #self.display_image.setPixmap(self.transparent) + self.setVisible(False) + elif mode == HideMode.Blank: + self.displayBlank.setPixmap( + QtGui.QPixmap.fromImage(self.blankFrame)) + else: + if self.parent.renderManager.renderer.bg_frame: + self.displayBlank.setPixmap(QtGui.QPixmap.fromImage( + self.parent.renderManager.renderer.bg_frame)) + else: + self.displayBlank.setPixmap( + QtGui.QPixmap.fromImage(self.blankFrame)) + if mode != HideMode.Screen and self.isHidden(): + self.setVisible(True) + + def showDisplay(self, message=u''): + """ + Show the stored layers so the screen reappears as it was + originally. + Make the stored images None to release memory. + """ + log.debug(u'showDisplay') + self.displayBlank.setPixmap(self.transparent) + if self.isHidden(): + self.setVisible(True) + #Trigger actions when display is active again + Receiver.send_message(u'maindisplay_active') class AudioPlayer(QtCore.QObject): """ diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 1f22bb894..2461f4a74 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -30,7 +30,7 @@ import os from PyQt4 import QtCore, QtGui from PyQt4.phonon import Phonon -from openlp.core.ui import HideMode, WebViewer +from openlp.core.ui import HideMode, MainDisplay from openlp.core.lib import OpenLPToolbar, Receiver, resize_image, \ ItemCapabilities, translate @@ -105,7 +105,7 @@ class SlideController(QtGui.QWidget): self.isLive = isLive self.parent = parent self.screens = screens - self.display = WebViewer(self, screens, isLive) + self.display = MainDisplay(self, screens, isLive) #self.displayManager = self.parent.displayManager self.loopList = [ u'Start Loop', @@ -986,4 +986,4 @@ class SlideController(QtGui.QWidget): text = text.replace(u'', u'')\ .replace(u'
', u'').replace(u'', u'')\ .replace(u'', u'') - return text + return text \ No newline at end of file