Fixes to formatting and rendering

Add Blank screen functionality
This commit is contained in:
Tim Bentley 2009-05-04 14:48:12 +01:00
parent ee649d9ca7
commit 13766fc7c7
7 changed files with 56 additions and 37 deletions

View File

@ -27,7 +27,7 @@ from openlp.core.lib import Receiver
logging.basicConfig(level=logging.DEBUG, logging.basicConfig(level=logging.DEBUG,
format=u'%(asctime)s %(name)-12s %(levelname)-8s %(message)s', format=u'%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
datefmt=u'%m-%d %H:%M', datefmt=u'%m-%d %H:%M:%S',
filename=u'openlp.log', filename=u'openlp.log',
filemode=u'w') filemode=u'w')

View File

@ -114,7 +114,6 @@ class Renderer:
def render_screen(self, screennum): def render_screen(self, screennum):
log.debug(u'render screen\n %s %s ', screennum, self.words[screennum]) log.debug(u'render screen\n %s %s ', screennum, self.words[screennum])
import time
t=0.0 t=0.0
words=self.words[screennum] words=self.words[screennum]
retval=self._render_lines(words) retval=self._render_lines(words)
@ -173,7 +172,6 @@ class Renderer:
else: else:
p.fillRect(self._paint.rect(), QtGui.QColor(u'#000000')) p.fillRect(self._paint.rect(), QtGui.QColor(u'#000000'))
p.end() p.end()
log.debug(u'render background done')
def split_set_of_lines(self, lines, footer): def split_set_of_lines(self, lines, footer):
@ -252,7 +250,7 @@ class Renderer:
def render_lines(self, lines, footer_lines=None): def render_lines(self, lines, footer_lines=None):
"""render a set of lines according to the theme, return bounding box""" """render a set of lines according to the theme, return bounding box"""
#log.debug(u'_render_lines %s', lines) log.debug(u'_render_lines %s', lines)
bbox=self._render_lines_unaligned(lines, False) # Main font bbox=self._render_lines_unaligned(lines, False) # Main font
if footer_lines is not None: if footer_lines is not None:
@ -264,11 +262,8 @@ class Renderer:
bbox=self._render_lines_unaligned(lines, False, (x, y)) bbox=self._render_lines_unaligned(lines, False, (x, y))
if footer_lines is not None: if footer_lines is not None:
#x, y = self._correctAlignment(self._rect_footer, bbox1)
bbox=self._render_lines_unaligned(footer_lines, True, (self._rect_footer.left(), self._rect_footer.top()) ) bbox=self._render_lines_unaligned(footer_lines, True, (self._rect_footer.left(), self._rect_footer.top()) )
log.debug(u'render lines DONE')
return bbox return bbox
def _render_lines_unaligned(self, lines, footer, tlcorner=(0,0)): def _render_lines_unaligned(self, lines, footer, tlcorner=(0,0)):
@ -279,7 +274,7 @@ class Renderer:
than a screenful (eg. by using split_set_of_lines) than a screenful (eg. by using split_set_of_lines)
Returns the bounding box of the text as QRect""" Returns the bounding box of the text as QRect"""
log.debug(u'render unaligned %s', lines) log.debug(u'render lines unaligned %s', lines)
x, y=tlcorner x, y=tlcorner
brx=x brx=x
bry=y bry=y
@ -298,7 +293,7 @@ class Renderer:
p.setPen(QtGui.QPen(QtGui.QColor(0,0,255))) p.setPen(QtGui.QPen(QtGui.QColor(0,0,255)))
p.drawRect(retval) p.drawRect(retval)
p.end() p.end()
log.debug(u'render unaligned DONE')
return retval return retval
@ -410,7 +405,7 @@ class Renderer:
return width and height of text as a tuple (w,h)""" return width and height of text as a tuple (w,h)"""
# setup defaults # setup defaults
#log.debug(u"_get_extent_and_render %s %s %s ", [line], tlcorner, draw) log.debug(u'_get_extent_and_render %s %s %s ', [line], tlcorner, draw)
p=QtGui.QPainter() p=QtGui.QPainter()
p.begin(self._paint) p.begin(self._paint)
# 'twould be more efficient to set this once when theme changes # 'twould be more efficient to set this once when theme changes

View File

@ -18,6 +18,7 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA Place, Suite 330, Boston, MA 02111-1307 USA
""" """
import logging import logging
import time
import os, os.path import os, os.path
import sys import sys
from PyQt4 import QtGui, QtCore, Qt from PyQt4 import QtGui, QtCore, Qt
@ -41,21 +42,20 @@ class RenderManager:
self.current_display = 0 self.current_display = 0
self.renderer = Renderer(None) self.renderer = Renderer(None)
self.calculate_default(self.screen_list[self.current_display]['size']) self.calculate_default(self.screen_list[self.current_display]['size'])
self.frame = None
def set_override_theme(self, theme): def set_override_theme(self, theme):
log.debug("set override theme to %s", theme) log.debug(u'set override theme to %s', theme)
if theme is not None: if theme is not None:
self.theme = theme self.theme = theme
else: else:
self.theme = self.default_theme self.theme = self.default_theme
log.debug("theme is now %s", self.theme) log.debug(u'theme is now %s', self.theme)
self.themedata = self.theme_manager.getThemeData(self.theme) self.themedata = self.theme_manager.getThemeData(self.theme)
self.renderer.set_theme(self.themedata) self.renderer.set_theme(self.themedata)
self.build_text_rectangle(self.themedata) self.build_text_rectangle(self.themedata)
def build_text_rectangle(self, theme): def build_text_rectangle(self, theme):
log.debug(u'build_text_rectangle ')
main_rect = None main_rect = None
footer_rect = None footer_rect = None
@ -74,6 +74,7 @@ class RenderManager:
self.renderer.set_text_rectangle(main_rect,footer_rect) self.renderer.set_text_rectangle(main_rect,footer_rect)
def generate_preview(self, themedata): def generate_preview(self, themedata):
log.debug(u'generate preview ')
self.calculate_default(QtCore.QSize(800,600)) self.calculate_default(QtCore.QSize(800,600))
self.renderer.set_theme(themedata) self.renderer.set_theme(themedata)
self.build_text_rectangle(themedata) self.build_text_rectangle(themedata)
@ -94,25 +95,23 @@ class RenderManager:
return frame return frame
def format_slide(self, words, footer): def format_slide(self, words, footer):
self.calculate_default(QtCore.QSize(800,600)) log.debug(u'format slide')
frame = QtGui.QPixmap(self.width, self.height) self.calculate_default(self.screen_list[self.current_display]['size'])
self.renderer.set_paint_dest(frame) self.renderer.set_paint_dest(QtGui.QPixmap(self.width, self.height))
return self.renderer.format_slide(words, footer) return self.renderer.format_slide(words, footer)
def generate_slide(self,main_text, footer_text, preview=True): def generate_slide(self,main_text, footer_text):
if preview == True: log.debug(u'generate slide')
self.calculate_default(QtCore.QSize(800,600)) self.calculate_default(self.screen_list[self.current_display]['size'])
frame = QtGui.QPixmap(self.width, self.height) frame = QtGui.QPixmap(self.width, self.height)
self.renderer.set_paint_dest(frame) self.renderer.set_paint_dest(frame)
answer=self.renderer.render_lines(main_text, footer_text) answer=self.renderer.render_lines(main_text, footer_text)
return frame return frame
def calculate_default(self, screen): def calculate_default(self, screen):
log.debug(u'calculate default %s' , screen)
self.width = screen.width() self.width = screen.width()
self.height = screen.height() self.height = screen.height()
log.debug(u'calculate default %d,%d' , self.width, self.height)
self.footer_start = int(self.height*0.95) # 95% is start of footer self.footer_start = int(self.height*0.95) # 95% is start of footer
#update the rederer frame
self.frame = QtGui.QPixmap(self.width, self.height)
self.renderer.set_paint_dest(self.frame)

View File

@ -19,7 +19,8 @@ Place, Suite 330, Boston, MA 02111-1307 USA
""" """
import logging import logging
import types import types
from PyQt4 import QtCore, QtGui import time
from PyQt4.QtCore import * from PyQt4.QtCore import *
from PyQt4.QtGui import * from PyQt4.QtGui import *
@ -51,34 +52,34 @@ class ServiceItem():
def addIcon(self, icon): def addIcon(self, icon):
ButtonIcon = None ButtonIcon = None
if type(icon) is QtGui.QIcon: if type(icon) is QIcon:
ButtonIcon = icon ButtonIcon = icon
elif type(icon) is types.StringType or type(icon) is types.UnicodeType: elif type(icon) is types.StringType or type(icon) is types.UnicodeType:
ButtonIcon = QtGui.QIcon() ButtonIcon = QIcon()
if icon.startswith(u':/'): if icon.startswith(u':/'):
ButtonIcon.addPixmap(QtGui.QPixmap(icon), QtGui.QIcon.Normal, ButtonIcon.addPixmap(QPixmap(icon), QIcon.Normal,
QtGui.QIcon.Off) QIcon.Off)
else: else:
ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)), ButtonIcon.addPixmap(QPixmap.fromImage(QImage(icon)),
QtGui.QIcon.Normal, QtGui.QIcon.Off) QIcon.Normal, QIcon.Off)
self.iconic_representation = ButtonIcon self.iconic_representation = ButtonIcon
def render(self): def render(self):
""" """
The render method is what the plugin uses to render it's meda to the The render method is what renders the frames for the screen.
screen.
""" """
log.debug(u'Render called') log.debug(u'Render called')
if self.theme == None: if self.theme == None:
self.render_manager.set_override_theme(None) self.render_manager.set_override_theme(None)
else: else:
self.render_manager.set_override_theme(self.theme) self.render_manager.set_override_theme(self.theme)
log.debug(u'Formatting slides')
for slide in self.raw_slides: for slide in self.raw_slides:
self.format_slides.append(self.render_manager.format_slide(slide, False)) self.format_slides.append(self.render_manager.format_slide(slide, False))
log.debug(u'Rendering slides')
for slide in self.format_slides: for slide in self.format_slides:
self.frames.append(self.render_manager.generate_slide(slide, self.raw_footer))
self.frames.append(self.render_manager.generate_slide(slide, self.raw_footer, False))
def get_parent_node(self): def get_parent_node(self):
""" """

View File

@ -29,6 +29,9 @@ class MainDisplay(QtGui.QWidget):
self.setWindowTitle(u'OpenLP Display') self.setWindowTitle(u'OpenLP Display')
self.screens = screens self.screens = screens
self.display = QtGui.QLabel(self) self.display = QtGui.QLabel(self)
self.display.setScaledContents(True)
self.displayBlank = False
self.blankFrame= None
def setup(self, screenNumber): def setup(self, screenNumber):
""" """
@ -51,8 +54,25 @@ class MainDisplay(QtGui.QWidget):
else: else:
self.showMinimized() self.showMinimized()
painter=QtGui.QPainter()
self.blankFrame = QtGui.QPixmap(800, 600)
painter.begin(self.blankFrame)
painter.fillRect(self.blankFrame.rect(), QtGui.QColor(u'#000000'))
def frameView(self, frame): def frameView(self, frame):
self.display.setPixmap(frame) if self.displayBlank == False:
self.display.setPixmap(frame)
def blankDisplay(self):
if self.displayBlank == False:
self.displayBlank = True
self.tempPixmap = self.display.pixmap()
self.display.setPixmap(self.blankFrame)
else:
self.displayBlank = False
self.frameView(self.tempPixmap)
self.tempPixmap = None
def kill(self): def kill(self):
pass pass

View File

@ -206,7 +206,7 @@ class SlideController(QWidget):
self.onSlideSelected(row) self.onSlideSelected(row)
def onBlankScreen(self): def onBlankScreen(self):
pass self.mainDisplay.blankDisplay()
def onSlideSelected(self, index): def onSlideSelected(self, index):
frame = self.PreviewListData.getValue(index) frame = self.PreviewListData.getValue(index)
@ -218,6 +218,7 @@ class SlideController(QWidget):
self.mainDisplay.frameView(frame) self.mainDisplay.frameView(frame)
def addServiceItem(self, serviceitem): def addServiceItem(self, serviceitem):
log.debug(u'addServiceItem')
self.serviceitem = serviceitem self.serviceitem = serviceitem
self.serviceitem.render() self.serviceitem.render()
self.PreviewListData.clearItems() self.PreviewListData.clearItems()

View File

@ -187,6 +187,7 @@ class CustomMediaItem(MediaManagerItem):
self.CustomListData.deleteRow(index) self.CustomListData.deleteRow(index)
def onCustomPreviewClick(self): def onCustomPreviewClick(self):
log.debug(u'Custom Preview Requested')
service_item = ServiceItem(self.parent) service_item = ServiceItem(self.parent)
service_item.addIcon( ":/media/media_song.png") service_item.addIcon( ":/media/media_song.png")
service_item.render_manager = self.parent.render_manager service_item.render_manager = self.parent.render_manager
@ -194,6 +195,7 @@ class CustomMediaItem(MediaManagerItem):
self.parent.preview_controller.addServiceItem(service_item) self.parent.preview_controller.addServiceItem(service_item)
def onCustomLiveClick(self): def onCustomLiveClick(self):
log.debug(u'Custom Live Requested')
service_item = ServiceItem(self.parent) service_item = ServiceItem(self.parent)
service_item.addIcon( ":/media/media_song.png") service_item.addIcon( ":/media/media_song.png")
service_item.render_manager = self.parent.render_manager service_item.render_manager = self.parent.render_manager
@ -201,6 +203,7 @@ class CustomMediaItem(MediaManagerItem):
self.parent.live_controller.addServiceItem(service_item) self.parent.live_controller.addServiceItem(service_item)
def onCustomAddClick(self): def onCustomAddClick(self):
log.debug(u'Custom Add Requested')
service_item = ServiceItem(self.parent) service_item = ServiceItem(self.parent)
service_item.addIcon( ":/media/media_song.png") service_item.addIcon( ":/media/media_song.png")
service_item.render_manager = self.parent.render_manager service_item.render_manager = self.parent.render_manager