forked from openlp/openlp
Cleanups and ratio changes
This commit is contained in:
parent
b76a946bff
commit
63b4696621
@ -174,13 +174,14 @@ def image_to_byte(image):
|
|||||||
The image to converted.
|
The image to converted.
|
||||||
"""
|
"""
|
||||||
byte_array = QtCore.QByteArray()
|
byte_array = QtCore.QByteArray()
|
||||||
buffer = QtCore.QBuffer(byte_array) #// use buffer to store pixmap into byteArray
|
# use buffer to store pixmap into byteArray
|
||||||
buffer.open(QtCore.QIODevice.WriteOnly)
|
buffie = QtCore.QBuffer(byte_array)
|
||||||
|
buffie.open(QtCore.QIODevice.WriteOnly)
|
||||||
if isinstance(image, QtGui.QImage):
|
if isinstance(image, QtGui.QImage):
|
||||||
pixmap = QtGui.QPixmap.fromImage(image)
|
pixmap = QtGui.QPixmap.fromImage(image)
|
||||||
else:
|
else:
|
||||||
pixmap = QtGui.QPixmap(image)
|
pixmap = QtGui.QPixmap(image)
|
||||||
pixmap.save(buffer, "PNG")
|
pixmap.save(buffie, "PNG")
|
||||||
#convert to base64 encoding so does not get missed!
|
#convert to base64 encoding so does not get missed!
|
||||||
return byte_array.toBase64()
|
return byte_array.toBase64()
|
||||||
|
|
||||||
|
@ -40,6 +40,7 @@ HTMLSRC = u"""
|
|||||||
%s
|
%s
|
||||||
%s
|
%s
|
||||||
%s
|
%s
|
||||||
|
%s
|
||||||
</style>
|
</style>
|
||||||
<script language="javascript">
|
<script language="javascript">
|
||||||
var t = null;
|
var t = null;
|
||||||
@ -74,6 +75,7 @@ HTMLSRC = u"""
|
|||||||
<div id="footer" class="footer"></div>
|
<div id="footer" class="footer"></div>
|
||||||
<div id="alert"></div>
|
<div id="alert"></div>
|
||||||
<video id="video"></video>
|
<video id="video"></video>
|
||||||
|
<blank id="blank"></blank>
|
||||||
%s
|
%s
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@ -83,11 +85,13 @@ def build_html(item, screen, alert):
|
|||||||
height = screen[u'size'].height()
|
height = screen[u'size'].height()
|
||||||
html = HTMLSRC % (build_video(width, height),
|
html = HTMLSRC % (build_video(width, height),
|
||||||
build_image(width, height),
|
build_image(width, height),
|
||||||
build_lyrics(item, width, height),
|
build_lyrics(item),
|
||||||
build_footer(item, width, height),
|
build_footer(item),
|
||||||
build_alert(width, height, alert),
|
build_alert(width, alert),
|
||||||
build_image(width, height),
|
build_image(width, height),
|
||||||
|
build_blank(width, height),
|
||||||
build_image_src(item.bg_frame))
|
build_image_src(item.bg_frame))
|
||||||
|
print html
|
||||||
return html
|
return html
|
||||||
|
|
||||||
def build_video(width, height):
|
def build_video(width, height):
|
||||||
@ -103,6 +107,18 @@ def build_video(width, height):
|
|||||||
"""
|
"""
|
||||||
return video % (width, height)
|
return video % (width, height)
|
||||||
|
|
||||||
|
def build_blank(width, height):
|
||||||
|
blank = """
|
||||||
|
#blank {
|
||||||
|
position: absolute;
|
||||||
|
left: 0px;
|
||||||
|
top: 0px;
|
||||||
|
width: %spx
|
||||||
|
height: %spx;
|
||||||
|
z-index:10;
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
return blank % (width, height)
|
||||||
|
|
||||||
def build_image(width, height):
|
def build_image(width, height):
|
||||||
image = """
|
image = """
|
||||||
@ -124,7 +140,7 @@ def build_image_src(image):
|
|||||||
"""
|
"""
|
||||||
return image_src % image_to_byte(image)
|
return image_src % image_to_byte(image)
|
||||||
|
|
||||||
def build_lyrics(item, width, height):
|
def build_lyrics(item):
|
||||||
lyrics = """
|
lyrics = """
|
||||||
#lyrics {position: absolute; %s z-index:3; %s; %s %s }
|
#lyrics {position: absolute; %s z-index:3; %s; %s %s }
|
||||||
table {border=0;margin=0padding=0;}
|
table {border=0;margin=0padding=0;}
|
||||||
@ -136,9 +152,10 @@ def build_lyrics(item, width, height):
|
|||||||
font = u''
|
font = u''
|
||||||
text = u''
|
text = u''
|
||||||
if theme:
|
if theme:
|
||||||
position = u' left: %spx; top: %spx; width: %spx; height: %spx; ' %\
|
position = u' left: %spx; top: %spx; width: %spx; height: %spx; ' % \
|
||||||
(item.main.x(), item.main.y(), item.main.width(), item.main.height())
|
(item.main.x(), item.main.y(), item.main.width(),
|
||||||
font = u' font-family %s; font-size: %spx;' %\
|
item.main.height())
|
||||||
|
font = u' font-family %s; font-size: %spx;' % \
|
||||||
(theme.font_main_name, theme.font_main_proportion)
|
(theme.font_main_name, theme.font_main_proportion)
|
||||||
align = u''
|
align = u''
|
||||||
if theme.display_horizontalAlign == 2:
|
if theme.display_horizontalAlign == 2:
|
||||||
@ -153,7 +170,8 @@ def build_lyrics(item, width, height):
|
|||||||
valign = u'vertical-align=bottom;'
|
valign = u'vertical-align=bottom;'
|
||||||
text = u'color:%s; %s %s' % (theme.font_main_color, align, valign)
|
text = u'color:%s; %s %s' % (theme.font_main_color, align, valign)
|
||||||
if theme.display_shadow and theme.display_outline:
|
if theme.display_shadow and theme.display_outline:
|
||||||
fontworks = u'text-shadow: -%spx 0 %s, 0 %spx %s, %spx 0 %s, 0 -%spx %s, %spx %spx %spx %s' %\
|
fontworks = u'text-shadow: -%spx 0 %s, 0 %spx %s, %spx 0 %s, 0 ' \
|
||||||
|
'-%spx %s, %spx %spx %spx %s' % \
|
||||||
(theme.display_outline_size, theme.display_outline_color,
|
(theme.display_outline_size, theme.display_outline_color,
|
||||||
theme.display_outline_size, theme.display_outline_color,
|
theme.display_outline_size, theme.display_outline_color,
|
||||||
theme.display_outline_size, theme.display_outline_color,
|
theme.display_outline_size, theme.display_outline_color,
|
||||||
@ -161,11 +179,12 @@ def build_lyrics(item, width, height):
|
|||||||
theme.display_shadow_size, theme.display_shadow_size,
|
theme.display_shadow_size, theme.display_shadow_size,
|
||||||
theme.display_shadow_size, theme.display_shadow_color)
|
theme.display_shadow_size, theme.display_shadow_color)
|
||||||
elif theme.display_shadow:
|
elif theme.display_shadow:
|
||||||
fontworks = u'text-shadow: %spx %spx %spx %s' %\
|
fontworks = u'text-shadow: %spx %spx %spx %s' % \
|
||||||
(theme.display_shadow_size, theme.display_shadow_size,
|
(theme.display_shadow_size, theme.display_shadow_size,
|
||||||
theme.display_shadow_size, theme.display_shadow_color)
|
theme.display_shadow_size, theme.display_shadow_color)
|
||||||
elif theme.display_outline:
|
elif theme.display_outline:
|
||||||
fontworks = u'text-shadow: -%spx 0 %s, 0 %spx %s, %spx 0 %s, 0 -%spx %s' %\
|
fontworks = u'text-shadow: -%spx 0 %s, 0 %spx %s,' \
|
||||||
|
' %spx 0 %s, 0 -%spx %s' % \
|
||||||
(theme.display_outline_size, theme.display_outline_color,
|
(theme.display_outline_size, theme.display_outline_color,
|
||||||
theme.display_outline_size, theme.display_outline_color,
|
theme.display_outline_size, theme.display_outline_color,
|
||||||
theme.display_outline_size, theme.display_outline_color,
|
theme.display_outline_size, theme.display_outline_color,
|
||||||
@ -174,7 +193,7 @@ def build_lyrics(item, width, height):
|
|||||||
print lyrics_html
|
print lyrics_html
|
||||||
return lyrics_html
|
return lyrics_html
|
||||||
|
|
||||||
def build_footer(item, width, height):
|
def build_footer(item):
|
||||||
lyrics = """
|
lyrics = """
|
||||||
#footer {position: absolute; %s z-index:3; %s; %s }
|
#footer {position: absolute; %s z-index:3; %s; %s }
|
||||||
"""
|
"""
|
||||||
@ -184,9 +203,10 @@ def build_footer(item, width, height):
|
|||||||
font = u''
|
font = u''
|
||||||
text = u''
|
text = u''
|
||||||
if theme:
|
if theme:
|
||||||
position = u' left: %spx; top: %spx; width: %spx; height: %spx; ' %\
|
position = u' left: %spx; top: %spx; width: %spx; height: %spx; ' % \
|
||||||
(item.footer.x(), item.footer.y(), item.footer.width(), item.footer.height())
|
(item.footer.x(), item.footer.y(), item.footer.width(),
|
||||||
font = u' font-family %s; font-size: %spx;' %\
|
item.footer.height())
|
||||||
|
font = u' font-family %s; font-size: %spx;' % \
|
||||||
(theme.font_footer_name, theme.font_footer_proportion)
|
(theme.font_footer_name, theme.font_footer_proportion)
|
||||||
align = u''
|
align = u''
|
||||||
if theme.display_horizontalAlign == 2:
|
if theme.display_horizontalAlign == 2:
|
||||||
@ -205,7 +225,7 @@ def build_footer(item, width, height):
|
|||||||
return lyrics_html
|
return lyrics_html
|
||||||
|
|
||||||
|
|
||||||
def build_alert(width, height, alert):
|
def build_alert(width, alert):
|
||||||
alert = """
|
alert = """
|
||||||
#alert {
|
#alert {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
@ -36,18 +36,6 @@ log = logging.getLogger(__name__)
|
|||||||
|
|
||||||
#http://www.steveheffernan.com/html5-video-player/demo-video-player.html
|
#http://www.steveheffernan.com/html5-video-player/demo-video-player.html
|
||||||
|
|
||||||
## QtCore.QObject.connect(Receiver.get_receiver(),
|
|
||||||
## QtCore.SIGNAL(u'maindisplay_hide'), self.hideDisplay)
|
|
||||||
## QtCore.QObject.connect(Receiver.get_receiver(),
|
|
||||||
## QtCore.SIGNAL(u'maindisplay_show'), self.showDisplay)
|
|
||||||
## QtCore.QObject.connect(Receiver.get_receiver(),
|
|
||||||
## QtCore.SIGNAL(u'videodisplay_start'), self.onStartVideo)
|
|
||||||
## QtCore.QObject.connect(Receiver.get_receiver(),
|
|
||||||
## QtCore.SIGNAL(u'videodisplay_stop'), self.onStopVideo)
|
|
||||||
## QtCore.QObject.connect(Receiver.get_receiver(),
|
|
||||||
## QtCore.SIGNAL(u'config_updated'), self.setup)
|
|
||||||
|
|
||||||
|
|
||||||
class DisplayWidget(QtGui.QGraphicsView):
|
class DisplayWidget(QtGui.QGraphicsView):
|
||||||
"""
|
"""
|
||||||
Customised version of QTableWidget which can respond to keyboard
|
Customised version of QTableWidget which can respond to keyboard
|
||||||
@ -55,44 +43,44 @@ class DisplayWidget(QtGui.QGraphicsView):
|
|||||||
"""
|
"""
|
||||||
log.info(u'Display Widget loaded')
|
log.info(u'Display Widget loaded')
|
||||||
|
|
||||||
def __init__(self, live, parent=None, name=None):
|
def __init__(self, live, parent=None):
|
||||||
QtGui.QGraphicsView.__init__(self)
|
QtGui.QGraphicsView.__init__(self)
|
||||||
self.parent = parent
|
self.parent = parent
|
||||||
self.live = live
|
self.live = live
|
||||||
# self.hotkey_map = {
|
self.hotkey_map = {
|
||||||
# QtCore.Qt.Key_Return: 'servicemanager_next_item',
|
QtCore.Qt.Key_Return: 'servicemanager_next_item',
|
||||||
# QtCore.Qt.Key_Space: 'slidecontroller_live_next_noloop',
|
QtCore.Qt.Key_Space: 'slidecontroller_live_next_noloop',
|
||||||
# QtCore.Qt.Key_Enter: 'slidecontroller_live_next_noloop',
|
QtCore.Qt.Key_Enter: 'slidecontroller_live_next_noloop',
|
||||||
# QtCore.Qt.Key_0: 'servicemanager_next_item',
|
QtCore.Qt.Key_0: 'servicemanager_next_item',
|
||||||
# QtCore.Qt.Key_Backspace: 'slidecontroller_live_previous_noloop'}
|
QtCore.Qt.Key_Backspace: 'slidecontroller_live_previous_noloop'}
|
||||||
|
|
||||||
def keyPressEvent(self, event):
|
def keyPressEvent(self, event):
|
||||||
# Key events only needed for live
|
# Key events only needed for live
|
||||||
if not self.live:
|
if not self.live:
|
||||||
return
|
return
|
||||||
# if isinstance(event, QtGui.QKeyEvent):
|
if isinstance(event, QtGui.QKeyEvent):
|
||||||
# #here accept the event and do something
|
# Here accept the event and do something
|
||||||
# if event.key() == QtCore.Qt.Key_Up:
|
if event.key() == QtCore.Qt.Key_Up:
|
||||||
# Receiver.send_message(u'slidecontroller_live_previous')
|
Receiver.send_message(u'slidecontroller_live_previous')
|
||||||
# event.accept()
|
event.accept()
|
||||||
# elif event.key() == QtCore.Qt.Key_Down:
|
elif event.key() == QtCore.Qt.Key_Down:
|
||||||
# Receiver.send_message(u'slidecontroller_live_next')
|
Receiver.send_message(u'slidecontroller_live_next')
|
||||||
# event.accept()
|
event.accept()
|
||||||
# elif event.key() == QtCore.Qt.Key_PageUp:
|
elif event.key() == QtCore.Qt.Key_PageUp:
|
||||||
# Receiver.send_message(u'slidecontroller_live_first')
|
Receiver.send_message(u'slidecontroller_live_first')
|
||||||
# event.accept()
|
event.accept()
|
||||||
# elif event.key() == QtCore.Qt.Key_PageDown:
|
elif event.key() == QtCore.Qt.Key_PageDown:
|
||||||
# Receiver.send_message(u'slidecontroller_live_last')
|
Receiver.send_message(u'slidecontroller_live_last')
|
||||||
# event.accept()
|
event.accept()
|
||||||
# elif event.key() in self.hotkey_map:
|
elif event.key() in self.hotkey_map:
|
||||||
# Receiver.send_message(self.hotkey_map[event.key()])
|
Receiver.send_message(self.hotkey_map[event.key()])
|
||||||
# event.accept()
|
event.accept()
|
||||||
# elif event.key() == QtCore.Qt.Key_Escape:
|
elif event.key() == QtCore.Qt.Key_Escape:
|
||||||
# self.resetDisplay()
|
self.resetDisplay()
|
||||||
# event.accept()
|
event.accept()
|
||||||
# event.ignore()
|
event.ignore()
|
||||||
# else:
|
else:
|
||||||
# event.ignore()
|
event.ignore()
|
||||||
|
|
||||||
class MainDisplay(DisplayWidget):
|
class MainDisplay(DisplayWidget):
|
||||||
|
|
||||||
@ -104,14 +92,18 @@ class MainDisplay(DisplayWidget):
|
|||||||
self.setWindowTitle(u'OpenLP Display')
|
self.setWindowTitle(u'OpenLP Display')
|
||||||
self.setWindowFlags(QtCore.Qt.FramelessWindowHint |
|
self.setWindowFlags(QtCore.Qt.FramelessWindowHint |
|
||||||
QtCore.Qt.WindowStaysOnTopHint)
|
QtCore.Qt.WindowStaysOnTopHint)
|
||||||
|
|
||||||
self.currvideo = False
|
|
||||||
self.video1 = "c:\\users\\jonathan\\Desktop\\Wildlife.wmv"
|
|
||||||
self.video2 = "c:\\users\\jonathan\\Desktop\\movie.ogg"
|
|
||||||
self.currslide = False
|
|
||||||
self.slide1 = "<sup>[1:1]</sup> In the beginning God created the heavens and the earth.<br/><br/><sup> [1:2]</sup> Now the earth was formless and empty, darkness was over the surface of the deep, and the Spirit of God was hovering over the waters.<br/><br/><sup>[1:3]</sup> And God said, \"Let there be light,\" and there was light.<br/><br/><sup>[1:4]</sup> God saw that the light was good, and he separated the light from the darkness.<br/><br/>"
|
|
||||||
self.slide2 = "<br /><br />This is the chorus<br />Blah Blah Blah<br />Blah Blah Blah<br />Blah Blah Blah<br />Blah Blah Blah<br />Blah Blah Blah"
|
|
||||||
self.alerttext = "<p>Red Alert! Raise Shields!</p>"
|
self.alerttext = "<p>Red Alert! Raise Shields!</p>"
|
||||||
|
if self.isLive:
|
||||||
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
|
QtCore.SIGNAL(u'maindisplay_hide'), self.hideDisplay)
|
||||||
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
|
QtCore.SIGNAL(u'maindisplay_show'), self.showDisplay)
|
||||||
|
## QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
|
## QtCore.SIGNAL(u'videodisplay_start'), self.onStartVideo)
|
||||||
|
## QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
|
## QtCore.SIGNAL(u'videodisplay_stop'), self.onStopVideo)
|
||||||
|
## QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
|
## QtCore.SIGNAL(u'config_updated'), self.setup)
|
||||||
|
|
||||||
def setup(self):
|
def setup(self):
|
||||||
log.debug(u'Setup %s for %s ' % (
|
log.debug(u'Setup %s for %s ' % (
|
||||||
@ -130,6 +122,14 @@ class MainDisplay(DisplayWidget):
|
|||||||
self.frame.setScrollBarPolicy(QtCore.Qt.Horizontal,
|
self.frame.setScrollBarPolicy(QtCore.Qt.Horizontal,
|
||||||
QtCore.Qt.ScrollBarAlwaysOff)
|
QtCore.Qt.ScrollBarAlwaysOff)
|
||||||
if self.isLive:
|
if self.isLive:
|
||||||
|
# Build the initial frame.
|
||||||
|
self.black = QtGui.QImage(
|
||||||
|
self.screens.current[u'size'].width(),
|
||||||
|
self.screens.current[u'size'].height(),
|
||||||
|
QtGui.QImage.Format_ARGB32_Premultiplied)
|
||||||
|
painter_image = QtGui.QPainter()
|
||||||
|
painter_image.begin(self.black)
|
||||||
|
painter_image.fillRect(self.black.rect(), QtCore.Qt.black)
|
||||||
#Build the initial frame.
|
#Build the initial frame.
|
||||||
initialFrame = QtGui.QImage(
|
initialFrame = QtGui.QImage(
|
||||||
self.screens.current[u'size'].width(),
|
self.screens.current[u'size'].width(),
|
||||||
@ -147,6 +147,11 @@ class MainDisplay(DisplayWidget):
|
|||||||
serviceItem.bg_frame = initialFrame
|
serviceItem.bg_frame = initialFrame
|
||||||
self.webView.setHtml(build_html(serviceItem, self.screen, None))
|
self.webView.setHtml(build_html(serviceItem, self.screen, None))
|
||||||
self.show()
|
self.show()
|
||||||
|
# To display or not to display?
|
||||||
|
if not self.screen[u'primary']:
|
||||||
|
self.primary = False
|
||||||
|
else:
|
||||||
|
self.primary = True
|
||||||
|
|
||||||
def next(self):
|
def next(self):
|
||||||
if self.currslide:
|
if self.currslide:
|
||||||
@ -158,14 +163,33 @@ class MainDisplay(DisplayWidget):
|
|||||||
self.currslide = not self.currslide
|
self.currslide = not self.currslide
|
||||||
|
|
||||||
def text(self, slide):
|
def text(self, slide):
|
||||||
|
"""
|
||||||
|
Add the slide text from slideController
|
||||||
|
|
||||||
|
`slide`
|
||||||
|
The slide text to be displayed
|
||||||
|
"""
|
||||||
print slide
|
print slide
|
||||||
self.frame.findFirstElement('div#lyrics').setInnerXml(slide)
|
self.frame.findFirstElement('div#lyrics').setInnerXml(slide)
|
||||||
return self.preview()
|
return self.preview()
|
||||||
|
|
||||||
def alert(self):
|
def alert(self):
|
||||||
|
"""
|
||||||
|
Add the alert text
|
||||||
|
|
||||||
|
`slide`
|
||||||
|
The slide text to be displayed
|
||||||
|
"""
|
||||||
self.frame.findFirstElement('div#alert').setInnerXml(self.alerttext)
|
self.frame.findFirstElement('div#alert').setInnerXml(self.alerttext)
|
||||||
|
|
||||||
def image(self, image):
|
def image(self, image):
|
||||||
|
"""
|
||||||
|
Add an image as the background. The image is converted to a
|
||||||
|
bytestream on route.
|
||||||
|
|
||||||
|
`Image`
|
||||||
|
The Image to be displayed can be QImage or QPixmap
|
||||||
|
"""
|
||||||
image = resize_image(image, self.screen[u'size'].width(),
|
image = resize_image(image, self.screen[u'size'].width(),
|
||||||
self.screen[u'size'].height())
|
self.screen[u'size'].height())
|
||||||
self.frame.evaluateJavaScript(
|
self.frame.evaluateJavaScript(
|
||||||
@ -180,14 +204,14 @@ class MainDisplay(DisplayWidget):
|
|||||||
'src', unicode('data:image/png;base64,%s' % image_to_byte(self.serviceItem.bg_frame)))
|
'src', unicode('data:image/png;base64,%s' % image_to_byte(self.serviceItem.bg_frame)))
|
||||||
|
|
||||||
def video(self, videoPath, noSound=False):
|
def video(self, videoPath, noSound=False):
|
||||||
if self.currimage:
|
self.frame.findFirstElement('video').setAttribute('src', videoPath)
|
||||||
self.frame.findFirstElement('video').setAttribute('src', videoPath)
|
|
||||||
self.frame.evaluateJavaScript(
|
self.frame.evaluateJavaScript(
|
||||||
"document.getElementById('video').style.visibility = 'visible'")
|
"document.getElementById('video').style.visibility = 'visible'")
|
||||||
self.frame.evaluateJavaScript(
|
self.frame.evaluateJavaScript(
|
||||||
"document.getElementById('image').style.visibility = 'hidden'")
|
"document.getElementById('image').style.visibility = 'hidden'")
|
||||||
self.frame.evaluateJavaScript("document.getElementById('video').play()")
|
self.frame.evaluateJavaScript("document.getElementById('video').play()")
|
||||||
self.currimage = not self.currimage
|
if noSound:
|
||||||
|
self.frame.evaluateJavaScript("document.getElementById('video').mute()")
|
||||||
|
|
||||||
def loaded(self):
|
def loaded(self):
|
||||||
self.loaded = True
|
self.loaded = True
|
||||||
@ -227,20 +251,20 @@ class MainDisplay(DisplayWidget):
|
|||||||
Store the images so they can be replaced when required
|
Store the images so they can be replaced when required
|
||||||
"""
|
"""
|
||||||
log.debug(u'hideDisplay mode = %d', mode)
|
log.debug(u'hideDisplay mode = %d', mode)
|
||||||
#self.displayText.setPixmap(self.transparent)
|
|
||||||
if mode == HideMode.Screen:
|
if mode == HideMode.Screen:
|
||||||
#self.display_image.setPixmap(self.transparent)
|
|
||||||
self.setVisible(False)
|
self.setVisible(False)
|
||||||
elif mode == HideMode.Blank:
|
elif mode == HideMode.Blank:
|
||||||
self.displayBlank.setPixmap(
|
self.frame.findFirstElement('img').setAttribute(
|
||||||
QtGui.QPixmap.fromImage(self.blankFrame))
|
'src', unicode('data:image/png;base64,%s' \
|
||||||
|
% image_to_byte(self.black)))
|
||||||
else:
|
else:
|
||||||
if self.parent.renderManager.renderer.bg_frame:
|
if self.serviceItem:
|
||||||
self.displayBlank.setPixmap(QtGui.QPixmap.fromImage(
|
self.displayBlank.setPixmap(QtGui.QPixmap.fromImage(
|
||||||
self.parent.renderManager.renderer.bg_frame))
|
self.parent.renderManager.renderer.bg_frame))
|
||||||
else:
|
else:
|
||||||
self.displayBlank.setPixmap(
|
self.frame.findFirstElement('img').setAttribute(
|
||||||
QtGui.QPixmap.fromImage(self.blankFrame))
|
'src', unicode('data:image/png;base64,%s' \
|
||||||
|
% image_to_byte(self.black)))
|
||||||
if mode != HideMode.Screen and self.isHidden():
|
if mode != HideMode.Screen and self.isHidden():
|
||||||
self.setVisible(True)
|
self.setVisible(True)
|
||||||
|
|
||||||
@ -251,10 +275,10 @@ class MainDisplay(DisplayWidget):
|
|||||||
Make the stored images None to release memory.
|
Make the stored images None to release memory.
|
||||||
"""
|
"""
|
||||||
log.debug(u'showDisplay')
|
log.debug(u'showDisplay')
|
||||||
self.displayBlank.setPixmap(self.transparent)
|
self.frame.findFirstElement('img').setAttribute('src', u'')
|
||||||
if self.isHidden():
|
if self.isHidden():
|
||||||
self.setVisible(True)
|
self.setVisible(True)
|
||||||
#Trigger actions when display is active again
|
# Trigger actions when display is active again
|
||||||
Receiver.send_message(u'maindisplay_active')
|
Receiver.send_message(u'maindisplay_active')
|
||||||
|
|
||||||
class AudioPlayer(QtCore.QObject):
|
class AudioPlayer(QtCore.QObject):
|
||||||
|
@ -786,7 +786,6 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
|||||||
their locations
|
their locations
|
||||||
"""
|
"""
|
||||||
self.RenderManager.update_display()
|
self.RenderManager.update_display()
|
||||||
#self.displayManager.setup()
|
|
||||||
self.setFocus()
|
self.setFocus()
|
||||||
self.activateWindow()
|
self.activateWindow()
|
||||||
|
|
||||||
|
@ -36,23 +36,23 @@ from openlp.core.lib import OpenLPToolbar, Receiver, resize_image, \
|
|||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
class SlideThread(QtCore.QThread):
|
#class SlideThread(QtCore.QThread):
|
||||||
"""
|
# """
|
||||||
A special Qt thread class to speed up the display of text based frames.
|
# A special Qt thread class to speed up the display of text based frames.
|
||||||
This is threaded so it loads the frames in background
|
# This is threaded so it loads the frames in background
|
||||||
"""
|
# """
|
||||||
def __init__(self, parent, prefix, count):
|
# def __init__(self, parent, prefix, count):
|
||||||
QtCore.QThread.__init__(self, parent)
|
# QtCore.QThread.__init__(self, parent)
|
||||||
self.prefix = prefix
|
# self.prefix = prefix
|
||||||
self.count = count
|
# self.count = count
|
||||||
|
#
|
||||||
def run(self):
|
# def run(self):
|
||||||
"""
|
# """
|
||||||
Run the thread.
|
# Run the thread.
|
||||||
"""
|
# """
|
||||||
time.sleep(1)
|
# time.sleep(1)
|
||||||
for i in range(0, self.count):
|
# for i in range(0, self.count):
|
||||||
Receiver.send_message(u'%s_slide_cache' % self.prefix, i)
|
# Receiver.send_message(u'%s_slide_cache' % self.prefix, i)
|
||||||
|
|
||||||
class SlideList(QtGui.QTableWidget):
|
class SlideList(QtGui.QTableWidget):
|
||||||
"""
|
"""
|
||||||
@ -105,8 +105,9 @@ class SlideController(QtGui.QWidget):
|
|||||||
self.isLive = isLive
|
self.isLive = isLive
|
||||||
self.parent = parent
|
self.parent = parent
|
||||||
self.screens = screens
|
self.screens = screens
|
||||||
|
self.ratio = float(self.screens.current[u'size'].width()) / \
|
||||||
|
float(self.screens.current[u'size'].height())
|
||||||
self.display = MainDisplay(self, screens, isLive)
|
self.display = MainDisplay(self, screens, isLive)
|
||||||
#self.displayManager = self.parent.displayManager
|
|
||||||
self.loopList = [
|
self.loopList = [
|
||||||
u'Start Loop',
|
u'Start Loop',
|
||||||
u'Loop Separator',
|
u'Loop Separator',
|
||||||
@ -322,7 +323,7 @@ class SlideController(QtGui.QWidget):
|
|||||||
self.SlidePreview.setSizePolicy(sizePolicy)
|
self.SlidePreview.setSizePolicy(sizePolicy)
|
||||||
self.SlidePreview.setFixedSize(
|
self.SlidePreview.setFixedSize(
|
||||||
QtCore.QSize(self.settingsmanager.slidecontroller_image,
|
QtCore.QSize(self.settingsmanager.slidecontroller_image,
|
||||||
self.settingsmanager.slidecontroller_image / 1.3 ))
|
self.settingsmanager.slidecontroller_image / self.ratio ))
|
||||||
self.SlidePreview.setFrameShape(QtGui.QFrame.Box)
|
self.SlidePreview.setFrameShape(QtGui.QFrame.Box)
|
||||||
self.SlidePreview.setFrameShadow(QtGui.QFrame.Plain)
|
self.SlidePreview.setFrameShadow(QtGui.QFrame.Plain)
|
||||||
self.SlidePreview.setLineWidth(1)
|
self.SlidePreview.setLineWidth(1)
|
||||||
@ -389,9 +390,21 @@ class SlideController(QtGui.QWidget):
|
|||||||
QtCore.SIGNAL(u'splitterMoved(int, int)'), self.trackSplitter)
|
QtCore.SIGNAL(u'splitterMoved(int, int)'), self.trackSplitter)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'config_updated'), self.refreshServiceItem)
|
QtCore.SIGNAL(u'config_updated'), self.refreshServiceItem)
|
||||||
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
|
QtCore.SIGNAL(u'config_screen_changed'), self.screenSizeChanged)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'%s_slide_cache' % self.typePrefix), self.slideCache)
|
QtCore.SIGNAL(u'%s_slide_cache' % self.typePrefix), self.slideCache)
|
||||||
|
|
||||||
|
def screenSizeChanged(self):
|
||||||
|
# rebuild display as screen size changed
|
||||||
|
self.display = MainDisplay(self, self.screens, self.isLive)
|
||||||
|
self.ratio = float(self.screens.current[u'size'].width()) / \
|
||||||
|
float(self.screens.current[u'size'].height())
|
||||||
|
self.display.setup()
|
||||||
|
self.SlidePreview.setFixedSize(
|
||||||
|
QtCore.QSize(self.settingsmanager.slidecontroller_image,
|
||||||
|
self.settingsmanager.slidecontroller_image / (self.ratio )))
|
||||||
|
|
||||||
def widthChanged(self):
|
def widthChanged(self):
|
||||||
"""
|
"""
|
||||||
Handle changes of width from the splitter between the live and preview
|
Handle changes of width from the splitter between the live and preview
|
||||||
@ -606,10 +619,10 @@ class SlideController(QtGui.QWidget):
|
|||||||
self.PreviewListWidget.setFocus()
|
self.PreviewListWidget.setFocus()
|
||||||
Receiver.send_message(u'slidecontroller_%s_started' % self.typePrefix,
|
Receiver.send_message(u'slidecontroller_%s_started' % self.typePrefix,
|
||||||
[serviceItem])
|
[serviceItem])
|
||||||
if self.serviceItem.is_text():
|
# if self.serviceItem.is_text():
|
||||||
st = SlideThread(
|
# st = SlideThread(
|
||||||
self, self.typePrefix, len(self.serviceItem.get_frames()))
|
# self, self.typePrefix, len(self.serviceItem.get_frames()))
|
||||||
st.start()
|
# st.start()
|
||||||
log.log(15, u'Display Rendering took %4s' % (time.time() - before))
|
log.log(15, u'Display Rendering took %4s' % (time.time() - before))
|
||||||
|
|
||||||
def onTextRequest(self):
|
def onTextRequest(self):
|
||||||
@ -632,7 +645,7 @@ class SlideController(QtGui.QWidget):
|
|||||||
Receiver.send_message(u'slidecontroller_%s_text_response'
|
Receiver.send_message(u'slidecontroller_%s_text_response'
|
||||||
% self.typePrefix, data)
|
% self.typePrefix, data)
|
||||||
|
|
||||||
#Screen event methods
|
# Screen event methods
|
||||||
def onSlideSelectedFirst(self):
|
def onSlideSelectedFirst(self):
|
||||||
"""
|
"""
|
||||||
Go to the first slide.
|
Go to the first slide.
|
||||||
@ -667,8 +680,8 @@ class SlideController(QtGui.QWidget):
|
|||||||
Allow the main display to blank the main display at startup time
|
Allow the main display to blank the main display at startup time
|
||||||
"""
|
"""
|
||||||
log.debug(u'mainDisplaySetBackground')
|
log.debug(u'mainDisplaySetBackground')
|
||||||
if not self.mainDisplay.primary:
|
if not self.display.primary:
|
||||||
self.onBlankDisplay(True)
|
self.display.hideDisplay()
|
||||||
|
|
||||||
def onSlideBlank(self):
|
def onSlideBlank(self):
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user