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
|
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)
|
log.debug(u'format_slide %s', words)
|
||||||
verses = []
|
verses = []
|
||||||
words = words.replace("\r\n", "\n")
|
words = words.replace("\r\n", "\n")
|
||||||
@ -120,9 +120,10 @@ class Renderer:
|
|||||||
for line in lines:
|
for line in lines:
|
||||||
text.append(line)
|
text.append(line)
|
||||||
|
|
||||||
print self._split_set_of_lines(text, False)
|
split_text = self._split_set_of_lines(text, False)
|
||||||
print "text ", text
|
#print "split text ", split_text
|
||||||
return text
|
#print "text ", text
|
||||||
|
return split_text
|
||||||
|
|
||||||
# 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])
|
||||||
@ -132,7 +133,9 @@ class Renderer:
|
|||||||
# return retval
|
# return retval
|
||||||
|
|
||||||
def set_text_rectangle(self, rect_main, rect_footer):
|
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 = rect_main
|
||||||
self._rect_footer = rect_footer
|
self._rect_footer = rect_footer
|
||||||
|
|
||||||
@ -140,10 +143,10 @@ class Renderer:
|
|||||||
"""
|
"""
|
||||||
Render a set of lines according to the theme, return bounding box
|
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')
|
log.debug(u'generate_frame_from_lines - Start')
|
||||||
|
|
||||||
print "Render Lines ", lines
|
#print "Render Lines ", lines
|
||||||
|
|
||||||
bbox = self._render_lines_unaligned(lines, False)
|
bbox = self._render_lines_unaligned(lines, False)
|
||||||
if footer_lines is not None:
|
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
|
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
|
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 = []
|
bboxes = []
|
||||||
print "Lines ", lines
|
#print "lines ", lines
|
||||||
|
|
||||||
for line in lines:
|
for line in lines:
|
||||||
bboxes.append(self._render_and_wrap_single_line(line, footer))
|
bboxes.append(self._render_and_wrap_single_line(line, footer))
|
||||||
#print line, bboxes
|
#print "bboxes ", bboxes
|
||||||
|
|
||||||
numlines = len(lines)
|
numlines = len(lines)
|
||||||
bottom = self._rect.bottom()
|
bottom = self._rect.bottom()
|
||||||
#for ratio in (numlines): #, numlines/2, numlines/3, numlines/4):
|
|
||||||
ratio = numlines
|
count = 0
|
||||||
good = 1
|
|
||||||
startline = 0
|
for ratio in (numlines, numlines/2, numlines/3, numlines/4):
|
||||||
endline = startline + ratio
|
good = 1
|
||||||
#print "A ", numlines , startline, endline
|
startline = 0
|
||||||
#print "B ", bboxes
|
endline = startline + ratio
|
||||||
while (endline <= numlines):
|
while (endline <= numlines and endline != 0):
|
||||||
by = 0
|
count += 1
|
||||||
for (x, y) in bboxes[startline:endline]:
|
if count > 100:
|
||||||
by += y
|
#print "busted"
|
||||||
#print by
|
break
|
||||||
#print by , bottom
|
by = 0
|
||||||
if by > bottom:
|
for (x,y) in bboxes[startline:endline]:
|
||||||
good=0
|
#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
|
break
|
||||||
startline += ratio
|
|
||||||
endline = startline+ratio
|
|
||||||
# if good == 1:
|
|
||||||
# break
|
|
||||||
# print "---------"
|
|
||||||
|
|
||||||
retval = []
|
retval = []
|
||||||
numlines_per_page = ratio
|
numlines_per_page = ratio
|
||||||
|
#print "good ", good, ratio
|
||||||
if good:
|
if good:
|
||||||
c = 0
|
c = 0
|
||||||
thislines = []
|
thislines = []
|
||||||
while c < numlines:
|
while c < numlines:
|
||||||
thislines.append(lines[c])
|
thislines.append(lines[c])
|
||||||
c += 1
|
c += 1
|
||||||
|
#print "c ", c, len(thislines), numlines_per_page, thislines
|
||||||
if len(thislines) == numlines_per_page:
|
if len(thislines) == numlines_per_page:
|
||||||
retval.append(thislines)
|
retval.append(thislines)
|
||||||
thislines = []
|
thislines = []
|
||||||
|
if len(thislines) > 0:
|
||||||
|
retval.append(thislines)
|
||||||
|
#print "extra ", thislines
|
||||||
else:
|
else:
|
||||||
# log.debug(u" "Just split where you can"
|
# print "Just split where you can"
|
||||||
retval = []
|
retval = []
|
||||||
startline = 0
|
startline = 0
|
||||||
endline = startline+1
|
endline = startline + 1
|
||||||
while (endline <= numlines):
|
while (endline <= numlines):
|
||||||
by = 0
|
by = 0
|
||||||
for (x, y) in bboxes[startline:endline]:
|
for (x,y) in bboxes[startline:endline]:
|
||||||
by += y
|
by += y
|
||||||
if by > bottom:
|
if by > bottom:
|
||||||
retval.append(lines[startline:endline-1])
|
retval.append(lines[startline:endline-1])
|
||||||
startline = endline-1
|
startline = endline-1
|
||||||
endline = startline # gets incremented below
|
# gets incremented below
|
||||||
|
endline = startline
|
||||||
by = 0
|
by = 0
|
||||||
endline += 1
|
endline += 1
|
||||||
print "retval ", retval
|
#print "retval ", retval
|
||||||
return retval
|
return retval
|
||||||
|
|
||||||
def _correctAlignment(self, rect, bbox):
|
def _correctAlignment(self, rect, bbox):
|
||||||
@ -312,14 +319,12 @@ class Renderer:
|
|||||||
x, y = tlcorner
|
x, y = tlcorner
|
||||||
brx = x
|
brx = x
|
||||||
bry = y
|
bry = y
|
||||||
print "A ", bry
|
|
||||||
for line in lines:
|
for line in lines:
|
||||||
# render after current bottom, but at original left edge
|
# render after current bottom, but at original left edge
|
||||||
# keep track of right edge to see which is biggest
|
# keep track of right edge to see which is biggest
|
||||||
(thisx, bry) = self._render_and_wrap_single_line(line, footer, (x , bry))
|
(thisx, bry) = self._render_and_wrap_single_line(line, footer, (x , bry))
|
||||||
if (thisx > brx):
|
if (thisx > brx):
|
||||||
brx = thisx
|
brx = thisx
|
||||||
print "B ", bry
|
|
||||||
retval = QtCore.QRect(x, y,brx-x, bry-y)
|
retval = QtCore.QRect(x, y,brx-x, bry-y)
|
||||||
if self._debug:
|
if self._debug:
|
||||||
painter = QtGui.QPainter()
|
painter = QtGui.QPainter()
|
||||||
@ -370,8 +375,6 @@ class Renderer:
|
|||||||
else:
|
else:
|
||||||
align = int(self._theme .display_horizontalAlign)
|
align = int(self._theme .display_horizontalAlign)
|
||||||
|
|
||||||
print "wrap ", lines
|
|
||||||
|
|
||||||
for linenum in range(len(lines)):
|
for linenum in range(len(lines)):
|
||||||
line = lines[linenum]
|
line = lines[linenum]
|
||||||
#find out how wide line is
|
#find out how wide line is
|
||||||
|
@ -65,9 +65,10 @@ class ServiceItem():
|
|||||||
if len(self.frames) == 0 and len(self.raw_slides) > 0 :
|
if len(self.frames) == 0 and len(self.raw_slides) > 0 :
|
||||||
for slide in self.raw_slides:
|
for slide in self.raw_slides:
|
||||||
formated = self.plugin.render_manager.format_slide(slide)
|
formated = self.plugin.render_manager.format_slide(slide)
|
||||||
print formated
|
#print formated
|
||||||
frame = self.plugin.render_manager.generate_slide(formated, self.raw_footer)
|
for format in formated:
|
||||||
self.frames.append({u'title': formated, u'image': frame})
|
frame = self.plugin.render_manager.generate_slide(format, self.raw_footer)
|
||||||
|
self.frames.append({u'title': format, u'image': frame})
|
||||||
else:
|
else:
|
||||||
if len(self.command_files) > 0:
|
if len(self.command_files) > 0:
|
||||||
pass
|
pass
|
||||||
|
@ -129,8 +129,8 @@ class MainWindow(object):
|
|||||||
self.ControlSplitter.setObjectName(u'ControlSplitter')
|
self.ControlSplitter.setObjectName(u'ControlSplitter')
|
||||||
self.MainContentLayout.addWidget(self.ControlSplitter)
|
self.MainContentLayout.addWidget(self.ControlSplitter)
|
||||||
|
|
||||||
self.PreviewController = SlideController(self.ControlSplitter, self, False)
|
self.PreviewController = SlideController( self.ControlSplitter, self, False)
|
||||||
self.LiveController = SlideController(self.ControlSplitter, self, True)
|
self.LiveController = SlideController(self.ControlSplitter, self, True)
|
||||||
|
|
||||||
self.MenuBar = QtGui.QMenuBar(self.mainWindow)
|
self.MenuBar = QtGui.QMenuBar(self.mainWindow)
|
||||||
self.MenuBar.setGeometry(QtCore.QRect(0, 0, 1087, 27))
|
self.MenuBar.setGeometry(QtCore.QRect(0, 0, 1087, 27))
|
||||||
|
@ -98,10 +98,10 @@ class SlideData(QtCore.QAbstractListModel):
|
|||||||
|
|
||||||
class SlideController(QtGui.QWidget):
|
class SlideController(QtGui.QWidget):
|
||||||
global log
|
global log
|
||||||
log=logging.getLogger(u'SlideController')
|
log = logging.getLogger(u'SlideController')
|
||||||
|
|
||||||
def __init__(self, control_splitter, parent , isLive):
|
def __init__(self, control_splitter, parent, isLive):
|
||||||
QtGui.QWidget.__init__(self)
|
QtGui.QWidget.__init__(self, parent.mainWindow)
|
||||||
self.isLive = isLive
|
self.isLive = isLive
|
||||||
self.parent = parent
|
self.parent = parent
|
||||||
self.Panel = QtGui.QWidget(control_splitter)
|
self.Panel = QtGui.QWidget(control_splitter)
|
||||||
@ -110,34 +110,30 @@ class SlideController(QtGui.QWidget):
|
|||||||
|
|
||||||
self.PanelLayout = QtGui.QVBoxLayout(self.Panel)
|
self.PanelLayout = QtGui.QVBoxLayout(self.Panel)
|
||||||
self.PanelLayout.addWidget(self.Splitter)
|
self.PanelLayout.addWidget(self.Splitter)
|
||||||
self.PanelLayout.setSpacing(50)
|
self.PanelLayout.setSpacing(0)
|
||||||
self.PanelLayout.setMargin(0)
|
self.PanelLayout.setMargin(0)
|
||||||
|
|
||||||
self.Controller = QtGui.QScrollArea(self.Splitter)
|
self.Controller = QtGui.QWidget(self.Splitter)
|
||||||
self.Controller.setGeometry(QtCore.QRect(0, 0, 700, 536))
|
self.Controller.setGeometry(QtCore.QRect(0, 0, 800, 536))
|
||||||
self.Controller.setWidgetResizable(True)
|
self.Controller.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Maximum))
|
||||||
self.Controller.setObjectName("scrollArea")
|
self.ControllerLayout = QtGui.QVBoxLayout(self.Controller)
|
||||||
|
self.ControllerLayout.setSpacing(0)
|
||||||
|
self.ControllerLayout.setMargin(0)
|
||||||
|
|
||||||
self.scrollAreaWidgetContents = QtGui.QWidget(self.Controller)
|
self.PreviewListView = QtGui.QListView(self.Controller)
|
||||||
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 700, 536))
|
self.PreviewListData = SlideData()
|
||||||
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
|
self.PreviewListView.isLive = self.isLive
|
||||||
self.gridLayout = QtGui.QGridLayout(self.scrollAreaWidgetContents)
|
|
||||||
self.gridLayout.setObjectName("gridLayout")
|
|
||||||
|
|
||||||
self.PreviewListView = QtGui.QListView(self.scrollAreaWidgetContents)
|
|
||||||
self.PreviewListView.setFlow(1)
|
self.PreviewListView.setFlow(1)
|
||||||
self.PreviewListView.setViewMode(1)
|
self.PreviewListView.setViewMode(1)
|
||||||
self.PreviewListView.setWrapping(False)
|
self.PreviewListView.setWrapping(False)
|
||||||
self.PreviewListData = SlideData()
|
|
||||||
self.PreviewListView.setModel(self.PreviewListData)
|
self.PreviewListView.setModel(self.PreviewListData)
|
||||||
#self.PreviewListView.setSelectionRectVisible(True)
|
#self.PreviewListView.setSelectionRectVisible(True)
|
||||||
self.PreviewListView.setSpacing(5)
|
|
||||||
|
self.PreviewListView.setSpacing(0)
|
||||||
self.PreviewListView.setObjectName("PreviewListView")
|
self.PreviewListView.setObjectName("PreviewListView")
|
||||||
|
self.ControllerLayout.addWidget(self.PreviewListView)
|
||||||
|
|
||||||
self.gridLayout.addWidget(self.PreviewListView, 0, 0, 1, 1)
|
self.Toolbar = OpenLPToolbar(self.Controller)
|
||||||
self.Controller.setWidget(self.scrollAreaWidgetContents)
|
|
||||||
|
|
||||||
self.Toolbar = OpenLPToolbar(self.Splitter)
|
|
||||||
sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
|
sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
|
||||||
sizeToolbarPolicy.setHorizontalStretch(0)
|
sizeToolbarPolicy.setHorizontalStretch(0)
|
||||||
sizeToolbarPolicy.setVerticalStretch(0)
|
sizeToolbarPolicy.setVerticalStretch(0)
|
||||||
@ -159,14 +155,18 @@ class SlideController(QtGui.QWidget):
|
|||||||
|
|
||||||
self.Toolbar.setSizePolicy(sizeToolbarPolicy)
|
self.Toolbar.setSizePolicy(sizeToolbarPolicy)
|
||||||
|
|
||||||
|
self.ControllerLayout.addWidget(self.Toolbar)
|
||||||
|
|
||||||
self.PreviewFrame = QtGui.QFrame(self.Splitter)
|
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.setFrameShape(QtGui.QFrame.StyledPanel)
|
||||||
self.PreviewFrame.setFrameShadow(QtGui.QFrame.Sunken)
|
self.PreviewFrame.setFrameShadow(QtGui.QFrame.Sunken)
|
||||||
self.PreviewFrame.setObjectName(u'PreviewFrame')
|
self.PreviewFrame.setObjectName(u'PreviewFrame')
|
||||||
|
|
||||||
self.grid = QtGui.QGridLayout(self.PreviewFrame)
|
self.grid = QtGui.QGridLayout(self.PreviewFrame)
|
||||||
self.grid.setMargin(10)
|
self.grid.setMargin(8)
|
||||||
self.grid.setObjectName(u'grid')
|
self.grid.setObjectName(u'grid')
|
||||||
|
|
||||||
self.SlidePreview = QtGui.QLabel(self.PreviewFrame)
|
self.SlidePreview = QtGui.QLabel(self.PreviewFrame)
|
||||||
@ -176,8 +176,8 @@ class SlideController(QtGui.QWidget):
|
|||||||
sizePolicy.setHeightForWidth(self.SlidePreview.sizePolicy().hasHeightForWidth())
|
sizePolicy.setHeightForWidth(self.SlidePreview.sizePolicy().hasHeightForWidth())
|
||||||
self.SlidePreview.setSizePolicy(sizePolicy)
|
self.SlidePreview.setSizePolicy(sizePolicy)
|
||||||
self.SlidePreview.setMinimumSize(QtCore.QSize(250, 190))
|
self.SlidePreview.setMinimumSize(QtCore.QSize(250, 190))
|
||||||
self.SlidePreview.setFrameShape(QtGui.QFrame.WinPanel)
|
self.SlidePreview.setFrameShape(QtGui.QFrame.Box)
|
||||||
self.SlidePreview.setFrameShadow(QtGui.QFrame.Sunken)
|
self.SlidePreview.setFrameShadow(QtGui.QFrame.Plain)
|
||||||
self.SlidePreview.setLineWidth(1)
|
self.SlidePreview.setLineWidth(1)
|
||||||
self.SlidePreview.setScaledContents(True)
|
self.SlidePreview.setScaledContents(True)
|
||||||
self.SlidePreview.setObjectName(u'SlidePreview')
|
self.SlidePreview.setObjectName(u'SlidePreview')
|
||||||
|
Loading…
Reference in New Issue
Block a user