openlp-core team mailing list archive
-
openlp-core team
-
Mailing list archive
-
Message #00166
[Merge] lp:~trb143/openlp/bugfixes into lp:openlp
Tim Bentley has proposed merging lp:~trb143/openlp/bugfixes into lp:openlp.
Requested reviews:
openlp.org Core (openlp-core)
Fix bugs in ThemeManager where changing a spin box generates too many events.
Start to fix the renderer so Raoul can display the whole bible!
Fix bug in rendermanager where footer was forgotten.
--
https://code.launchpad.net/~trb143/openlp/bugfixes/+merge/8837
Your team openlp.org Core is subscribed to branch lp:openlp.
=== modified file 'openlp/core/lib/renderer.py'
--- openlp/core/lib/renderer.py 2009-07-10 13:16:15 +0000
+++ openlp/core/lib/renderer.py 2009-07-15 17:33:31 +0000
@@ -151,10 +151,70 @@
lines = verse.split(u'\n')
for line in lines:
text.append(line)
- split_text = self._split_set_of_lines(text, False)
+ #print text
+ split_text = self.pre_render_text(text)
+# print "-----------------------------"
+# print split_text
+# split_text = self._split_set_of_lines(text, False)
+# print "-----------------------------"
+# print split_text
log.debug(u'format_slide - End')
return split_text
+ def pre_render_text(self, text):
+ metrics = QtGui.QFontMetrics(self.mainFont)
+ #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.
+ page_length = int(self._rect.height() / metrics.height()) - 1
+ ave_line_width = line_width / metrics.averageCharWidth()
+ #print ave_line_width
+ ave_line_width = int(ave_line_width + (ave_line_width * 0.5))
+ #print ave_line_width
+ split_pages = []
+ page = []
+ split_lines = []
+ count = 0
+ for line in text:
+ #print 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]
+ split_text = line[:pos]
+ #print 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]
+ #no more spaces found
+ if pos == -1:
+ split_text = line
+ else:
+ split_text = line[:pos]
+ split_lines.append(split_text)
+ line = line[pos:]
+ #Text fits in a line now
+ if len(line) <= ave_line_width:
+ split_lines.append(line)
+ line = u''
+# count += 1
+# if count == 50:
+# a = c
+ #print split_lines
+ #print line
+ else:
+ split_lines.append(line)
+ line = u''
+ for line in split_lines:
+ page.append(line)
+ if len(page) == page_length:
+ split_pages.append(page)
+ page = []
+ if len(page) > 0:
+ split_pages.append(page)
+ return split_pages
+
def set_text_rectangle(self, rect_main, rect_footer):
"""
Sets the rectangle within which text should be rendered.
@@ -544,7 +604,6 @@
painter.setPen(QtGui.QColor(color))
x, y = tlcorner
metrics = QtGui.QFontMetrics(font)
- # xxx some fudges to make it exactly like wx! Take 'em out later
w = metrics.width(line)
h = metrics.height() - 2
if draw:
=== modified file 'openlp/core/lib/rendermanager.py'
--- openlp/core/lib/rendermanager.py 2009-07-10 13:16:15 +0000
+++ openlp/core/lib/rendermanager.py 2009-07-15 17:33:31 +0000
@@ -138,12 +138,12 @@
main_rect = None
footer_rect = None
if theme.font_main_override == False:
- main_rect = QtCore.QRect(10,0, self.width-1, self.height-1)
+ main_rect = QtCore.QRect(10,0, self.width - 1, self.footer_start - 20)
else:
main_rect = QtCore.QRect(int(theme.font_main_x) , int(theme.font_main_y),
- int(theme.font_main_width)-1, int(theme.font_main_height)-1)
+ int(theme.font_main_width)-1, int(theme.font_main_height) - 1)
if theme.font_footer_override == False:
- footer_rect = QtCore.QRect(10,self.footer_start, self.width-1, self.height-self.footer_start)
+ footer_rect = QtCore.QRect(10,self.footer_start, self.width - 1, self.height-self.footer_start)
else:
footer_rect = QtCore.QRect(int(theme.font_footer_x),int(theme.font_footer_y),
int(theme.font_footer_width)-1, int(theme.font_footer_height)-1)
=== modified file 'openlp/core/ui/amendthemeform.py'
--- openlp/core/ui/amendthemeform.py 2009-07-06 16:34:13 +0000
+++ openlp/core/ui/amendthemeform.py 2009-07-14 19:41:44 +0000
@@ -71,29 +71,29 @@
QtCore.SIGNAL(u'activated(int)'), self.onVerticalComboBoxSelected)
QtCore.QObject.connect(self.FontMainSizeSpinBox,
- QtCore.SIGNAL(u'valueChanged(int)'), self.onFontMainSizeSpinBoxChanged)
+ QtCore.SIGNAL(u'editingFinished()'), self.onFontMainSizeSpinBoxChanged)
QtCore.QObject.connect(self.FontFooterSizeSpinBox,
- QtCore.SIGNAL(u'valueChanged(int)'), self.onFontFooterSizeSpinBoxChanged)
+ QtCore.SIGNAL(u'editingFinished()'), self.onFontFooterSizeSpinBoxChanged)
QtCore.QObject.connect(self.FontMainDefaultCheckBox,
QtCore.SIGNAL(u'stateChanged(int)'), self.onFontMainDefaultCheckBoxChanged)
QtCore.QObject.connect(self.FontMainXSpinBox,
- QtCore.SIGNAL(u'valueChanged(int)'), self.onFontMainXSpinBoxChanged)
+ QtCore.SIGNAL(u'editingFinished()'), self.onFontMainXSpinBoxChanged)
QtCore.QObject.connect(self.FontMainYSpinBox,
- QtCore.SIGNAL(u'valueChanged(int)'), self.onFontMainYSpinBoxChanged)
+ QtCore.SIGNAL(u'editingFinished()'), self.onFontMainYSpinBoxChanged)
QtCore.QObject.connect(self.FontMainWidthSpinBox,
- QtCore.SIGNAL(u'valueChanged(int)'), self.onFontMainWidthSpinBoxChanged)
+ QtCore.SIGNAL(u'editingFinished()'), self.onFontMainWidthSpinBoxChanged)
QtCore.QObject.connect(self.FontMainHeightSpinBox,
- QtCore.SIGNAL(u'valueChanged(int)'), self.onFontMainHeightSpinBoxChanged)
+ QtCore.SIGNAL(u'editingFinished()'), self.onFontMainHeightSpinBoxChanged)
QtCore.QObject.connect(self.FontFooterDefaultCheckBox,
QtCore.SIGNAL(u'stateChanged(int)'), self.onFontFooterDefaultCheckBoxChanged)
QtCore.QObject.connect(self.FontFooterXSpinBox,
- QtCore.SIGNAL(u'valueChanged(int)'), self.onFontFooterXSpinBoxChanged)
+ QtCore.SIGNAL(u'editingFinished()'), self.onFontFooterXSpinBoxChanged)
QtCore.QObject.connect(self.FontFooterYSpinBox,
- QtCore.SIGNAL(u'valueChanged(int)'), self.onFontFooterYSpinBoxChanged)
+ QtCore.SIGNAL(u'editingFinished()'), self.onFontFooterYSpinBoxChanged)
QtCore.QObject.connect(self.FontFooterWidthSpinBox,
- QtCore.SIGNAL(u'valueChanged(int)'), self.onFontFooterWidthSpinBoxChanged)
+ QtCore.SIGNAL(u'editingFinished()'), self.onFontFooterWidthSpinBoxChanged)
QtCore.QObject.connect(self.FontFooterHeightSpinBox,
- QtCore.SIGNAL(u'valueChanged(int)'), self.onFontFooterHeightSpinBoxChanged)
+ QtCore.SIGNAL(u'editingFinished()'), self.onFontFooterHeightSpinBoxChanged)
QtCore.QObject.connect(self.OutlineCheckBox,
QtCore.SIGNAL(u'stateChanged(int)'), self.onOutlineCheckBoxChanged)
QtCore.QObject.connect(self.ShadowCheckBox,
@@ -167,9 +167,10 @@
u'background-color: %s' % unicode(self.theme.font_main_color))
self.previewTheme(self.theme)
- def onFontMainSizeSpinBoxChanged(self, value):
- self.theme.font_main_proportion = value
- self.previewTheme(self.theme)
+ def onFontMainSizeSpinBoxChanged(self):
+ if self.theme.font_main_proportion != self.FontMainSizeSpinBox.value():
+ self.theme.font_main_proportion = self.FontMainSizeSpinBox.value()
+ self.previewTheme(self.theme)
def onFontMainDefaultCheckBoxChanged(self, value):
if value == 2: # checked
@@ -190,21 +191,25 @@
self.stateChanging(self.theme)
self.previewTheme(self.theme)
- def onFontMainXSpinBoxChanged(self, value):
- self.theme.font_main_x = value
- self.previewTheme(self.theme)
-
- def onFontMainYSpinBoxChanged(self, value):
- self.theme.font_main_y = value
- self.previewTheme(self.theme)
-
- def onFontMainWidthSpinBoxChanged(self, value):
- self.theme.font_main_width = value
- self.previewTheme(self.theme)
-
- def onFontMainHeightSpinBoxChanged(self, value):
- self.theme.font_main_height = value
- self.previewTheme(self.theme)
+ def onFontMainXSpinBoxChanged(self):
+ if self.theme.font_main_x != self.FontMainXSpinBox.value():
+ self.theme.font_main_x = self.FontMainXSpinBox.value()
+ self.previewTheme(self.theme)
+
+ def onFontMainYSpinBoxChanged(self):
+ if self.theme.font_main_y != self.FontMainYSpinBox.value():
+ self.theme.font_main_y = self.FontMainYSpinBox.value()
+ self.previewTheme(self.theme)
+
+ def onFontMainWidthSpinBoxChanged(self):
+ if self.theme.font_main_width != self.FontMainWidthSpinBox.value():
+ self.theme.font_main_width = self.FontMainWidthSpinBox.value()
+ self.previewTheme(self.theme)
+
+ def onFontMainHeightSpinBoxChanged(self):
+ if self.theme.font_main_height != self.FontMainHeightSpinBox.value():
+ self.theme.font_main_height = self.FontMainHeightSpinBox.value()
+ self.previewTheme(self.theme)
#
#Footer Font Tab
#
@@ -220,9 +225,10 @@
'background-color: %s' % unicode(self.theme.font_footer_color))
self.previewTheme(self.theme)
- def onFontFooterSizeSpinBoxChanged(self, value):
- self.theme.font_footer_proportion = value
- self.previewTheme(self.theme)
+ def onFontFooterSizeSpinBoxChanged(self):
+ if self.theme.font_footer_proportion != self.FontFooterSizeSpinBox.value():
+ self.theme.font_footer_proportion = self.FontFooterSizeSpinBox.value()
+ self.previewTheme(self.theme)
def onFontFooterDefaultCheckBoxChanged(self, value):
if value == 2: # checked
@@ -245,22 +251,25 @@
self.stateChanging(self.theme)
self.previewTheme(self.theme)
- def onFontFooterXSpinBoxChanged(self, value):
- self.theme.font_footer_x = value
- self.previewTheme(self.theme)
-
- def onFontFooterYSpinBoxChanged(self, value):
- self.theme.font_footer_y = value
- self.previewTheme(self.theme)
-
- def onFontFooterWidthSpinBoxChanged(self, value):
- self.theme.font_footer_width = value
- self.previewTheme(self.theme)
-
- def onFontFooterHeightSpinBoxChanged(self, value):
- self.theme.font_footer_height = value
- self.previewTheme(self.theme)
-
+ def onFontFooterXSpinBoxChanged(self):
+ if self.theme.font_footer_x != self.FontFooterXSpinBox.value():
+ self.theme.font_footer_x = self.FontFooterXSpinBox.value()
+ self.previewTheme(self.theme)
+
+ def onFontFooterYSpinBoxChanged(self):
+ if self.theme.font_footer_y != self.FontFooterYSpinBox.value():
+ self.theme.font_footer_y = self.FontFooterYSpinBox.value()
+ self.previewTheme(self.theme)
+
+ def onFontFooterWidthSpinBoxChanged(self):
+ if self.theme.font_footer_width != self.FontFooterWidthSpinBox.value():
+ self.theme.font_footer_width = self.FontFooterWidthSpinBox.value()
+ self.previewTheme(self.theme)
+
+ def onFontFooterHeightSpinBoxChanged(self):
+ if self.theme.font_footer_height != self.FontFooterHeightSpinBox.value():
+ self.theme.font_footer_height = self.FontFooterHeightSpinBox.value()
+ self.previewTheme(self.theme)
#
#Background Tab
#
=== modified file 'openlp/migration/migratesongs.py'
--- openlp/migration/migratesongs.py 2009-06-24 06:11:04 +0000
+++ openlp/migration/migratesongs.py 2009-07-14 18:38:33 +0000
@@ -154,6 +154,8 @@
author = Author()
authors_temp = self.session.query(TAuthor).get(a)
author.display_name = authors_temp.authorname
+ author.first_name = u''
+ author.last_name = u''
song.authors.append(author)
try:
self.session.add(song)
=== modified file 'openlp/plugins/songs/forms/authorsform.py'
--- openlp/plugins/songs/forms/authorsform.py 2009-06-14 15:12:40 +0000
+++ openlp/plugins/songs/forms/authorsform.py 2009-07-14 18:38:33 +0000
@@ -97,6 +97,7 @@
self.DeleteButton.setEnabled(False)
self.author = None
self._validate_form()
+ self.DisplayEdit.setFocus()
def onAuthorListWidgetItemClicked(self, index):
"""
@@ -108,8 +109,14 @@
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
self.author = self.songmanager.get_author(item_id)
self.DisplayEdit.setText(self.author.display_name)
- self.FirstNameEdit.setText(self.author.first_name)
- self.LastNameEdit.setText(self.author.last_name)
+ if self.author.first_name is None:
+ self.FirstNameEdit.setText(u'')
+ else:
+ self.FirstNameEdit.setText(self.author.first_name)
+ if self.author.last_name is None:
+ self.LastNameEdit.setText(u'')
+ else:
+ self.LastNameEdit.setText(self.author.last_name)
if len(self.author.songs) > 0:
self.MessageLabel.setText(translate(u'AuthorForm', u'Author in use "Delete" is disabled'))
self.DeleteButton.setEnabled(False)
@@ -117,6 +124,7 @@
self.MessageLabel.setText(translate(u'AuthorForm', u'Author in not used'))
self.DeleteButton.setEnabled(True)
self._validate_form()
+ self.DisplayEdit.setFocus()
def _validate_form(self):
# We need at lease a display name
=== modified file 'openlp/plugins/songs/forms/songbookform.py'
--- openlp/plugins/songs/forms/songbookform.py 2009-06-14 15:12:40 +0000
+++ openlp/plugins/songs/forms/songbookform.py 2009-07-14 18:38:33 +0000
@@ -96,6 +96,7 @@
self.AddUpdateButton.setEnabled(True)
self.Book = None
self._validate_form()
+ self.NameEdit.setFocus()
def onBooksListViewItemClicked(self, index):
"""
@@ -115,6 +116,7 @@
self.MessageLabel.setText(translate(u'BookForm', u'Book in not used'))
self.DeleteButton.setEnabled(True)
self._validate_form()
+ self.NameEdit.setFocus()
def _validate_form(self):
# We need at lease a display name
=== modified file 'openlp/plugins/songs/forms/topicsform.py'
--- openlp/plugins/songs/forms/topicsform.py 2009-06-24 06:15:04 +0000
+++ openlp/plugins/songs/forms/topicsform.py 2009-07-14 18:38:33 +0000
@@ -95,6 +95,7 @@
self.DeleteButton.setEnabled(False)
self.topic = None
self._validate_form()
+ self.TopicNameEdit.setFocus()
def onTopicsListWidgetItemClicked(self, index):
"""
@@ -113,6 +114,7 @@
self.MessageLabel.setText(translate(u'TopicForm', u'Topic in not used'))
self.DeleteButton.setEnabled(True)
self._validate_form()
+ self.TopicNameEdit.setFocus()
def _validate_form(self):
# We need at lease a display name
Follow ups