Fixed Renderer to split lines and pages,

ServiceItem now handles them.
This commit is contained in:
Tim Bentley 2009-06-02 17:25:36 +01:00
commit a2034dd132
4 changed files with 78 additions and 74 deletions

View File

@ -109,7 +109,7 @@ class Renderer:
"""
External API to sort out the text to pe placed on the frame
"""
print "########## Format Slide ##################"
#print "########## Format Slide ##################"
log.debug(u'format_slide %s', words)
verses = []
words = words.replace("\r\n", "\n")
@ -120,9 +120,10 @@ class Renderer:
for line in lines:
text.append(line)
print self._split_set_of_lines(text, False)
print "text ", text
return text
split_text = self._split_set_of_lines(text, False)
#print "split text ", split_text
#print "text ", text
return split_text
# def render_screen(self, screennum):
# log.debug(u'render screen\n %s %s ', screennum, self.words[screennum])
@ -132,7 +133,9 @@ class Renderer:
# return retval
def set_text_rectangle(self, rect_main, rect_footer):
""" Sets the rectangle within which text should be rendered"""
"""
Sets the rectangle within which text should be rendered
"""
self._rect = rect_main
self._rect_footer = rect_footer
@ -140,10 +143,10 @@ class Renderer:
"""
Render a set of lines according to the theme, return bounding box
"""
print "########## Generate frame from lines ##################"
#print "########## Generate frame from lines ##################"
log.debug(u'generate_frame_from_lines - Start')
print "Render Lines ", lines
#print "Render Lines ", lines
bbox = self._render_lines_unaligned(lines, False)
if footer_lines is not None:
@ -222,69 +225,73 @@ class Renderer:
We'll do this by getting the bounding box of each line, and then summing them appropriately
Returns a list of [lists of lines], one set for each screenful
"""
############ THIS IS WRONG SO FIX IT
log.debug(u'Split set of lines')
bboxes = []
print "Lines ", lines
#print "lines ", lines
for line in lines:
bboxes.append(self._render_and_wrap_single_line(line, footer))
#print line, bboxes
#print "bboxes ", bboxes
numlines = len(lines)
bottom = self._rect.bottom()
#for ratio in (numlines): #, numlines/2, numlines/3, numlines/4):
ratio = numlines
good = 1
startline = 0
endline = startline + ratio
#print "A ", numlines , startline, endline
#print "B ", bboxes
while (endline <= numlines):
by = 0
for (x, y) in bboxes[startline:endline]:
by += y
#print by
#print by , bottom
if by > bottom:
good=0
count = 0
for ratio in (numlines, numlines/2, numlines/3, numlines/4):
good = 1
startline = 0
endline = startline + ratio
while (endline <= numlines and endline != 0):
count += 1
if count > 100:
#print "busted"
break
by = 0
for (x,y) in bboxes[startline:endline]:
#print by, startline, endline, x, y, bottom
by += y
#print "by ", by , bottom, startline, endline, numlines, ratio
if by > bottom:
good = 0
break
startline += ratio
endline = startline + ratio
if good == 1:
break
startline += ratio
endline = startline+ratio
# if good == 1:
# break
# print "---------"
retval = []
numlines_per_page = ratio
#print "good ", good, ratio
if good:
c = 0
thislines = []
while c < numlines:
thislines.append(lines[c])
c += 1
#print "c ", c, len(thislines), numlines_per_page, thislines
if len(thislines) == numlines_per_page:
retval.append(thislines)
thislines = []
if len(thislines) > 0:
retval.append(thislines)
#print "extra ", thislines
else:
# log.debug(u" "Just split where you can"
# print "Just split where you can"
retval = []
startline = 0
endline = startline+1
endline = startline + 1
while (endline <= numlines):
by = 0
for (x, y) in bboxes[startline:endline]:
for (x,y) in bboxes[startline:endline]:
by += y
if by > bottom:
retval.append(lines[startline:endline-1])
startline = endline-1
endline = startline # gets incremented below
# gets incremented below
endline = startline
by = 0
endline += 1
print "retval ", retval
#print "retval ", retval
return retval
def _correctAlignment(self, rect, bbox):
@ -312,14 +319,12 @@ class Renderer:
x, y = tlcorner
brx = x
bry = y
print "A ", bry
for line in lines:
# render after current bottom, but at original left edge
# keep track of right edge to see which is biggest
(thisx, bry) = self._render_and_wrap_single_line(line, footer, (x , bry))
if (thisx > brx):
brx = thisx
print "B ", bry
retval = QtCore.QRect(x, y,brx-x, bry-y)
if self._debug:
painter = QtGui.QPainter()
@ -370,8 +375,6 @@ class Renderer:
else:
align = int(self._theme .display_horizontalAlign)
print "wrap ", lines
for linenum in range(len(lines)):
line = lines[linenum]
#find out how wide line is

View File

@ -65,9 +65,10 @@ class ServiceItem():
if len(self.frames) == 0 and len(self.raw_slides) > 0 :
for slide in self.raw_slides:
formated = self.plugin.render_manager.format_slide(slide)
print formated
frame = self.plugin.render_manager.generate_slide(formated, self.raw_footer)
self.frames.append({u'title': formated, u'image': frame})
#print formated
for format in formated:
frame = self.plugin.render_manager.generate_slide(format, self.raw_footer)
self.frames.append({u'title': format, u'image': frame})
else:
if len(self.command_files) > 0:
pass

View File

@ -129,8 +129,8 @@ class MainWindow(object):
self.ControlSplitter.setObjectName(u'ControlSplitter')
self.MainContentLayout.addWidget(self.ControlSplitter)
self.PreviewController = SlideController(self.ControlSplitter, self, False)
self.LiveController = SlideController(self.ControlSplitter, self, True)
self.PreviewController = SlideController( self.ControlSplitter, self, False)
self.LiveController = SlideController(self.ControlSplitter, self, True)
self.MenuBar = QtGui.QMenuBar(self.mainWindow)
self.MenuBar.setGeometry(QtCore.QRect(0, 0, 1087, 27))

View File

@ -98,10 +98,10 @@ class SlideData(QtCore.QAbstractListModel):
class SlideController(QtGui.QWidget):
global log
log=logging.getLogger(u'SlideController')
log = logging.getLogger(u'SlideController')
def __init__(self, control_splitter, parent , isLive):
QtGui.QWidget.__init__(self)
def __init__(self, control_splitter, parent, isLive):
QtGui.QWidget.__init__(self, parent.mainWindow)
self.isLive = isLive
self.parent = parent
self.Panel = QtGui.QWidget(control_splitter)
@ -110,34 +110,30 @@ class SlideController(QtGui.QWidget):
self.PanelLayout = QtGui.QVBoxLayout(self.Panel)
self.PanelLayout.addWidget(self.Splitter)
self.PanelLayout.setSpacing(50)
self.PanelLayout.setSpacing(0)
self.PanelLayout.setMargin(0)
self.Controller = QtGui.QScrollArea(self.Splitter)
self.Controller.setGeometry(QtCore.QRect(0, 0, 700, 536))
self.Controller.setWidgetResizable(True)
self.Controller.setObjectName("scrollArea")
self.Controller = QtGui.QWidget(self.Splitter)
self.Controller.setGeometry(QtCore.QRect(0, 0, 800, 536))
self.Controller.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Maximum))
self.ControllerLayout = QtGui.QVBoxLayout(self.Controller)
self.ControllerLayout.setSpacing(0)
self.ControllerLayout.setMargin(0)
self.scrollAreaWidgetContents = QtGui.QWidget(self.Controller)
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 700, 536))
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
self.gridLayout = QtGui.QGridLayout(self.scrollAreaWidgetContents)
self.gridLayout.setObjectName("gridLayout")
self.PreviewListView = QtGui.QListView(self.scrollAreaWidgetContents)
self.PreviewListView = QtGui.QListView(self.Controller)
self.PreviewListData = SlideData()
self.PreviewListView.isLive = self.isLive
self.PreviewListView.setFlow(1)
self.PreviewListView.setViewMode(1)
self.PreviewListView.setWrapping(False)
self.PreviewListData = SlideData()
self.PreviewListView.setModel(self.PreviewListData)
#self.PreviewListView.setSelectionRectVisible(True)
self.PreviewListView.setSpacing(5)
self.PreviewListView.setSpacing(0)
self.PreviewListView.setObjectName("PreviewListView")
self.ControllerLayout.addWidget(self.PreviewListView)
self.gridLayout.addWidget(self.PreviewListView, 0, 0, 1, 1)
self.Controller.setWidget(self.scrollAreaWidgetContents)
self.Toolbar = OpenLPToolbar(self.Splitter)
self.Toolbar = OpenLPToolbar(self.Controller)
sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
sizeToolbarPolicy.setHorizontalStretch(0)
sizeToolbarPolicy.setVerticalStretch(0)
@ -159,14 +155,18 @@ class SlideController(QtGui.QWidget):
self.Toolbar.setSizePolicy(sizeToolbarPolicy)
self.ControllerLayout.addWidget(self.Toolbar)
self.PreviewFrame = QtGui.QFrame(self.Splitter)
self.PreviewFrame.setGeometry(QtCore.QRect(50, 270, 250, 190))
self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 250, 190))
self.PreviewFrame.setSizePolicy(QtGui.QSizePolicy(
QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum))
self.PreviewFrame.setFrameShape(QtGui.QFrame.StyledPanel)
self.PreviewFrame.setFrameShadow(QtGui.QFrame.Sunken)
self.PreviewFrame.setObjectName(u'PreviewFrame')
self.grid = QtGui.QGridLayout(self.PreviewFrame)
self.grid.setMargin(10)
self.grid.setMargin(8)
self.grid.setObjectName(u'grid')
self.SlidePreview = QtGui.QLabel(self.PreviewFrame)
@ -176,8 +176,8 @@ class SlideController(QtGui.QWidget):
sizePolicy.setHeightForWidth(self.SlidePreview.sizePolicy().hasHeightForWidth())
self.SlidePreview.setSizePolicy(sizePolicy)
self.SlidePreview.setMinimumSize(QtCore.QSize(250, 190))
self.SlidePreview.setFrameShape(QtGui.QFrame.WinPanel)
self.SlidePreview.setFrameShadow(QtGui.QFrame.Sunken)
self.SlidePreview.setFrameShape(QtGui.QFrame.Box)
self.SlidePreview.setFrameShadow(QtGui.QFrame.Plain)
self.SlidePreview.setLineWidth(1)
self.SlidePreview.setScaledContents(True)
self.SlidePreview.setObjectName(u'SlidePreview')