Bug fixes from last merge

bzr-revno: 500
This commit is contained in:
Tim Bentley 2009-08-05 19:55:47 +01:00
commit a9fad06dc0
3 changed files with 86 additions and 77 deletions

View File

@ -167,32 +167,37 @@ class Renderer(object):
#take the width work out approx how many characters and add 50%
line_width = self._rect.width() - self._right_margin
#number of lines on a page - adjust for rounding up.
#print self._rect.height() , metrics.height(), int(self._rect.height() / metrics.height())
page_length = int(self._rect.height() / metrics.height()) - 1
ave_line_width = line_width / metrics.averageCharWidth()
#print ave_line_width
# print "A", ave_line_width
ave_line_width = int(ave_line_width + (ave_line_width * 0.5))
#print ave_line_width
# print "B", ave_line_width
split_pages = []
page = []
split_lines = []
count = 0
for line in text:
#print line , len(line)
# print "C", line , len(line)
if len(line) > ave_line_width:
while len(line) > 0:
pos = line.find(u' ', ave_line_width)
#print ave_line_width, pos, line[:pos]
# print "D2", len(line), ave_line_width, pos, line[:pos]
split_text = line[:pos]
#print metrics.width(split_text, -1), line_width
# print "E", metrics.width(split_text, -1), line_width
while metrics.width(split_text, -1) > line_width:
#Find the next space to the left
pos = line[:pos].rfind(u' ')
#print ave_line_width, pos, line[:pos]
# print "F", ave_line_width, pos, line[:pos]
#no more spaces found
if pos == -1:
if pos == 0:
split_text = line
while metrics.width(split_text, -1) > line_width:
split_text = split_text[:-1]
pos = len(split_text)
else:
split_text = line[:pos]
# print "F1", split_text, line, pos
split_lines.append(split_text)
line = line[pos:]
#Text fits in a line now
@ -200,13 +205,14 @@ class Renderer(object):
split_lines.append(line)
line = u''
# count += 1
# if count == 50:
# if count == 15:
# a = c
#print split_lines
#print line
# print "G", split_lines
# print "H", line
else:
split_lines.append(line)
line = u''
#print "I", split_lines, page_length
for line in split_lines:
page.append(line)
if len(page) == page_length:
@ -306,72 +312,72 @@ class Renderer(object):
QtCore.Qt.SmoothTransformation)
log.debug(u'render background End')
def _split_set_of_lines(self, lines, footer):
"""
Given a list of lines, decide how to split them best if they don't all
fit on the screen. This is done by splitting at 1/2, 1/3 or 1/4 of the
set. If it doesn't fit, even at this size, just split at each
opportunity. 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.
``lines``
The lines of text to split.
``footer``
The footer text.
"""
bboxes = []
for line in lines:
bboxes.append(self._render_and_wrap_single_line(line, footer))
numlines = len(lines)
bottom = self._rect.bottom()
for ratio in (numlines, numlines/2, numlines/3, numlines/4):
good = 1
startline = 0
endline = startline + ratio
while (endline <= numlines and endline != 0):
by = 0
for (x,y) in bboxes[startline:endline]:
by += y
if by > bottom:
good = 0
break
startline += ratio
endline = startline + ratio
if good == 1:
break
retval = []
numlines_per_page = ratio
if good:
c = 0
thislines = []
while c < numlines:
thislines.append(lines[c])
c += 1
if len(thislines) == numlines_per_page:
retval.append(thislines)
thislines = []
if len(thislines) > 0:
retval.append(thislines)
else:
# print "Just split where you can"
retval = []
startline = 0
endline = startline + 1
while (endline <= numlines):
by = 0
for (x,y) in bboxes[startline:endline]:
by += y
if by > bottom:
retval.append(lines[startline:endline-1])
startline = endline-1
# gets incremented below
endline = startline
by = 0
endline += 1
return retval
# def _split_set_of_lines(self, lines, footer):
# """
# Given a list of lines, decide how to split them best if they don't all
# fit on the screen. This is done by splitting at 1/2, 1/3 or 1/4 of the
# set. If it doesn't fit, even at this size, just split at each
# opportunity. 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.
#
# ``lines``
# The lines of text to split.
#
# ``footer``
# The footer text.
# """
# bboxes = []
# for line in lines:
# bboxes.append(self._render_and_wrap_single_line(line, footer))
# numlines = len(lines)
# bottom = self._rect.bottom()
# for ratio in (numlines, numlines/2, numlines/3, numlines/4):
# good = 1
# startline = 0
# endline = startline + ratio
# while (endline <= numlines and endline != 0):
# by = 0
# for (x,y) in bboxes[startline:endline]:
# by += y
# if by > bottom:
# good = 0
# break
# startline += ratio
# endline = startline + ratio
# if good == 1:
# break
# retval = []
# numlines_per_page = ratio
# if good:
# c = 0
# thislines = []
# while c < numlines:
# thislines.append(lines[c])
# c += 1
# if len(thislines) == numlines_per_page:
# retval.append(thislines)
# thislines = []
# if len(thislines) > 0:
# retval.append(thislines)
# else:
# # print "Just split where you can"
# retval = []
# startline = 0
# endline = startline + 1
# while (endline <= numlines):
# by = 0
# for (x,y) in bboxes[startline:endline]:
# by += y
# if by > bottom:
# retval.append(lines[startline:endline-1])
# startline = endline-1
# # gets incremented below
# endline = startline
# by = 0
# endline += 1
# return retval
def _correctAlignment(self, rect, bbox):
"""

View File

@ -161,7 +161,7 @@ class ThemeXML(object):
#Create Filename element
self.child_element(background, u'filename', filename)
def add_font(self, name, color, proportion, override, fonttype=u'main', weight=u'Bold', italics=False,
def add_font(self, name, color, proportion, override, fonttype=u'main', weight=u'Normal', italics=u'False',
xpos=0, ypos=0, width=0, height=0):
"""
Add a Font.

View File

@ -20,6 +20,7 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA
"""
import logging
import time
from PyQt4 import QtCore, QtGui
@ -268,6 +269,8 @@ class BibleMediaItem(MediaManagerItem):
def setQuickMsg2(self, text):
self.QuickMsg2.setText(translate(u'BibleMediaItem', unicode(text)))
Receiver().send_message(u'openlpprocessevents')
#minor delay to get the events processed
time.sleep(0.5)
def loadBibles(self):
log.debug(u'Loading Bibles')