Display Screen handling improvements

This commit is contained in:
Tim Bentley 2009-10-17 17:11:41 +01:00
parent 1082428926
commit 7273ff3d2f
2 changed files with 72 additions and 9 deletions

View File

@ -27,7 +27,38 @@ from PyQt4 import QtCore, QtGui
from openlp.core.lib import Receiver, str_to_bool from openlp.core.lib import Receiver, str_to_bool
class MainDisplay(QtGui.QWidget): class DisplayLabel(QtGui.QWidget):
"""
Customised version of QTableWidget which can respond to keyboard
events.
"""
def __init__(self, parent=None, name=None):
QQtGui.QWidget.__init__(self, parent)
self.parent = parent
def keyPressEvent(self, event):
if type(event) == QtGui.QKeyEvent:
#here accept the event and do something
if event.key() == QtCore.Qt.Key_Up:
Receiver().send_message(u'slidecontroller_previous')
event.accept()
elif event.key() == QtCore.Qt.Key_Down:
Receiver().send_message(u'slidecontroller_next')
event.accept()
elif event.key() == QtCore.Qt.Key_PageUp:
Receiver().send_message(u'slidecontroller_first')
event.accept()
elif event.key() == QtCore.Qt.Key_PageDown:
Receiver().send_message(u'slidecontroller_last')
event.accept()
elif event.key() == QtCore.Qt.Key_Escape:
self.resetDisplay()
event.accept()
event.ignore()
else:
event.ignore()
class MainDisplay(DisplayLabel):
""" """
This is the form that is used to display things on the projector. This is the form that is used to display things on the projector.
""" """
@ -59,6 +90,7 @@ class MainDisplay(QtGui.QWidget):
self.layout.addWidget(self.display) self.layout.addWidget(self.display)
self.displayBlank = False self.displayBlank = False
self.blankFrame = None self.blankFrame = None
self.frame = None
self.alertactive = False self.alertactive = False
self.alertTab = None self.alertTab = None
self.timer_id = 0 self.timer_id = 0
@ -66,6 +98,10 @@ class MainDisplay(QtGui.QWidget):
QtCore.SIGNAL(u'live_slide_blank'), self.blankDisplay) QtCore.SIGNAL(u'live_slide_blank'), self.blankDisplay)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'alert_text'), self.displayAlert) QtCore.SIGNAL(u'alert_text'), self.displayAlert)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'presentations_start'), self.hideDisplay)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'presentations_stop'), self.showDisplay)
def setup(self, screenNumber): def setup(self, screenNumber):
""" """
@ -84,8 +120,10 @@ class MainDisplay(QtGui.QWidget):
self.setGeometry(screen[u'size']) self.setGeometry(screen[u'size'])
if not screen[u'primary']: if not screen[u'primary']:
self.showFullScreen() self.showFullScreen()
self.primary = False
else: else:
self.showMinimized() self.setVisible(False)
self.primary = True
#Build a custom splash screen #Build a custom splash screen
if str_to_bool(self.parent.generalConfig.get_config(u'show splash', u'True')): if str_to_bool(self.parent.generalConfig.get_config(u'show splash', u'True')):
self.InitialFrame = QtGui.QImage( self.InitialFrame = QtGui.QImage(
@ -108,6 +146,17 @@ class MainDisplay(QtGui.QWidget):
painter.begin(self.blankFrame) painter.begin(self.blankFrame)
painter.fillRect(self.blankFrame.rect(), QtCore.Qt.black) painter.fillRect(self.blankFrame.rect(), QtCore.Qt.black)
def resetDisplay(self):
if self.primary:
self.setVisible(False)
def hideDisplay(self):
self.setVisible(False)
def showDisplay(self):
if not self.primary:
self.setVisible(True)
def frameView(self, frame): def frameView(self, frame):
""" """
Called from a slide controller to display a frame Called from a slide controller to display a frame
@ -120,6 +169,9 @@ class MainDisplay(QtGui.QWidget):
self.displayAlert() self.displayAlert()
elif not self.displayBlank: elif not self.displayBlank:
self.display.setPixmap(QtGui.QPixmap.fromImage(frame)) self.display.setPixmap(QtGui.QPixmap.fromImage(frame))
if not self.isVisible():
self.setVisible(True)
self.showFullScreen()
def blankDisplay(self): def blankDisplay(self):
if not self.displayBlank: if not self.displayBlank:
@ -127,7 +179,8 @@ class MainDisplay(QtGui.QWidget):
self.display.setPixmap(QtGui.QPixmap.fromImage(self.blankFrame)) self.display.setPixmap(QtGui.QPixmap.fromImage(self.blankFrame))
else: else:
self.displayBlank = False self.displayBlank = False
self.frameView(self.frame) if self.frame is not None:
self.frameView(self.frame)
def displayAlert(self, text=u''): def displayAlert(self, text=u''):
""" """

View File

@ -195,8 +195,14 @@ 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)
else: QtCore.QObject.connect(Receiver.get_receiver(),
pass QtCore.SIGNAL(u'slidecontroller_first'), self.onSlideSelectedFirst)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'slidecontroller_next'), self.onSlideSelectedNext)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'slidecontroller_previous'), self.onSlideSelectedPrevious)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'slidecontroller_last'), self.onSlideSelectedLast)
def receiveSpinDelay(self, value): def receiveSpinDelay(self, value):
self.DelaySpinBox.setValue(int(value)) self.DelaySpinBox.setValue(int(value))
@ -321,7 +327,8 @@ class SlideController(QtGui.QWidget):
""" """
Go to the first slide. Go to the first slide.
""" """
if self.commandItem.service_item_type == ServiceType.Command: if self.commandItem is not None and \
self.commandItem.service_item_type == ServiceType.Command:
Receiver().send_message(u'%s_first'% self.commandItem.name.lower()) Receiver().send_message(u'%s_first'% self.commandItem.name.lower())
else: else:
self.PreviewListWidget.selectRow(0) self.PreviewListWidget.selectRow(0)
@ -364,7 +371,8 @@ class SlideController(QtGui.QWidget):
""" """
Go to the next slide. Go to the next slide.
""" """
if self.commandItem.service_item_type == ServiceType.Command: if self.commandItem is not None and \
self.commandItem.service_item_type == ServiceType.Command:
Receiver().send_message(u'%s_next'% self.commandItem.name.lower()) Receiver().send_message(u'%s_next'% self.commandItem.name.lower())
else: else:
row = self.PreviewListWidget.currentRow() + 1 row = self.PreviewListWidget.currentRow() + 1
@ -377,7 +385,8 @@ class SlideController(QtGui.QWidget):
""" """
Go to the previous slide. Go to the previous slide.
""" """
if self.commandItem.service_item_type == ServiceType.Command: if self.commandItem is not None and \
self.commandItem.service_item_type == ServiceType.Command:
Receiver().send_message( Receiver().send_message(
u'%s_previous'% self.commandItem.name.lower()) u'%s_previous'% self.commandItem.name.lower())
else: else:
@ -391,7 +400,8 @@ class SlideController(QtGui.QWidget):
""" """
Go to the last slide. Go to the last slide.
""" """
if self.commandItem.service_item_type == ServiceType.Command: if self.commandItem is not None and \
self.commandItem.service_item_type == ServiceType.Command:
Receiver().send_message(u'%s_last'% self.commandItem.name.lower()) Receiver().send_message(u'%s_last'% self.commandItem.name.lower())
else: else:
self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount() - 1) self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount() - 1)