From bf3e013e9ce36e485941e604d79701867281a3d3 Mon Sep 17 00:00:00 2001 From: M2j Date: Tue, 4 Jan 2011 00:59:42 +0100 Subject: [PATCH 01/31] i18n of Bible book names and Bible reference separators --- openlp/plugins/bibles/lib/__init__.py | 108 +++++++++++++++++- openlp/plugins/bibles/lib/db.py | 3 +- openlp/plugins/bibles/lib/manager.py | 8 ++ openlp/plugins/bibles/lib/mediaitem.py | 80 ++++++++----- openlp/plugins/bibles/resources/osisbooks.csv | 4 +- 5 files changed, 169 insertions(+), 34 deletions(-) diff --git a/openlp/plugins/bibles/lib/__init__.py b/openlp/plugins/bibles/lib/__init__.py index f2797e16d..7068c7410 100644 --- a/openlp/plugins/bibles/lib/__init__.py +++ b/openlp/plugins/bibles/lib/__init__.py @@ -30,19 +30,26 @@ plugin. import logging import re +from openlp.core.lib import translate + log = logging.getLogger(__name__) def get_reference_match(match_type): - local_separator = unicode(u':;;\s*[:vV]\s*;;-;;\s*-\s*;;,;;\s*,\s*;;end' - ).split(u';;') # English - # local_separator = unicode(u',;;\s*,\s*;;-;;\s*-\s*;;.;;\.;;[Ee]nde' - # ).split(u';;') # German + local_separator = unicode(translate('BiblesPlugin', + ':;;\\s*[:vV]\\s*;;-;;\\s*-\\s*;;,;;\\s*,\\s*;;end', + 'Seperators for parsing references. There are 7 values separated each ' + 'by two semicolons. Verse, range and list separators have each one ' + 'display symbol which appears on slides and in the GUI and a regular ' + 'expression for detecting this symbols.\n' + 'Please ask a developer to double check your translation or make ' + 'yourself familar with regular experssions on: ' + 'http://docs.python.org/library/re.html') + ).split(u';;') separators = { u'sep_v_display': local_separator[0], u'sep_v': local_separator[1], u'sep_r_display': local_separator[2], u'sep_r': local_separator[3], u'sep_l_display': local_separator[4], u'sep_l': local_separator[5], u'sep_e': local_separator[6]} - # verse range match: (:)?(-((:)?|end)?)? range_string = str(r'(?:(?P[0-9]+)%(sep_v)s)?(?P' r'[0-9]+)(?P%(sep_r)s(?:(?:(?P[0-9]+)%(sep_v)s)?' @@ -131,6 +138,9 @@ def parse_reference(reference): if match: log.debug(u'Matched reference %s' % reference) book = match.group(u'book') + bookname_dict = get_system_bookname_dict() + if book.lower() in bookname_dict: + book = bookname_dict[book.lower()] ranges = match.group(u'ranges') range_list = get_reference_match(u'range_separator').split(ranges) ref_list = [] @@ -191,6 +201,94 @@ def parse_reference(reference): log.debug(u'Invalid reference: %s' % reference) return None +def get_local_bookname_dict(): + raw_dict = get_raw_bookname_dict() + local_bookname_dict = {} + for key in raw_dict.keys(): + local_bookname_dict[key] = raw_dict[key][0] + return local_bookname_dict + +def get_system_bookname_dict(): + raw_dict = get_raw_bookname_dict() + system_bookname_dict = {} + for key in raw_dict.keys(): + for alias in raw_dict[key]: + system_bookname_dict[alias.lower()] = key + return system_bookname_dict + +def get_raw_bookname_dict(): + raw_bookname_dict = {u'Genesis': translate('BiblesPlugin', 'Genesis;;Gen'), + u'Exodus': translate('BiblesPlugin', 'Exodus;;Exod'), + u'Leviticus': translate('BiblesPlugin', 'Leviticus;;Lev'), + u'Numbers': translate('BiblesPlugin', 'Numbers;;Num'), + u'Deuteronomy': translate('BiblesPlugin', 'Deuteronomy;;Deut'), + u'Joshua': translate('BiblesPlugin', 'Joshua;;Josh'), + u'Judges': translate('BiblesPlugin', 'Judges;;Judg'), + u'Ruth': translate('BiblesPlugin', 'Ruth;;Ruth'), + u'1 Samuel': translate('BiblesPlugin', '1 Samuel;;1Sam'), + u'2 Samuel': translate('BiblesPlugin', '2 Samuel;;2Sam'), + u'1 Kings': translate('BiblesPlugin', '1 Kings;;1Kgs'), + u'2 Kings': translate('BiblesPlugin', '2 Kings;;2Kgs'), + u'1 Chronicles': translate('BiblesPlugin', '1 Chronicles;;1Chr'), + u'2 Chronicles': translate('BiblesPlugin', '2 Chronicles;;2Chr'), + u'Ezra': translate('BiblesPlugin', 'Ezra;;Ezra'), + u'Nehemiah': translate('BiblesPlugin', 'Nehemiah;;Neh'), + u'Esther': translate('BiblesPlugin', 'Esther;;Esth'), + u'Job': translate('BiblesPlugin', 'Job;;Job'), + u'Psalms': translate('BiblesPlugin', 'Psalms;;Ps'), + u'Proverbs': translate('BiblesPlugin', 'Proverbs;;Prov'), + u'Ecclesiastes': translate('BiblesPlugin', 'Ecclesiastes;;Eccl'), + u'Song of Songs': translate('BiblesPlugin', 'Song of Songs;;Song'), + u'Isaiah': translate('BiblesPlugin', 'Isaiah;;Isa'), + u'Jeremiah': translate('BiblesPlugin', 'Jeremiah;;Jer'), + u'Lamentations': translate('BiblesPlugin', 'Lamentations;;Lam'), + u'Ezekiel': translate('BiblesPlugin', 'Ezekiel;;Ezek'), + u'Daniel': translate('BiblesPlugin', 'Daniel;;Dan'), + u'Hosea': translate('BiblesPlugin', 'Hosea;;Hos'), + u'Joel': translate('BiblesPlugin', 'Joel;;Joel'), + u'Amos': translate('BiblesPlugin', 'Amos;;Amos'), + u'Obad': translate('BiblesPlugin', 'Obad;;Obad'), + u'Jonah': translate('BiblesPlugin', 'Jonah;;Jonah'), + u'Micah': translate('BiblesPlugin', 'Micah;;Mic'), + u'Naham': translate('BiblesPlugin', 'Naham;;Nah'), + u'Habakkuk': translate('BiblesPlugin', 'Habakkuk;;Hab'), + u'Zephaniah': translate('BiblesPlugin', 'Zephaniah;;Zeph'), + u'Haggai': translate('BiblesPlugin', 'Haggai;;Hag'), + u'Zechariah': translate('BiblesPlugin', 'Zechariah;;Zech'), + u'Malachi': translate('BiblesPlugin', 'Malachi;;Mal'), + u'Matthew': translate('BiblesPlugin', 'Matthew;;Matt'), + u'Mark': translate('BiblesPlugin', 'Mark;;Mark'), + u'Luke': translate('BiblesPlugin', 'Luke;;Luke'), + u'John': translate('BiblesPlugin', 'John;;John'), + u'Acts': translate('BiblesPlugin', 'Acts;;Acts'), + u'Romans': translate('BiblesPlugin', 'Romans;;Rom'), + u'1 Corinthians': translate('BiblesPlugin', '1 Corinthians;;1Cor'), + u'2 Corinthians': translate('BiblesPlugin', '2 Corinthians;;2Cor'), + u'Galatians': translate('BiblesPlugin', 'Galatians;;Gal'), + u'Ephesians': translate('BiblesPlugin', 'Ephesians;;Eph'), + u'Philippians': translate('BiblesPlugin', 'Philippians;;Phil'), + u'Colossians': translate('BiblesPlugin', 'Colossians;;Col'), + u'1 Thessalonians': translate('BiblesPlugin', + '1 Thessalonians;;1Thess'), + u'2 Thessalonians': translate('BiblesPlugin', + '2 Thessalonians;;2Thess'), + u'1 Timothy': translate('BiblesPlugin', '1 Timothy;;1Tim'), + u'2 Timothy': translate('BiblesPlugin', '2 Timothy;;2Tim'), + u'Titus': translate('BiblesPlugin', 'Titus;;Titus'), + u'Philemon': translate('BiblesPlugin', 'Philemon;;Phlm'), + u'Hebrews': translate('BiblesPlugin', 'Hebrews;;Heb'), + u'James': translate('BiblesPlugin', 'James;;Jas'), + u'1 Peter': translate('BiblesPlugin', '1 Peter;;1Pet'), + u'2 Peter': translate('BiblesPlugin', '2 Peter;;2Pet'), + u'1 John': translate('BiblesPlugin', '1 John;;1John'), + u'2 John': translate('BiblesPlugin', '2 John;;2John'), + u'3 John': translate('BiblesPlugin', '3 John;;3John'), + u'Jude': translate('BiblesPlugin', 'Jude;;Jude'), + u'Revelation': translate('BiblesPlugin', 'Revelation;;Rev')} + for key in raw_bookname_dict.keys(): + raw_bookname_dict[key] = unicode(raw_bookname_dict[key]).split(u';;') + return raw_bookname_dict + class SearchResults(object): """ diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index 62068437a..2c86c6977 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -190,7 +190,8 @@ class BibleDB(QtCore.QObject, Manager): """ if not isinstance(old_filename, unicode): old_filename = unicode(old_filename, u'utf-8') - old_filename = re.sub(r'[^\w]+', u'_', old_filename).strip(u'_') + old_filename = \ + re.sub(r'[^\w]+', u'_', old_filename, re.UNICODE).strip(u'_') return old_filename + u'.sqlite' def register(self, wizard): diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index 9dc70e85a..cea812968 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -257,6 +257,14 @@ class BibleManager(object): - Genesis 1:1-10,2:1-10 """ log.debug(u'BibleManager.get_verses("%s", "%s")', bible, versetext) + if not bible: + QtGui.QMessageBox.information(self.parent.mediaItem, + translate('BiblesPlugin.BibleManager', + 'No Bibles available'), + translate('BiblesPlugin.BibleManager', + 'There are no Bibles currently installed. Please use the ' + 'Import Wizard to install one or more Bibles.')) + return None reflist = parse_reference(versetext) if reflist: return self.db_cache[bible].get_verses(reflist) diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index d557897ed..9a703c68d 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -32,7 +32,8 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import MediaManagerItem, Receiver, BaseListWithDnD, \ ItemCapabilities, translate from openlp.plugins.bibles.forms import BibleImportForm -from openlp.plugins.bibles.lib import get_reference_match +from openlp.plugins.bibles.lib import get_reference_match, \ + get_local_bookname_dict, get_system_bookname_dict log = logging.getLogger(__name__) @@ -330,6 +331,10 @@ class BibleMediaItem(MediaManagerItem): translate('BiblesPlugin.MediaItem', 'Clear')) self.ClearAdvancedSearchComboBox.addItem( translate('BiblesPlugin.MediaItem', 'Keep')) + self.verse_separator = get_reference_match(u'sep_v_display') + self.range_separator = get_reference_match(u'sep_r_display') + self.local_bookname = get_local_bookname_dict() + self.system_bookname = get_local_bookname_dict() def initialise(self): log.debug(u'bible manager initialise') @@ -410,7 +415,12 @@ class BibleMediaItem(MediaManagerItem): first = True for book in book_data: row = self.AdvancedBookComboBox.count() - self.AdvancedBookComboBox.addItem(book[u'name']) + local_name = book[u'name'] + if local_name in self.local_bookname: + local_name = self.local_bookname[local_name] + else: + log.debug(u'bookname %s not translatable', local_name) + self.AdvancedBookComboBox.addItem(local_name) self.AdvancedBookComboBox.setItemData( row, QtCore.QVariant(book[u'chapters'])) if first: @@ -446,8 +456,12 @@ class BibleMediaItem(MediaManagerItem): bibles = self.parent.manager.get_bibles() bible = unicode(self.QuickVersionComboBox.currentText()) if bible: - book_data = bibles[bible].get_books() - books = [book.name for book in book_data] + books = [] + for book in bibles[bible].get_books(): + if book.name in self.local_bookname: + books.append(self.local_bookname[book.name]) + else: + books.append(book.name) books.sort() completer = QtGui.QCompleter(books) completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive) @@ -459,10 +473,12 @@ class BibleMediaItem(MediaManagerItem): def onAdvancedBookComboBox(self): item = int(self.AdvancedBookComboBox.currentIndex()) + bookname = unicode(self.AdvancedBookComboBox.currentText()) + if bookname in self.system_bookname: + bookname = self.system_bookname[bookname] self.initialiseChapterVerse( unicode(self.AdvancedVersionComboBox.currentText()), - unicode(self.AdvancedBookComboBox.currentText()), - self.AdvancedBookComboBox.itemData(item).toInt()[0]) + bookname, self.AdvancedBookComboBox.itemData(item).toInt()[0]) def onAdvancedFromVerse(self): chapter_from = int(self.AdvancedFromChapter.currentText()) @@ -470,6 +486,8 @@ class BibleMediaItem(MediaManagerItem): if chapter_from == chapter_to: bible = unicode(self.AdvancedVersionComboBox.currentText()) book = unicode(self.AdvancedBookComboBox.currentText()) + if book in self.system_bookname: + book = self.system_bookname[book] verse_from = int(self.AdvancedFromVerse.currentText()) verse_count = self.parent.manager.get_verse_count(bible, book, chapter_to) @@ -479,6 +497,8 @@ class BibleMediaItem(MediaManagerItem): def onAdvancedToChapter(self): bible = unicode(self.AdvancedVersionComboBox.currentText()) book = unicode(self.AdvancedBookComboBox.currentText()) + if book in self.system_bookname: + book = self.system_bookname[book] chapter_from = int(self.AdvancedFromChapter.currentText()) chapter_to = int(self.AdvancedToChapter.currentText()) verse_from = int(self.AdvancedFromVerse.currentText()) @@ -493,6 +513,8 @@ class BibleMediaItem(MediaManagerItem): def onAdvancedFromChapter(self): bible = unicode(self.AdvancedVersionComboBox.currentText()) book = unicode(self.AdvancedBookComboBox.currentText()) + if book in self.system_bookname: + book = self.system_bookname[book] chapter_from = int(self.AdvancedFromChapter.currentText()) chapter_to = int(self.AdvancedToChapter.currentText()) verse_count = self.parent.manager.get_verse_count(bible, book, @@ -545,14 +567,14 @@ class BibleMediaItem(MediaManagerItem): bible = unicode(self.AdvancedVersionComboBox.currentText()) second_bible = unicode(self.AdvancedSecondBibleComboBox.currentText()) book = unicode(self.AdvancedBookComboBox.currentText()) + if book in self.system_bookname: + book = self.system_bookname[book] chapter_from = self.AdvancedFromChapter.currentText() chapter_to = self.AdvancedToChapter.currentText() verse_from = self.AdvancedFromVerse.currentText() verse_to = self.AdvancedToVerse.currentText() - verse_separator = get_reference_match(u'sep_v_display') - range_separator = get_reference_match(u'sep_r_display') - verse_range = chapter_from + verse_separator + verse_from + \ - range_separator + chapter_to + verse_separator + verse_to + verse_range = chapter_from + self.verse_separator + verse_from + \ + self.range_separator + chapter_to + self.verse_separator + verse_to versetext = u'%s %s' % (book, verse_range) self.search_results = self.parent.manager.get_verses(bible, versetext) if second_bible: @@ -648,9 +670,12 @@ class BibleMediaItem(MediaManagerItem): second_permissions = u'' for count, verse in enumerate(self.search_results): if second_bible: + book = verse.book.name try: + if book in self.local_bookname: + book = self.local_bookname[book] vdict = { - 'book': QtCore.QVariant(verse.book.name), + 'book': QtCore.QVariant(book), 'chapter': QtCore.QVariant(verse.chapter), 'verse': QtCore.QVariant(verse.verse), 'bible': QtCore.QVariant(bible), @@ -669,12 +694,15 @@ class BibleMediaItem(MediaManagerItem): } except IndexError: break - bible_text = u' %s %d:%d (%s, %s)' % (verse.book.name, - verse.chapter, verse.verse, version.value, - second_version.value) + bible_text = u' %s %d%s%d (%s, %s)' % (book, + verse.chapter, self.verse_separator, verse.verse, + version.value, second_version.value) else: + book = verse.book.name + if book in self.local_bookname: + book = self.local_bookname[book] vdict = { - 'book': QtCore.QVariant(verse.book.name), + 'book': QtCore.QVariant(book), 'chapter': QtCore.QVariant(verse.chapter), 'verse': QtCore.QVariant(verse.verse), 'bible': QtCore.QVariant(bible), @@ -688,8 +716,9 @@ class BibleMediaItem(MediaManagerItem): 'second_permissions': QtCore.QVariant(u''), 'second_text': QtCore.QVariant(u'') } - bible_text = u'%s %d:%d (%s)' % (verse.book.name, - verse.chapter, verse.verse, version.value) + bible_text = u'%s %d%s%d (%s)' % (book, + verse.chapter, self.verse_separator, verse.verse, + version.value) bible_verse = QtGui.QListWidgetItem(bible_text) bible_verse.setData(QtCore.Qt.UserRole, QtCore.QVariant(vdict)) self.listView.addItem(bible_verse) @@ -812,8 +841,6 @@ class BibleMediaItem(MediaManagerItem): ``old_item`` The last item of a range. """ - verse_separator = get_reference_match(u'sep_v_display') - range_separator = get_reference_match(u'sep_r_display') old_bitem = self.listView.item(old_item.row()) old_chapter = self._decodeQtObject(old_bitem, 'chapter') old_verse = self._decodeQtObject(old_bitem, 'verse') @@ -829,13 +856,14 @@ class BibleMediaItem(MediaManagerItem): bibles = start_bible if start_chapter == old_chapter: if start_verse == old_verse: - verse_range = start_chapter + verse_separator + start_verse + verse_range = start_chapter + self.verse_separator + start_verse else: - verse_range = start_chapter + verse_separator + start_verse + \ - range_separator + old_verse + verse_range = start_chapter + self.verse_separator + \ + start_verse + self.range_separator + old_verse else: - verse_range = start_chapter + verse_separator + start_verse + \ - range_separator + old_chapter + verse_separator + old_verse + verse_range = start_chapter + self.verse_separator + start_verse + \ + self.range_separator + old_chapter + self.verse_separator + \ + old_verse title = u'%s %s (%s)' % (start_book, verse_range, bibles) return title @@ -898,10 +926,10 @@ class BibleMediaItem(MediaManagerItem): ``verse`` The verse number (int). """ - verse_separator = get_reference_match(u'sep_v_display') if not self.parent.settings_tab.show_new_chapters or \ old_chapter != chapter: - verse_text = unicode(chapter) + verse_separator + unicode(verse) + verse_text = unicode(chapter) + self.verse_separator + \ + unicode(verse) else: verse_text = unicode(verse) if self.parent.settings_tab.display_style == 1: diff --git a/openlp/plugins/bibles/resources/osisbooks.csv b/openlp/plugins/bibles/resources/osisbooks.csv index d65e89297..c14f76ded 100644 --- a/openlp/plugins/bibles/resources/osisbooks.csv +++ b/openlp/plugins/bibles/resources/osisbooks.csv @@ -43,8 +43,8 @@ Luke,Luke,Luke John,John,John Acts,Acts,Acts Rom,Romans,Rom -1Cor,1 Corinthans,1Cor -2Cor,2 Corinthans,2Cor +1Cor,1 Corinthians,1Cor +2Cor,2 Corinthians,2Cor Gal,Galatians,Gal Eph,Ephesians,Eph Phil,Philippians,Phil From cd565fe4a9c31b82cdd6d5e65a89a8bcaddc09ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Thu, 15 Dec 2011 20:13:45 +0200 Subject: [PATCH 02/31] First almost working example. I suppose someone suggest to make specific class now. You may be right :) --- openlp/core/ui/advancedtab.py | 103 ++++++++++++++++++++++++++++++- openlp/core/ui/servicemanager.py | 12 +++- 2 files changed, 111 insertions(+), 4 deletions(-) diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 43e2a9915..dc15b80ef 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -32,6 +32,8 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import SettingsTab, translate, build_icon from openlp.core.lib.ui import UiStrings from openlp.core.utils import get_images_filter +from datetime import datetime +import re class AdvancedTab(SettingsTab): """ @@ -42,7 +44,14 @@ class AdvancedTab(SettingsTab): """ Initialise the settings tab """ - advancedTranslated = translate('OpenLP.AdvancedTab', 'Advanced') + advancedTranslated = translate(u'OpenLP.AdvancedTab', u'Advanced') + self.default_service_name = unicode(translate(u'OpenLP.AdvancedTab', + u'Service %Y-%m-%d')) + self.default_service_example = unicode(translate(u'OpenLP.AdvancedTab', + u'%Y-%m-%d', + u'This should be the date part of default service name.')) + self.wrong_characters_expression = \ + re.compile(r'[\[\]/\;,><&*:%=+@!#^()|?^]+') self.default_image = u':/graphics/openlp-splash-screen.png' self.default_color = u'#ffffff' self.icon_path = u':/system/system_settings.png' @@ -83,6 +92,40 @@ class AdvancedTab(SettingsTab): u'enableAutoCloseCheckBox') self.uiLayout.addRow(self.enableAutoCloseCheckBox) self.leftLayout.addWidget(self.uiGroupBox) + self.defaultServiceGroupBox = QtGui.QGroupBox(self.leftColumn) + self.defaultServiceGroupBox.setObjectName(u'defaultServiceGroupBox') + self.defaultServiceLayout = QtGui.QFormLayout( + self.defaultServiceGroupBox) + self.defaultServiceLayout.setObjectName(u'defaultServiceLayout') + self.defaultServiceLabel = QtGui.QLabel(self.defaultServiceGroupBox) + self.defaultServiceLabel.setObjectName(u'defaultServiceLabel') + self.defaultServiceEdit = QtGui.QLineEdit(self.defaultServiceGroupBox) + self.defaultServiceEdit.setObjectName(u'defaultServiceEdit') + self.defaultServiceRevertButton = QtGui.QToolButton( + self.defaultServiceGroupBox) + self.defaultServiceRevertButton.setObjectName( + u'defaultServiceRevertButton') + self.defaultServiceRevertButton.setIcon( + build_icon(u':/general/general_revert.png')) + self.defaultServiceHBox = QtGui.QHBoxLayout() + self.defaultServiceHBox.setObjectName(u'defaultServiceHBox') + self.defaultServiceHBox.addWidget(self.defaultServiceLabel) + self.defaultServiceHBox.addWidget(self.defaultServiceEdit) + self.defaultServiceHBox.addWidget(self.defaultServiceRevertButton) + self.defaultServiceLayout.addRow(self.defaultServiceHBox) + self.defaultServiceExampleLabel = QtGui.QLabel( + self.defaultServiceGroupBox) + self.defaultServiceExampleLabel.setObjectName( + u'defaultServiceExampleLabel') + self.defaultServiceExample = QtGui.QLabel(self.defaultServiceGroupBox) + self.defaultServiceExample.setObjectName(u'defaultServiceExample') + self.defaultServiceLayout.addRow(self.defaultServiceExampleLabel, + self.defaultServiceExample) + self.defaultServiceNoteLabel = QtGui.QLabel(self.defaultServiceGroupBox) + self.defaultServiceNoteLabel.setWordWrap(True) + self.defaultServiceNoteLabel.setObjectName(u'defaultServiceNoteLabel') + self.defaultServiceLayout.addRow(self.defaultServiceNoteLabel) + self.leftLayout.addWidget(self.defaultServiceGroupBox) self.leftLayout.addStretch() self.defaultImageGroupBox = QtGui.QGroupBox(self.rightColumn) self.defaultImageGroupBox.setObjectName(u'defaultImageGroupBox') @@ -124,6 +167,12 @@ class AdvancedTab(SettingsTab): self.rightLayout.addWidget(self.hideMouseGroupBox) self.rightLayout.addStretch() + QtCore.QObject.connect(self.defaultServiceEdit, + QtCore.SIGNAL(u'textChanged(QString)'), + self.onDefaultServiceUpdated) + QtCore.QObject.connect(self.defaultServiceRevertButton, + QtCore.SIGNAL(u'pressed()'), + self.onDefaultServiceRevertButtonPressed) QtCore.QObject.connect(self.defaultColorButton, QtCore.SIGNAL(u'pressed()'), self.onDefaultColorButtonPressed) QtCore.QObject.connect(self.defaultBrowseButton, @@ -151,6 +200,22 @@ class AdvancedTab(SettingsTab): 'Expand new service items on creation')) self.enableAutoCloseCheckBox.setText(translate('OpenLP.AdvancedTab', 'Enable application exit confirmation')) + self.defaultServiceGroupBox.setTitle( + translate(u'OpenLP.AdvancedTab', u'Default Service')) + self.defaultServiceLabel.setText( + translate(u'OpenLP.AdvancedTab', u'Default service name:')) + self.defaultServiceRevertButton.setToolTip(unicode( + translate(u'OpenLP.AdvancedTab', + u'Revert to the default service name "%s".')) % + self.default_service_name) + self.defaultServiceExampleLabel.setText(translate('OpenLP.AdvancedTab', + u'Example:')) + self.defaultServiceNoteLabel.setText(unicode( + translate(u'OpenLP.AdvancedTab', u'Default service name when ' + 'saving a new service. You can use date placeholders, e.g %s ' + 'results in %s. Leave it empty to use no default value.')) % + (self.default_service_example, + datetime.now().strftime(self.default_service_example))) self.hideMouseGroupBox.setTitle(translate('OpenLP.AdvancedTab', 'Mouse Cursor')) self.hideMouseCheckBox.setText(translate('OpenLP.AdvancedTab', @@ -198,6 +263,9 @@ class AdvancedTab(SettingsTab): QtCore.QVariant(True)).toBool()) self.hideMouseCheckBox.setChecked( settings.value(u'hide mouse', QtCore.QVariant(False)).toBool()) + self.service_name = unicode(settings.value(u'default service name', + self.default_service_name).toString()) + self.defaultServiceEdit.setText(self.service_name) self.default_color = settings.value(u'default color', QtCore.QVariant(u'#ffffff')).toString() self.defaultFileEdit.setText(settings.value(u'default image', @@ -211,8 +279,18 @@ class AdvancedTab(SettingsTab): """ Save settings to disk. """ + self.service_name = unicode(self.defaultServiceEdit.text()) + preset_okay, name_example = self.generate_service_name_example( + self.service_name) + if not preset_okay: + # should alert or something + pass settings = QtCore.QSettings() settings.beginGroup(self.settingsSection) + if self.service_name == self.default_service_name: + settings.remove(u'default service name') + else: + settings.setValue(u'default service name', self.service_name) settings.setValue(u'recent file count', QtCore.QVariant(self.recentSpinBox.value())) settings.setValue(u'save current plugin', @@ -231,6 +309,29 @@ class AdvancedTab(SettingsTab): settings.setValue(u'default image', self.defaultFileEdit.text()) settings.endGroup() + def generate_service_name_example(self, service_name_preset): + preset_okay = True + try: + service_name_example = datetime.now().strftime( + unicode(service_name_preset)) + if self.wrong_characters_expression.search(service_name_example): + service_name_example = translate(u'OpenLP.AdvancedTab', + u'Filename contains wrong characters.') + preset_okay = False + except ValueError: + service_name_example = translate(u'OpenLP.AdvancedTab', + u'Syntax error.') + preset_okay = False + return preset_okay, service_name_example + + def onDefaultServiceUpdated(self, preset): + preset_okay, name_example = self.generate_service_name_example(preset) + self.defaultServiceExample.setText(name_example) + + def onDefaultServiceRevertButtonPressed(self): + self.defaultServiceEdit.setText(self.default_service_name) + self.defaultServiceEdit.setFocus() + def onDefaultColorButtonPressed(self): new_color = QtGui.QColorDialog.getColor( QtGui.QColor(self.default_color), self) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 0eb1e77c5..036db96c3 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -31,6 +31,7 @@ import os import shutil import zipfile from tempfile import mkstemp +from datetime import datetime log = logging.getLogger(__name__) @@ -610,10 +611,15 @@ class ServiceManager(QtGui.QWidget): Get a file name and then call :func:`ServiceManager.saveFile` to save the file. """ + default_pattern = unicode(QtCore.QSettings().value( + u'advanced/default service name', + translate(u'OpenLP.AdvancedTab', u'Service %Y-%m-%d')).toString()) + default_filename = datetime.now().strftime(default_pattern) + directory = unicode(SettingsManager.get_last_dir( + self.mainwindow.servicemanagerSettingsSection)) + path = os.path.join(directory, default_filename) fileName = unicode(QtGui.QFileDialog.getSaveFileName(self.mainwindow, - UiStrings().SaveService, - SettingsManager.get_last_dir( - self.mainwindow.servicemanagerSettingsSection), + UiStrings().SaveService, path, translate('OpenLP.ServiceManager', 'OpenLP Service Files (*.osz)'))) if not fileName: return False From d7a5a9ae97ea0c10bcfb1f0b056b47734bd98c10 Mon Sep 17 00:00:00 2001 From: M2j Date: Sun, 18 Dec 2011 18:08:37 +0100 Subject: [PATCH 03/31] revert 1153 --- openlp/plugins/bibles/lib/__init__.py | 108 +----------------- openlp/plugins/bibles/lib/db.py | 3 +- openlp/plugins/bibles/lib/manager.py | 8 -- openlp/plugins/bibles/lib/mediaitem.py | 80 +++++-------- openlp/plugins/bibles/resources/osisbooks.csv | 4 +- 5 files changed, 34 insertions(+), 169 deletions(-) diff --git a/openlp/plugins/bibles/lib/__init__.py b/openlp/plugins/bibles/lib/__init__.py index 7068c7410..f2797e16d 100644 --- a/openlp/plugins/bibles/lib/__init__.py +++ b/openlp/plugins/bibles/lib/__init__.py @@ -30,26 +30,19 @@ plugin. import logging import re -from openlp.core.lib import translate - log = logging.getLogger(__name__) def get_reference_match(match_type): - local_separator = unicode(translate('BiblesPlugin', - ':;;\\s*[:vV]\\s*;;-;;\\s*-\\s*;;,;;\\s*,\\s*;;end', - 'Seperators for parsing references. There are 7 values separated each ' - 'by two semicolons. Verse, range and list separators have each one ' - 'display symbol which appears on slides and in the GUI and a regular ' - 'expression for detecting this symbols.\n' - 'Please ask a developer to double check your translation or make ' - 'yourself familar with regular experssions on: ' - 'http://docs.python.org/library/re.html') - ).split(u';;') + local_separator = unicode(u':;;\s*[:vV]\s*;;-;;\s*-\s*;;,;;\s*,\s*;;end' + ).split(u';;') # English + # local_separator = unicode(u',;;\s*,\s*;;-;;\s*-\s*;;.;;\.;;[Ee]nde' + # ).split(u';;') # German separators = { u'sep_v_display': local_separator[0], u'sep_v': local_separator[1], u'sep_r_display': local_separator[2], u'sep_r': local_separator[3], u'sep_l_display': local_separator[4], u'sep_l': local_separator[5], u'sep_e': local_separator[6]} + # verse range match: (:)?(-((:)?|end)?)? range_string = str(r'(?:(?P[0-9]+)%(sep_v)s)?(?P' r'[0-9]+)(?P%(sep_r)s(?:(?:(?P[0-9]+)%(sep_v)s)?' @@ -138,9 +131,6 @@ def parse_reference(reference): if match: log.debug(u'Matched reference %s' % reference) book = match.group(u'book') - bookname_dict = get_system_bookname_dict() - if book.lower() in bookname_dict: - book = bookname_dict[book.lower()] ranges = match.group(u'ranges') range_list = get_reference_match(u'range_separator').split(ranges) ref_list = [] @@ -201,94 +191,6 @@ def parse_reference(reference): log.debug(u'Invalid reference: %s' % reference) return None -def get_local_bookname_dict(): - raw_dict = get_raw_bookname_dict() - local_bookname_dict = {} - for key in raw_dict.keys(): - local_bookname_dict[key] = raw_dict[key][0] - return local_bookname_dict - -def get_system_bookname_dict(): - raw_dict = get_raw_bookname_dict() - system_bookname_dict = {} - for key in raw_dict.keys(): - for alias in raw_dict[key]: - system_bookname_dict[alias.lower()] = key - return system_bookname_dict - -def get_raw_bookname_dict(): - raw_bookname_dict = {u'Genesis': translate('BiblesPlugin', 'Genesis;;Gen'), - u'Exodus': translate('BiblesPlugin', 'Exodus;;Exod'), - u'Leviticus': translate('BiblesPlugin', 'Leviticus;;Lev'), - u'Numbers': translate('BiblesPlugin', 'Numbers;;Num'), - u'Deuteronomy': translate('BiblesPlugin', 'Deuteronomy;;Deut'), - u'Joshua': translate('BiblesPlugin', 'Joshua;;Josh'), - u'Judges': translate('BiblesPlugin', 'Judges;;Judg'), - u'Ruth': translate('BiblesPlugin', 'Ruth;;Ruth'), - u'1 Samuel': translate('BiblesPlugin', '1 Samuel;;1Sam'), - u'2 Samuel': translate('BiblesPlugin', '2 Samuel;;2Sam'), - u'1 Kings': translate('BiblesPlugin', '1 Kings;;1Kgs'), - u'2 Kings': translate('BiblesPlugin', '2 Kings;;2Kgs'), - u'1 Chronicles': translate('BiblesPlugin', '1 Chronicles;;1Chr'), - u'2 Chronicles': translate('BiblesPlugin', '2 Chronicles;;2Chr'), - u'Ezra': translate('BiblesPlugin', 'Ezra;;Ezra'), - u'Nehemiah': translate('BiblesPlugin', 'Nehemiah;;Neh'), - u'Esther': translate('BiblesPlugin', 'Esther;;Esth'), - u'Job': translate('BiblesPlugin', 'Job;;Job'), - u'Psalms': translate('BiblesPlugin', 'Psalms;;Ps'), - u'Proverbs': translate('BiblesPlugin', 'Proverbs;;Prov'), - u'Ecclesiastes': translate('BiblesPlugin', 'Ecclesiastes;;Eccl'), - u'Song of Songs': translate('BiblesPlugin', 'Song of Songs;;Song'), - u'Isaiah': translate('BiblesPlugin', 'Isaiah;;Isa'), - u'Jeremiah': translate('BiblesPlugin', 'Jeremiah;;Jer'), - u'Lamentations': translate('BiblesPlugin', 'Lamentations;;Lam'), - u'Ezekiel': translate('BiblesPlugin', 'Ezekiel;;Ezek'), - u'Daniel': translate('BiblesPlugin', 'Daniel;;Dan'), - u'Hosea': translate('BiblesPlugin', 'Hosea;;Hos'), - u'Joel': translate('BiblesPlugin', 'Joel;;Joel'), - u'Amos': translate('BiblesPlugin', 'Amos;;Amos'), - u'Obad': translate('BiblesPlugin', 'Obad;;Obad'), - u'Jonah': translate('BiblesPlugin', 'Jonah;;Jonah'), - u'Micah': translate('BiblesPlugin', 'Micah;;Mic'), - u'Naham': translate('BiblesPlugin', 'Naham;;Nah'), - u'Habakkuk': translate('BiblesPlugin', 'Habakkuk;;Hab'), - u'Zephaniah': translate('BiblesPlugin', 'Zephaniah;;Zeph'), - u'Haggai': translate('BiblesPlugin', 'Haggai;;Hag'), - u'Zechariah': translate('BiblesPlugin', 'Zechariah;;Zech'), - u'Malachi': translate('BiblesPlugin', 'Malachi;;Mal'), - u'Matthew': translate('BiblesPlugin', 'Matthew;;Matt'), - u'Mark': translate('BiblesPlugin', 'Mark;;Mark'), - u'Luke': translate('BiblesPlugin', 'Luke;;Luke'), - u'John': translate('BiblesPlugin', 'John;;John'), - u'Acts': translate('BiblesPlugin', 'Acts;;Acts'), - u'Romans': translate('BiblesPlugin', 'Romans;;Rom'), - u'1 Corinthians': translate('BiblesPlugin', '1 Corinthians;;1Cor'), - u'2 Corinthians': translate('BiblesPlugin', '2 Corinthians;;2Cor'), - u'Galatians': translate('BiblesPlugin', 'Galatians;;Gal'), - u'Ephesians': translate('BiblesPlugin', 'Ephesians;;Eph'), - u'Philippians': translate('BiblesPlugin', 'Philippians;;Phil'), - u'Colossians': translate('BiblesPlugin', 'Colossians;;Col'), - u'1 Thessalonians': translate('BiblesPlugin', - '1 Thessalonians;;1Thess'), - u'2 Thessalonians': translate('BiblesPlugin', - '2 Thessalonians;;2Thess'), - u'1 Timothy': translate('BiblesPlugin', '1 Timothy;;1Tim'), - u'2 Timothy': translate('BiblesPlugin', '2 Timothy;;2Tim'), - u'Titus': translate('BiblesPlugin', 'Titus;;Titus'), - u'Philemon': translate('BiblesPlugin', 'Philemon;;Phlm'), - u'Hebrews': translate('BiblesPlugin', 'Hebrews;;Heb'), - u'James': translate('BiblesPlugin', 'James;;Jas'), - u'1 Peter': translate('BiblesPlugin', '1 Peter;;1Pet'), - u'2 Peter': translate('BiblesPlugin', '2 Peter;;2Pet'), - u'1 John': translate('BiblesPlugin', '1 John;;1John'), - u'2 John': translate('BiblesPlugin', '2 John;;2John'), - u'3 John': translate('BiblesPlugin', '3 John;;3John'), - u'Jude': translate('BiblesPlugin', 'Jude;;Jude'), - u'Revelation': translate('BiblesPlugin', 'Revelation;;Rev')} - for key in raw_bookname_dict.keys(): - raw_bookname_dict[key] = unicode(raw_bookname_dict[key]).split(u';;') - return raw_bookname_dict - class SearchResults(object): """ diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index 2c86c6977..62068437a 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -190,8 +190,7 @@ class BibleDB(QtCore.QObject, Manager): """ if not isinstance(old_filename, unicode): old_filename = unicode(old_filename, u'utf-8') - old_filename = \ - re.sub(r'[^\w]+', u'_', old_filename, re.UNICODE).strip(u'_') + old_filename = re.sub(r'[^\w]+', u'_', old_filename).strip(u'_') return old_filename + u'.sqlite' def register(self, wizard): diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index cea812968..9dc70e85a 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -257,14 +257,6 @@ class BibleManager(object): - Genesis 1:1-10,2:1-10 """ log.debug(u'BibleManager.get_verses("%s", "%s")', bible, versetext) - if not bible: - QtGui.QMessageBox.information(self.parent.mediaItem, - translate('BiblesPlugin.BibleManager', - 'No Bibles available'), - translate('BiblesPlugin.BibleManager', - 'There are no Bibles currently installed. Please use the ' - 'Import Wizard to install one or more Bibles.')) - return None reflist = parse_reference(versetext) if reflist: return self.db_cache[bible].get_verses(reflist) diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 9a703c68d..d557897ed 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -32,8 +32,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import MediaManagerItem, Receiver, BaseListWithDnD, \ ItemCapabilities, translate from openlp.plugins.bibles.forms import BibleImportForm -from openlp.plugins.bibles.lib import get_reference_match, \ - get_local_bookname_dict, get_system_bookname_dict +from openlp.plugins.bibles.lib import get_reference_match log = logging.getLogger(__name__) @@ -331,10 +330,6 @@ class BibleMediaItem(MediaManagerItem): translate('BiblesPlugin.MediaItem', 'Clear')) self.ClearAdvancedSearchComboBox.addItem( translate('BiblesPlugin.MediaItem', 'Keep')) - self.verse_separator = get_reference_match(u'sep_v_display') - self.range_separator = get_reference_match(u'sep_r_display') - self.local_bookname = get_local_bookname_dict() - self.system_bookname = get_local_bookname_dict() def initialise(self): log.debug(u'bible manager initialise') @@ -415,12 +410,7 @@ class BibleMediaItem(MediaManagerItem): first = True for book in book_data: row = self.AdvancedBookComboBox.count() - local_name = book[u'name'] - if local_name in self.local_bookname: - local_name = self.local_bookname[local_name] - else: - log.debug(u'bookname %s not translatable', local_name) - self.AdvancedBookComboBox.addItem(local_name) + self.AdvancedBookComboBox.addItem(book[u'name']) self.AdvancedBookComboBox.setItemData( row, QtCore.QVariant(book[u'chapters'])) if first: @@ -456,12 +446,8 @@ class BibleMediaItem(MediaManagerItem): bibles = self.parent.manager.get_bibles() bible = unicode(self.QuickVersionComboBox.currentText()) if bible: - books = [] - for book in bibles[bible].get_books(): - if book.name in self.local_bookname: - books.append(self.local_bookname[book.name]) - else: - books.append(book.name) + book_data = bibles[bible].get_books() + books = [book.name for book in book_data] books.sort() completer = QtGui.QCompleter(books) completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive) @@ -473,12 +459,10 @@ class BibleMediaItem(MediaManagerItem): def onAdvancedBookComboBox(self): item = int(self.AdvancedBookComboBox.currentIndex()) - bookname = unicode(self.AdvancedBookComboBox.currentText()) - if bookname in self.system_bookname: - bookname = self.system_bookname[bookname] self.initialiseChapterVerse( unicode(self.AdvancedVersionComboBox.currentText()), - bookname, self.AdvancedBookComboBox.itemData(item).toInt()[0]) + unicode(self.AdvancedBookComboBox.currentText()), + self.AdvancedBookComboBox.itemData(item).toInt()[0]) def onAdvancedFromVerse(self): chapter_from = int(self.AdvancedFromChapter.currentText()) @@ -486,8 +470,6 @@ class BibleMediaItem(MediaManagerItem): if chapter_from == chapter_to: bible = unicode(self.AdvancedVersionComboBox.currentText()) book = unicode(self.AdvancedBookComboBox.currentText()) - if book in self.system_bookname: - book = self.system_bookname[book] verse_from = int(self.AdvancedFromVerse.currentText()) verse_count = self.parent.manager.get_verse_count(bible, book, chapter_to) @@ -497,8 +479,6 @@ class BibleMediaItem(MediaManagerItem): def onAdvancedToChapter(self): bible = unicode(self.AdvancedVersionComboBox.currentText()) book = unicode(self.AdvancedBookComboBox.currentText()) - if book in self.system_bookname: - book = self.system_bookname[book] chapter_from = int(self.AdvancedFromChapter.currentText()) chapter_to = int(self.AdvancedToChapter.currentText()) verse_from = int(self.AdvancedFromVerse.currentText()) @@ -513,8 +493,6 @@ class BibleMediaItem(MediaManagerItem): def onAdvancedFromChapter(self): bible = unicode(self.AdvancedVersionComboBox.currentText()) book = unicode(self.AdvancedBookComboBox.currentText()) - if book in self.system_bookname: - book = self.system_bookname[book] chapter_from = int(self.AdvancedFromChapter.currentText()) chapter_to = int(self.AdvancedToChapter.currentText()) verse_count = self.parent.manager.get_verse_count(bible, book, @@ -567,14 +545,14 @@ class BibleMediaItem(MediaManagerItem): bible = unicode(self.AdvancedVersionComboBox.currentText()) second_bible = unicode(self.AdvancedSecondBibleComboBox.currentText()) book = unicode(self.AdvancedBookComboBox.currentText()) - if book in self.system_bookname: - book = self.system_bookname[book] chapter_from = self.AdvancedFromChapter.currentText() chapter_to = self.AdvancedToChapter.currentText() verse_from = self.AdvancedFromVerse.currentText() verse_to = self.AdvancedToVerse.currentText() - verse_range = chapter_from + self.verse_separator + verse_from + \ - self.range_separator + chapter_to + self.verse_separator + verse_to + verse_separator = get_reference_match(u'sep_v_display') + range_separator = get_reference_match(u'sep_r_display') + verse_range = chapter_from + verse_separator + verse_from + \ + range_separator + chapter_to + verse_separator + verse_to versetext = u'%s %s' % (book, verse_range) self.search_results = self.parent.manager.get_verses(bible, versetext) if second_bible: @@ -670,12 +648,9 @@ class BibleMediaItem(MediaManagerItem): second_permissions = u'' for count, verse in enumerate(self.search_results): if second_bible: - book = verse.book.name try: - if book in self.local_bookname: - book = self.local_bookname[book] vdict = { - 'book': QtCore.QVariant(book), + 'book': QtCore.QVariant(verse.book.name), 'chapter': QtCore.QVariant(verse.chapter), 'verse': QtCore.QVariant(verse.verse), 'bible': QtCore.QVariant(bible), @@ -694,15 +669,12 @@ class BibleMediaItem(MediaManagerItem): } except IndexError: break - bible_text = u' %s %d%s%d (%s, %s)' % (book, - verse.chapter, self.verse_separator, verse.verse, - version.value, second_version.value) + bible_text = u' %s %d:%d (%s, %s)' % (verse.book.name, + verse.chapter, verse.verse, version.value, + second_version.value) else: - book = verse.book.name - if book in self.local_bookname: - book = self.local_bookname[book] vdict = { - 'book': QtCore.QVariant(book), + 'book': QtCore.QVariant(verse.book.name), 'chapter': QtCore.QVariant(verse.chapter), 'verse': QtCore.QVariant(verse.verse), 'bible': QtCore.QVariant(bible), @@ -716,9 +688,8 @@ class BibleMediaItem(MediaManagerItem): 'second_permissions': QtCore.QVariant(u''), 'second_text': QtCore.QVariant(u'') } - bible_text = u'%s %d%s%d (%s)' % (book, - verse.chapter, self.verse_separator, verse.verse, - version.value) + bible_text = u'%s %d:%d (%s)' % (verse.book.name, + verse.chapter, verse.verse, version.value) bible_verse = QtGui.QListWidgetItem(bible_text) bible_verse.setData(QtCore.Qt.UserRole, QtCore.QVariant(vdict)) self.listView.addItem(bible_verse) @@ -841,6 +812,8 @@ class BibleMediaItem(MediaManagerItem): ``old_item`` The last item of a range. """ + verse_separator = get_reference_match(u'sep_v_display') + range_separator = get_reference_match(u'sep_r_display') old_bitem = self.listView.item(old_item.row()) old_chapter = self._decodeQtObject(old_bitem, 'chapter') old_verse = self._decodeQtObject(old_bitem, 'verse') @@ -856,14 +829,13 @@ class BibleMediaItem(MediaManagerItem): bibles = start_bible if start_chapter == old_chapter: if start_verse == old_verse: - verse_range = start_chapter + self.verse_separator + start_verse + verse_range = start_chapter + verse_separator + start_verse else: - verse_range = start_chapter + self.verse_separator + \ - start_verse + self.range_separator + old_verse + verse_range = start_chapter + verse_separator + start_verse + \ + range_separator + old_verse else: - verse_range = start_chapter + self.verse_separator + start_verse + \ - self.range_separator + old_chapter + self.verse_separator + \ - old_verse + verse_range = start_chapter + verse_separator + start_verse + \ + range_separator + old_chapter + verse_separator + old_verse title = u'%s %s (%s)' % (start_book, verse_range, bibles) return title @@ -926,10 +898,10 @@ class BibleMediaItem(MediaManagerItem): ``verse`` The verse number (int). """ + verse_separator = get_reference_match(u'sep_v_display') if not self.parent.settings_tab.show_new_chapters or \ old_chapter != chapter: - verse_text = unicode(chapter) + self.verse_separator + \ - unicode(verse) + verse_text = unicode(chapter) + verse_separator + unicode(verse) else: verse_text = unicode(verse) if self.parent.settings_tab.display_style == 1: diff --git a/openlp/plugins/bibles/resources/osisbooks.csv b/openlp/plugins/bibles/resources/osisbooks.csv index c14f76ded..d65e89297 100644 --- a/openlp/plugins/bibles/resources/osisbooks.csv +++ b/openlp/plugins/bibles/resources/osisbooks.csv @@ -43,8 +43,8 @@ Luke,Luke,Luke John,John,John Acts,Acts,Acts Rom,Romans,Rom -1Cor,1 Corinthians,1Cor -2Cor,2 Corinthians,2Cor +1Cor,1 Corinthans,1Cor +2Cor,2 Corinthans,2Cor Gal,Galatians,Gal Eph,Ephesians,Eph Phil,Philippians,Phil From 15449372e178fc58c74e962f571f36497026ae3f Mon Sep 17 00:00:00 2001 From: M2j Date: Mon, 19 Dec 2011 01:20:39 +0100 Subject: [PATCH 04/31] use ICU collator on Windows systems --- openlp/core/ui/thememanager.py | 5 ++--- openlp/core/utils/__init__.py | 22 ++++++++++++++++++- .../plugins/bibles/forms/bibleimportform.py | 5 ++--- openlp/plugins/bibles/lib/mediaitem.py | 6 ++--- openlp/plugins/custom/lib/mediaitem.py | 4 ++-- openlp/plugins/images/lib/mediaitem.py | 6 ++--- openlp/plugins/media/lib/mediaitem.py | 6 ++--- openlp/plugins/presentations/lib/mediaitem.py | 4 ++-- openlp/plugins/songs/forms/songexportform.py | 4 ++-- openlp/plugins/songs/lib/mediaitem.py | 5 ++--- 10 files changed, 42 insertions(+), 25 deletions(-) diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index b8767d736..64ede2f16 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -29,7 +29,6 @@ import os import zipfile import shutil import logging -import locale from xml.etree.ElementTree import ElementTree, XML from PyQt4 import QtCore, QtGui @@ -44,7 +43,7 @@ from openlp.core.lib.ui import UiStrings, critical_error_message_box, \ from openlp.core.theme import Theme from openlp.core.ui import FileRenameForm, ThemeForm from openlp.core.utils import AppLocation, delete_file, file_is_unicode, \ - get_filesystem_encoding + get_filesystem_encoding, get_local_collator log = logging.getLogger(__name__) @@ -458,7 +457,7 @@ class ThemeManager(QtGui.QWidget): # Sort the themes by its name considering language specific characters. # lower() is needed for windows! files.sort(key=lambda filename: unicode(filename).lower(), - cmp=locale.strcoll) + cmp=get_local_collator) # now process the file list of png files for name in files: # check to see file is in theme root directory diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index fbf185474..bbfc02b0f 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -33,6 +33,7 @@ import re import sys import time import urllib2 +import locale from datetime import datetime from subprocess import Popen, PIPE @@ -45,6 +46,18 @@ if sys.platform != u'win32' and sys.platform != u'darwin': except ImportError: XDG_BASE_AVAILABLE = False +LOCALE_COLLATOR = locale.strcoll +if sys.platform == u'win32': + try: + import icu + try: + icu_locale = icu.Locale(locale.getlocale()[0]) + LOCALE_COLLATOR = icu.Collator.createInstance(icu_locale).compare + except icu.InvalidArgsError: + pass + except ImportError: + pass + import openlp from openlp.core.lib import Receiver, translate, check_directory_exists @@ -502,10 +515,17 @@ def get_uno_instance(resolver): return resolver.resolve(u'uno:socket,host=localhost,port=2002;' \ + u'urp;StarOffice.ComponentContext') +def get_local_collator(string1, string2): + """ + Returns a collator for locale aware string sorting. + """ + return LOCALE_COLLATOR(string1, string2) + from languagemanager import LanguageManager from actions import ActionList __all__ = [u'AppLocation', u'get_application_version', u'check_latest_version', u'add_actions', u'get_filesystem_encoding', u'LanguageManager', u'ActionList', u'get_web_page', u'file_is_unicode', u'get_uno_command', - u'get_uno_instance', u'delete_file', u'clean_filename'] + u'get_uno_instance', u'get_local_collator', u'delete_file', + u'clean_filename'] diff --git a/openlp/plugins/bibles/forms/bibleimportform.py b/openlp/plugins/bibles/forms/bibleimportform.py index 7577e86a3..0774bd3c9 100644 --- a/openlp/plugins/bibles/forms/bibleimportform.py +++ b/openlp/plugins/bibles/forms/bibleimportform.py @@ -30,7 +30,6 @@ The bible import functions for OpenLP import logging import os import os.path -import locale from PyQt4 import QtCore, QtGui @@ -38,7 +37,7 @@ from openlp.core.lib import Receiver, translate from openlp.core.lib.db import delete_database from openlp.core.lib.ui import UiStrings, critical_error_message_box from openlp.core.ui.wizard import OpenLPWizard, WizardStrings -from openlp.core.utils import AppLocation +from openlp.core.utils import AppLocation, get_local_collator from openlp.plugins.bibles.lib.manager import BibleFormat from openlp.plugins.bibles.lib.db import BiblesResourcesDB, clean_filename @@ -522,7 +521,7 @@ class BibleImportForm(OpenLPWizard): """ self.webTranslationComboBox.clear() bibles = self.web_bible_list[index].keys() - bibles.sort(cmp=locale.strcoll) + bibles.sort(cmp=get_local_collator) self.webTranslationComboBox.addItems(bibles) def onOsisBrowseButtonClicked(self): diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 31effe189..74e3fa6a1 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -26,7 +26,6 @@ ############################################################################### import logging -import locale from PyQt4 import QtCore, QtGui @@ -36,6 +35,7 @@ from openlp.core.lib.searchedit import SearchEdit from openlp.core.lib.ui import UiStrings, add_widget_completer, \ media_item_combo_box, critical_error_message_box, \ find_and_set_in_combo_box, build_icon +from openlp.core.utils import get_local_collator from openlp.plugins.bibles.forms import BibleImportForm from openlp.plugins.bibles.lib import LayoutStyle, DisplayStyle, \ VerseReferenceList, get_reference_match @@ -373,7 +373,7 @@ class BibleMediaItem(MediaManagerItem): self.advancedSecondComboBox.addItem(u'') # Get all bibles and sort the list. bibles = self.plugin.manager.get_bibles().keys() - bibles.sort(cmp=locale.strcoll) + bibles.sort(cmp=get_local_collator) # Load the bibles into the combo boxes. for bible in bibles: if bible: @@ -481,7 +481,7 @@ class BibleMediaItem(MediaManagerItem): book_data_temp.append(book) book_data = book_data_temp books = [book.name + u' ' for book in book_data] - books.sort(cmp=locale.strcoll) + books.sort(cmp=get_local_collator) add_widget_completer(books, self.quickSearchEdit) def onQuickVersionComboBox(self): diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py index 59d6b4fb6..4c2e1f3c9 100644 --- a/openlp/plugins/custom/lib/mediaitem.py +++ b/openlp/plugins/custom/lib/mediaitem.py @@ -26,7 +26,6 @@ ############################################################################### import logging -import locale from PyQt4 import QtCore, QtGui from sqlalchemy.sql import or_, func @@ -35,6 +34,7 @@ from openlp.core.lib import MediaManagerItem, Receiver, ItemCapabilities, \ check_item_selected, translate from openlp.core.lib.searchedit import SearchEdit from openlp.core.lib.ui import UiStrings +from oprnlp.core.utils import get_local_collator from openlp.plugins.custom.forms import EditCustomForm from openlp.plugins.custom.lib import CustomXMLParser from openlp.plugins.custom.lib.db import CustomSlide @@ -137,7 +137,7 @@ class CustomMediaItem(MediaManagerItem): # Sort the customs by its title considering language specific # characters. lower() is needed for windows! custom_slides.sort( - cmp=locale.strcoll, key=lambda custom: custom.title.lower()) + cmp=get_local_collator, key=lambda custom: custom.title.lower()) for custom_slide in custom_slides: custom_name = QtGui.QListWidgetItem(custom_slide.title) custom_name.setData( diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index b1e815a3a..7dfbdce35 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -27,7 +27,6 @@ import logging import os -import locale from PyQt4 import QtCore, QtGui @@ -35,7 +34,8 @@ from openlp.core.lib import MediaManagerItem, build_icon, ItemCapabilities, \ SettingsManager, translate, check_item_selected, check_directory_exists, \ Receiver, create_thumb, validate_thumb from openlp.core.lib.ui import UiStrings, critical_error_message_box -from openlp.core.utils import AppLocation, delete_file, get_images_filter +from openlp.core.utils import AppLocation, delete_file, get_images_filter, \ + get_local_collator log = logging.getLogger(__name__) @@ -120,7 +120,7 @@ class ImageMediaItem(MediaManagerItem): self.plugin.formparent.displayProgressBar(len(images)) # Sort the themes by its filename considering language specific # characters. lower() is needed for windows! - images.sort(cmp=locale.strcoll, + images.sort(cmp=get_local_collator, key=lambda filename: os.path.split(unicode(filename))[1].lower()) for imageFile in images: if not initialLoad: diff --git a/openlp/plugins/media/lib/mediaitem.py b/openlp/plugins/media/lib/mediaitem.py index 8a7eb86eb..eb7abc76a 100644 --- a/openlp/plugins/media/lib/mediaitem.py +++ b/openlp/plugins/media/lib/mediaitem.py @@ -27,7 +27,6 @@ import logging import os -import locale from PyQt4 import QtCore, QtGui @@ -37,6 +36,7 @@ from openlp.core.lib import MediaManagerItem, build_icon, ItemCapabilities, \ from openlp.core.lib.ui import UiStrings, critical_error_message_box, \ media_item_combo_box from openlp.core.ui import Controller, Display +from openlp.core.utils import get_local_collator log = logging.getLogger(__name__) @@ -278,7 +278,7 @@ class MediaMediaItem(MediaManagerItem): def loadList(self, media): # Sort the themes by its filename considering language specific # characters. lower() is needed for windows! - media.sort(cmp=locale.strcoll, + media.sort(cmp=get_local_collator, key=lambda filename: os.path.split(unicode(filename))[1].lower()) for track in media: track_info = QtCore.QFileInfo(track) @@ -298,7 +298,7 @@ class MediaMediaItem(MediaManagerItem): def getList(self, type=MediaType.Audio): media = SettingsManager.load_list(self.settingsSection, u'media') - media.sort(cmp=locale.strcoll, + media.sort(cmp=get_local_collator, key=lambda filename: os.path.split(unicode(filename))[1].lower()) ext = [] if type == MediaType.Audio: diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index 6dc57373a..f070a05c2 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -27,7 +27,6 @@ import logging import os -import locale from PyQt4 import QtCore, QtGui @@ -36,6 +35,7 @@ from openlp.core.lib import MediaManagerItem, build_icon, SettingsManager, \ validate_thumb from openlp.core.lib.ui import UiStrings, critical_error_message_box, \ media_item_combo_box +from openlp.core.utils import get_local_collator from openlp.plugins.presentations.lib import MessageListener log = logging.getLogger(__name__) @@ -168,7 +168,7 @@ class PresentationMediaItem(MediaManagerItem): self.plugin.formparent.displayProgressBar(len(files)) # Sort the themes by its filename considering language specific # characters. lower() is needed for windows! - files.sort(cmp=locale.strcoll, + files.sort(cmp=get_local_collator, key=lambda filename: os.path.split(unicode(filename))[1].lower()) for file in files: if not initialLoad: diff --git a/openlp/plugins/songs/forms/songexportform.py b/openlp/plugins/songs/forms/songexportform.py index 20a52c82d..02f89e621 100644 --- a/openlp/plugins/songs/forms/songexportform.py +++ b/openlp/plugins/songs/forms/songexportform.py @@ -28,7 +28,6 @@ The :mod:`songexportform` module provides the wizard for exporting songs to the OpenLyrics format. """ -import locale import logging from PyQt4 import QtCore, QtGui @@ -36,6 +35,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import build_icon, Receiver, SettingsManager, translate from openlp.core.lib.ui import UiStrings, critical_error_message_box from openlp.core.ui.wizard import OpenLPWizard, WizardStrings +from openlp.core.utils import get_local_collator from openlp.plugins.songs.lib.db import Song from openlp.plugins.songs.lib.openlyricsexport import OpenLyricsExport @@ -250,7 +250,7 @@ class SongExportForm(OpenLPWizard): # Load the list of songs. Receiver.send_message(u'cursor_busy') songs = self.plugin.manager.get_all_objects(Song) - songs.sort(cmp=locale.strcoll, key=lambda song: song.title.lower()) + songs.sort(cmp=get_local_collator, key=lambda song: song.title.lower()) for song in songs: # No need to export temporary songs. if song.temporary: diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 052fb5b7b..59e53f5c1 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -26,7 +26,6 @@ ############################################################################### import logging -import locale import re import os import shutil @@ -39,7 +38,7 @@ from openlp.core.lib import MediaManagerItem, Receiver, ItemCapabilities, \ from openlp.core.lib.searchedit import SearchEdit from openlp.core.lib.ui import UiStrings, context_menu_action, \ context_menu_separator -from openlp.core.utils import AppLocation +from openlp.core.utils import AppLocation, get_local_collator from openlp.plugins.songs.forms import EditSongForm, SongMaintenanceForm, \ SongImportForm, SongExportForm from openlp.plugins.songs.lib import OpenLyrics, SongXML, VerseType, \ @@ -268,7 +267,7 @@ class SongMediaItem(MediaManagerItem): # Sort the songs by its title considering language specific characters. # lower() is needed for windows! searchresults.sort( - cmp=locale.strcoll, key=lambda song: song.title.lower()) + cmp=get_local_collator, key=lambda song: song.title.lower()) for song in searchresults: # Do not display temporary songs if song.temporary: From 1cf246940d1363b5459ee6f0cb6b2f290d50ba14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Tue, 3 Jan 2012 02:08:08 +0200 Subject: [PATCH 05/31] A few fixes, useful when default service name is wrong. --- openlp/core/ui/advancedtab.py | 35 ++++++++++++++++---------------- openlp/core/ui/servicemanager.py | 2 +- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index dc15b80ef..adc1e7a81 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -44,12 +44,12 @@ class AdvancedTab(SettingsTab): """ Initialise the settings tab """ - advancedTranslated = translate(u'OpenLP.AdvancedTab', u'Advanced') - self.default_service_name = unicode(translate(u'OpenLP.AdvancedTab', - u'Service %Y-%m-%d')) - self.default_service_example = unicode(translate(u'OpenLP.AdvancedTab', - u'%Y-%m-%d', - u'This should be the date part of default service name.')) + advancedTranslated = translate('OpenLP.AdvancedTab', 'Advanced') + self.default_service_name = unicode(translate('OpenLP.AdvancedTab', + 'Service %Y-%m-%d')) + self.default_service_example = unicode(translate('OpenLP.AdvancedTab', + '%Y-%m-%d', + 'This should be the date part of default service name.')) self.wrong_characters_expression = \ re.compile(r'[\[\]/\;,><&*:%=+@!#^()|?^]+') self.default_image = u':/graphics/openlp-splash-screen.png' @@ -201,17 +201,17 @@ class AdvancedTab(SettingsTab): self.enableAutoCloseCheckBox.setText(translate('OpenLP.AdvancedTab', 'Enable application exit confirmation')) self.defaultServiceGroupBox.setTitle( - translate(u'OpenLP.AdvancedTab', u'Default Service')) + translate('OpenLP.AdvancedTab', 'Default Service')) self.defaultServiceLabel.setText( - translate(u'OpenLP.AdvancedTab', u'Default service name:')) + translate('OpenLP.AdvancedTab', 'Default service name:')) self.defaultServiceRevertButton.setToolTip(unicode( - translate(u'OpenLP.AdvancedTab', - u'Revert to the default service name "%s".')) % + translate('OpenLP.AdvancedTab', + 'Revert to the default service name "%s".')) % self.default_service_name) self.defaultServiceExampleLabel.setText(translate('OpenLP.AdvancedTab', - u'Example:')) + 'Example:')) self.defaultServiceNoteLabel.setText(unicode( - translate(u'OpenLP.AdvancedTab', u'Default service name when ' + translate('OpenLP.AdvancedTab', 'Default service name when ' 'saving a new service. You can use date placeholders, e.g %s ' 'results in %s. Leave it empty to use no default value.')) % (self.default_service_example, @@ -283,8 +283,7 @@ class AdvancedTab(SettingsTab): preset_okay, name_example = self.generate_service_name_example( self.service_name) if not preset_okay: - # should alert or something - pass + self.service_name = self.default_service_name settings = QtCore.QSettings() settings.beginGroup(self.settingsSection) if self.service_name == self.default_service_name: @@ -315,12 +314,12 @@ class AdvancedTab(SettingsTab): service_name_example = datetime.now().strftime( unicode(service_name_preset)) if self.wrong_characters_expression.search(service_name_example): - service_name_example = translate(u'OpenLP.AdvancedTab', - u'Filename contains wrong characters.') + service_name_example = translate('OpenLP.AdvancedTab', + 'Filename contains wrong characters.') preset_okay = False except ValueError: - service_name_example = translate(u'OpenLP.AdvancedTab', - u'Syntax error.') + service_name_example = translate('OpenLP.AdvancedTab', + 'Syntax error.') preset_okay = False return preset_okay, service_name_example diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 036db96c3..2e881efb4 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -613,7 +613,7 @@ class ServiceManager(QtGui.QWidget): """ default_pattern = unicode(QtCore.QSettings().value( u'advanced/default service name', - translate(u'OpenLP.AdvancedTab', u'Service %Y-%m-%d')).toString()) + translate('OpenLP.AdvancedTab', 'Service %Y-%m-%d')).toString()) default_filename = datetime.now().strftime(default_pattern) directory = unicode(SettingsManager.get_last_dir( self.mainwindow.servicemanagerSettingsSection)) From b70f95c8251ee9ae74e649062dae47c0d66b06ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Sun, 15 Jan 2012 03:21:35 +0200 Subject: [PATCH 06/31] Added possibility to choose one day time in next week or now as the datetime. Also took Meinert's comment about too restricted filename characters into account. --- openlp/core/ui/advancedtab.py | 136 ++++++++++++++++++++++++------- openlp/core/ui/servicemanager.py | 22 ++++- 2 files changed, 126 insertions(+), 32 deletions(-) diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 77eca8382..788f7ce0f 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -32,7 +32,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import SettingsTab, translate, build_icon from openlp.core.lib.ui import UiStrings from openlp.core.utils import get_images_filter -from datetime import datetime +from datetime import datetime, timedelta import re class AdvancedTab(SettingsTab): @@ -45,13 +45,16 @@ class AdvancedTab(SettingsTab): Initialise the settings tab """ advancedTranslated = translate('OpenLP.AdvancedTab', 'Advanced') + # 7 stands for now, 0 to 6 is Monday to Sunday. + self.default_service_day = 0 + # 11 o'clock is the most popular time for morning service. + self.default_service_hour = 11 + self.default_service_minute = 0 self.default_service_name = unicode(translate('OpenLP.AdvancedTab', - 'Service %Y-%m-%d')) + 'Service %Y-%m-%d-%H-%M')) self.default_service_example = unicode(translate('OpenLP.AdvancedTab', - '%Y-%m-%d', + '%Y-%m-%d-%H-%M', 'This should be the date part of default service name.')) - self.wrong_characters_expression = \ - re.compile(r'[\[\]/\;,><&*:%=+@!#^()|?^]+') self.default_image = u':/graphics/openlp-splash-screen.png' self.default_color = u'#ffffff' self.icon_path = u':/system/system_settings.png' @@ -97,10 +100,28 @@ class AdvancedTab(SettingsTab): self.defaultServiceLayout = QtGui.QFormLayout( self.defaultServiceGroupBox) self.defaultServiceLayout.setObjectName(u'defaultServiceLayout') + self.defaultServiceDayLabel = QtGui.QLabel(self.defaultServiceGroupBox) + self.defaultServiceDayLabel.setObjectName(u'defaultServiceDayLabel') + self.defaultServiceDay = QtGui.QComboBox( + self.defaultServiceGroupBox) + self.defaultServiceDay.addItems( + [u'', u'', u'', u'', u'', u'', u'', u'']) + self.defaultServiceDay.setObjectName( + u'defaultServiceDay') + self.defaultServiceTime = QtGui.QTimeEdit(self.defaultServiceGroupBox) + self.defaultServiceTime.setObjectName(u'defaultServiceTime') + self.defaultServiceTimeHBox = QtGui.QHBoxLayout() + self.defaultServiceTimeHBox.setObjectName(u'defaultServiceTimeHBox') + self.defaultServiceTimeHBox.addWidget(self.defaultServiceDayLabel) + self.defaultServiceTimeHBox.addWidget(self.defaultServiceDay) + self.defaultServiceTimeHBox.addWidget(self.defaultServiceTime) + self.defaultServiceLayout.addRow(self.defaultServiceTimeHBox) self.defaultServiceLabel = QtGui.QLabel(self.defaultServiceGroupBox) self.defaultServiceLabel.setObjectName(u'defaultServiceLabel') - self.defaultServiceEdit = QtGui.QLineEdit(self.defaultServiceGroupBox) - self.defaultServiceEdit.setObjectName(u'defaultServiceEdit') + self.defaultServiceName = QtGui.QLineEdit(self.defaultServiceGroupBox) + self.defaultServiceName.setObjectName(u'defaultServiceName') + self.defaultServiceName.setValidator(QtGui.QRegExpValidator( + QtCore.QRegExp(r'[^/\\?*|<>\[\]":+]+'), self)) self.defaultServiceRevertButton = QtGui.QToolButton( self.defaultServiceGroupBox) self.defaultServiceRevertButton.setObjectName( @@ -110,7 +131,7 @@ class AdvancedTab(SettingsTab): self.defaultServiceHBox = QtGui.QHBoxLayout() self.defaultServiceHBox.setObjectName(u'defaultServiceHBox') self.defaultServiceHBox.addWidget(self.defaultServiceLabel) - self.defaultServiceHBox.addWidget(self.defaultServiceEdit) + self.defaultServiceHBox.addWidget(self.defaultServiceName) self.defaultServiceHBox.addWidget(self.defaultServiceRevertButton) self.defaultServiceLayout.addRow(self.defaultServiceHBox) self.defaultServiceExampleLabel = QtGui.QLabel( @@ -167,9 +188,15 @@ class AdvancedTab(SettingsTab): self.rightLayout.addWidget(self.hideMouseGroupBox) self.rightLayout.addStretch() - QtCore.QObject.connect(self.defaultServiceEdit, + QtCore.QObject.connect(self.defaultServiceDay, + QtCore.SIGNAL(u'currentIndexChanged(int)'), + self.onDefaultServiceDayChanged) + QtCore.QObject.connect(self.defaultServiceTime, + QtCore.SIGNAL(u'timeChanged(QTime)'), + self.onDefaultServiceTimeChanged) + QtCore.QObject.connect(self.defaultServiceName, QtCore.SIGNAL(u'textChanged(QString)'), - self.onDefaultServiceUpdated) + self.onDefaultServiceNameChanged) QtCore.QObject.connect(self.defaultServiceRevertButton, QtCore.SIGNAL(u'pressed()'), self.onDefaultServiceRevertButtonPressed) @@ -202,6 +229,26 @@ class AdvancedTab(SettingsTab): 'Enable application exit confirmation')) self.defaultServiceGroupBox.setTitle( translate('OpenLP.AdvancedTab', 'Default Service')) + self.defaultServiceDayLabel.setText( + translate('OpenLP.AdvancedTab', 'Service name refers to:')) + self.defaultServiceDay.setItemText(0, + translate('OpenLP.AdvancedTab', 'Monday')) + self.defaultServiceDay.setItemText(1, + translate('OpenLP.AdvancedTab', 'Tuesday')) + self.defaultServiceDay.setItemText(2, + translate('OpenLP.AdvancedTab', 'Wednesday')) + self.defaultServiceDay.setItemText(3, + translate('OpenLP.AdvancedTab', 'Thurdsday')) + self.defaultServiceDay.setItemText(4, + translate('OpenLP.AdvancedTab', 'Friday')) + self.defaultServiceDay.setItemText(5, + translate('OpenLP.AdvancedTab', 'Saturday')) + self.defaultServiceDay.setItemText(6, + translate('OpenLP.AdvancedTab', 'Sunday')) + self.defaultServiceDay.setItemText(7, + translate('OpenLP.AdvancedTab', 'Now')) + self.defaultServiceTime.setToolTip(translate('OpenLP.AdvancedTab', + 'Time when usual service starts.')) self.defaultServiceLabel.setText( translate('OpenLP.AdvancedTab', 'Default service name:')) self.defaultServiceRevertButton.setToolTip(unicode( @@ -263,9 +310,18 @@ class AdvancedTab(SettingsTab): QtCore.QVariant(True)).toBool()) self.hideMouseCheckBox.setChecked( settings.value(u'hide mouse', QtCore.QVariant(False)).toBool()) + self.service_day, ok = settings.value(u'default service day', + QtCore.QVariant(self.default_service_day)).toInt() + self.service_hour, ok = settings.value(u'default service hour', + self.default_service_hour).toInt() + self.service_minute, ok = settings.value(u'default service minute', + self.default_service_minute).toInt() self.service_name = unicode(settings.value(u'default service name', self.default_service_name).toString()) - self.defaultServiceEdit.setText(self.service_name) + self.defaultServiceDay.setCurrentIndex(self.service_day) + self.defaultServiceTime.setTime( + QtCore.QTime(self.service_hour, self.service_minute)) + self.defaultServiceName.setText(self.service_name) self.default_color = settings.value(u'default color', QtCore.QVariant(u'#ffffff')).toString() self.defaultFileEdit.setText(settings.value(u'default image', @@ -279,10 +335,8 @@ class AdvancedTab(SettingsTab): """ Save settings to disk. """ - self.service_name = unicode(self.defaultServiceEdit.text()) - preset_okay, name_example = self.generate_service_name_example( - self.service_name) - if not preset_okay: + preset_is_valid, name_example = self.generate_service_name_example() + if not preset_is_valid: self.service_name = self.default_service_name settings = QtCore.QSettings() settings.beginGroup(self.settingsSection) @@ -290,6 +344,12 @@ class AdvancedTab(SettingsTab): settings.remove(u'default service name') else: settings.setValue(u'default service name', self.service_name) + settings.setValue(u'default service day', + self.defaultServiceDay.currentIndex()) + settings.setValue(u'default service hour', + self.defaultServiceTime.time().hour()) + settings.setValue(u'default service minute', + self.defaultServiceTime.time().minute()) settings.setValue(u'recent file count', QtCore.QVariant(self.recentSpinBox.value())) settings.setValue(u'save current plugin', @@ -308,28 +368,46 @@ class AdvancedTab(SettingsTab): settings.setValue(u'default image', self.defaultFileEdit.text()) settings.endGroup() - def generate_service_name_example(self, service_name_preset): - preset_okay = True + def generate_service_name_example(self): + preset_is_valid = True + if self.service_day == 7: + time = datetime.now() + else: + now = datetime.now() + day_delta = self.service_day - now.weekday() + if day_delta < 0: + day_delta += 7 + time = now + timedelta(days=day_delta) + time = time.replace(hour = self.service_hour, + minute = self.service_minute) try: - service_name_example = datetime.now().strftime( - unicode(service_name_preset)) - if self.wrong_characters_expression.search(service_name_example): - service_name_example = translate('OpenLP.AdvancedTab', - 'Filename contains wrong characters.') - preset_okay = False + service_name_example = time.strftime(unicode(self.service_name)) except ValueError: service_name_example = translate('OpenLP.AdvancedTab', 'Syntax error.') - preset_okay = False - return preset_okay, service_name_example + preset_is_valid = False + return preset_is_valid, service_name_example - def onDefaultServiceUpdated(self, preset): - preset_okay, name_example = self.generate_service_name_example(preset) + def updateServiceNameExample(self): + preset_is_valid, name_example = self.generate_service_name_example() self.defaultServiceExample.setText(name_example) + def onDefaultServiceDayChanged(self, index): + self.service_day = index + self.updateServiceNameExample() + + def onDefaultServiceTimeChanged(self, time): + self.service_hour = time.hour() + self.service_minute = time.minute() + self.updateServiceNameExample() + + def onDefaultServiceNameChanged(self, name): + self.service_name = name + self.updateServiceNameExample() + def onDefaultServiceRevertButtonPressed(self): - self.defaultServiceEdit.setText(self.default_service_name) - self.defaultServiceEdit.setFocus() + self.defaultServiceName.setText(self.default_service_name) + self.defaultServiceName.setFocus() def onDefaultColorButtonPressed(self): new_color = QtGui.QColorDialog.getColor( diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 54aae2f94..f75d5ec8c 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -31,7 +31,7 @@ import os import shutil import zipfile from tempfile import mkstemp -from datetime import datetime +from datetime import datetime, timedelta log = logging.getLogger(__name__) @@ -610,10 +610,26 @@ class ServiceManager(QtGui.QWidget): Get a file name and then call :func:`ServiceManager.saveFile` to save the file. """ + service_day, ok = QtCore.QSettings().value( + u'advanced/default service day', 7).toInt() + if service_day == 7: + time = datetime.now() + else: + service_hour, ok = QtCore.QSettings().value( + u'advanced/default service hour', 11).toInt() + service_minute, ok = QtCore.QSettings().value( + u'advanced/default service minute', 0).toInt() + now = datetime.now() + day_delta = service_day - now.weekday() + if day_delta < 0: + day_delta += 7 + time = now + timedelta(days=day_delta) + time = time.replace(hour = service_hour, minute = service_minute) default_pattern = unicode(QtCore.QSettings().value( u'advanced/default service name', - translate('OpenLP.AdvancedTab', 'Service %Y-%m-%d')).toString()) - default_filename = datetime.now().strftime(default_pattern) + translate('OpenLP.AdvancedTab', + 'Service %Y-%m-%d-%H-%M')).toString()) + default_filename = time.strftime(default_pattern) directory = unicode(SettingsManager.get_last_dir( self.mainwindow.servicemanagerSettingsSection)) path = os.path.join(directory, default_filename) From e6f2fd67c3b680be2180fadea45aaf793c465c6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Sun, 15 Jan 2012 11:58:02 +0200 Subject: [PATCH 07/31] Disable QTimeEdit box, when it is not used. --- openlp/core/ui/advancedtab.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 056374d46..6ca50de2b 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -416,6 +416,7 @@ class AdvancedTab(SettingsTab): def onDefaultServiceDayChanged(self, index): self.service_day = index + self.defaultServiceTime.setReadOnly(self.service_day == 7) self.updateServiceNameExample() def onDefaultServiceTimeChanged(self, time): From 982bfbbd55caab4719bac99dfb35c2f132f63322 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Mon, 16 Jan 2012 15:50:17 +0200 Subject: [PATCH 08/31] Fix labels according to Meinert's comment. --- openlp/core/ui/advancedtab.py | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 6ca50de2b..5774db9ff 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -143,10 +143,6 @@ class AdvancedTab(SettingsTab): self.defaultServiceExample.setObjectName(u'defaultServiceExample') self.defaultServiceLayout.addRow(self.defaultServiceExampleLabel, self.defaultServiceExample) - self.defaultServiceNoteLabel = QtGui.QLabel(self.defaultServiceGroupBox) - self.defaultServiceNoteLabel.setWordWrap(True) - self.defaultServiceNoteLabel.setObjectName(u'defaultServiceNoteLabel') - self.defaultServiceLayout.addRow(self.defaultServiceNoteLabel) self.leftLayout.addWidget(self.defaultServiceGroupBox) self.leftLayout.addStretch() self.defaultImageGroupBox = QtGui.QGroupBox(self.rightColumn) @@ -239,9 +235,9 @@ class AdvancedTab(SettingsTab): self.enableAutoCloseCheckBox.setText(translate('OpenLP.AdvancedTab', 'Enable application exit confirmation')) self.defaultServiceGroupBox.setTitle( - translate('OpenLP.AdvancedTab', 'Default Service')) + translate('OpenLP.AdvancedTab', 'Default Service Name')) self.defaultServiceDayLabel.setText( - translate('OpenLP.AdvancedTab', 'Service name refers to:')) + translate('OpenLP.AdvancedTab', 'Date and Time:')) self.defaultServiceDay.setItemText(0, translate('OpenLP.AdvancedTab', 'Monday')) self.defaultServiceDay.setItemText(1, @@ -261,19 +257,13 @@ class AdvancedTab(SettingsTab): self.defaultServiceTime.setToolTip(translate('OpenLP.AdvancedTab', 'Time when usual service starts.')) self.defaultServiceLabel.setText( - translate('OpenLP.AdvancedTab', 'Default service name:')) + translate('OpenLP.AdvancedTab', 'Name:')) self.defaultServiceRevertButton.setToolTip(unicode( translate('OpenLP.AdvancedTab', 'Revert to the default service name "%s".')) % self.default_service_name) self.defaultServiceExampleLabel.setText(translate('OpenLP.AdvancedTab', 'Example:')) - self.defaultServiceNoteLabel.setText(unicode( - translate('OpenLP.AdvancedTab', 'Default service name when ' - 'saving a new service. You can use date placeholders, e.g %s ' - 'results in %s. Leave it empty to use no default value.')) % - (self.default_service_example, - datetime.now().strftime(self.default_service_example))) self.hideMouseGroupBox.setTitle(translate('OpenLP.AdvancedTab', 'Mouse Cursor')) self.hideMouseCheckBox.setText(translate('OpenLP.AdvancedTab', From df60a89121ed127466ad8a67a2fe502a2743179b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Mon, 16 Jan 2012 15:59:23 +0200 Subject: [PATCH 09/31] Change default name and remove now obsolete string. --- openlp/core/ui/advancedtab.py | 7 ++----- openlp/core/ui/servicemanager.py | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 5774db9ff..67811a209 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -47,15 +47,12 @@ class AdvancedTab(SettingsTab): self.display_changed = False advancedTranslated = translate('OpenLP.AdvancedTab', 'Advanced') # 7 stands for now, 0 to 6 is Monday to Sunday. - self.default_service_day = 0 + self.default_service_day = 7 # 11 o'clock is the most popular time for morning service. self.default_service_hour = 11 self.default_service_minute = 0 self.default_service_name = unicode(translate('OpenLP.AdvancedTab', - 'Service %Y-%m-%d-%H-%M')) - self.default_service_example = unicode(translate('OpenLP.AdvancedTab', - '%Y-%m-%d-%H-%M', - 'This should be the date part of default service name.')) + 'Service %Y-%m-%d %H-%M')) self.default_image = u':/graphics/openlp-splash-screen.png' self.default_color = u'#ffffff' self.icon_path = u':/system/system_settings.png' diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 4d7398243..44a9cb6de 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -631,7 +631,7 @@ class ServiceManager(QtGui.QWidget): default_pattern = unicode(QtCore.QSettings().value( u'advanced/default service name', translate('OpenLP.AdvancedTab', - 'Service %Y-%m-%d-%H-%M')).toString()) + 'Service %Y-%m-%d %H-%M')).toString()) default_filename = time.strftime(default_pattern) directory = unicode(SettingsManager.get_last_dir( self.mainwindow.servicemanagerSettingsSection)) From e4f983e6ca353b3905420841e72892ccb63da2de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Tue, 17 Jan 2012 10:50:29 +0200 Subject: [PATCH 10/31] Label back with new text. Also element Labels to the right place as Meinert suggested. --- openlp/core/ui/advancedtab.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 67811a209..f4583a33f 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -98,8 +98,8 @@ class AdvancedTab(SettingsTab): self.defaultServiceLayout = QtGui.QFormLayout( self.defaultServiceGroupBox) self.defaultServiceLayout.setObjectName(u'defaultServiceLayout') - self.defaultServiceDayLabel = QtGui.QLabel(self.defaultServiceGroupBox) - self.defaultServiceDayLabel.setObjectName(u'defaultServiceDayLabel') + self.defaultServiceTimeLabel = QtGui.QLabel(self.defaultServiceGroupBox) + self.defaultServiceTimeLabel.setObjectName(u'defaultServiceTimeLabel') self.defaultServiceDay = QtGui.QComboBox( self.defaultServiceGroupBox) self.defaultServiceDay.addItems( @@ -110,10 +110,10 @@ class AdvancedTab(SettingsTab): self.defaultServiceTime.setObjectName(u'defaultServiceTime') self.defaultServiceTimeHBox = QtGui.QHBoxLayout() self.defaultServiceTimeHBox.setObjectName(u'defaultServiceTimeHBox') - self.defaultServiceTimeHBox.addWidget(self.defaultServiceDayLabel) self.defaultServiceTimeHBox.addWidget(self.defaultServiceDay) self.defaultServiceTimeHBox.addWidget(self.defaultServiceTime) - self.defaultServiceLayout.addRow(self.defaultServiceTimeHBox) + self.defaultServiceLayout.addRow(self.defaultServiceTimeLabel, + self.defaultServiceTimeHBox) self.defaultServiceLabel = QtGui.QLabel(self.defaultServiceGroupBox) self.defaultServiceLabel.setObjectName(u'defaultServiceLabel') self.defaultServiceName = QtGui.QLineEdit(self.defaultServiceGroupBox) @@ -128,10 +128,10 @@ class AdvancedTab(SettingsTab): build_icon(u':/general/general_revert.png')) self.defaultServiceHBox = QtGui.QHBoxLayout() self.defaultServiceHBox.setObjectName(u'defaultServiceHBox') - self.defaultServiceHBox.addWidget(self.defaultServiceLabel) self.defaultServiceHBox.addWidget(self.defaultServiceName) self.defaultServiceHBox.addWidget(self.defaultServiceRevertButton) - self.defaultServiceLayout.addRow(self.defaultServiceHBox) + self.defaultServiceLayout.addRow(self.defaultServiceLabel, + self.defaultServiceHBox) self.defaultServiceExampleLabel = QtGui.QLabel( self.defaultServiceGroupBox) self.defaultServiceExampleLabel.setObjectName( @@ -140,6 +140,10 @@ class AdvancedTab(SettingsTab): self.defaultServiceExample.setObjectName(u'defaultServiceExample') self.defaultServiceLayout.addRow(self.defaultServiceExampleLabel, self.defaultServiceExample) + self.defaultServiceNote = QtGui.QLabel(self.defaultServiceGroupBox) + self.defaultServiceNote.setWordWrap(True) + self.defaultServiceNote.setObjectName(u'defaultServiceNote') + self.defaultServiceLayout.addRow(self.defaultServiceNote) self.leftLayout.addWidget(self.defaultServiceGroupBox) self.leftLayout.addStretch() self.defaultImageGroupBox = QtGui.QGroupBox(self.rightColumn) @@ -233,7 +237,7 @@ class AdvancedTab(SettingsTab): 'Enable application exit confirmation')) self.defaultServiceGroupBox.setTitle( translate('OpenLP.AdvancedTab', 'Default Service Name')) - self.defaultServiceDayLabel.setText( + self.defaultServiceTimeLabel.setText( translate('OpenLP.AdvancedTab', 'Date and Time:')) self.defaultServiceDay.setItemText(0, translate('OpenLP.AdvancedTab', 'Monday')) @@ -261,6 +265,10 @@ class AdvancedTab(SettingsTab): self.default_service_name) self.defaultServiceExampleLabel.setText(translate('OpenLP.AdvancedTab', 'Example:')) + self.defaultServiceNote.setText( + translate('OpenLP.AdvancedTab', 'Note: Leave Name field blank to ' + 'have no prefilled name in Save As dialog. ' + 'Consult manual for special symbols usage.')) self.hideMouseGroupBox.setTitle(translate('OpenLP.AdvancedTab', 'Mouse Cursor')) self.hideMouseCheckBox.setText(translate('OpenLP.AdvancedTab', From ac22a6014d8e9d0eb213237fa9e61490746d12ae Mon Sep 17 00:00:00 2001 From: M2j Date: Tue, 17 Jan 2012 21:21:28 +0100 Subject: [PATCH 11/31] - make i18n of bible references available through translate - accept different hypens for bible references --- openlp/plugins/bibles/lib/__init__.py | 46 +++++++++++++++++---------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/openlp/plugins/bibles/lib/__init__.py b/openlp/plugins/bibles/lib/__init__.py index 7e40b6230..eabcb4ebd 100644 --- a/openlp/plugins/bibles/lib/__init__.py +++ b/openlp/plugins/bibles/lib/__init__.py @@ -31,6 +31,8 @@ plugin. import logging import re +from openlp.core.lib import translate + log = logging.getLogger(__name__) class LayoutStyle(object): @@ -60,28 +62,40 @@ def get_reference_match(match_type): ``match_type`` The type of reference information trying to be extracted in this call. """ - local_separator = unicode(u':;;\s*[:vV]\s*;;-;;\s*-\s*;;,;;\s*,\s*;;end' - ).split(u';;') # English - # local_separator = unicode(u',;;\s*,\s*;;-;;\s*-\s*;;.;;\.;;[Ee]nde' - # ).split(u';;') # German + local_separator = unicode(translate('BiblesPlugin', + ':;;:|v|V;;-;;-;;,;;,;;end', + 'Seperators for parsing references. There are 7 values separated each ' + 'by two semicolons. Verse, range and list separators have each one ' + 'display symbol which appears on slides and in the GUI and a regular ' + 'expression for detecting this symbols.\n' + 'Please ask a developer to double check your translation or make ' + 'yourself familar with regular experssions on: ' + 'http://docs.python.org/library/re.html') + ).split(u';;') separators = { - u'sep_v_display': local_separator[0], u'sep_v': local_separator[1], - u'sep_r_display': local_separator[2], u'sep_r': local_separator[3], - u'sep_l_display': local_separator[4], u'sep_l': local_separator[5], - u'sep_e': local_separator[6]} - + u'sep_v_display': local_separator[0], + u'sep_v': u'\s*(?:' + local_separator[1] + u')\s*', + u'sep_r_display': local_separator[2], + u'sep_r': u'\s*(?:' + local_separator[3] + u')\s*', + u'sep_l_display': local_separator[4], + u'sep_l': u'\s*(?:' + local_separator[5] + u')\s*', + u'sep_e': u'\s*(?:' + local_separator[6] + u')\s*'} + for role in [u'sep_v', u'sep_r', u'sep_l', u'sep_e']: + separators[role] = separators[role].replace(u'-', + u'(?:[-\u00AD\u2010\u2011\u2012\u2013\u2014\u2212\uFE63\uFF0D])') + separators[role] = separators[role].replace(u',', u'(?:[,\u201A])') # verse range match: (:)?(-((:)?|end)?)? - range_string = str(r'(?:(?P[0-9]+)%(sep_v)s)?(?P' - r'[0-9]+)(?P%(sep_r)s(?:(?:(?P[0-9]+)%(sep_v)s)?' - r'(?P[0-9]+)|%(sep_e)s)?)?') % separators + range_string = unicode(u'(?:(?P[0-9]+)%(sep_v)s)?' + u'(?P[0-9]+)(?P%(sep_r)s(?:(?:(?P' + u'[0-9]+)%(sep_v)s)?(?P[0-9]+)|%(sep_e)s)?)?') % separators if match_type == u'range': - return re.compile(r'^\s*' + range_string + r'\s*$', re.UNICODE) + return re.compile(u'^\s*' + range_string + u'\s*$', re.UNICODE) elif match_type == u'range_separator': - return re.compile(separators[u'sep_l']) + return re.compile(separators[u'sep_l'], re.UNICODE) elif match_type == u'full': # full reference match: ((,|(?=$)))+ - return re.compile(str(r'^\s*(?!\s)(?P[\d]*[^\d]+)(?(?:' + range_string + r'(?:%(sep_l)s|(?=\s*$)))+)\s*$') + return re.compile(unicode(u'^\s*(?!\s)(?P[\d]*[^\d]+)(?(?:' + range_string + u'(?:%(sep_l)s|(?=\s*$)))+)\s*$') % separators, re.UNICODE) else: return separators[match_type] From ac96838fc9de6ba978b3fc8b1f8a9bb107db055f Mon Sep 17 00:00:00 2001 From: M2j Date: Tue, 17 Jan 2012 21:32:01 +0100 Subject: [PATCH 12/31] add icu dependency to dependency_check script --- scripts/check_dependencies.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/check_dependencies.py b/scripts/check_dependencies.py index d1ec2228b..044164d8c 100755 --- a/scripts/check_dependencies.py +++ b/scripts/check_dependencies.py @@ -74,6 +74,7 @@ MODULES = [ 'mako', 'migrate', 'uno', + 'icu', ] From 82250ee71fb846c3fd52b56e70164086b065895f Mon Sep 17 00:00:00 2001 From: M2j Date: Tue, 17 Jan 2012 21:58:20 +0100 Subject: [PATCH 13/31] added dependency check for PyICU in exception dialog --- openlp/core/ui/exceptionform.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/openlp/core/ui/exceptionform.py b/openlp/core/ui/exceptionform.py index d2469c092..7cad25665 100644 --- a/openlp/core/ui/exceptionform.py +++ b/openlp/core/ui/exceptionform.py @@ -81,6 +81,11 @@ try: WEBKIT_VERSION = QtWebKit.qWebKitVersion() except AttributeError: WEBKIT_VERSION = u'-' +try: + import icu + ICU_VERSION = u'OK' +except ImportError: + ICU_VERSION = u'-' from openlp.core.lib import translate, SettingsManager @@ -125,7 +130,8 @@ class ExceptionForm(QtGui.QDialog, Ui_ExceptionDialog): u'PyEnchant: %s\n' % ENCHANT_VERSION + \ u'PySQLite: %s\n' % SQLITE_VERSION + \ u'Mako: %s\n' % MAKO_VERSION + \ - u'pyUNO bridge: %s\n' % UNO_VERSION + u'pyUNO bridge: %s\n' % UNO_VERSION + \ + u'PyICU: %s\n' % ICU_VERSION if platform.system() == u'Linux': if os.environ.get(u'KDE_FULL_SESSION') == u'true': system = system + u'Desktop: KDE SC\n' From 8601a47dce205166fde118d72bdd1c6b846493d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Wed, 18 Jan 2012 13:20:15 +0200 Subject: [PATCH 14/31] Remove obsolete import. Fix saving wrong syntax and % bugs. --- openlp/core/ui/advancedtab.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index f4583a33f..6a0483e93 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -33,7 +33,6 @@ from openlp.core.lib import SettingsTab, translate, build_icon, Receiver from openlp.core.lib.ui import UiStrings from openlp.core.utils import get_images_filter from datetime import datetime, timedelta -import re class AdvancedTab(SettingsTab): """ @@ -350,6 +349,7 @@ class AdvancedTab(SettingsTab): preset_is_valid, name_example = self.generate_service_name_example() if not preset_is_valid: self.service_name = self.default_service_name + self.defaultServiceName.setText(self.service_name) settings = QtCore.QSettings() settings.beginGroup(self.settingsSection) if self.service_name == self.default_service_name: @@ -399,10 +399,14 @@ class AdvancedTab(SettingsTab): minute = self.service_minute) try: service_name_example = time.strftime(unicode(self.service_name)) + print service_name_example + if service_name_example.find('%') != -1: + preset_is_valid = False except ValueError: + preset_is_valid = False + if not preset_is_valid: service_name_example = translate('OpenLP.AdvancedTab', 'Syntax error.') - preset_is_valid = False return preset_is_valid, service_name_example def updateServiceNameExample(self): From 175743685330eadd8d705dff6af0ad34bbc58d99 Mon Sep 17 00:00:00 2001 From: M2j Date: Wed, 18 Jan 2012 14:50:06 +0100 Subject: [PATCH 15/31] purge ICU integration from this branch --- openlp/core/ui/exceptionform.py | 8 +------ openlp/core/ui/thememanager.py | 6 +++--- openlp/core/utils/__init__.py | 21 +------------------ .../plugins/bibles/forms/bibleimportform.py | 5 +++-- openlp/plugins/bibles/lib/mediaitem.py | 6 +++--- openlp/plugins/custom/lib/mediaitem.py | 4 ++-- openlp/plugins/images/lib/mediaitem.py | 6 +++--- openlp/plugins/media/lib/mediaitem.py | 6 +++--- openlp/plugins/presentations/lib/mediaitem.py | 4 ++-- openlp/plugins/songs/forms/songexportform.py | 4 ++-- openlp/plugins/songs/lib/mediaitem.py | 5 +++-- scripts/check_dependencies.py | 1 - 12 files changed, 26 insertions(+), 50 deletions(-) diff --git a/openlp/core/ui/exceptionform.py b/openlp/core/ui/exceptionform.py index 7cad25665..d2469c092 100644 --- a/openlp/core/ui/exceptionform.py +++ b/openlp/core/ui/exceptionform.py @@ -81,11 +81,6 @@ try: WEBKIT_VERSION = QtWebKit.qWebKitVersion() except AttributeError: WEBKIT_VERSION = u'-' -try: - import icu - ICU_VERSION = u'OK' -except ImportError: - ICU_VERSION = u'-' from openlp.core.lib import translate, SettingsManager @@ -130,8 +125,7 @@ class ExceptionForm(QtGui.QDialog, Ui_ExceptionDialog): u'PyEnchant: %s\n' % ENCHANT_VERSION + \ u'PySQLite: %s\n' % SQLITE_VERSION + \ u'Mako: %s\n' % MAKO_VERSION + \ - u'pyUNO bridge: %s\n' % UNO_VERSION + \ - u'PyICU: %s\n' % ICU_VERSION + u'pyUNO bridge: %s\n' % UNO_VERSION if platform.system() == u'Linux': if os.environ.get(u'KDE_FULL_SESSION') == u'true': system = system + u'Desktop: KDE SC\n' diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index be84868f6..3585e5c97 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -29,6 +29,7 @@ import os import zipfile import shutil import logging +import locale import re from xml.etree.ElementTree import ElementTree, XML @@ -43,8 +44,7 @@ from openlp.core.lib.ui import UiStrings, critical_error_message_box, \ context_menu_action, context_menu_separator from openlp.core.theme import Theme from openlp.core.ui import FileRenameForm, ThemeForm -from openlp.core.utils import AppLocation, delete_file, \ - get_filesystem_encoding, get_local_collator +from openlp.core.utils import AppLocation, delete_file, get_filesystem_encoding log = logging.getLogger(__name__) @@ -459,7 +459,7 @@ class ThemeManager(QtGui.QWidget): # Sort the themes by its name considering language specific characters. # lower() is needed for windows! files.sort(key=lambda filename: unicode(filename).lower(), - cmp=get_local_collator) + cmp=locale.strcoll) # now process the file list of png files for name in files: # check to see file is in theme root directory diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index 6e2c9fa22..9fa5bcd77 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -33,7 +33,6 @@ import re import sys import time import urllib2 -import locale from datetime import datetime from subprocess import Popen, PIPE @@ -46,18 +45,6 @@ if sys.platform != u'win32' and sys.platform != u'darwin': except ImportError: XDG_BASE_AVAILABLE = False -LOCALE_COLLATOR = locale.strcoll -if sys.platform == u'win32': - try: - import icu - try: - icu_locale = icu.Locale(locale.getlocale()[0]) - LOCALE_COLLATOR = icu.Collator.createInstance(icu_locale).compare - except icu.InvalidArgsError: - pass - except ImportError: - pass - import openlp from openlp.core.lib import Receiver, translate, check_directory_exists @@ -495,16 +482,10 @@ def get_uno_instance(resolver): return resolver.resolve(u'uno:socket,host=localhost,port=2002;' \ + u'urp;StarOffice.ComponentContext') -def get_local_collator(string1, string2): - """ - Returns a collator for locale aware string sorting. - """ - return LOCALE_COLLATOR(string1, string2) - from languagemanager import LanguageManager from actions import ActionList __all__ = [u'AppLocation', u'get_application_version', u'check_latest_version', u'add_actions', u'get_filesystem_encoding', u'LanguageManager', u'ActionList', u'get_web_page', u'get_uno_command', u'get_uno_instance', - u'get_local_collator', u'delete_file', u'clean_filename'] + u'delete_file', u'clean_filename'] diff --git a/openlp/plugins/bibles/forms/bibleimportform.py b/openlp/plugins/bibles/forms/bibleimportform.py index 23a380d54..ee7b5a063 100644 --- a/openlp/plugins/bibles/forms/bibleimportform.py +++ b/openlp/plugins/bibles/forms/bibleimportform.py @@ -30,6 +30,7 @@ The bible import functions for OpenLP import logging import os import os.path +import locale from PyQt4 import QtCore, QtGui @@ -37,7 +38,7 @@ from openlp.core.lib import Receiver, translate from openlp.core.lib.db import delete_database from openlp.core.lib.ui import UiStrings, critical_error_message_box from openlp.core.ui.wizard import OpenLPWizard, WizardStrings -from openlp.core.utils import AppLocation, get_local_collator +from openlp.core.utils import AppLocation from openlp.plugins.bibles.lib.manager import BibleFormat from openlp.plugins.bibles.lib.db import BiblesResourcesDB, clean_filename @@ -521,7 +522,7 @@ class BibleImportForm(OpenLPWizard): """ self.webTranslationComboBox.clear() bibles = self.web_bible_list[index].keys() - bibles.sort(cmp=get_local_collator) + bibles.sort(cmp=locale.strcoll) self.webTranslationComboBox.addItems(bibles) def onOsisBrowseButtonClicked(self): diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 88ddba893..d7b3fff01 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -26,6 +26,7 @@ ############################################################################### import logging +import locale from PyQt4 import QtCore, QtGui @@ -35,7 +36,6 @@ from openlp.core.lib.searchedit import SearchEdit from openlp.core.lib.ui import UiStrings, add_widget_completer, \ media_item_combo_box, critical_error_message_box, \ find_and_set_in_combo_box, build_icon -from openlp.core.utils import get_local_collator from openlp.plugins.bibles.forms import BibleImportForm from openlp.plugins.bibles.lib import LayoutStyle, DisplayStyle, \ VerseReferenceList, get_reference_match @@ -373,7 +373,7 @@ class BibleMediaItem(MediaManagerItem): self.advancedSecondComboBox.addItem(u'') # Get all bibles and sort the list. bibles = self.plugin.manager.get_bibles().keys() - bibles.sort(cmp=get_local_collator) + bibles.sort(cmp=locale.strcoll) # Load the bibles into the combo boxes. for bible in bibles: if bible: @@ -481,7 +481,7 @@ class BibleMediaItem(MediaManagerItem): book_data_temp.append(book) book_data = book_data_temp books = [book.name + u' ' for book in book_data] - books.sort(cmp=get_local_collator) + books.sort(cmp=locale.strcoll) add_widget_completer(books, self.quickSearchEdit) def onQuickVersionComboBox(self): diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py index afa7c28a0..584f22e7b 100644 --- a/openlp/plugins/custom/lib/mediaitem.py +++ b/openlp/plugins/custom/lib/mediaitem.py @@ -26,6 +26,7 @@ ############################################################################### import logging +import locale from PyQt4 import QtCore, QtGui from sqlalchemy.sql import or_, func @@ -33,7 +34,6 @@ from sqlalchemy.sql import or_, func from openlp.core.lib import MediaManagerItem, Receiver, ItemCapabilities, \ check_item_selected, translate from openlp.core.lib.ui import UiStrings -from oprnlp.core.utils import get_local_collator from openlp.plugins.custom.forms import EditCustomForm from openlp.plugins.custom.lib import CustomXMLParser from openlp.plugins.custom.lib.db import CustomSlide @@ -109,7 +109,7 @@ class CustomMediaItem(MediaManagerItem): # Sort the customs by its title considering language specific # characters. lower() is needed for windows! custom_slides.sort( - cmp=get_local_collator, key=lambda custom: custom.title.lower()) + cmp=locale.strcoll, key=lambda custom: custom.title.lower()) for custom_slide in custom_slides: custom_name = QtGui.QListWidgetItem(custom_slide.title) custom_name.setData( diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index 78092def2..92779b991 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -27,6 +27,7 @@ import logging import os +import locale from PyQt4 import QtCore, QtGui @@ -34,8 +35,7 @@ from openlp.core.lib import MediaManagerItem, build_icon, ItemCapabilities, \ SettingsManager, translate, check_item_selected, check_directory_exists, \ Receiver, create_thumb, validate_thumb from openlp.core.lib.ui import UiStrings, critical_error_message_box -from openlp.core.utils import AppLocation, delete_file, get_images_filter, \ - get_local_collator +from openlp.core.utils import AppLocation, delete_file, get_images_filter log = logging.getLogger(__name__) @@ -120,7 +120,7 @@ class ImageMediaItem(MediaManagerItem): self.plugin.formparent.displayProgressBar(len(images)) # Sort the themes by its filename considering language specific # characters. lower() is needed for windows! - images.sort(cmp=get_local_collator, + images.sort(cmp=locale.strcoll, key=lambda filename: os.path.split(unicode(filename))[1].lower()) for imageFile in images: if not initialLoad: diff --git a/openlp/plugins/media/lib/mediaitem.py b/openlp/plugins/media/lib/mediaitem.py index d8790c8cc..111a86209 100644 --- a/openlp/plugins/media/lib/mediaitem.py +++ b/openlp/plugins/media/lib/mediaitem.py @@ -27,6 +27,7 @@ import logging import os +import locale from PyQt4 import QtCore, QtGui @@ -36,7 +37,6 @@ from openlp.core.lib import MediaManagerItem, build_icon, ItemCapabilities, \ from openlp.core.lib.ui import UiStrings, critical_error_message_box, \ media_item_combo_box from openlp.core.ui import Controller, Display -from openlp.core.utils import get_local_collator log = logging.getLogger(__name__) @@ -278,7 +278,7 @@ class MediaMediaItem(MediaManagerItem): def loadList(self, media): # Sort the themes by its filename considering language specific # characters. lower() is needed for windows! - media.sort(cmp=get_local_collator, + media.sort(cmp=locale.strcoll, key=lambda filename: os.path.split(unicode(filename))[1].lower()) for track in media: track_info = QtCore.QFileInfo(track) @@ -298,7 +298,7 @@ class MediaMediaItem(MediaManagerItem): def getList(self, type=MediaType.Audio): media = SettingsManager.load_list(self.settingsSection, u'media') - media.sort(cmp=get_local_collator, + media.sort(cmp=locale.strcoll, key=lambda filename: os.path.split(unicode(filename))[1].lower()) ext = [] if type == MediaType.Audio: diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index c785a4937..03fdadb1b 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -27,6 +27,7 @@ import logging import os +import locale from PyQt4 import QtCore, QtGui @@ -35,7 +36,6 @@ from openlp.core.lib import MediaManagerItem, build_icon, SettingsManager, \ validate_thumb from openlp.core.lib.ui import UiStrings, critical_error_message_box, \ media_item_combo_box -from openlp.core.utils import get_local_collator from openlp.plugins.presentations.lib import MessageListener log = logging.getLogger(__name__) @@ -168,7 +168,7 @@ class PresentationMediaItem(MediaManagerItem): self.plugin.formparent.displayProgressBar(len(files)) # Sort the themes by its filename considering language specific # characters. lower() is needed for windows! - files.sort(cmp=get_local_collator, + files.sort(cmp=locale.strcoll, key=lambda filename: os.path.split(unicode(filename))[1].lower()) for file in files: if not initialLoad: diff --git a/openlp/plugins/songs/forms/songexportform.py b/openlp/plugins/songs/forms/songexportform.py index 5120fe811..679330ec5 100644 --- a/openlp/plugins/songs/forms/songexportform.py +++ b/openlp/plugins/songs/forms/songexportform.py @@ -28,6 +28,7 @@ The :mod:`songexportform` module provides the wizard for exporting songs to the OpenLyrics format. """ +import locale import logging from PyQt4 import QtCore, QtGui @@ -35,7 +36,6 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import build_icon, Receiver, SettingsManager, translate from openlp.core.lib.ui import UiStrings, critical_error_message_box from openlp.core.ui.wizard import OpenLPWizard, WizardStrings -from openlp.core.utils import get_local_collator from openlp.plugins.songs.lib.db import Song from openlp.plugins.songs.lib.openlyricsexport import OpenLyricsExport @@ -250,7 +250,7 @@ class SongExportForm(OpenLPWizard): # Load the list of songs. Receiver.send_message(u'cursor_busy') songs = self.plugin.manager.get_all_objects(Song) - songs.sort(cmp=get_local_collator, key=lambda song: song.title.lower()) + songs.sort(cmp=locale.strcoll, key=lambda song: song.title.lower()) for song in songs: # No need to export temporary songs. if song.temporary: diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index d82b20a52..1e62dd64b 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -26,6 +26,7 @@ ############################################################################### import logging +import locale import re import os import shutil @@ -37,7 +38,7 @@ from openlp.core.lib import MediaManagerItem, Receiver, ItemCapabilities, \ translate, check_item_selected, PluginStatus from openlp.core.lib.ui import UiStrings, context_menu_action, \ context_menu_separator -from openlp.core.utils import AppLocation, get_local_collator +from openlp.core.utils import AppLocation from openlp.plugins.songs.forms import EditSongForm, SongMaintenanceForm, \ SongImportForm, SongExportForm from openlp.plugins.songs.lib import OpenLyrics, SongXML, VerseType, \ @@ -239,7 +240,7 @@ class SongMediaItem(MediaManagerItem): # Sort the songs by its title considering language specific characters. # lower() is needed for windows! searchresults.sort( - cmp=get_local_collator, key=lambda song: song.title.lower()) + cmp=locale.strcoll, key=lambda song: song.title.lower()) for song in searchresults: # Do not display temporary songs if song.temporary: diff --git a/scripts/check_dependencies.py b/scripts/check_dependencies.py index 044164d8c..d1ec2228b 100755 --- a/scripts/check_dependencies.py +++ b/scripts/check_dependencies.py @@ -74,7 +74,6 @@ MODULES = [ 'mako', 'migrate', 'uno', - 'icu', ] From 9ef317db2a7025d9c5f5188d7b15e5b98189fa23 Mon Sep 17 00:00:00 2001 From: M2j Date: Wed, 18 Jan 2012 18:52:48 +0100 Subject: [PATCH 16/31] - i18n for scripture references and custom configuration settings --- openlp/plugins/bibles/lib/__init__.py | 120 +++++++++----- openlp/plugins/bibles/lib/biblestab.py | 208 ++++++++++++++++++++++++- openlp/plugins/bibles/lib/mediaitem.py | 14 +- 3 files changed, 294 insertions(+), 48 deletions(-) diff --git a/openlp/plugins/bibles/lib/__init__.py b/openlp/plugins/bibles/lib/__init__.py index c185b2faa..aaf8ff54c 100644 --- a/openlp/plugins/bibles/lib/__init__.py +++ b/openlp/plugins/bibles/lib/__init__.py @@ -31,10 +31,15 @@ plugin. import logging import re +from PyQt4 import QtCore + from openlp.core.lib import translate log = logging.getLogger(__name__) +REFERENCE_MATCHES = {} +REFERENCE_SEPARATORS = {} + class LayoutStyle(object): """ An enumeration for bible screen layout styles. @@ -54,51 +59,86 @@ class DisplayStyle(object): Square = 3 +def update_reference_separators(): + """ + Updates separators and matches for parsing and formating scripture + references. + """ + default_separators = unicode(translate('BiblesPlugin', + ':|v|V|verse;;-|to;;,|and;;end', + 'This are 4 values seperated each by two semicolons representing the ' + 'seperators for parsing references. This values are verse separators, ' + 'range separators, list separators and end mark. Alternative values ' + 'to be seperated by a vertical bar "|". In this case the first value ' + 'is the default and used for the display format.')).split(u';;') + settings = QtCore.QSettings() + settings.beginGroup(u'bibles') # FIXME: get the name from somewere else + custom_separators = [ + unicode(settings.value(u'verse separator', + QtCore.QVariant(u'')).toString()), + unicode(settings.value(u'range separator', + QtCore.QVariant(u'')).toString()), + unicode(settings.value(u'list separator', + QtCore.QVariant(u'')).toString()), + unicode(settings.value(u'end separator', + QtCore.QVariant(u'')).toString())] + settings.endGroup() + for index, role in enumerate([u'v', u'r', u'l', u'e']): + if custom_separators[index].strip(u'|') == u'': + source_string = default_separators[index].strip(u'|') + else: + source_string = custom_separators[index].strip(u'|') + while u'||' in source_string: + source_string = source_string.replace(u'||', u'|') + if role != u'e': + REFERENCE_SEPARATORS[u'sep_%s_display' % role] = \ + source_string.split(u'|')[0] + # escape reserved characters + for character in u'\\.^$*+?{}[]()': + source_string = source_string.replace(character, u'\\' + character) + # add various unicode alternatives + source_string = source_string.replace(u'-', + u'(?:[-\u00AD\u2010\u2011\u2012\u2013\u2014\u2212\uFE63\uFF0D])') + source_string = source_string.replace(u',', u'(?:[,\u201A])') + REFERENCE_SEPARATORS[u'sep_%s' % role] = u'\s*(?:%s)\s*' % source_string + REFERENCE_SEPARATORS[u'sep_%s_default' % role] = \ + default_separators[index] + # verse range match: (:)?(-((:)?|end)?)? + range_string = u'(?:(?P[0-9]+)%(sep_v)s)?' \ + u'(?P[0-9]+)(?P%(sep_r)s(?:(?:(?P' \ + u'[0-9]+)%(sep_v)s)?(?P[0-9]+)|%(sep_e)s)?)?' % \ + REFERENCE_SEPARATORS + REFERENCE_MATCHES[u'range'] = re.compile(u'^\s*%s\s*$' % range_string, + re.UNICODE) + REFERENCE_MATCHES[u'range_separator'] = re.compile( + REFERENCE_SEPARATORS[u'sep_l'], re.UNICODE) + # full reference match: ((,|(?=$)))+ + REFERENCE_MATCHES[u'full'] = re.compile(u'^\s*(?!\s)(?P[\d]*[^\d]+)' + u'(?(?:%(range)s(?:%(sep_l)s|(?=\s*$)))+)\s*$' % \ + dict(REFERENCE_SEPARATORS.items() + [(u'range', range_string)]), + re.UNICODE) + +def get_reference_separator(separator_type): + """ + Provides separators for parsing and formatting scripture references. + + ``separator_type`` + The role and format of the separator. + """ + if len(REFERENCE_SEPARATORS) == 0: + update_reference_separators() + return REFERENCE_SEPARATORS[separator_type] + def get_reference_match(match_type): """ - Provides the regexes and matches to use while parsing strings for bible - references. + Provides matches for parsing scripture references strings. ``match_type`` - The type of reference information trying to be extracted in this call. + The type of match is ``range_separator``, ``range`` or ``full``. """ - local_separator = unicode(translate('BiblesPlugin', - ':;;:|v|V;;-;;-;;,;;,;;end', - 'Seperators for parsing references. There are 7 values separated each ' - 'by two semicolons. Verse, range and list separators have each one ' - 'display symbol which appears on slides and in the GUI and a regular ' - 'expression for detecting this symbols.\n' - 'Please ask a developer to double check your translation or make ' - 'yourself familar with regular experssions on: ' - 'http://docs.python.org/library/re.html') - ).split(u';;') - separators = { - u'sep_v_display': local_separator[0], - u'sep_v': u'\s*(?:' + local_separator[1] + u')\s*', - u'sep_r_display': local_separator[2], - u'sep_r': u'\s*(?:' + local_separator[3] + u')\s*', - u'sep_l_display': local_separator[4], - u'sep_l': u'\s*(?:' + local_separator[5] + u')\s*', - u'sep_e': u'\s*(?:' + local_separator[6] + u')\s*'} - for role in [u'sep_v', u'sep_r', u'sep_l', u'sep_e']: - separators[role] = separators[role].replace(u'-', - u'(?:[-\u00AD\u2010\u2011\u2012\u2013\u2014\u2212\uFE63\uFF0D])') - separators[role] = separators[role].replace(u',', u'(?:[,\u201A])') - # verse range match: (:)?(-((:)?|end)?)? - range_string = unicode(u'(?:(?P[0-9]+)%(sep_v)s)?' - u'(?P[0-9]+)(?P%(sep_r)s(?:(?:(?P' - u'[0-9]+)%(sep_v)s)?(?P[0-9]+)|%(sep_e)s)?)?') % separators - if match_type == u'range': - return re.compile(u'^\s*' + range_string + u'\s*$', re.UNICODE) - elif match_type == u'range_separator': - return re.compile(separators[u'sep_l'], re.UNICODE) - elif match_type == u'full': - # full reference match: ((,|(?=$)))+ - return re.compile(unicode(u'^\s*(?!\s)(?P[\d]*[^\d]+)(?(?:' + range_string + u'(?:%(sep_l)s|(?=\s*$)))+)\s*$') - % separators, re.UNICODE) - else: - return separators[match_type] + if len(REFERENCE_MATCHES) == 0: + update_reference_separators() + return REFERENCE_MATCHES[match_type] def parse_reference(reference): """ diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index 8402d6e11..5d96faf7a 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -30,8 +30,9 @@ import logging from PyQt4 import QtCore, QtGui from openlp.core.lib import Receiver, SettingsTab, translate -from openlp.plugins.bibles.lib import LayoutStyle, DisplayStyle from openlp.core.lib.ui import UiStrings, find_and_set_in_combo_box +from openlp.plugins.bibles.lib import LayoutStyle, DisplayStyle, \ + update_reference_separators, get_reference_separator log = logging.getLogger(__name__) @@ -90,6 +91,52 @@ class BiblesTab(SettingsTab): self.changeNoteLabel.setObjectName(u'changeNoteLabel') self.verseDisplayLayout.addRow(self.changeNoteLabel) self.leftLayout.addWidget(self.verseDisplayGroupBox) + self.scriptureReferenceGroupBox = QtGui.QGroupBox(self.leftColumn) + self.scriptureReferenceGroupBox.setObjectName( + u'scriptureReferenceGroupBox') + self.scriptureReferenceLayout = QtGui.QGridLayout( + self.scriptureReferenceGroupBox) + self.verseSeparatorCheckBox = QtGui.QCheckBox( + self.scriptureReferenceGroupBox) + self.verseSeparatorCheckBox.setObjectName(u'verseSeparatorCheckBox') + self.scriptureReferenceLayout.addWidget(self.verseSeparatorCheckBox, 0, + 0) + self.verseSeparatorLineEdit = QtGui.QLineEdit( + self.scriptureReferenceGroupBox) + self.verseSeparatorLineEdit.setObjectName(u'verseSeparatorLineEdit') + self.scriptureReferenceLayout.addWidget(self.verseSeparatorLineEdit, 0, + 1) + self.rangeSeparatorCheckBox = QtGui.QCheckBox( + self.scriptureReferenceGroupBox) + self.rangeSeparatorCheckBox.setObjectName(u'rangeSeparatorCheckBox') + self.scriptureReferenceLayout.addWidget(self.rangeSeparatorCheckBox, 1, + 0) + self.rangeSeparatorLineEdit = QtGui.QLineEdit( + self.scriptureReferenceGroupBox) + self.rangeSeparatorLineEdit.setObjectName(u'rangeSeparatorLineEdit') + self.scriptureReferenceLayout.addWidget(self.rangeSeparatorLineEdit, 1, + 1) + self.listSeparatorCheckBox = QtGui.QCheckBox( + self.scriptureReferenceGroupBox) + self.listSeparatorCheckBox.setObjectName(u'listSeparatorCheckBox') + self.scriptureReferenceLayout.addWidget(self.listSeparatorCheckBox, 2, + 0) + self.listSeparatorLineEdit = QtGui.QLineEdit( + self.scriptureReferenceGroupBox) + self.listSeparatorLineEdit.setObjectName(u'listSeparatorLineEdit') + self.scriptureReferenceLayout.addWidget(self.listSeparatorLineEdit, 2, + 1) + self.endSeparatorCheckBox = QtGui.QCheckBox( + self.scriptureReferenceGroupBox) + self.endSeparatorCheckBox.setObjectName(u'endSeparatorCheckBox') + self.scriptureReferenceLayout.addWidget(self.endSeparatorCheckBox, 3, + 0) + self.endSeparatorLineEdit = QtGui.QLineEdit( + self.scriptureReferenceGroupBox) + self.endSeparatorLineEdit.setObjectName(u'endSeparatorLineEdit') + self.scriptureReferenceLayout.addWidget(self.endSeparatorLineEdit, 3, + 1) + self.leftLayout.addWidget(self.scriptureReferenceGroupBox) self.leftLayout.addStretch() self.rightColumn.setSizePolicy( QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) @@ -110,6 +157,42 @@ class BiblesTab(SettingsTab): QtCore.QObject.connect( self.bibleSecondCheckBox, QtCore.SIGNAL(u'stateChanged(int)'), self.onBibleSecondCheckBox) + QtCore.QObject.connect( + self.verseSeparatorCheckBox, QtCore.SIGNAL(u'clicked(bool)'), + self.onVerseSeparatorCheckBoxToggled) + QtCore.QObject.connect( + self.verseSeparatorLineEdit, QtCore.SIGNAL(u'textEdited(QString)'), + self.onVerseSeparatorLineEditEdited) + QtCore.QObject.connect( + self.verseSeparatorLineEdit, QtCore.SIGNAL(u'editingFinished()'), + self.onVerseSeparatorLineEditFinished) + QtCore.QObject.connect( + self.rangeSeparatorCheckBox, QtCore.SIGNAL(u'clicked(bool)'), + self.onRangeSeparatorCheckBoxToggled) + QtCore.QObject.connect( + self.rangeSeparatorLineEdit, QtCore.SIGNAL(u'textEdited(QString)'), + self.onRangeSeparatorLineEditEdited) + QtCore.QObject.connect( + self.rangeSeparatorLineEdit, QtCore.SIGNAL(u'editingFinished()'), + self.onRangeSeparatorLineEditFinished) + QtCore.QObject.connect( + self.listSeparatorCheckBox, QtCore.SIGNAL(u'clicked(bool)'), + self.onListSeparatorCheckBoxToggled) + QtCore.QObject.connect( + self.listSeparatorLineEdit, QtCore.SIGNAL(u'textEdited(QString)'), + self.onListSeparatorLineEditEdited) + QtCore.QObject.connect( + self.listSeparatorLineEdit, QtCore.SIGNAL(u'editingFinished()'), + self.onListSeparatorLineEditFinished) + QtCore.QObject.connect( + self.endSeparatorCheckBox, QtCore.SIGNAL(u'clicked(bool)'), + self.onEndSeparatorCheckBoxToggled) + QtCore.QObject.connect( + self.endSeparatorLineEdit, QtCore.SIGNAL(u'textEdited(QString)'), + self.onEndSeparatorLineEditEdited) + QtCore.QObject.connect( + self.endSeparatorLineEdit, QtCore.SIGNAL(u'editingFinished()'), + self.onEndSeparatorLineEditFinished) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'theme_update_list'), self.updateThemeList) @@ -141,6 +224,36 @@ class BiblesTab(SettingsTab): 'Note:\nChanges do not affect verses already in the service.')) self.bibleSecondCheckBox.setText( translate('BiblesPlugin.BiblesTab', 'Display second Bible verses')) + self.scriptureReferenceGroupBox.setTitle( + translate('BiblesPlugin.BiblesTab', 'Custom Scripture References')) + self.verseSeparatorCheckBox.setText( + translate('BiblesPlugin.BiblesTab', 'Verse Separator:')) + self.rangeSeparatorCheckBox.setText( + translate('BiblesPlugin.BiblesTab', 'Range Separator:')) + self.listSeparatorCheckBox.setText( + translate('BiblesPlugin.BiblesTab', 'List Separator:')) + self.endSeparatorCheckBox.setText( + translate('BiblesPlugin.BiblesTab', 'End Mark:')) + self.verseSeparatorLineEdit.setToolTip( + translate('BiblesPlugin.BiblesTab', 'Multiple alternative ' + 'separators may be defined.\nThey have to be separated ' + 'by a vertical bar "|".\nPlease clear this edit line to use ' + 'the default value.')) + self.rangeSeparatorLineEdit.setToolTip( + translate('BiblesPlugin.BiblesTab', 'Multiple alternative ' + 'separators may be defined.\nThey have to be separated ' + 'by a vertical bar "|".\nPlease clear this edit line to use ' + 'the default value.')) + self.listSeparatorLineEdit.setToolTip( + translate('BiblesPlugin.BiblesTab', 'Multiple alternative ' + 'separators may be defined.\nThey have to be separated ' + 'by a vertical bar "|".\nPlease clear this edit line to use ' + 'the default value.')) + self.endSeparatorLineEdit.setToolTip( + translate('BiblesPlugin.BiblesTab', 'Multiple alternative ' + 'end marks may be defined.\nThey have to be separated by a ' + 'vertical bar "|".\nPlease clear this edit line to use the ' + 'default value.')) def onBibleThemeComboBoxChanged(self): self.bible_theme = self.bibleThemeComboBox.currentText() @@ -163,6 +276,66 @@ class BiblesTab(SettingsTab): if check_state == QtCore.Qt.Checked: self.second_bibles = True + def onVerseSeparatorCheckBoxToggled(self, checked): + if not checked: + self.verseSeparatorLineEdit.clear() + elif self.verseSeparatorCheckBox.hasFocus(): + self.verseSeparatorLineEdit.setFocus() + + def onVerseSeparatorLineEditEdited(self, text): + self.verseSeparatorCheckBox.setChecked(True) + + def onVerseSeparatorLineEditFinished(self): + if self.verseSeparatorLineEdit.text().remove(u'|').isEmpty() and \ + not self.verseSeparatorCheckBox.hasFocus(): + self.verseSeparatorCheckBox.setChecked(False) + self.verseSeparatorLineEdit.clear() + + def onRangeSeparatorCheckBoxToggled(self, checked): + if not checked: + self.rangeSeparatorLineEdit.clear() + elif self.rangeSeparatorCheckBox.hasFocus(): + self.rangeSeparatorLineEdit.setFocus() + + def onRangeSeparatorLineEditEdited(self, text): + self.rangeSeparatorCheckBox.setChecked(True) + + def onRangeSeparatorLineEditFinished(self): + if self.rangeSeparatorLineEdit.text().remove(u'|').isEmpty() and \ + not self.rangeSeparatorCheckBox.hasFocus(): + self.rangeSeparatorCheckBox.setChecked(False) + self.rangeSeparatorLineEdit.clear() + + def onListSeparatorCheckBoxToggled(self, checked): + if not checked: + self.listSeparatorLineEdit.clear() + elif self.listSeparatorCheckBox.hasFocus(): + self.listSeparatorLineEdit.setFocus() + + def onListSeparatorLineEditEdited(self, text): + self.listSeparatorCheckBox.setChecked(True) + + def onListSeparatorLineEditFinished(self): + if self.listSeparatorLineEdit.text().remove(u'|').isEmpty() and \ + not self.listSeparatorCheckBox.hasFocus(): + self.listSeparatorCheckBox.setChecked(False) + self.listSeparatorLineEdit.clear() + + def onEndSeparatorCheckBoxToggled(self, checked): + if not checked: + self.endSeparatorLineEdit.clear() + elif self.endSeparatorCheckBox.hasFocus(): + self.endSeparatorLineEdit.setFocus() + + def onEndSeparatorLineEditEdited(self, text): + self.endSeparatorCheckBox.setChecked(True) + + def onEndSeparatorLineEditFinished(self): + if self.endSeparatorLineEdit.text().remove(u'|').isEmpty() and \ + not self.endSeparatorCheckBox.hasFocus(): + self.endSeparatorCheckBox.setChecked(False) + self.endSeparatorLineEdit.clear() + def load(self): settings = QtCore.QSettings() settings.beginGroup(self.settingsSection) @@ -180,6 +353,30 @@ class BiblesTab(SettingsTab): self.displayStyleComboBox.setCurrentIndex(self.display_style) self.layoutStyleComboBox.setCurrentIndex(self.layout_style) self.bibleSecondCheckBox.setChecked(self.second_bibles) + self.verseSeparatorLineEdit.setPlaceholderText( + get_reference_separator(u'sep_v_default')) + self.verseSeparatorLineEdit.setText(settings.value(u'verse separator', + QtCore.QVariant(u'')).toString()) + self.verseSeparatorCheckBox.setChecked( + self.verseSeparatorLineEdit.text() != u'') + self.rangeSeparatorLineEdit.setPlaceholderText( + get_reference_separator(u'sep_r_default')) + self.rangeSeparatorLineEdit.setText(settings.value(u'range separator', + QtCore.QVariant(u'')).toString()) + self.rangeSeparatorCheckBox.setChecked( + self.rangeSeparatorLineEdit.text() != u'') + self.listSeparatorLineEdit.setPlaceholderText( + get_reference_separator(u'sep_l_default')) + self.listSeparatorLineEdit.setText(settings.value(u'list separator', + QtCore.QVariant(u'')).toString()) + self.listSeparatorCheckBox.setChecked( + self.listSeparatorLineEdit.text() != u'') + self.endSeparatorLineEdit.setPlaceholderText( + get_reference_separator(u'sep_e_default')) + self.endSeparatorLineEdit.setText(settings.value(u'end separator', + QtCore.QVariant(u'')).toString()) + self.endSeparatorCheckBox.setChecked( + self.endSeparatorLineEdit.text() != u'') settings.endGroup() def save(self): @@ -193,6 +390,15 @@ class BiblesTab(SettingsTab): QtCore.QVariant(self.layout_style)) settings.setValue(u'second bibles', QtCore.QVariant(self.second_bibles)) settings.setValue(u'bible theme', QtCore.QVariant(self.bible_theme)) + settings.setValue(u'verse separator', + QtCore.QVariant(self.verseSeparatorLineEdit.text())) + settings.setValue(u'range separator', + QtCore.QVariant(self.rangeSeparatorLineEdit.text())) + settings.setValue(u'list separator', + QtCore.QVariant(self.listSeparatorLineEdit.text())) + settings.setValue(u'end separator', + QtCore.QVariant(self.endSeparatorLineEdit.text())) + update_reference_separators() settings.endGroup() def updateThemeList(self, theme_list): diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index d7b3fff01..5ec4daa50 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -38,7 +38,7 @@ from openlp.core.lib.ui import UiStrings, add_widget_completer, \ find_and_set_in_combo_box, build_icon from openlp.plugins.bibles.forms import BibleImportForm from openlp.plugins.bibles.lib import LayoutStyle, DisplayStyle, \ - VerseReferenceList, get_reference_match + VerseReferenceList, get_reference_separator log = logging.getLogger(__name__) @@ -634,8 +634,8 @@ class BibleMediaItem(MediaManagerItem): chapter_to = self.advancedToChapter.currentText() verse_from = self.advancedFromVerse.currentText() verse_to = self.advancedToVerse.currentText() - verse_separator = get_reference_match(u'sep_v_display') - range_separator = get_reference_match(u'sep_r_display') + verse_separator = get_reference_separator(u'sep_v_display') + range_separator = get_reference_separator(u'sep_r_display') verse_range = chapter_from + verse_separator + verse_from + \ range_separator + chapter_to + verse_separator + verse_to versetext = u'%s %s' % (book, verse_range) @@ -737,7 +737,7 @@ class BibleMediaItem(MediaManagerItem): Displays the search results in the media manager. All data needed for further action is saved for/in each row. """ - verse_separator = get_reference_match(u'sep_v_display') + verse_separator = get_reference_separator(u'sep_v_display') version = self.plugin.manager.get_meta_data(bible, u'Version').value copyright = self.plugin.manager.get_meta_data(bible, u'Copyright').value permissions = \ @@ -890,8 +890,8 @@ class BibleMediaItem(MediaManagerItem): ``old_item`` The last item of a range. """ - verse_separator = get_reference_match(u'sep_v_display') - range_separator = get_reference_match(u'sep_r_display') + verse_separator = get_reference_separator(u'sep_v_display') + range_separator = get_reference_separator(u'sep_r_display') old_chapter = self._decodeQtObject(old_bitem, 'chapter') old_verse = self._decodeQtObject(old_bitem, 'verse') start_book = self._decodeQtObject(start_bitem, 'book') @@ -971,7 +971,7 @@ class BibleMediaItem(MediaManagerItem): ``verse`` The verse number (int). """ - verse_separator = get_reference_match(u'sep_v_display') + verse_separator = get_reference_separator(u'sep_v_display') if not self.settings.show_new_chapters or old_chapter != chapter: verse_text = unicode(chapter) + verse_separator + unicode(verse) else: From 62d4db0c82335436bbe951b3d2cc9dfa6457a29f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Wed, 18 Jan 2012 21:16:50 +0200 Subject: [PATCH 17/31] Added a comment for translators. --- openlp/core/ui/advancedtab.py | 9 ++++++++- openlp/core/ui/servicemanager.py | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 6a0483e93..9752a1fea 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -51,7 +51,14 @@ class AdvancedTab(SettingsTab): self.default_service_hour = 11 self.default_service_minute = 0 self.default_service_name = unicode(translate('OpenLP.AdvancedTab', - 'Service %Y-%m-%d %H-%M')) + 'Service %Y-%m-%d %H-%M', + 'This is the default default service name template, which can be ' + 'found in Advanced tab under Tools, Settings. Please do not ' + 'include any of the following characters: /\\?*|<>\[\]":+\n' + 'You can use any of the directives as shown on page ' + 'http://docs.python.org/library/datetime.html' + '#strftime-strptime-behavior , but if possible, please keep ' + 'the resulting string sortable by name.')) self.default_image = u':/graphics/openlp-splash-screen.png' self.default_color = u'#ffffff' self.icon_path = u':/system/system_settings.png' diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 44a9cb6de..af8c97235 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -631,7 +631,14 @@ class ServiceManager(QtGui.QWidget): default_pattern = unicode(QtCore.QSettings().value( u'advanced/default service name', translate('OpenLP.AdvancedTab', - 'Service %Y-%m-%d %H-%M')).toString()) + 'Service %Y-%m-%d %H-%M', + 'This is the default default service name template, which can be ' + 'found in Advanced tab under Tools, Settings. Please do not ' + 'include any of the following characters: /\\?*|<>\[\]":+\n' + 'You can use any of the directives as shown on page ' + 'http://docs.python.org/library/datetime.html' + '#strftime-strptime-behavior , but if possible, please keep ' + 'the resulting string sortable by name.')).toString()) default_filename = time.strftime(default_pattern) directory = unicode(SettingsManager.get_last_dir( self.mainwindow.servicemanagerSettingsSection)) From 62a5578528a023da49eeb20daf5ef9fbb9e5073b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Wed, 18 Jan 2012 21:18:18 +0200 Subject: [PATCH 18/31] Make % acceptable character for filenames again. --- openlp/core/ui/advancedtab.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 9752a1fea..579aee1a1 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -406,12 +406,8 @@ class AdvancedTab(SettingsTab): minute = self.service_minute) try: service_name_example = time.strftime(unicode(self.service_name)) - print service_name_example - if service_name_example.find('%') != -1: - preset_is_valid = False except ValueError: preset_is_valid = False - if not preset_is_valid: service_name_example = translate('OpenLP.AdvancedTab', 'Syntax error.') return preset_is_valid, service_name_example From cac10059f3c07b4ed4475187e189d9b23e4dd7c9 Mon Sep 17 00:00:00 2001 From: M2j Date: Wed, 18 Jan 2012 21:20:05 +0100 Subject: [PATCH 19/31] update the 'scripture reference invalid' message --- openlp/plugins/bibles/lib/manager.py | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index 873b42cee..c231f2062 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -33,7 +33,7 @@ from PyQt4 import QtCore from openlp.core.lib import Receiver, SettingsManager, translate from openlp.core.lib.ui import critical_error_message_box from openlp.core.utils import AppLocation, delete_file -from openlp.plugins.bibles.lib import parse_reference +from openlp.plugins.bibles.lib import parse_reference, get_reference_separator from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta from csvbible import CSVBible from http import HTTPBible @@ -309,19 +309,29 @@ class BibleManager(object): return self.db_cache[bible].get_verses(reflist, show_error) else: if show_error: + reference_seperators = { + u'verse': get_reference_separator(u'sep_v_display'), + u'range': get_reference_separator(u'sep_r_display'), + u'list': get_reference_separator(u'sep_l_display')} Receiver.send_message(u'openlp_information_message', { u'title': translate('BiblesPlugin.BibleManager', 'Scripture Reference Error'), - u'message': translate('BiblesPlugin.BibleManager', + u'message': unicode(translate('BiblesPlugin.BibleManager', 'Your scripture reference is either not supported by ' 'OpenLP or is invalid. Please make sure your reference ' - 'conforms to one of the following patterns:\n\n' + 'conforms to one of the following patterns or consult the ' + 'manual:\n\n' 'Book Chapter\n' - 'Book Chapter-Chapter\n' - 'Book Chapter:Verse-Verse\n' - 'Book Chapter:Verse-Verse,Verse-Verse\n' - 'Book Chapter:Verse-Verse,Chapter:Verse-Verse\n' - 'Book Chapter:Verse-Chapter:Verse') + 'Book Chapter%(range)sChapter\n' + 'Book Chapter%(verse)sVerse%(range)sVerse\n' + 'Book Chapter%(verse)sVerse%(range)sVerse%(list)sVerse' + '%(range)sVerse\n' + 'Book Chapter%(verse)sVerse%(range)sVerse%(list)sChapter' + '%(verse)sVerse%(range)sVerse\n' + 'Book Chapter%(verse)sVerse%(range)sChapter%(verse)sVerse', + 'Please pay attention to the appended "s" of the wildcards ' + 'and refrain from translating the words inside the ' + 'names in the brackets.')) % reference_seperators }) return None From d6ecab7a04a59b7280236434fcb7b00aeb6e6096 Mon Sep 17 00:00:00 2001 From: M2j Date: Sat, 21 Jan 2012 16:47:38 +0100 Subject: [PATCH 20/31] - remove FIXME: comment - change scripture reference configuration tooltip strings to allow separate translation - fix RegEx for scripture references with trailing list separator --- openlp/plugins/bibles/lib/__init__.py | 25 ++++++++++++++----------- openlp/plugins/bibles/lib/biblestab.py | 6 +++--- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/openlp/plugins/bibles/lib/__init__.py b/openlp/plugins/bibles/lib/__init__.py index aaf8ff54c..07e50fa3f 100644 --- a/openlp/plugins/bibles/lib/__init__.py +++ b/openlp/plugins/bibles/lib/__init__.py @@ -65,14 +65,16 @@ def update_reference_separators(): references. """ default_separators = unicode(translate('BiblesPlugin', - ':|v|V|verse;;-|to;;,|and;;end', + ':|v|V|verse|verses;;-|to;;,|and;;end', 'This are 4 values seperated each by two semicolons representing the ' 'seperators for parsing references. This values are verse separators, ' 'range separators, list separators and end mark. Alternative values ' 'to be seperated by a vertical bar "|". In this case the first value ' - 'is the default and used for the display format.')).split(u';;') + 'is the default and used for the display format. If a semicolon should ' + 'be used you have to give an alternative separator afterwards to allow ' + 'OpenLP correct splitting of the translation.')).split(u';;') settings = QtCore.QSettings() - settings.beginGroup(u'bibles') # FIXME: get the name from somewere else + settings.beginGroup(u'bibles') custom_separators = [ unicode(settings.value(u'verse separator', QtCore.QVariant(u'')).toString()), @@ -104,18 +106,19 @@ def update_reference_separators(): REFERENCE_SEPARATORS[u'sep_%s_default' % role] = \ default_separators[index] # verse range match: (:)?(-((:)?|end)?)? - range_string = u'(?:(?P[0-9]+)%(sep_v)s)?' \ + range_regex = u'(?:(?P[0-9]+)%(sep_v)s)?' \ u'(?P[0-9]+)(?P%(sep_r)s(?:(?:(?P' \ u'[0-9]+)%(sep_v)s)?(?P[0-9]+)|%(sep_e)s)?)?' % \ REFERENCE_SEPARATORS - REFERENCE_MATCHES[u'range'] = re.compile(u'^\s*%s\s*$' % range_string, + REFERENCE_MATCHES[u'range'] = re.compile(u'^\s*%s\s*$' % range_regex, re.UNICODE) REFERENCE_MATCHES[u'range_separator'] = re.compile( REFERENCE_SEPARATORS[u'sep_l'], re.UNICODE) # full reference match: ((,|(?=$)))+ - REFERENCE_MATCHES[u'full'] = re.compile(u'^\s*(?!\s)(?P[\d]*[^\d]+)' - u'(?(?:%(range)s(?:%(sep_l)s|(?=\s*$)))+)\s*$' % \ - dict(REFERENCE_SEPARATORS.items() + [(u'range', range_string)]), + REFERENCE_MATCHES[u'full'] = re.compile( + u'^\s*(?!\s)(?P[\d]*[^\d]+)(?(?:%(range_regex)s(?:%(sep_l)s(?!\s*$)|(?=\s*$)))+)\s*$' \ + % dict(REFERENCE_SEPARATORS.items() + [(u'range_regex', range_regex)]), re.UNICODE) def get_reference_separator(separator_type): @@ -194,7 +197,7 @@ def parse_reference(reference): If there is a range separator without further verse declaration the last refered chapter is addressed until the end. - ``range_string`` is a regular expression which matches for verse range + ``range_regex`` is a regular expression which matches for verse range declarations: ``(?:(?P[0-9]+)%(sep_v)s)?`` @@ -223,9 +226,9 @@ def parse_reference(reference): are optional leading digits followed by non-digits. The group ends before the whitspace in front of the next digit. - ``(?P(?:`` + range_string + ``(?:%(sep_l)s|(?=\s*$)))+)\s*$`` + ``(?P(?:%(range_regex)s(?:%(sep_l)s(?!\s*$)|(?=\s*$)))+)\s*$`` The second group contains all ``ranges``. This can be multiple - declarations of a range_string separated by a list separator. + declarations of range_regex separated by a list separator. """ log.debug(u'parse_reference("%s")', reference) diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index 5d96faf7a..026810fb2 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -236,17 +236,17 @@ class BiblesTab(SettingsTab): translate('BiblesPlugin.BiblesTab', 'End Mark:')) self.verseSeparatorLineEdit.setToolTip( translate('BiblesPlugin.BiblesTab', 'Multiple alternative ' - 'separators may be defined.\nThey have to be separated ' + 'verse separators may be defined.\nThey have to be separated ' 'by a vertical bar "|".\nPlease clear this edit line to use ' 'the default value.')) self.rangeSeparatorLineEdit.setToolTip( translate('BiblesPlugin.BiblesTab', 'Multiple alternative ' - 'separators may be defined.\nThey have to be separated ' + 'range separators may be defined.\nThey have to be separated ' 'by a vertical bar "|".\nPlease clear this edit line to use ' 'the default value.')) self.listSeparatorLineEdit.setToolTip( translate('BiblesPlugin.BiblesTab', 'Multiple alternative ' - 'separators may be defined.\nThey have to be separated ' + 'list separators may be defined.\nThey have to be separated ' 'by a vertical bar "|".\nPlease clear this edit line to use ' 'the default value.')) self.endSeparatorLineEdit.setToolTip( From 8c483a58b34051a0fa6afa5909a724bffdfaeba3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Wed, 25 Jan 2012 11:32:20 +0200 Subject: [PATCH 21/31] Added checkbox for to disable default service name, just as suggested. --- openlp/core/ui/advancedtab.py | 29 +++++++++++++--- openlp/core/ui/servicemanager.py | 57 +++++++++++++++++--------------- 2 files changed, 56 insertions(+), 30 deletions(-) diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 579aee1a1..940f7b373 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -103,7 +103,11 @@ class AdvancedTab(SettingsTab): self.defaultServiceGroupBox.setObjectName(u'defaultServiceGroupBox') self.defaultServiceLayout = QtGui.QFormLayout( self.defaultServiceGroupBox) + self.defaultServiceCheckBox = QtGui.QCheckBox( + self.defaultServiceGroupBox) + self.defaultServiceCheckBox.setObjectName(u'defaultServiceCheckBox') self.defaultServiceLayout.setObjectName(u'defaultServiceLayout') + self.defaultServiceLayout.addRow(self.defaultServiceCheckBox) self.defaultServiceTimeLabel = QtGui.QLabel(self.defaultServiceGroupBox) self.defaultServiceTimeLabel.setObjectName(u'defaultServiceTimeLabel') self.defaultServiceDay = QtGui.QComboBox( @@ -200,6 +204,8 @@ class AdvancedTab(SettingsTab): self.rightLayout.addWidget(self.x11GroupBox) self.rightLayout.addStretch() + QtCore.QObject.connect(self.defaultServiceCheckBox, + QtCore.SIGNAL(u'toggled(bool)'), self.defaultServiceCheckBoxToggled) QtCore.QObject.connect(self.defaultServiceDay, QtCore.SIGNAL(u'currentIndexChanged(int)'), self.onDefaultServiceDayChanged) @@ -243,6 +249,9 @@ class AdvancedTab(SettingsTab): 'Enable application exit confirmation')) self.defaultServiceGroupBox.setTitle( translate('OpenLP.AdvancedTab', 'Default Service Name')) + self.defaultServiceCheckBox.setText( + translate('OpenLP.AdvancedTab', + 'Save As dialog has prefilled service name')) self.defaultServiceTimeLabel.setText( translate('OpenLP.AdvancedTab', 'Date and Time:')) self.defaultServiceDay.setItemText(0, @@ -272,9 +281,8 @@ class AdvancedTab(SettingsTab): self.defaultServiceExampleLabel.setText(translate('OpenLP.AdvancedTab', 'Example:')) self.defaultServiceNote.setText( - translate('OpenLP.AdvancedTab', 'Note: Leave Name field blank to ' - 'have no prefilled name in Save As dialog. ' - 'Consult manual for special symbols usage.')) + translate('OpenLP.AdvancedTab', 'Note: ' + 'Consult OpenLP manual for special symbols usage.')) self.hideMouseGroupBox.setTitle(translate('OpenLP.AdvancedTab', 'Mouse Cursor')) self.hideMouseCheckBox.setText(translate('OpenLP.AdvancedTab', @@ -326,6 +334,9 @@ class AdvancedTab(SettingsTab): QtCore.QVariant(True)).toBool()) self.hideMouseCheckBox.setChecked( settings.value(u'hide mouse', QtCore.QVariant(False)).toBool()) + default_service_enabled = settings.value(u'default service enabled', + QtCore.QVariant(True)).toBool() + self.defaultServiceCheckBox.setChecked(default_service_enabled) self.service_day, ok = settings.value(u'default service day', QtCore.QVariant(self.default_service_day)).toInt() self.service_hour, ok = settings.value(u'default service hour', @@ -338,6 +349,7 @@ class AdvancedTab(SettingsTab): self.defaultServiceTime.setTime( QtCore.QTime(self.service_hour, self.service_minute)) self.defaultServiceName.setText(self.service_name) + self.defaultServiceCheckBoxToggled(default_service_enabled) self.x11BypassCheckBox.setChecked( settings.value(u'x11 bypass wm', QtCore.QVariant(True)).toBool()) self.default_color = settings.value(u'default color', @@ -359,6 +371,8 @@ class AdvancedTab(SettingsTab): self.defaultServiceName.setText(self.service_name) settings = QtCore.QSettings() settings.beginGroup(self.settingsSection) + settings.setValue(u'default service enabled', + self.defaultServiceCheckBox.isChecked()) if self.service_name == self.default_service_name: settings.remove(u'default service name') else: @@ -392,6 +406,13 @@ class AdvancedTab(SettingsTab): Receiver.send_message(u'config_screen_changed') self.display_changed = False + def defaultServiceCheckBoxToggled(self, default_service_enabled): + self.defaultServiceDay.setEnabled(default_service_enabled) + time_enabled = default_service_enabled and self.service_day is not 7 + self.defaultServiceTime.setEnabled(time_enabled) + self.defaultServiceName.setEnabled(default_service_enabled) + self.defaultServiceRevertButton.setEnabled(default_service_enabled) + def generate_service_name_example(self): preset_is_valid = True if self.service_day == 7: @@ -418,7 +439,7 @@ class AdvancedTab(SettingsTab): def onDefaultServiceDayChanged(self, index): self.service_day = index - self.defaultServiceTime.setReadOnly(self.service_day == 7) + self.defaultServiceTime.setEnabled(self.service_day is not 7) self.updateServiceNameExample() def onDefaultServiceTimeChanged(self, time): diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index af8c97235..4f1ac3164 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -613,33 +613,38 @@ class ServiceManager(QtGui.QWidget): Get a file name and then call :func:`ServiceManager.saveFile` to save the file. """ - service_day, ok = QtCore.QSettings().value( - u'advanced/default service day', 7).toInt() - if service_day == 7: - time = datetime.now() + default_service_enabled = QtCore.QSettings().value( + u'advanced/default service enabled', QtCore.QVariant(True)).toBool() + if default_service_enabled: + service_day, ok = QtCore.QSettings().value( + u'advanced/default service day', 7).toInt() + if service_day == 7: + time = datetime.now() + else: + service_hour, ok = QtCore.QSettings().value( + u'advanced/default service hour', 11).toInt() + service_minute, ok = QtCore.QSettings().value( + u'advanced/default service minute', 0).toInt() + now = datetime.now() + day_delta = service_day - now.weekday() + if day_delta < 0: + day_delta += 7 + time = now + timedelta(days=day_delta) + time = time.replace(hour=service_hour, minute=service_minute) + default_pattern = unicode(QtCore.QSettings().value( + u'advanced/default service name', + translate('OpenLP.AdvancedTab', + 'Service %Y-%m-%d %H-%M', + 'This is the default default service name template, which can ' + 'be found in Advanced tab under Tools, Settings. Please do not ' + 'include any of the following characters: /\\?*|<>\[\]":+\n' + 'You can use any of the directives as shown on page ' + 'http://docs.python.org/library/datetime.html' + '#strftime-strptime-behavior , but if possible, please keep ' + 'the resulting string sortable by name.')).toString()) + default_filename = time.strftime(default_pattern) else: - service_hour, ok = QtCore.QSettings().value( - u'advanced/default service hour', 11).toInt() - service_minute, ok = QtCore.QSettings().value( - u'advanced/default service minute', 0).toInt() - now = datetime.now() - day_delta = service_day - now.weekday() - if day_delta < 0: - day_delta += 7 - time = now + timedelta(days=day_delta) - time = time.replace(hour = service_hour, minute = service_minute) - default_pattern = unicode(QtCore.QSettings().value( - u'advanced/default service name', - translate('OpenLP.AdvancedTab', - 'Service %Y-%m-%d %H-%M', - 'This is the default default service name template, which can be ' - 'found in Advanced tab under Tools, Settings. Please do not ' - 'include any of the following characters: /\\?*|<>\[\]":+\n' - 'You can use any of the directives as shown on page ' - 'http://docs.python.org/library/datetime.html' - '#strftime-strptime-behavior , but if possible, please keep ' - 'the resulting string sortable by name.')).toString()) - default_filename = time.strftime(default_pattern) + default_filename = u'' directory = unicode(SettingsManager.get_last_dir( self.mainwindow.servicemanagerSettingsSection)) path = os.path.join(directory, default_filename) From 83155d45ea16e524cf792e0a785fbffab2954b54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Sat, 28 Jan 2012 00:10:12 +0200 Subject: [PATCH 22/31] Text changes, thanks to Raoul. --- openlp/core/ui/advancedtab.py | 7 +++---- openlp/core/ui/servicemanager.py | 5 +++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 940f7b373..492157b25 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -53,7 +53,7 @@ class AdvancedTab(SettingsTab): self.default_service_name = unicode(translate('OpenLP.AdvancedTab', 'Service %Y-%m-%d %H-%M', 'This is the default default service name template, which can be ' - 'found in Advanced tab under Tools, Settings. Please do not ' + 'found under Advanced in Settings, Configure OpenLP. Please do not ' 'include any of the following characters: /\\?*|<>\[\]":+\n' 'You can use any of the directives as shown on page ' 'http://docs.python.org/library/datetime.html' @@ -250,8 +250,7 @@ class AdvancedTab(SettingsTab): self.defaultServiceGroupBox.setTitle( translate('OpenLP.AdvancedTab', 'Default Service Name')) self.defaultServiceCheckBox.setText( - translate('OpenLP.AdvancedTab', - 'Save As dialog has prefilled service name')) + translate('OpenLP.AdvancedTab', 'Enable default service name')) self.defaultServiceTimeLabel.setText( translate('OpenLP.AdvancedTab', 'Date and Time:')) self.defaultServiceDay.setItemText(0, @@ -282,7 +281,7 @@ class AdvancedTab(SettingsTab): 'Example:')) self.defaultServiceNote.setText( translate('OpenLP.AdvancedTab', 'Note: ' - 'Consult OpenLP manual for special symbols usage.')) + 'Consult the OpenLP manual for usage.')) self.hideMouseGroupBox.setTitle(translate('OpenLP.AdvancedTab', 'Mouse Cursor')) self.hideMouseCheckBox.setText(translate('OpenLP.AdvancedTab', diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 4f1ac3164..583e8c1d4 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -636,8 +636,9 @@ class ServiceManager(QtGui.QWidget): translate('OpenLP.AdvancedTab', 'Service %Y-%m-%d %H-%M', 'This is the default default service name template, which can ' - 'be found in Advanced tab under Tools, Settings. Please do not ' - 'include any of the following characters: /\\?*|<>\[\]":+\n' + 'be found under Advanced in Settings, Configure OpenLP. ' + 'Please do not include any of the following characters: ' + '/\\?*|<>\[\]":+\n' 'You can use any of the directives as shown on page ' 'http://docs.python.org/library/datetime.html' '#strftime-strptime-behavior , but if possible, please keep ' From b03295584b70e7fc297753719863138025bdf6eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Sat, 28 Jan 2012 01:13:35 +0200 Subject: [PATCH 23/31] Addresses Meinert's concern about a hidden exception. --- openlp/core/ui/advancedtab.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 492157b25..35fdebd0a 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -335,7 +335,6 @@ class AdvancedTab(SettingsTab): settings.value(u'hide mouse', QtCore.QVariant(False)).toBool()) default_service_enabled = settings.value(u'default service enabled', QtCore.QVariant(True)).toBool() - self.defaultServiceCheckBox.setChecked(default_service_enabled) self.service_day, ok = settings.value(u'default service day', QtCore.QVariant(self.default_service_day)).toInt() self.service_hour, ok = settings.value(u'default service hour', @@ -348,6 +347,7 @@ class AdvancedTab(SettingsTab): self.defaultServiceTime.setTime( QtCore.QTime(self.service_hour, self.service_minute)) self.defaultServiceName.setText(self.service_name) + self.defaultServiceCheckBox.setChecked(default_service_enabled) self.defaultServiceCheckBoxToggled(default_service_enabled) self.x11BypassCheckBox.setChecked( settings.value(u'x11 bypass wm', QtCore.QVariant(True)).toBool()) From 01d42e0f1148e5337a28750df7e1a597999c4304 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Sun, 29 Jan 2012 18:47:15 +0200 Subject: [PATCH 24/31] Use note text as tooltip. --- openlp/core/ui/advancedtab.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 35fdebd0a..01ea3eeff 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -27,12 +27,13 @@ """ The :mod:`advancedtab` provides an advanced settings facility. """ +from datetime import datetime, timedelta + from PyQt4 import QtCore, QtGui from openlp.core.lib import SettingsTab, translate, build_icon, Receiver from openlp.core.lib.ui import UiStrings from openlp.core.utils import get_images_filter -from datetime import datetime, timedelta class AdvancedTab(SettingsTab): """ @@ -150,10 +151,6 @@ class AdvancedTab(SettingsTab): self.defaultServiceExample.setObjectName(u'defaultServiceExample') self.defaultServiceLayout.addRow(self.defaultServiceExampleLabel, self.defaultServiceExample) - self.defaultServiceNote = QtGui.QLabel(self.defaultServiceGroupBox) - self.defaultServiceNote.setWordWrap(True) - self.defaultServiceNote.setObjectName(u'defaultServiceNote') - self.defaultServiceLayout.addRow(self.defaultServiceNote) self.leftLayout.addWidget(self.defaultServiceGroupBox) self.leftLayout.addStretch() self.defaultImageGroupBox = QtGui.QGroupBox(self.rightColumn) @@ -273,15 +270,14 @@ class AdvancedTab(SettingsTab): 'Time when usual service starts.')) self.defaultServiceLabel.setText( translate('OpenLP.AdvancedTab', 'Name:')) + self.defaultServiceName.setToolTip(translate('OpenLP.AdvancedTab', + 'Consult the OpenLP manual for usage.')) self.defaultServiceRevertButton.setToolTip(unicode( translate('OpenLP.AdvancedTab', 'Revert to the default service name "%s".')) % self.default_service_name) self.defaultServiceExampleLabel.setText(translate('OpenLP.AdvancedTab', 'Example:')) - self.defaultServiceNote.setText( - translate('OpenLP.AdvancedTab', 'Note: ' - 'Consult the OpenLP manual for usage.')) self.hideMouseGroupBox.setTitle(translate('OpenLP.AdvancedTab', 'Mouse Cursor')) self.hideMouseCheckBox.setText(translate('OpenLP.AdvancedTab', From 90332e60d3517d272bc2a51e4d2aff67f221967c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Sun, 29 Jan 2012 23:14:27 +0200 Subject: [PATCH 25/31] Prevent several updates to service name example when launching OpenLP. --- openlp/core/ui/advancedtab.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 01ea3eeff..a3b418e8d 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -201,6 +201,7 @@ class AdvancedTab(SettingsTab): self.rightLayout.addWidget(self.x11GroupBox) self.rightLayout.addStretch() + self.updateDefaultServiceExample = False QtCore.QObject.connect(self.defaultServiceCheckBox, QtCore.SIGNAL(u'toggled(bool)'), self.defaultServiceCheckBoxToggled) QtCore.QObject.connect(self.defaultServiceDay, @@ -344,6 +345,7 @@ class AdvancedTab(SettingsTab): QtCore.QTime(self.service_hour, self.service_minute)) self.defaultServiceName.setText(self.service_name) self.defaultServiceCheckBox.setChecked(default_service_enabled) + self.updateDefaultServiceExample = True self.defaultServiceCheckBoxToggled(default_service_enabled) self.x11BypassCheckBox.setChecked( settings.value(u'x11 bypass wm', QtCore.QVariant(True)).toBool()) @@ -402,6 +404,8 @@ class AdvancedTab(SettingsTab): self.display_changed = False def defaultServiceCheckBoxToggled(self, default_service_enabled): + if not self.updateDefaultServiceExample: + return self.defaultServiceDay.setEnabled(default_service_enabled) time_enabled = default_service_enabled and self.service_day is not 7 self.defaultServiceTime.setEnabled(time_enabled) @@ -433,16 +437,22 @@ class AdvancedTab(SettingsTab): self.defaultServiceExample.setText(name_example) def onDefaultServiceDayChanged(self, index): + if not self.updateDefaultServiceExample: + return self.service_day = index self.defaultServiceTime.setEnabled(self.service_day is not 7) self.updateServiceNameExample() def onDefaultServiceTimeChanged(self, time): + if not self.updateDefaultServiceExample: + return self.service_hour = time.hour() self.service_minute = time.minute() self.updateServiceNameExample() def onDefaultServiceNameChanged(self, name): + if not self.updateDefaultServiceExample: + return self.service_name = name self.updateServiceNameExample() From 6da181834c8e87d0836659822735a4f264e2e601 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Mon, 30 Jan 2012 01:16:12 +0200 Subject: [PATCH 26/31] Meinert's suggestions taken into account about syntax and removed unnecessary variables. --- openlp/core/ui/advancedtab.py | 83 ++++++++++++++--------------------- 1 file changed, 34 insertions(+), 49 deletions(-) diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index a3b418e8d..7db16680f 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -209,10 +209,10 @@ class AdvancedTab(SettingsTab): self.onDefaultServiceDayChanged) QtCore.QObject.connect(self.defaultServiceTime, QtCore.SIGNAL(u'timeChanged(QTime)'), - self.onDefaultServiceTimeChanged) + self.updateServiceNameExample) QtCore.QObject.connect(self.defaultServiceName, QtCore.SIGNAL(u'textChanged(QString)'), - self.onDefaultServiceNameChanged) + self.updateServiceNameExample) QtCore.QObject.connect(self.defaultServiceRevertButton, QtCore.SIGNAL(u'pressed()'), self.onDefaultServiceRevertButtonPressed) @@ -330,22 +330,20 @@ class AdvancedTab(SettingsTab): QtCore.QVariant(True)).toBool()) self.hideMouseCheckBox.setChecked( settings.value(u'hide mouse', QtCore.QVariant(False)).toBool()) + self.defaultServiceDay.setCurrentIndex( + settings.value(u'default service day', + QtCore.QVariant(self.default_service_day)).toInt()[0]) + self.defaultServiceTime.setTime(QtCore.QTime( + settings.value(u'default service hour', + self.default_service_hour).toInt()[0], + settings.value(u'default service minute', + self.default_service_minute).toInt()[0])) + self.updateDefaultServiceExample = True + self.defaultServiceName.setText(settings.value(u'default service name', + self.default_service_name).toString()) default_service_enabled = settings.value(u'default service enabled', QtCore.QVariant(True)).toBool() - self.service_day, ok = settings.value(u'default service day', - QtCore.QVariant(self.default_service_day)).toInt() - self.service_hour, ok = settings.value(u'default service hour', - self.default_service_hour).toInt() - self.service_minute, ok = settings.value(u'default service minute', - self.default_service_minute).toInt() - self.service_name = unicode(settings.value(u'default service name', - self.default_service_name).toString()) - self.defaultServiceDay.setCurrentIndex(self.service_day) - self.defaultServiceTime.setTime( - QtCore.QTime(self.service_hour, self.service_minute)) - self.defaultServiceName.setText(self.service_name) self.defaultServiceCheckBox.setChecked(default_service_enabled) - self.updateDefaultServiceExample = True self.defaultServiceCheckBoxToggled(default_service_enabled) self.x11BypassCheckBox.setChecked( settings.value(u'x11 bypass wm', QtCore.QVariant(True)).toBool()) @@ -362,18 +360,19 @@ class AdvancedTab(SettingsTab): """ Save settings to disk. """ - preset_is_valid, name_example = self.generate_service_name_example() + preset_is_valid = self.generate_service_name_example()[0] + service_name = unicode(self.defaultServiceName.text()) if not preset_is_valid: - self.service_name = self.default_service_name - self.defaultServiceName.setText(self.service_name) + service_name = self.default_service_name + self.defaultServiceName.setText(service_name) settings = QtCore.QSettings() settings.beginGroup(self.settingsSection) settings.setValue(u'default service enabled', self.defaultServiceCheckBox.isChecked()) - if self.service_name == self.default_service_name: + if service_name == self.default_service_name: settings.remove(u'default service name') else: - settings.setValue(u'default service name', self.service_name) + settings.setValue(u'default service name', service_name) settings.setValue(u'default service day', self.defaultServiceDay.currentIndex()) settings.setValue(u'default service hour', @@ -404,57 +403,43 @@ class AdvancedTab(SettingsTab): self.display_changed = False def defaultServiceCheckBoxToggled(self, default_service_enabled): - if not self.updateDefaultServiceExample: - return self.defaultServiceDay.setEnabled(default_service_enabled) - time_enabled = default_service_enabled and self.service_day is not 7 + time_enabled = default_service_enabled and \ + self.defaultServiceDay.currentIndex() is not 7 self.defaultServiceTime.setEnabled(time_enabled) self.defaultServiceName.setEnabled(default_service_enabled) self.defaultServiceRevertButton.setEnabled(default_service_enabled) def generate_service_name_example(self): preset_is_valid = True - if self.service_day == 7: + if self.defaultServiceDay.currentIndex() == 7: time = datetime.now() else: now = datetime.now() - day_delta = self.service_day - now.weekday() + day_delta = self.defaultServiceDay.currentIndex() - now.weekday() if day_delta < 0: day_delta += 7 time = now + timedelta(days=day_delta) - time = time.replace(hour = self.service_hour, - minute = self.service_minute) + time = time.replace(hour = self.defaultServiceTime.time().hour(), + minute = self.defaultServiceTime.time().minute()) try: - service_name_example = time.strftime(unicode(self.service_name)) + service_name_example = time.strftime(unicode( + self.defaultServiceName.text())) except ValueError: preset_is_valid = False service_name_example = translate('OpenLP.AdvancedTab', 'Syntax error.') return preset_is_valid, service_name_example - def updateServiceNameExample(self): - preset_is_valid, name_example = self.generate_service_name_example() + def updateServiceNameExample(self, returned_value): + if not self.updateDefaultServiceExample: + return + name_example = self.generate_service_name_example()[1] self.defaultServiceExample.setText(name_example) - def onDefaultServiceDayChanged(self, index): - if not self.updateDefaultServiceExample: - return - self.service_day = index - self.defaultServiceTime.setEnabled(self.service_day is not 7) - self.updateServiceNameExample() - - def onDefaultServiceTimeChanged(self, time): - if not self.updateDefaultServiceExample: - return - self.service_hour = time.hour() - self.service_minute = time.minute() - self.updateServiceNameExample() - - def onDefaultServiceNameChanged(self, name): - if not self.updateDefaultServiceExample: - return - self.service_name = name - self.updateServiceNameExample() + def onDefaultServiceDayChanged(self, service_day): + self.defaultServiceTime.setEnabled(service_day is not 7) + self.updateServiceNameExample(None) def onDefaultServiceRevertButtonPressed(self): self.defaultServiceName.setText(self.default_service_name) From 6f219e175fc4f50c650099d55448e421fa8b3d0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Thu, 2 Feb 2012 14:42:52 +0200 Subject: [PATCH 27/31] Name changes to camelCase where appropriate. --- openlp/core/ui/advancedtab.py | 236 +++++++++++++++---------------- openlp/core/ui/servicemanager.py | 12 +- 2 files changed, 123 insertions(+), 125 deletions(-) diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 7db16680f..04a3ac981 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -47,11 +47,11 @@ class AdvancedTab(SettingsTab): self.display_changed = False advancedTranslated = translate('OpenLP.AdvancedTab', 'Advanced') # 7 stands for now, 0 to 6 is Monday to Sunday. - self.default_service_day = 7 + self.defaultServiceDay = 7 # 11 o'clock is the most popular time for morning service. - self.default_service_hour = 11 - self.default_service_minute = 0 - self.default_service_name = unicode(translate('OpenLP.AdvancedTab', + self.defaultServiceHour = 11 + self.defaultServiceMinute = 0 + self.defaultServiceName = unicode(translate('OpenLP.AdvancedTab', 'Service %Y-%m-%d %H-%M', 'This is the default default service name template, which can be ' 'found under Advanced in Settings, Configure OpenLP. Please do not ' @@ -100,58 +100,58 @@ class AdvancedTab(SettingsTab): u'enableAutoCloseCheckBox') self.uiLayout.addRow(self.enableAutoCloseCheckBox) self.leftLayout.addWidget(self.uiGroupBox) - self.defaultServiceGroupBox = QtGui.QGroupBox(self.leftColumn) - self.defaultServiceGroupBox.setObjectName(u'defaultServiceGroupBox') - self.defaultServiceLayout = QtGui.QFormLayout( - self.defaultServiceGroupBox) - self.defaultServiceCheckBox = QtGui.QCheckBox( - self.defaultServiceGroupBox) - self.defaultServiceCheckBox.setObjectName(u'defaultServiceCheckBox') - self.defaultServiceLayout.setObjectName(u'defaultServiceLayout') - self.defaultServiceLayout.addRow(self.defaultServiceCheckBox) - self.defaultServiceTimeLabel = QtGui.QLabel(self.defaultServiceGroupBox) - self.defaultServiceTimeLabel.setObjectName(u'defaultServiceTimeLabel') - self.defaultServiceDay = QtGui.QComboBox( - self.defaultServiceGroupBox) - self.defaultServiceDay.addItems( + self.serviceNameGroupBox = QtGui.QGroupBox(self.leftColumn) + self.serviceNameGroupBox.setObjectName(u'serviceNameGroupBox') + self.serviceNameLayout = QtGui.QFormLayout( + self.serviceNameGroupBox) + self.serviceNameCheckBox = QtGui.QCheckBox( + self.serviceNameGroupBox) + self.serviceNameCheckBox.setObjectName(u'serviceNameCheckBox') + self.serviceNameLayout.setObjectName(u'serviceNameLayout') + self.serviceNameLayout.addRow(self.serviceNameCheckBox) + self.serviceNameTimeLabel = QtGui.QLabel(self.serviceNameGroupBox) + self.serviceNameTimeLabel.setObjectName(u'serviceNameTimeLabel') + self.serviceNameDay = QtGui.QComboBox( + self.serviceNameGroupBox) + self.serviceNameDay.addItems( [u'', u'', u'', u'', u'', u'', u'', u'']) - self.defaultServiceDay.setObjectName( - u'defaultServiceDay') - self.defaultServiceTime = QtGui.QTimeEdit(self.defaultServiceGroupBox) - self.defaultServiceTime.setObjectName(u'defaultServiceTime') - self.defaultServiceTimeHBox = QtGui.QHBoxLayout() - self.defaultServiceTimeHBox.setObjectName(u'defaultServiceTimeHBox') - self.defaultServiceTimeHBox.addWidget(self.defaultServiceDay) - self.defaultServiceTimeHBox.addWidget(self.defaultServiceTime) - self.defaultServiceLayout.addRow(self.defaultServiceTimeLabel, - self.defaultServiceTimeHBox) - self.defaultServiceLabel = QtGui.QLabel(self.defaultServiceGroupBox) - self.defaultServiceLabel.setObjectName(u'defaultServiceLabel') - self.defaultServiceName = QtGui.QLineEdit(self.defaultServiceGroupBox) - self.defaultServiceName.setObjectName(u'defaultServiceName') - self.defaultServiceName.setValidator(QtGui.QRegExpValidator( + self.serviceNameDay.setObjectName( + u'serviceNameDay') + self.serviceNameTime = QtGui.QTimeEdit(self.serviceNameGroupBox) + self.serviceNameTime.setObjectName(u'serviceNameTime') + self.serviceNameTimeHBox = QtGui.QHBoxLayout() + self.serviceNameTimeHBox.setObjectName(u'serviceNameTimeHBox') + self.serviceNameTimeHBox.addWidget(self.serviceNameDay) + self.serviceNameTimeHBox.addWidget(self.serviceNameTime) + self.serviceNameLayout.addRow(self.serviceNameTimeLabel, + self.serviceNameTimeHBox) + self.serviceNameLabel = QtGui.QLabel(self.serviceNameGroupBox) + self.serviceNameLabel.setObjectName(u'serviceNameLabel') + self.serviceNameEdit = QtGui.QLineEdit(self.serviceNameGroupBox) + self.serviceNameEdit.setObjectName(u'serviceNameEdit') + self.serviceNameEdit.setValidator(QtGui.QRegExpValidator( QtCore.QRegExp(r'[^/\\?*|<>\[\]":+]+'), self)) - self.defaultServiceRevertButton = QtGui.QToolButton( - self.defaultServiceGroupBox) - self.defaultServiceRevertButton.setObjectName( - u'defaultServiceRevertButton') - self.defaultServiceRevertButton.setIcon( + self.serviceNameRevertButton = QtGui.QToolButton( + self.serviceNameGroupBox) + self.serviceNameRevertButton.setObjectName( + u'serviceNameRevertButton') + self.serviceNameRevertButton.setIcon( build_icon(u':/general/general_revert.png')) - self.defaultServiceHBox = QtGui.QHBoxLayout() - self.defaultServiceHBox.setObjectName(u'defaultServiceHBox') - self.defaultServiceHBox.addWidget(self.defaultServiceName) - self.defaultServiceHBox.addWidget(self.defaultServiceRevertButton) - self.defaultServiceLayout.addRow(self.defaultServiceLabel, - self.defaultServiceHBox) - self.defaultServiceExampleLabel = QtGui.QLabel( - self.defaultServiceGroupBox) - self.defaultServiceExampleLabel.setObjectName( - u'defaultServiceExampleLabel') - self.defaultServiceExample = QtGui.QLabel(self.defaultServiceGroupBox) - self.defaultServiceExample.setObjectName(u'defaultServiceExample') - self.defaultServiceLayout.addRow(self.defaultServiceExampleLabel, - self.defaultServiceExample) - self.leftLayout.addWidget(self.defaultServiceGroupBox) + self.serviceNameHBox = QtGui.QHBoxLayout() + self.serviceNameHBox.setObjectName(u'serviceNameHBox') + self.serviceNameHBox.addWidget(self.serviceNameEdit) + self.serviceNameHBox.addWidget(self.serviceNameRevertButton) + self.serviceNameLayout.addRow(self.serviceNameLabel, + self.serviceNameHBox) + self.serviceNameExampleLabel = QtGui.QLabel( + self.serviceNameGroupBox) + self.serviceNameExampleLabel.setObjectName( + u'serviceNameExampleLabel') + self.serviceNameExample = QtGui.QLabel(self.serviceNameGroupBox) + self.serviceNameExample.setObjectName(u'serviceNameExample') + self.serviceNameLayout.addRow(self.serviceNameExampleLabel, + self.serviceNameExample) + self.leftLayout.addWidget(self.serviceNameGroupBox) self.leftLayout.addStretch() self.defaultImageGroupBox = QtGui.QGroupBox(self.rightColumn) self.defaultImageGroupBox.setObjectName(u'defaultImageGroupBox') @@ -201,21 +201,21 @@ class AdvancedTab(SettingsTab): self.rightLayout.addWidget(self.x11GroupBox) self.rightLayout.addStretch() - self.updateDefaultServiceExample = False - QtCore.QObject.connect(self.defaultServiceCheckBox, - QtCore.SIGNAL(u'toggled(bool)'), self.defaultServiceCheckBoxToggled) - QtCore.QObject.connect(self.defaultServiceDay, + self.updateserviceNameExample = False + QtCore.QObject.connect(self.serviceNameCheckBox, + QtCore.SIGNAL(u'toggled(bool)'), self.serviceNameCheckBoxToggled) + QtCore.QObject.connect(self.serviceNameDay, QtCore.SIGNAL(u'currentIndexChanged(int)'), - self.onDefaultServiceDayChanged) - QtCore.QObject.connect(self.defaultServiceTime, + self.onserviceNameDayChanged) + QtCore.QObject.connect(self.serviceNameTime, QtCore.SIGNAL(u'timeChanged(QTime)'), self.updateServiceNameExample) - QtCore.QObject.connect(self.defaultServiceName, + QtCore.QObject.connect(self.serviceNameEdit, QtCore.SIGNAL(u'textChanged(QString)'), self.updateServiceNameExample) - QtCore.QObject.connect(self.defaultServiceRevertButton, + QtCore.QObject.connect(self.serviceNameRevertButton, QtCore.SIGNAL(u'pressed()'), - self.onDefaultServiceRevertButtonPressed) + self.onserviceNameRevertButtonPressed) QtCore.QObject.connect(self.defaultColorButton, QtCore.SIGNAL(u'pressed()'), self.onDefaultColorButtonPressed) QtCore.QObject.connect(self.defaultBrowseButton, @@ -245,39 +245,39 @@ class AdvancedTab(SettingsTab): 'Expand new service items on creation')) self.enableAutoCloseCheckBox.setText(translate('OpenLP.AdvancedTab', 'Enable application exit confirmation')) - self.defaultServiceGroupBox.setTitle( + self.serviceNameGroupBox.setTitle( translate('OpenLP.AdvancedTab', 'Default Service Name')) - self.defaultServiceCheckBox.setText( + self.serviceNameCheckBox.setText( translate('OpenLP.AdvancedTab', 'Enable default service name')) - self.defaultServiceTimeLabel.setText( + self.serviceNameTimeLabel.setText( translate('OpenLP.AdvancedTab', 'Date and Time:')) - self.defaultServiceDay.setItemText(0, + self.serviceNameDay.setItemText(0, translate('OpenLP.AdvancedTab', 'Monday')) - self.defaultServiceDay.setItemText(1, + self.serviceNameDay.setItemText(1, translate('OpenLP.AdvancedTab', 'Tuesday')) - self.defaultServiceDay.setItemText(2, + self.serviceNameDay.setItemText(2, translate('OpenLP.AdvancedTab', 'Wednesday')) - self.defaultServiceDay.setItemText(3, + self.serviceNameDay.setItemText(3, translate('OpenLP.AdvancedTab', 'Thurdsday')) - self.defaultServiceDay.setItemText(4, + self.serviceNameDay.setItemText(4, translate('OpenLP.AdvancedTab', 'Friday')) - self.defaultServiceDay.setItemText(5, + self.serviceNameDay.setItemText(5, translate('OpenLP.AdvancedTab', 'Saturday')) - self.defaultServiceDay.setItemText(6, + self.serviceNameDay.setItemText(6, translate('OpenLP.AdvancedTab', 'Sunday')) - self.defaultServiceDay.setItemText(7, + self.serviceNameDay.setItemText(7, translate('OpenLP.AdvancedTab', 'Now')) - self.defaultServiceTime.setToolTip(translate('OpenLP.AdvancedTab', + self.serviceNameTime.setToolTip(translate('OpenLP.AdvancedTab', 'Time when usual service starts.')) - self.defaultServiceLabel.setText( + self.serviceNameLabel.setText( translate('OpenLP.AdvancedTab', 'Name:')) - self.defaultServiceName.setToolTip(translate('OpenLP.AdvancedTab', + self.serviceNameEdit.setToolTip(translate('OpenLP.AdvancedTab', 'Consult the OpenLP manual for usage.')) - self.defaultServiceRevertButton.setToolTip(unicode( + self.serviceNameRevertButton.setToolTip(unicode( translate('OpenLP.AdvancedTab', 'Revert to the default service name "%s".')) % - self.default_service_name) - self.defaultServiceExampleLabel.setText(translate('OpenLP.AdvancedTab', + self.defaultServiceName) + self.serviceNameExampleLabel.setText(translate('OpenLP.AdvancedTab', 'Example:')) self.hideMouseGroupBox.setTitle(translate('OpenLP.AdvancedTab', 'Mouse Cursor')) @@ -330,21 +330,21 @@ class AdvancedTab(SettingsTab): QtCore.QVariant(True)).toBool()) self.hideMouseCheckBox.setChecked( settings.value(u'hide mouse', QtCore.QVariant(False)).toBool()) - self.defaultServiceDay.setCurrentIndex( + self.serviceNameDay.setCurrentIndex( settings.value(u'default service day', - QtCore.QVariant(self.default_service_day)).toInt()[0]) - self.defaultServiceTime.setTime(QtCore.QTime( + QtCore.QVariant(self.defaultServiceDay)).toInt()[0]) + self.serviceNameTime.setTime(QtCore.QTime( settings.value(u'default service hour', - self.default_service_hour).toInt()[0], + self.defaultServiceHour).toInt()[0], settings.value(u'default service minute', - self.default_service_minute).toInt()[0])) - self.updateDefaultServiceExample = True - self.defaultServiceName.setText(settings.value(u'default service name', - self.default_service_name).toString()) + self.defaultServiceMinute).toInt()[0])) + self.updateserviceNameExample = True + self.serviceNameEdit.setText(settings.value(u'default service name', + self.defaultServiceName).toString()) default_service_enabled = settings.value(u'default service enabled', QtCore.QVariant(True)).toBool() - self.defaultServiceCheckBox.setChecked(default_service_enabled) - self.defaultServiceCheckBoxToggled(default_service_enabled) + self.serviceNameCheckBox.setChecked(default_service_enabled) + self.serviceNameCheckBoxToggled(default_service_enabled) self.x11BypassCheckBox.setChecked( settings.value(u'x11 bypass wm', QtCore.QVariant(True)).toBool()) self.default_color = settings.value(u'default color', @@ -360,25 +360,23 @@ class AdvancedTab(SettingsTab): """ Save settings to disk. """ - preset_is_valid = self.generate_service_name_example()[0] - service_name = unicode(self.defaultServiceName.text()) - if not preset_is_valid: - service_name = self.default_service_name - self.defaultServiceName.setText(service_name) settings = QtCore.QSettings() settings.beginGroup(self.settingsSection) settings.setValue(u'default service enabled', - self.defaultServiceCheckBox.isChecked()) - if service_name == self.default_service_name: + self.serviceNameCheckBox.isChecked()) + service_name = unicode(self.serviceNameEdit.text()) + preset_is_valid = self.generateServiceNameExample()[0] + if service_name == self.defaultServiceName or not preset_is_valid: settings.remove(u'default service name') + self.serviceNameEdit.setText(service_name) else: settings.setValue(u'default service name', service_name) settings.setValue(u'default service day', - self.defaultServiceDay.currentIndex()) + self.serviceNameDay.currentIndex()) settings.setValue(u'default service hour', - self.defaultServiceTime.time().hour()) + self.serviceNameTime.time().hour()) settings.setValue(u'default service minute', - self.defaultServiceTime.time().minute()) + self.serviceNameTime.time().minute()) settings.setValue(u'recent file count', QtCore.QVariant(self.recentSpinBox.value())) settings.setValue(u'save current plugin', @@ -402,29 +400,29 @@ class AdvancedTab(SettingsTab): Receiver.send_message(u'config_screen_changed') self.display_changed = False - def defaultServiceCheckBoxToggled(self, default_service_enabled): - self.defaultServiceDay.setEnabled(default_service_enabled) + def serviceNameCheckBoxToggled(self, default_service_enabled): + self.serviceNameDay.setEnabled(default_service_enabled) time_enabled = default_service_enabled and \ - self.defaultServiceDay.currentIndex() is not 7 - self.defaultServiceTime.setEnabled(time_enabled) - self.defaultServiceName.setEnabled(default_service_enabled) - self.defaultServiceRevertButton.setEnabled(default_service_enabled) + self.serviceNameDay.currentIndex() is not 7 + self.serviceNameTime.setEnabled(time_enabled) + self.serviceNameEdit.setEnabled(default_service_enabled) + self.serviceNameRevertButton.setEnabled(default_service_enabled) - def generate_service_name_example(self): + def generateServiceNameExample(self): preset_is_valid = True - if self.defaultServiceDay.currentIndex() == 7: + if self.serviceNameDay.currentIndex() == 7: time = datetime.now() else: now = datetime.now() - day_delta = self.defaultServiceDay.currentIndex() - now.weekday() + day_delta = self.serviceNameDay.currentIndex() - now.weekday() if day_delta < 0: day_delta += 7 time = now + timedelta(days=day_delta) - time = time.replace(hour = self.defaultServiceTime.time().hour(), - minute = self.defaultServiceTime.time().minute()) + time = time.replace(hour = self.serviceNameTime.time().hour(), + minute = self.serviceNameTime.time().minute()) try: service_name_example = time.strftime(unicode( - self.defaultServiceName.text())) + self.serviceNameEdit.text())) except ValueError: preset_is_valid = False service_name_example = translate('OpenLP.AdvancedTab', @@ -432,18 +430,18 @@ class AdvancedTab(SettingsTab): return preset_is_valid, service_name_example def updateServiceNameExample(self, returned_value): - if not self.updateDefaultServiceExample: + if not self.updateserviceNameExample: return - name_example = self.generate_service_name_example()[1] - self.defaultServiceExample.setText(name_example) + name_example = self.generateServiceNameExample()[1] + self.serviceNameExample.setText(name_example) - def onDefaultServiceDayChanged(self, service_day): - self.defaultServiceTime.setEnabled(service_day is not 7) + def onserviceNameDayChanged(self, service_day): + self.serviceNameTime.setEnabled(service_day is not 7) self.updateServiceNameExample(None) - def onDefaultServiceRevertButtonPressed(self): - self.defaultServiceName.setText(self.default_service_name) - self.defaultServiceName.setFocus() + def onserviceNameRevertButtonPressed(self): + self.serviceNameEdit.setText(self.defaultServiceName) + self.serviceNameEdit.setFocus() def onDefaultColorButtonPressed(self): new_color = QtGui.QColorDialog.getColor( diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 583e8c1d4..d2b48fb9a 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -616,15 +616,15 @@ class ServiceManager(QtGui.QWidget): default_service_enabled = QtCore.QSettings().value( u'advanced/default service enabled', QtCore.QVariant(True)).toBool() if default_service_enabled: - service_day, ok = QtCore.QSettings().value( - u'advanced/default service day', 7).toInt() + service_day = QtCore.QSettings().value( + u'advanced/default service day', 7).toInt()[0] if service_day == 7: time = datetime.now() else: - service_hour, ok = QtCore.QSettings().value( - u'advanced/default service hour', 11).toInt() - service_minute, ok = QtCore.QSettings().value( - u'advanced/default service minute', 0).toInt() + service_hour = QtCore.QSettings().value( + u'advanced/default service hour', 11).toInt()[0] + service_minute = QtCore.QSettings().value( + u'advanced/default service minute', 0).toInt()[0] now = datetime.now() day_delta = service_day - now.weekday() if day_delta < 0: From 51ee117a48c5637c87e7a87017b9c4bf687c43be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Sat, 4 Feb 2012 09:46:10 +0200 Subject: [PATCH 28/31] More function name changes. --- openlp/core/ui/advancedtab.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 04a3ac981..3650cf905 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -201,12 +201,12 @@ class AdvancedTab(SettingsTab): self.rightLayout.addWidget(self.x11GroupBox) self.rightLayout.addStretch() - self.updateserviceNameExample = False + self.shouldUpdateServiceNameExample = False QtCore.QObject.connect(self.serviceNameCheckBox, QtCore.SIGNAL(u'toggled(bool)'), self.serviceNameCheckBoxToggled) QtCore.QObject.connect(self.serviceNameDay, QtCore.SIGNAL(u'currentIndexChanged(int)'), - self.onserviceNameDayChanged) + self.onServiceNameDayChanged) QtCore.QObject.connect(self.serviceNameTime, QtCore.SIGNAL(u'timeChanged(QTime)'), self.updateServiceNameExample) @@ -215,7 +215,7 @@ class AdvancedTab(SettingsTab): self.updateServiceNameExample) QtCore.QObject.connect(self.serviceNameRevertButton, QtCore.SIGNAL(u'pressed()'), - self.onserviceNameRevertButtonPressed) + self.onServiceNameRevertButtonPressed) QtCore.QObject.connect(self.defaultColorButton, QtCore.SIGNAL(u'pressed()'), self.onDefaultColorButtonPressed) QtCore.QObject.connect(self.defaultBrowseButton, @@ -338,7 +338,7 @@ class AdvancedTab(SettingsTab): self.defaultServiceHour).toInt()[0], settings.value(u'default service minute', self.defaultServiceMinute).toInt()[0])) - self.updateserviceNameExample = True + self.shouldUpdateServiceNameExample = True self.serviceNameEdit.setText(settings.value(u'default service name', self.defaultServiceName).toString()) default_service_enabled = settings.value(u'default service enabled', @@ -430,16 +430,16 @@ class AdvancedTab(SettingsTab): return preset_is_valid, service_name_example def updateServiceNameExample(self, returned_value): - if not self.updateserviceNameExample: + if not self.shouldUpdateServiceNameExample: return name_example = self.generateServiceNameExample()[1] self.serviceNameExample.setText(name_example) - def onserviceNameDayChanged(self, service_day): + def onServiceNameDayChanged(self, service_day): self.serviceNameTime.setEnabled(service_day is not 7) self.updateServiceNameExample(None) - def onserviceNameRevertButtonPressed(self): + def onServiceNameRevertButtonPressed(self): self.serviceNameEdit.setText(self.defaultServiceName) self.serviceNameEdit.setFocus() From ec4b78ccb2b8699426755ba3f650311cb34c41fa Mon Sep 17 00:00:00 2001 From: M2j Date: Sun, 5 Feb 2012 20:20:01 +0100 Subject: [PATCH 29/31] replace placeholderText as it is not included in supported platform. --- openlp/plugins/bibles/lib/__init__.py | 14 +- openlp/plugins/bibles/lib/biblestab.py | 231 +++++++++++++++++-------- 2 files changed, 168 insertions(+), 77 deletions(-) diff --git a/openlp/plugins/bibles/lib/__init__.py b/openlp/plugins/bibles/lib/__init__.py index 07e50fa3f..6189f108f 100644 --- a/openlp/plugins/bibles/lib/__init__.py +++ b/openlp/plugins/bibles/lib/__init__.py @@ -76,14 +76,10 @@ def update_reference_separators(): settings = QtCore.QSettings() settings.beginGroup(u'bibles') custom_separators = [ - unicode(settings.value(u'verse separator', - QtCore.QVariant(u'')).toString()), - unicode(settings.value(u'range separator', - QtCore.QVariant(u'')).toString()), - unicode(settings.value(u'list separator', - QtCore.QVariant(u'')).toString()), - unicode(settings.value(u'end separator', - QtCore.QVariant(u'')).toString())] + unicode(settings.value(u'verse separator').toString()), + unicode(settings.value(u'range separator').toString()), + unicode(settings.value(u'list separator').toString()), + unicode(settings.value(u'end separator').toString())] settings.endGroup() for index, role in enumerate([u'v', u'r', u'l', u'e']): if custom_separators[index].strip(u'|') == u'': @@ -114,7 +110,7 @@ def update_reference_separators(): re.UNICODE) REFERENCE_MATCHES[u'range_separator'] = re.compile( REFERENCE_SEPARATORS[u'sep_l'], re.UNICODE) - # full reference match: ((,|(?=$)))+ + # full reference match: ((,(?!$)|(?=$)))+ REFERENCE_MATCHES[u'full'] = re.compile( u'^\s*(?!\s)(?P[\d]*[^\d]+)(?(?:%(range_regex)s(?:%(sep_l)s(?!\s*$)|(?=\s*$)))+)\s*$' \ diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index 026810fb2..e8e0d9e2c 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -103,6 +103,7 @@ class BiblesTab(SettingsTab): 0) self.verseSeparatorLineEdit = QtGui.QLineEdit( self.scriptureReferenceGroupBox) +# self.verseSeparatorLineEdit.setPalette self.verseSeparatorLineEdit.setObjectName(u'verseSeparatorLineEdit') self.scriptureReferenceLayout.addWidget(self.verseSeparatorLineEdit, 0, 1) @@ -134,6 +135,8 @@ class BiblesTab(SettingsTab): self.endSeparatorLineEdit = QtGui.QLineEdit( self.scriptureReferenceGroupBox) self.endSeparatorLineEdit.setObjectName(u'endSeparatorLineEdit') + self.endSeparatorLineEdit.setValidator(QtGui.QRegExpValidator( + QtCore.QRegExp(r'[^0-9]*'), self.endSeparatorLineEdit)) self.scriptureReferenceLayout.addWidget(self.endSeparatorLineEdit, 3, 1) self.leftLayout.addWidget(self.scriptureReferenceGroupBox) @@ -159,7 +162,7 @@ class BiblesTab(SettingsTab): self.onBibleSecondCheckBox) QtCore.QObject.connect( self.verseSeparatorCheckBox, QtCore.SIGNAL(u'clicked(bool)'), - self.onVerseSeparatorCheckBoxToggled) + self.onVerseSeparatorCheckBoxClicked) QtCore.QObject.connect( self.verseSeparatorLineEdit, QtCore.SIGNAL(u'textEdited(QString)'), self.onVerseSeparatorLineEditEdited) @@ -168,7 +171,7 @@ class BiblesTab(SettingsTab): self.onVerseSeparatorLineEditFinished) QtCore.QObject.connect( self.rangeSeparatorCheckBox, QtCore.SIGNAL(u'clicked(bool)'), - self.onRangeSeparatorCheckBoxToggled) + self.onRangeSeparatorCheckBoxClicked) QtCore.QObject.connect( self.rangeSeparatorLineEdit, QtCore.SIGNAL(u'textEdited(QString)'), self.onRangeSeparatorLineEditEdited) @@ -177,7 +180,7 @@ class BiblesTab(SettingsTab): self.onRangeSeparatorLineEditFinished) QtCore.QObject.connect( self.listSeparatorCheckBox, QtCore.SIGNAL(u'clicked(bool)'), - self.onListSeparatorCheckBoxToggled) + self.onListSeparatorCheckBoxClicked) QtCore.QObject.connect( self.listSeparatorLineEdit, QtCore.SIGNAL(u'textEdited(QString)'), self.onListSeparatorLineEditEdited) @@ -186,7 +189,7 @@ class BiblesTab(SettingsTab): self.onListSeparatorLineEditFinished) QtCore.QObject.connect( self.endSeparatorCheckBox, QtCore.SIGNAL(u'clicked(bool)'), - self.onEndSeparatorCheckBoxToggled) + self.onEndSeparatorCheckBoxClicked) QtCore.QObject.connect( self.endSeparatorLineEdit, QtCore.SIGNAL(u'textEdited(QString)'), self.onEndSeparatorLineEditEdited) @@ -276,65 +279,105 @@ class BiblesTab(SettingsTab): if check_state == QtCore.Qt.Checked: self.second_bibles = True - def onVerseSeparatorCheckBoxToggled(self, checked): - if not checked: - self.verseSeparatorLineEdit.clear() - elif self.verseSeparatorCheckBox.hasFocus(): + def onVerseSeparatorCheckBoxClicked(self, checked): + if checked: self.verseSeparatorLineEdit.setFocus() + else: + self.verseSeparatorLineEdit.setText( + get_reference_separator(u'sep_v_default')) + self.verseSeparatorLineEdit.setPalette( + self.getGreyTextPalette(not checked)) def onVerseSeparatorLineEditEdited(self, text): self.verseSeparatorCheckBox.setChecked(True) + self.verseSeparatorLineEdit.setPalette( + self.getGreyTextPalette(False)) def onVerseSeparatorLineEditFinished(self): - if self.verseSeparatorLineEdit.text().remove(u'|').isEmpty() and \ - not self.verseSeparatorCheckBox.hasFocus(): - self.verseSeparatorCheckBox.setChecked(False) - self.verseSeparatorLineEdit.clear() + if self.verseSeparatorLineEdit.isModified(): + text = self.verseSeparatorLineEdit.text() + if text == get_reference_separator(u'sep_v_default') or \ + text.remove(u'|').isEmpty(): + self.verseSeparatorCheckBox.setChecked(False) + self.verseSeparatorLineEdit.setText( + get_reference_separator(u'sep_v_default')) + self.verseSeparatorLineEdit.setPalette( + self.getGreyTextPalette(True)) - def onRangeSeparatorCheckBoxToggled(self, checked): - if not checked: - self.rangeSeparatorLineEdit.clear() - elif self.rangeSeparatorCheckBox.hasFocus(): + def onRangeSeparatorCheckBoxClicked(self, checked): + if checked: self.rangeSeparatorLineEdit.setFocus() + else: + self.rangeSeparatorLineEdit.setText( + get_reference_separator(u'sep_r_default')) + self.rangeSeparatorLineEdit.setPalette( + self.getGreyTextPalette(not checked)) def onRangeSeparatorLineEditEdited(self, text): self.rangeSeparatorCheckBox.setChecked(True) + self.rangeSeparatorLineEdit.setPalette( + self.getGreyTextPalette(False)) def onRangeSeparatorLineEditFinished(self): - if self.rangeSeparatorLineEdit.text().remove(u'|').isEmpty() and \ - not self.rangeSeparatorCheckBox.hasFocus(): - self.rangeSeparatorCheckBox.setChecked(False) - self.rangeSeparatorLineEdit.clear() + if self.rangeSeparatorLineEdit.isModified(): + text = self.rangeSeparatorLineEdit.text() + if text == get_reference_separator(u'sep_r_default') or \ + text.remove(u'|').isEmpty(): + self.rangeSeparatorCheckBox.setChecked(False) + self.rangeSeparatorLineEdit.setText( + get_reference_separator(u'sep_r_default')) + self.rangeSeparatorLineEdit.setPalette( + self.getGreyTextPalette(True)) - def onListSeparatorCheckBoxToggled(self, checked): - if not checked: - self.listSeparatorLineEdit.clear() - elif self.listSeparatorCheckBox.hasFocus(): + def onListSeparatorCheckBoxClicked(self, checked): + if checked: self.listSeparatorLineEdit.setFocus() + else: + self.listSeparatorLineEdit.setText( + get_reference_separator(u'sep_l_default')) + self.listSeparatorLineEdit.setPalette( + self.getGreyTextPalette(not checked)) def onListSeparatorLineEditEdited(self, text): self.listSeparatorCheckBox.setChecked(True) + self.listSeparatorLineEdit.setPalette( + self.getGreyTextPalette(False)) def onListSeparatorLineEditFinished(self): - if self.listSeparatorLineEdit.text().remove(u'|').isEmpty() and \ - not self.listSeparatorCheckBox.hasFocus(): - self.listSeparatorCheckBox.setChecked(False) - self.listSeparatorLineEdit.clear() + if self.listSeparatorLineEdit.isModified(): + text = self.listSeparatorLineEdit.text() + if text == get_reference_separator(u'sep_l_default') or \ + text.remove(u'|').isEmpty(): + self.listSeparatorCheckBox.setChecked(False) + self.listSeparatorLineEdit.setText( + get_reference_separator(u'sep_l_default')) + self.listSeparatorLineEdit.setPalette( + self.getGreyTextPalette(True)) - def onEndSeparatorCheckBoxToggled(self, checked): - if not checked: - self.endSeparatorLineEdit.clear() - elif self.endSeparatorCheckBox.hasFocus(): + def onEndSeparatorCheckBoxClicked(self, checked): + if checked: self.endSeparatorLineEdit.setFocus() + else: + self.endSeparatorLineEdit.setText( + get_reference_separator(u'sep_e_default')) + self.endSeparatorLineEdit.setPalette( + self.getGreyTextPalette(not checked)) def onEndSeparatorLineEditEdited(self, text): self.endSeparatorCheckBox.setChecked(True) + self.endSeparatorLineEdit.setPalette( + self.getGreyTextPalette(False)) def onEndSeparatorLineEditFinished(self): - if self.endSeparatorLineEdit.text().remove(u'|').isEmpty() and \ - not self.endSeparatorCheckBox.hasFocus(): - self.endSeparatorCheckBox.setChecked(False) - self.endSeparatorLineEdit.clear() + if self.endSeparatorLineEdit.isModified(): + text = self.endSeparatorLineEdit.text() + if text == get_reference_separator(u'sep_e_default') or \ + text.remove(u'|').isEmpty(): + self.endSeparatorCheckBox.setChecked(False) + self.endSeparatorLineEdit.setText( + get_reference_separator(u'sep_e_default')) + self.endSeparatorLineEdit.setPalette( + self.getGreyTextPalette(True)) def load(self): settings = QtCore.QSettings() @@ -353,30 +396,58 @@ class BiblesTab(SettingsTab): self.displayStyleComboBox.setCurrentIndex(self.display_style) self.layoutStyleComboBox.setCurrentIndex(self.layout_style) self.bibleSecondCheckBox.setChecked(self.second_bibles) - self.verseSeparatorLineEdit.setPlaceholderText( - get_reference_separator(u'sep_v_default')) - self.verseSeparatorLineEdit.setText(settings.value(u'verse separator', - QtCore.QVariant(u'')).toString()) - self.verseSeparatorCheckBox.setChecked( - self.verseSeparatorLineEdit.text() != u'') - self.rangeSeparatorLineEdit.setPlaceholderText( - get_reference_separator(u'sep_r_default')) - self.rangeSeparatorLineEdit.setText(settings.value(u'range separator', - QtCore.QVariant(u'')).toString()) - self.rangeSeparatorCheckBox.setChecked( - self.rangeSeparatorLineEdit.text() != u'') - self.listSeparatorLineEdit.setPlaceholderText( - get_reference_separator(u'sep_l_default')) - self.listSeparatorLineEdit.setText(settings.value(u'list separator', - QtCore.QVariant(u'')).toString()) - self.listSeparatorCheckBox.setChecked( - self.listSeparatorLineEdit.text() != u'') - self.endSeparatorLineEdit.setPlaceholderText( - get_reference_separator(u'sep_e_default')) - self.endSeparatorLineEdit.setText(settings.value(u'end separator', - QtCore.QVariant(u'')).toString()) - self.endSeparatorCheckBox.setChecked( - self.endSeparatorLineEdit.text() != u'') + verse_separator = unicode(settings.value(u'verse separator').toString()) + if (verse_separator.strip(u'|') == u'') or \ + (verse_separator == get_reference_separator(u'sep_v_default')): + self.verseSeparatorLineEdit.setText( + get_reference_separator(u'sep_v_default')) + self.verseSeparatorLineEdit.setPalette( + self.getGreyTextPalette(True)) + self.verseSeparatorCheckBox.setChecked(False) + else: + self.verseSeparatorLineEdit.setText(verse_separator) + self.verseSeparatorLineEdit.setPalette( + self.getGreyTextPalette(False)) + self.verseSeparatorCheckBox.setChecked(True) + range_separator = unicode(settings.value(u'range separator').toString()) + if (range_separator.strip(u'|') == u'') or \ + (range_separator == get_reference_separator(u'sep_r_default')): + self.rangeSeparatorLineEdit.setText( + get_reference_separator(u'sep_r_default')) + self.rangeSeparatorLineEdit.setPalette( + self.getGreyTextPalette(True)) + self.rangeSeparatorCheckBox.setChecked(False) + else: + self.rangeSeparatorLineEdit.setText(range_separator) + self.rangeSeparatorLineEdit.setPalette( + self.getGreyTextPalette(False)) + self.rangeSeparatorCheckBox.setChecked(True) + list_separator = unicode(settings.value(u'list separator').toString()) + if (list_separator.strip(u'|') == u'') or \ + (list_separator == get_reference_separator(u'sep_l_default')): + self.listSeparatorLineEdit.setText( + get_reference_separator(u'sep_l_default')) + self.listSeparatorLineEdit.setPalette( + self.getGreyTextPalette(True)) + self.listSeparatorCheckBox.setChecked(False) + else: + self.listSeparatorLineEdit.setText(list_separator) + self.listSeparatorLineEdit.setPalette( + self.getGreyTextPalette(False)) + self.listSeparatorCheckBox.setChecked(True) + end_separator = unicode(settings.value(u'end separator').toString()) + if (end_separator.strip(u'|') == u'') or \ + (end_separator == get_reference_separator(u'sep_e_default')): + self.endSeparatorLineEdit.setText( + get_reference_separator(u'sep_e_default')) + self.endSeparatorLineEdit.setPalette( + self.getGreyTextPalette(True)) + self.endSeparatorCheckBox.setChecked(False) + else: + self.endSeparatorLineEdit.setText(end_separator) + self.endSeparatorLineEdit.setPalette( + self.getGreyTextPalette(False)) + self.endSeparatorCheckBox.setChecked(True) settings.endGroup() def save(self): @@ -390,14 +461,26 @@ class BiblesTab(SettingsTab): QtCore.QVariant(self.layout_style)) settings.setValue(u'second bibles', QtCore.QVariant(self.second_bibles)) settings.setValue(u'bible theme', QtCore.QVariant(self.bible_theme)) - settings.setValue(u'verse separator', - QtCore.QVariant(self.verseSeparatorLineEdit.text())) - settings.setValue(u'range separator', - QtCore.QVariant(self.rangeSeparatorLineEdit.text())) - settings.setValue(u'list separator', - QtCore.QVariant(self.listSeparatorLineEdit.text())) - settings.setValue(u'end separator', - QtCore.QVariant(self.endSeparatorLineEdit.text())) + if self.verseSeparatorCheckBox.isChecked(): + settings.setValue(u'verse separator', + self.verseSeparatorLineEdit.text()) + else: + settings.remove(u'verse separator') + if self.rangeSeparatorCheckBox.isChecked(): + settings.setValue(u'range separator', + self.rangeSeparatorLineEdit.text()) + else: + settings.remove(u'range separator') + if self.listSeparatorCheckBox.isChecked(): + settings.setValue(u'list separator', + self.listSeparatorLineEdit.text()) + else: + settings.remove(u'list separator') + if self.endSeparatorCheckBox.isChecked(): + settings.setValue(u'end separator', + self.endSeparatorLineEdit.text()) + else: + settings.remove(u'end separator') update_reference_separators() settings.endGroup() @@ -415,3 +498,15 @@ class BiblesTab(SettingsTab): for theme in theme_list: self.bibleThemeComboBox.addItem(theme) find_and_set_in_combo_box(self.bibleThemeComboBox, self.bible_theme) + + def getGreyTextPalette(self, greyed): + """ + Returns a QPalette with greyed out text as used for placeholderText. + """ + palette = QtGui.QPalette() + color = self.palette().color(QtGui.QPalette.Active, QtGui.QPalette.Text) + if greyed: + color.setAlpha(128) + palette.setColor(QtGui.QPalette.Active, QtGui.QPalette.Text, color) + return palette + From 62e2616aceadf5c811967cb10ae3c8278729eaf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Tue, 7 Feb 2012 12:54:13 +0200 Subject: [PATCH 30/31] Code cleanup. --- openlp/core/ui/advancedtab.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 3650cf905..cbd3e6b45 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -44,8 +44,7 @@ class AdvancedTab(SettingsTab): """ Initialise the settings tab """ - self.display_changed = False - advancedTranslated = translate('OpenLP.AdvancedTab', 'Advanced') + self.displayChanged = False # 7 stands for now, 0 to 6 is Monday to Sunday. self.defaultServiceDay = 7 # 11 o'clock is the most popular time for morning service. @@ -60,10 +59,11 @@ class AdvancedTab(SettingsTab): 'http://docs.python.org/library/datetime.html' '#strftime-strptime-behavior , but if possible, please keep ' 'the resulting string sortable by name.')) - self.default_image = u':/graphics/openlp-splash-screen.png' - self.default_color = u'#ffffff' + self.defaultImage = u':/graphics/openlp-splash-screen.png' + self.defaultColor = u'#ffffff' self.icon_path = u':/system/system_settings.png' - SettingsTab.__init__(self, parent, u'Advanced', advancedTranslated) + advanced_translated = translate('OpenLP.AdvancedTab', 'Advanced') + SettingsTab.__init__(self, parent, u'Advanced', advanced_translated) def setupUi(self): """ @@ -347,14 +347,14 @@ class AdvancedTab(SettingsTab): self.serviceNameCheckBoxToggled(default_service_enabled) self.x11BypassCheckBox.setChecked( settings.value(u'x11 bypass wm', QtCore.QVariant(True)).toBool()) - self.default_color = settings.value(u'default color', + self.defaultColor = settings.value(u'default color', QtCore.QVariant(u'#ffffff')).toString() self.defaultFileEdit.setText(settings.value(u'default image', QtCore.QVariant(u':/graphics/openlp-splash-screen.png'))\ .toString()) settings.endGroup() self.defaultColorButton.setStyleSheet( - u'background-color: %s' % self.default_color) + u'background-color: %s' % self.defaultColor) def save(self): """ @@ -393,12 +393,12 @@ class AdvancedTab(SettingsTab): QtCore.QVariant(self.hideMouseCheckBox.isChecked())) settings.setValue(u'x11 bypass wm', QtCore.QVariant(self.x11BypassCheckBox.isChecked())) - settings.setValue(u'default color', self.default_color) + settings.setValue(u'default color', self.defaultColor) settings.setValue(u'default image', self.defaultFileEdit.text()) settings.endGroup() - if self.display_changed: + if self.displayChanged: Receiver.send_message(u'config_screen_changed') - self.display_changed = False + self.displayChanged = False def serviceNameCheckBoxToggled(self, default_service_enabled): self.serviceNameDay.setEnabled(default_service_enabled) @@ -445,11 +445,11 @@ class AdvancedTab(SettingsTab): def onDefaultColorButtonPressed(self): new_color = QtGui.QColorDialog.getColor( - QtGui.QColor(self.default_color), self) + QtGui.QColor(self.defaultColor), self) if new_color.isValid(): - self.default_color = new_color.name() + self.defaultColor = new_color.name() self.defaultColorButton.setStyleSheet( - u'background-color: %s' % self.default_color) + u'background-color: %s' % self.defaultColor) def onDefaultBrowseButtonPressed(self): file_filters = u'%s;;%s (*.*) (*)' % (get_images_filter(), @@ -472,4 +472,4 @@ class AdvancedTab(SettingsTab): ``checked`` The state of the check box (boolean). """ - self.display_changed = True + self.displayChanged = True From d4efbfe122df5772b82d870989c9902400a0d28b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Mon, 13 Feb 2012 13:10:27 +0200 Subject: [PATCH 31/31] Moved two items over to right columns. --- openlp/core/ui/advancedtab.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 6e9cba72e..210dabdd2 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -101,6 +101,7 @@ class AdvancedTab(SettingsTab): u'enableAutoCloseCheckBox') self.uiLayout.addRow(self.enableAutoCloseCheckBox) self.leftLayout.addWidget(self.uiGroupBox) + # Default service name self.serviceNameGroupBox = QtGui.QGroupBox(self.leftColumn) self.serviceNameGroupBox.setObjectName(u'serviceNameGroupBox') self.serviceNameLayout = QtGui.QFormLayout( @@ -154,6 +155,7 @@ class AdvancedTab(SettingsTab): self.serviceNameExample) self.leftLayout.addWidget(self.serviceNameGroupBox) self.leftLayout.addStretch() + # Default Image self.defaultImageGroupBox = QtGui.QGroupBox(self.rightColumn) self.defaultImageGroupBox.setObjectName(u'defaultImageGroupBox') self.defaultImageLayout = QtGui.QFormLayout(self.defaultImageGroupBox) @@ -183,16 +185,16 @@ class AdvancedTab(SettingsTab): self.defaultFileLayout.addWidget(self.defaultRevertButton) self.defaultImageLayout.addRow(self.defaultFileLabel, self.defaultFileLayout) - self.leftLayout.addWidget(self.defaultImageGroupBox) - self.hideMouseGroupBox = QtGui.QGroupBox(self.leftColumn) + self.rightLayout.addWidget(self.defaultImageGroupBox) + # Hide mouse + self.hideMouseGroupBox = QtGui.QGroupBox(self.rightColumn) self.hideMouseGroupBox.setObjectName(u'hideMouseGroupBox') self.hideMouseLayout = QtGui.QVBoxLayout(self.hideMouseGroupBox) self.hideMouseLayout.setObjectName(u'hideMouseLayout') self.hideMouseCheckBox = QtGui.QCheckBox(self.hideMouseGroupBox) self.hideMouseCheckBox.setObjectName(u'hideMouseCheckBox') self.hideMouseLayout.addWidget(self.hideMouseCheckBox) - self.leftLayout.addWidget(self.hideMouseGroupBox) - self.leftLayout.addStretch() + self.rightLayout.addWidget(self.hideMouseGroupBox) # Service Item Slide Limits self.slideGroupBox = QtGui.QGroupBox(self.rightColumn) self.slideGroupBox.setObjectName(u'slideGroupBox')