forked from openlp/openlp
Fixed Renderer to split lines and pages,
ServiceItem now handles them.
This commit is contained in:
commit
a2034dd132
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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')
|
||||
|
|
Loading…
Reference in New Issue