From 6fdd5d028f5257ed1e3bbc006624dcefeb8d5813 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Tue, 14 Jul 2009 19:38:33 +0100 Subject: [PATCH 1/4] Fix none for new authors Fix focus bugs in Song child windows --- openlp/migration/migratesongs.py | 2 ++ openlp/plugins/songs/forms/authorsform.py | 12 ++++++++++-- openlp/plugins/songs/forms/songbookform.py | 2 ++ openlp/plugins/songs/forms/topicsform.py | 2 ++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/openlp/migration/migratesongs.py b/openlp/migration/migratesongs.py index 2465c8b9d..3620c6ab2 100644 --- a/openlp/migration/migratesongs.py +++ b/openlp/migration/migratesongs.py @@ -154,6 +154,8 @@ class MigrateSongs(): 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) diff --git a/openlp/plugins/songs/forms/authorsform.py b/openlp/plugins/songs/forms/authorsform.py index 9d9db05e7..d87e5bfe0 100644 --- a/openlp/plugins/songs/forms/authorsform.py +++ b/openlp/plugins/songs/forms/authorsform.py @@ -97,6 +97,7 @@ class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog): self.DeleteButton.setEnabled(False) self.author = None self._validate_form() + self.DisplayEdit.setFocus() def onAuthorListWidgetItemClicked(self, index): """ @@ -108,8 +109,14 @@ class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog): 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 @@ class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog): 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 diff --git a/openlp/plugins/songs/forms/songbookform.py b/openlp/plugins/songs/forms/songbookform.py index 73f36f797..cc203cdb4 100644 --- a/openlp/plugins/songs/forms/songbookform.py +++ b/openlp/plugins/songs/forms/songbookform.py @@ -96,6 +96,7 @@ class SongBookForm(QtGui.QDialog, Ui_SongBookDialog): self.AddUpdateButton.setEnabled(True) self.Book = None self._validate_form() + self.NameEdit.setFocus() def onBooksListViewItemClicked(self, index): """ @@ -115,6 +116,7 @@ class SongBookForm(QtGui.QDialog, Ui_SongBookDialog): 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 diff --git a/openlp/plugins/songs/forms/topicsform.py b/openlp/plugins/songs/forms/topicsform.py index d18547638..825d1a66b 100644 --- a/openlp/plugins/songs/forms/topicsform.py +++ b/openlp/plugins/songs/forms/topicsform.py @@ -95,6 +95,7 @@ class TopicsForm(QtGui.QDialog, Ui_TopicsDialog): self.DeleteButton.setEnabled(False) self.topic = None self._validate_form() + self.TopicNameEdit.setFocus() def onTopicsListWidgetItemClicked(self, index): """ @@ -113,6 +114,7 @@ class TopicsForm(QtGui.QDialog, Ui_TopicsDialog): 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 From 13be06d6339bdd63b8fd184752162102d3397762 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Tue, 14 Jul 2009 20:41:44 +0100 Subject: [PATCH 2/4] Fix bugs with spinboxes spinning madly --- openlp/core/ui/amendthemeform.py | 91 ++++++++++++++++++-------------- 1 file changed, 50 insertions(+), 41 deletions(-) diff --git a/openlp/core/ui/amendthemeform.py b/openlp/core/ui/amendthemeform.py index 4358f1071..3b52ba215 100644 --- a/openlp/core/ui/amendthemeform.py +++ b/openlp/core/ui/amendthemeform.py @@ -71,29 +71,29 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): 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 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): 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 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): self.stateChanging(self.theme) self.previewTheme(self.theme) - def onFontMainXSpinBoxChanged(self, value): - self.theme.font_main_x = 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, value): - self.theme.font_main_y = 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, value): - self.theme.font_main_width = 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, value): - self.theme.font_main_height = 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 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): '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 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog): self.stateChanging(self.theme) self.previewTheme(self.theme) - def onFontFooterXSpinBoxChanged(self, value): - self.theme.font_footer_x = 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, value): - self.theme.font_footer_y = 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, 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 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 # From 511088b73bd49892b069fac5d29d108568ee424c Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 15 Jul 2009 17:23:30 +0100 Subject: [PATCH 3/4] Start to fix pre processor for the renderer --- openlp/core/lib/renderer.py | 63 +++++++++++++++++++++++++++++++++++-- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 3f389afa7..52c7aec2e 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -151,10 +151,70 @@ class Renderer(object): 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 + page_length = self._rect.height() / metrics.height() + 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 @@ class Renderer(object): 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: From 05a1c5a328f12a1a665502dfff28c1d43f6f5fcf Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 15 Jul 2009 18:33:31 +0100 Subject: [PATCH 4/4] Clean up phase 1 one of render sort out fix bug in render frames (who forgot the footer) --- openlp/core/lib/renderer.py | 32 ++++++++++++++++---------------- openlp/core/lib/rendermanager.py | 6 +++--- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 52c7aec2e..a7e494302 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -151,13 +151,13 @@ class Renderer(object): lines = verse.split(u'\n') for line in lines: text.append(line) - print text + #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 +# print "-----------------------------" +# print split_text log.debug(u'format_slide - End') return split_text @@ -165,28 +165,28 @@ class Renderer(object): 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 - page_length = self._rect.height() / metrics.height() + #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 + #print ave_line_width ave_line_width = int(ave_line_width + (ave_line_width * 0.5)) - print ave_line_width + #print ave_line_width split_pages = [] page = [] split_lines = [] count = 0 for line in text: - print line , len(line) + #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] + #print ave_line_width, pos, line[:pos] split_text = line[:pos] - print metrics.width(split_text, -1), line_width + #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] + #print ave_line_width, pos, line[:pos] #no more spaces found if pos == -1: split_text = line @@ -198,11 +198,11 @@ class Renderer(object): if len(line) <= ave_line_width: split_lines.append(line) line = u'' - count += 1 - if count == 50: - a = c - print split_lines - print line +# count += 1 +# if count == 50: +# a = c + #print split_lines + #print line else: split_lines.append(line) line = u'' diff --git a/openlp/core/lib/rendermanager.py b/openlp/core/lib/rendermanager.py index 6c3d11001..3efc03858 100644 --- a/openlp/core/lib/rendermanager.py +++ b/openlp/core/lib/rendermanager.py @@ -138,12 +138,12 @@ class RenderManager(object): 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)