diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 785e7b360..c873fed7a 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -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 diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 4619ccd72..fe936f406 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -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 diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index ab52980dc..7a04a1827 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -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)) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 25b725ece..7a20707c8 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -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')