From 6d98d4b1258e084ea16296eabca641ed773097ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Armin=20K=C3=B6hler?= Date: Mon, 12 Mar 2012 06:48:14 +0100 Subject: [PATCH 01/11] add possibility to change bible meta data and the possibility to change the preferred bible language per bible - including first steps to edit the book names of the bible --- openlp/plugins/bibles/forms/__init__.py | 3 +- .../plugins/bibles/forms/editbibledialog.py | 171 ++++++++++++++++++ openlp/plugins/bibles/forms/editbibleform.py | 151 ++++++++++++++++ openlp/plugins/bibles/lib/db.py | 33 ++++ openlp/plugins/bibles/lib/manager.py | 52 +++++- openlp/plugins/bibles/lib/mediaitem.py | 37 +++- 6 files changed, 435 insertions(+), 12 deletions(-) create mode 100644 openlp/plugins/bibles/forms/editbibledialog.py create mode 100644 openlp/plugins/bibles/forms/editbibleform.py diff --git a/openlp/plugins/bibles/forms/__init__.py b/openlp/plugins/bibles/forms/__init__.py index 89bfbfff3..86f28592d 100644 --- a/openlp/plugins/bibles/forms/__init__.py +++ b/openlp/plugins/bibles/forms/__init__.py @@ -55,6 +55,7 @@ from booknameform import BookNameForm from languageform import LanguageForm from bibleimportform import BibleImportForm from bibleupgradeform import BibleUpgradeForm +from editbibleform import EditBibleForm __all__ = [u'BookNameForm', u'LanguageForm', u'BibleImportForm', - u'BibleUpgradeForm'] + u'BibleUpgradeForm', u'EditBibleForm'] diff --git a/openlp/plugins/bibles/forms/editbibledialog.py b/openlp/plugins/bibles/forms/editbibledialog.py new file mode 100644 index 000000000..ce64e90c9 --- /dev/null +++ b/openlp/plugins/bibles/forms/editbibledialog.py @@ -0,0 +1,171 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2012 Raoul Snyman # +# Portions copyright (c) 2008-2012 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # +# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # +# --------------------------------------------------------------------------- # +# This program is free software; you can redistribute it and/or modify it # +# under the terms of the GNU General Public License as published by the Free # +# Software Foundation; version 2 of the License. # +# # +# This program is distributed in the hope that it will be useful, but WITHOUT # +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # +# more details. # +# # +# You should have received a copy of the GNU General Public License along # +# with this program; if not, write to the Free Software Foundation, Inc., 59 # +# Temple Place, Suite 330, Boston, MA 02111-1307 USA # +############################################################################### + +from PyQt4 import QtCore, QtGui + +from openlp.core.lib import build_icon, translate +from openlp.core.lib.ui import UiStrings, create_accept_reject_button_box +from openlp.plugins.bibles.lib import LanguageSelection, BibleStrings +from openlp.plugins.bibles.lib.db import BiblesResourcesDB + + +class Ui_EditBibleDialog(object): + def setupUi(self, editBibleDialog): + editBibleDialog.setObjectName(u'editBibleDialog') + editBibleDialog.resize(650, 400) + editBibleDialog.setWindowIcon( + build_icon(u':/icon/openlp-logo-16x16.png')) + editBibleDialog.setModal(True) + self.dialogLayout = QtGui.QVBoxLayout(editBibleDialog) + self.dialogLayout.setSpacing(8) + self.dialogLayout.setContentsMargins(8, 8, 8, 8) + self.dialogLayout.setObjectName(u'dialogLayout') + self.bibleTabWidget = QtGui.QTabWidget(editBibleDialog) + self.bibleTabWidget.setObjectName(u'BibleTabWidget') + # Meta tab + self.metaTab = QtGui.QWidget() + self.metaTab.setObjectName(u'metaTab') + self.metaTabLayout = QtGui.QFormLayout(self.metaTab) + self.metaTabLayout.setObjectName(u'metaTabLayout') + self.versionNameLabel = QtGui.QLabel(self.metaTab) + self.versionNameLabel.setObjectName(u'versionNameLabel') + self.metaTabLayout.setWidget(0, QtGui.QFormLayout.LabelRole, + self.versionNameLabel) + self.versionNameEdit = QtGui.QLineEdit(self.metaTab) + self.versionNameEdit.setObjectName(u'versionNameEdit') + self.versionNameLabel.setBuddy(self.versionNameEdit) + self.metaTabLayout.setWidget(0, QtGui.QFormLayout.FieldRole, + self.versionNameEdit) + self.copyrightLabel = QtGui.QLabel(self.metaTab) + self.copyrightLabel.setObjectName(u'copyrightLabel') + self.metaTabLayout.setWidget(1, QtGui.QFormLayout.LabelRole, + self.copyrightLabel) + self.copyrightEdit = QtGui.QLineEdit(self.metaTab) + self.copyrightEdit.setObjectName(u'copyrightEdit') + self.copyrightLabel.setBuddy(self.copyrightEdit) + self.metaTabLayout.setWidget(1, QtGui.QFormLayout.FieldRole, + self.copyrightEdit) + self.permissionsLabel = QtGui.QLabel(self.metaTab) + self.permissionsLabel.setObjectName(u'permissionsLabel') + self.metaTabLayout.setWidget(2, QtGui.QFormLayout.LabelRole, + self.permissionsLabel) + self.permissionsEdit = QtGui.QLineEdit(self.metaTab) + self.permissionsEdit.setObjectName(u'permissionsEdit') + self.permissionsLabel.setBuddy(self.permissionsEdit) + self.metaTabLayout.setWidget(2, QtGui.QFormLayout.FieldRole, + self.permissionsEdit) + self.languageSelectionLabel = QtGui.QLabel(self.metaTab) + self.languageSelectionLabel.setObjectName(u'languageSelectionLabel') + self.metaTabLayout.setWidget(3, QtGui.QFormLayout.LabelRole, + self.languageSelectionLabel) + self.languageSelectionComboBox = QtGui.QComboBox(self.metaTab) + self.languageSelectionComboBox.setObjectName( + u'languageSelectionComboBox') + self.languageSelectionComboBox.addItems([u'', u'', u'', u'']) + self.metaTabLayout.setWidget(3, QtGui.QFormLayout.FieldRole, + self.languageSelectionComboBox) + self.bibleTabWidget.addTab(self.metaTab, u'') + # Book name tab + self.bookNameTab = QtGui.QWidget() + self.bookNameTab.setObjectName(u'bookNameTab') + self.bookNameTabLayout = QtGui.QHBoxLayout(self.bookNameTab) + self.bookNameTabLayout.setObjectName(u'bookNameTabLayout') + self.scrollArea = QtGui.QScrollArea(self.bookNameTab) + self.scrollArea.setWidgetResizable(True) + self.scrollArea.setObjectName(u'scrollArea') + self.scrollArea.setHorizontalScrollBarPolicy( + QtCore.Qt.ScrollBarAlwaysOff) + self.bookNameGroupBox = QtGui.QWidget(self.scrollArea) + self.bookNameGroupBox.setObjectName(u'bookNameGroupBox') + self.bookNameGroupBoxLayout = QtGui.QFormLayout(self.bookNameGroupBox) + self.bookNameGroupBoxLayout.setObjectName(u'bookNameGroupBoxLayout') + self.bookNameLabel = {} + self.bookNameEdit= {} + x = 0 + for book in BiblesResourcesDB.get_books(): + self.bookNameLabel[book[u'abbreviation']] = QtGui.QLabel( + self.bookNameGroupBox) + self.bookNameLabel[book[u'abbreviation']].setObjectName( + u'bookNameLabel[%s]' % book[u'abbreviation']) + self.bookNameGroupBoxLayout.setWidget(x, + QtGui.QFormLayout.LabelRole, + self.bookNameLabel[book[u'abbreviation']]) + self.bookNameEdit[book[u'abbreviation']] = QtGui.QLineEdit( + self.bookNameGroupBox) + self.bookNameEdit[book[u'abbreviation']].setObjectName( + u'bookNameEdit[%s]' % book[u'abbreviation']) + self.bookNameGroupBoxLayout.setWidget(x, + QtGui.QFormLayout.FieldRole, + self.bookNameEdit[book[u'abbreviation']]) + x = x+1 + self.scrollArea.setWidget(self.bookNameGroupBox) + self.bookNameTabLayout.addWidget(self.scrollArea) + self.bibleTabWidget.addTab(self.bookNameTab, u'') + # Last few bits + self.dialogLayout.addWidget(self.bibleTabWidget) + self.buttonBox = create_accept_reject_button_box(editBibleDialog) + self.dialogLayout.addWidget(self.buttonBox) + self.retranslateUi(editBibleDialog) + QtCore.QMetaObject.connectSlotsByName(editBibleDialog) + + + def retranslateUi(self, editBibleDialog): + self.booknames = BibleStrings().Booknames + editBibleDialog.setWindowTitle( + translate('BiblesPlugin.EditBibleForm', 'Song Editor')) + self.bibleTabWidget.setTabText( + self.bibleTabWidget.indexOf(self.metaTab), + translate('SongsPlugin.EditBibleForm', 'License Details')) + self.versionNameLabel.setText( + translate('BiblesPlugin.EditBibleForm', 'Version name:')) + self.copyrightLabel.setText( + translate('BiblesPlugin.EditBibleForm', 'Copyright:')) + self.permissionsLabel.setText( + translate('BiblesPlugin.EditBibleForm', 'Permissions:')) + self.bibleTabWidget.setTabText( + self.bibleTabWidget.indexOf(self.bookNameTab), + translate('SongsPlugin.EditBibleForm', 'Custom Book Names')) + self.languageSelectionLabel.setText( + translate('BiblesPlugin.EditBibleForm', 'Bookname language:')) + self.languageSelectionComboBox.setItemText(0, + translate('BiblesPlugin.EditBibleForm', 'General Settings')) + self.languageSelectionComboBox.setItemText(LanguageSelection.Bible+1, + translate('BiblesPlugin.EditBibleForm', 'Bible language')) + self.languageSelectionComboBox.setItemText( + LanguageSelection.Application+1, + translate('BiblesPlugin.EditBibleForm', 'Application language')) + self.languageSelectionComboBox.setItemText(LanguageSelection.English+1, + translate('BiblesPlugin.EditBibleForm', 'English')) + self.languageSelectionComboBox.setToolTip( + translate('BiblesPlugin.EditBibleForm', 'Multiple options:\n ' + 'General Settings - the option choosen in settings section\n' + 'Bible language - the language in which the bible book names ' + 'was imported\n Application language - the language you have ' + 'choosen for Openlp\n English - use always English booknames')) + for book in BiblesResourcesDB.get_books(): + self.bookNameLabel[book[u'abbreviation']].setText( + u'%s:' % unicode(self.booknames[book[u'abbreviation']])) diff --git a/openlp/plugins/bibles/forms/editbibleform.py b/openlp/plugins/bibles/forms/editbibleform.py new file mode 100644 index 000000000..27ec0e3a6 --- /dev/null +++ b/openlp/plugins/bibles/forms/editbibleform.py @@ -0,0 +1,151 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2012 Raoul Snyman # +# Portions copyright (c) 2008-2012 Tim Bentley, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # +# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund # +# --------------------------------------------------------------------------- # +# This program is free software; you can redistribute it and/or modify it # +# under the terms of the GNU General Public License as published by the Free # +# Software Foundation; version 2 of the License. # +# # +# This program is distributed in the hope that it will be useful, but WITHOUT # +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # +# more details. # +# # +# You should have received a copy of the GNU General Public License along # +# with this program; if not, write to the Free Software Foundation, Inc., 59 # +# Temple Place, Suite 330, Boston, MA 02111-1307 USA # +############################################################################### + +import logging + +from PyQt4 import QtCore, QtGui + +from openlp.core.lib import PluginStatus, Receiver, MediaType, translate, \ + create_separated_list +from openlp.core.lib.ui import UiStrings, critical_error_message_box +from openlp.core.utils import AppLocation +from editbibledialog import Ui_EditBibleDialog +from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta, BiblesResourcesDB + +log = logging.getLogger(__name__) + +class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): + """ + Class to manage the editing of a bible + """ + log.info(u'%s EditBibleForm loaded', __name__) + + def __init__(self, mediaitem, parent, manager): + """ + Constructor + """ + QtGui.QDialog.__init__(self, parent) + self.mediaitem = mediaitem + + # can this be automated? + self.width = 400 + self.setupUi(self) + self.manager = manager + + def loadBible(self, bible): + """ + Loads a bible. + + ``bible`` + The name of the bible. + """ + log.debug(u'Load Bible') + self.bible = bible + self.versionNameEdit.setText( + self.manager.get_meta_data(self.bible, u'Version').value) + self.copyrightEdit.setText( + self.manager.get_meta_data(self.bible, u'Copyright').value) + self.permissionsEdit.setText( + self.manager.get_meta_data(self.bible, u'Permissions').value) + self.bookname_language = self.manager.get_meta_data( + self.bible, u'Bookname language') + if self.bookname_language: + self.languageSelectionComboBox.setCurrentIndex( + int(self.bookname_language.value)+1) + self.books = {} + for book in BiblesResourcesDB.get_books(): + self.books[book[u'abbreviation']] = self.manager.get_book_by_id( + self.bible, book[u'id']) + if self.books[book[u'abbreviation']]: + self.bookNameEdit[book[u'abbreviation']].setText( + self.books[book[u'abbreviation']].custom_name) + else: + self.bookNameGroupBoxLayout.removeWidget( + self.bookNameLabel[book[u'abbreviation']]) + self.bookNameLabel[book[u'abbreviation']].setParent(None) + self.bookNameGroupBoxLayout.removeWidget( + self.bookNameEdit[book[u'abbreviation']]) + self.bookNameEdit[book[u'abbreviation']].setParent(None) + + def reject(self): + """ + Exit Dialog and do not save + """ + log.debug (u'BibleEditForm.reject') + self.bible = None + QtGui.QDialog.reject(self) + + def accept(self): + """ + Exit Dialog and save data + """ + log.debug(u'BibleEditForm.accept') + self.version = unicode(self.versionNameEdit.text()) + self.copyright = unicode(self.copyrightEdit.text()) + self.permissions = unicode(self.permissionsEdit.text()) + self.bookname_language = \ + self.languageSelectionComboBox.currentIndex()-1 + if self.validateInput(): + self.manager.update_meta_data(self.bible, self.version, + self.copyright, self.permissions, self.bookname_language) + for abbr, book in self.books.iteritems(): + if book: + custom_name = unicode(self.bookNameEdit[abbr].text()) + if book.custom_name != custom_name: + book.custom_name = custom_name + self.manager.update_book(self.bible, book) + self.bible = None + QtGui.QDialog.accept(self) + + def validateInput(self): + """ + Validate the Input before saving. + """ + if not self.version: + critical_error_message_box(UiStrings().EmptyField, + translate('BiblesPlugin.BibleEditForm', + 'You need to specify a version name for your Bible.')) + self.versionNameEdit.setFocus() + return False + elif not self.copyright: + critical_error_message_box(UiStrings().EmptyField, + translate('BiblesPlugin.BibleEditForm', + 'You need to set a copyright for your Bible. ' + 'Bibles in the Public Domain need to be marked as such.')) + self.copyrightEdit.setFocus() + return False + elif self.manager.exists(self.version) and \ + self.manager.get_meta_data(self.bible, u'Version').value != \ + self.version: + critical_error_message_box( + translate('BiblesPlugin.BibleEditForm', 'Bible Exists'), + translate('BiblesPlugin.BibleEditForm', + 'This Bible already exists. Please import ' + 'a different Bible or first delete the existing one.')) + self.versionNameEdit.setFocus() + return False + return True diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index b419bebc0..e7b30c01a 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -81,6 +81,7 @@ def init_schema(url): Column(u'book_reference_id', types.Integer, index=True), Column(u'testament_reference_id', types.Integer), Column(u'name', types.Unicode(50), index=True), + #Column(u'custom_name', types.Unicode(50), index=True), ) verse_table = Table(u'verse', metadata, Column(u'id', types.Integer, primary_key=True, index=True), @@ -205,6 +206,18 @@ class BibleDB(QtCore.QObject, Manager): self.save_object(book) return book + def update_book(self, book): + """ + Update a book in the database. + + ``book`` + The book object + """ + log.debug(u'BibleDB.update_book("%s")', book.name) + if self.save_object(book): + return True + return False + def delete_book(self, db_book): """ Delete a book from the database. @@ -286,6 +299,26 @@ class BibleDB(QtCore.QObject, Manager): log.debug(u'BibleDB.save_meta("%s/%s")', key, value) self.save_object(BibleMeta.populate(key=key, value=value)) + def update_meta(self, key, value): + """ + Utility method to update BibleMeta objects in a Bible database. + + ``key`` + The key for this instance. + + ``value`` + The value for this instance. + """ + if not isinstance(value, unicode): + value = unicode(value) + log.debug(u'BibleDB.update_meta("%s/%s")', key, value) + meta = self.get_object(BibleMeta, key) + if meta: + meta.value = value + self.save_object(meta) + else: + self.save_object(BibleMeta.populate(key=key, value=value)) + def get_book(self, book): """ Return a book object from the database. diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index c9f564b2c..46cfae6b8 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -31,7 +31,8 @@ import os 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.lib.ui import critical_error_message_box, \ + create_accept_reject_button_box from openlp.core.utils import AppLocation, delete_file from openlp.plugins.bibles.lib import parse_reference, \ get_reference_separator, LanguageSelection @@ -141,13 +142,14 @@ class BibleManager(object): BibleDB class. """ log.debug(u'Reload bibles') - files = SettingsManager.get_files(self.settingsSection, self.suffix) - if u'alternative_book_names.sqlite' in files: - files.remove(u'alternative_book_names.sqlite') - log.debug(u'Bible Files %s', files) + self.files = SettingsManager.get_files(self.settingsSection, + self.suffix) + if u'alternative_book_names.sqlite' in self.files: + self.files.remove(u'alternative_book_names.sqlite') + log.debug(u'Bible Files %s', self.files) self.db_cache = {} self.old_bible_databases = [] - for filename in files: + for filename in self.files: bible = BibleDB(self.parent, path=self.path, file=filename) name = bible.get_name() # Remove corrupted files. @@ -204,6 +206,22 @@ class BibleManager(object): self.db_cache[name] = importer return importer + def delete_bible(self, name): + """ + Delete a bible completly. + + ``name`` + The name of the bible. + """ + for filename in self.files: + bible = BibleDB(self.parent, path=self.path, file=filename) + # Remove the bible files + if name == bible.get_name(): + bible.session.close() + if delete_file(os.path.join(self.path, filename)): + return True + return False + def get_bibles(self): """ Returns a dict with all available Bibles. @@ -400,18 +418,38 @@ class BibleManager(object): """ Saves the bibles meta data. """ - log.debug(u'save_meta data %s,%s, %s,%s', + log.debug(u'save_meta data %s, %s, %s, %s', bible, version, copyright, permissions) self.db_cache[bible].create_meta(u'Version', version) self.db_cache[bible].create_meta(u'Copyright', copyright) self.db_cache[bible].create_meta(u'Permissions', permissions) + def update_meta_data(self, bible, version, copyright, permissions, + bookname_language): + """ + Saves the bibles meta data. + """ + log.debug(u'update_meta data %s, %s, %s, %s', + bible, version, copyright, permissions) + self.db_cache[bible].update_meta(u'Version', version) + self.db_cache[bible].update_meta(u'Copyright', copyright) + self.db_cache[bible].update_meta(u'Permissions', permissions) + self.db_cache[bible].update_meta(u'Bookname language', + bookname_language) + def get_meta_data(self, bible, key): """ Returns the meta data for a given key. """ log.debug(u'get_meta %s,%s', bible, key) return self.db_cache[bible].get_object(BibleMeta, key) + + def update_book(self, bible, book): + """ + Update a book of the bible. + """ + log.debug(u'BibleManager.update_book("%s", "%s")', bible, book.name) + self.db_cache[bible].update_book(book) def exists(self, name): """ diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 976ff6106..980d8d94d 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -36,9 +36,10 @@ 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.plugins.bibles.forms import BibleImportForm +from openlp.plugins.bibles.forms import BibleImportForm, EditBibleForm from openlp.plugins.bibles.lib import LayoutStyle, DisplayStyle, \ - VerseReferenceList, get_reference_separator, LanguageSelection, BibleStrings + VerseReferenceList, get_reference_separator, LanguageSelection, \ + BibleStrings from openlp.plugins.bibles.lib.db import BiblesResourcesDB log = logging.getLogger(__name__) @@ -109,8 +110,8 @@ class BibleMediaItem(MediaManagerItem): MediaManagerItem.requiredIcons(self) self.hasImportIcon = True self.hasNewIcon = False - self.hasEditIcon = False - self.hasDeleteIcon = False + self.hasEditIcon = True + self.hasDeleteIcon = True self.addToServiceItem = False def addSearchTab(self, prefix, name): @@ -532,6 +533,34 @@ class BibleMediaItem(MediaManagerItem): if self.import_wizard.exec_(): self.reloadBibles() + def onEditClick(self): + if self.quickTab.isVisible(): + bible = unicode(self.quickVersionComboBox.currentText()) + elif self.advancedTab.isVisible(): + bible = unicode(self.advancedVersionComboBox.currentText()) + if bible != u'': + self.editBibleForm = EditBibleForm(self, self.plugin.formparent, + self.plugin.manager) + self.editBibleForm.loadBible(bible) + if self.editBibleForm.exec_(): + self.reloadBibles() + + def onDeleteClick(self): + if self.quickTab.isVisible(): + bible = unicode(self.quickVersionComboBox.currentText()) + elif self.advancedTab.isVisible(): + bible = unicode(self.advancedVersionComboBox.currentText()) + if bible != u'': + if QtGui.QMessageBox.question(self, UiStrings().ConfirmDelete, + unicode(translate('BiblesPlugin.MediaItem', + 'Are you sure you want to delete "%s"?')) % bible, + QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | + QtGui.QMessageBox.No), + QtGui.QMessageBox.Yes) == QtGui.QMessageBox.No: + return + self.plugin.manager.delete_bible(bible) + self.reloadBibles() + def onSearchTabBarCurrentChanged(self, index): if index == 0: self.advancedTab.setVisible(False) From 12458c0d31ec3c246d1475e6ba495113fb37a2d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Armin=20K=C3=B6hler?= Date: Wed, 21 Mar 2012 21:57:07 +0100 Subject: [PATCH 02/11] add possibility to switch book names for each bible --- .../plugins/bibles/forms/bibleupgradeform.py | 6 +- .../plugins/bibles/forms/editbibledialog.py | 15 ++- openlp/plugins/bibles/forms/editbibleform.py | 113 ++++++++++++++---- openlp/plugins/bibles/lib/db.py | 23 +--- openlp/plugins/bibles/lib/http.py | 12 +- openlp/plugins/bibles/lib/manager.py | 22 +--- openlp/plugins/bibles/lib/mediaitem.py | 19 +-- openlp/plugins/bibles/lib/osis.py | 2 +- 8 files changed, 132 insertions(+), 80 deletions(-) diff --git a/openlp/plugins/bibles/forms/bibleupgradeform.py b/openlp/plugins/bibles/forms/bibleupgradeform.py index 7c7f14979..b7ba01711 100644 --- a/openlp/plugins/bibles/forms/bibleupgradeform.py +++ b/openlp/plugins/bibles/forms/bibleupgradeform.py @@ -415,7 +415,7 @@ class BibleUpgradeForm(OpenLPWizard): meta_data[meta[u'key']] = meta[u'value'] if not meta[u'key'] == u'Version' and not meta[u'key'] == \ u'dbversion': - self.newbibles[number].create_meta(meta[u'key'], + self.newbibles[number].save_meta(meta[u'key'], meta[u'value']) if meta[u'key'] == u'download source': webbible = True @@ -455,7 +455,7 @@ class BibleUpgradeForm(OpenLPWizard): meta_data[u'download source'].lower()) if bible and bible[u'language_id']: language_id = bible[u'language_id'] - self.newbibles[number].create_meta(u'language_id', + self.newbibles[number].save_meta(u'language_id', language_id) else: language_id = self.newbibles[number].get_language(name) @@ -574,7 +574,7 @@ class BibleUpgradeForm(OpenLPWizard): self.progressBar.maximum() - self.progressBar.value()) else: self.success[number] = True - self.newbibles[number].create_meta(u'Version', name) + self.newbibles[number].save_meta(u'Version', name) self.incrementProgressBar(unicode(translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\n' diff --git a/openlp/plugins/bibles/forms/editbibledialog.py b/openlp/plugins/bibles/forms/editbibledialog.py index ce64e90c9..c2596ddab 100644 --- a/openlp/plugins/bibles/forms/editbibledialog.py +++ b/openlp/plugins/bibles/forms/editbibledialog.py @@ -92,8 +92,11 @@ class Ui_EditBibleDialog(object): # Book name tab self.bookNameTab = QtGui.QWidget() self.bookNameTab.setObjectName(u'bookNameTab') - self.bookNameTabLayout = QtGui.QHBoxLayout(self.bookNameTab) + self.bookNameTabLayout = QtGui.QVBoxLayout(self.bookNameTab) self.bookNameTabLayout.setObjectName(u'bookNameTabLayout') + self.bookNameNotice = QtGui.QLabel(self.bookNameTab) + self.bookNameNotice.setObjectName(u'bookNameNotice') + self.bookNameTabLayout.addWidget(self.bookNameNotice) self.scrollArea = QtGui.QScrollArea(self.bookNameTab) self.scrollArea.setWidgetResizable(True) self.scrollArea.setObjectName(u'scrollArea') @@ -124,6 +127,9 @@ class Ui_EditBibleDialog(object): x = x+1 self.scrollArea.setWidget(self.bookNameGroupBox) self.bookNameTabLayout.addWidget(self.scrollArea) + self.spacer = QtGui.QSpacerItem(20, 5, QtGui.QSizePolicy.Minimum, + QtGui.QSizePolicy.Expanding) + self.bookNameTabLayout.addItem(self.spacer) self.bibleTabWidget.addTab(self.bookNameTab, u'') # Last few bits self.dialogLayout.addWidget(self.bibleTabWidget) @@ -131,7 +137,6 @@ class Ui_EditBibleDialog(object): self.dialogLayout.addWidget(self.buttonBox) self.retranslateUi(editBibleDialog) QtCore.QMetaObject.connectSlotsByName(editBibleDialog) - def retranslateUi(self, editBibleDialog): self.booknames = BibleStrings().Booknames @@ -163,9 +168,9 @@ class Ui_EditBibleDialog(object): self.languageSelectionComboBox.setToolTip( translate('BiblesPlugin.EditBibleForm', 'Multiple options:\n ' 'General Settings - the option choosen in settings section\n' - 'Bible language - the language in which the bible book names ' - 'was imported\n Application language - the language you have ' - 'choosen for Openlp\n English - use always English booknames')) + 'Bible language - the language in which the Bible book names ' + 'were imported\n Application language - the language you have ' + 'chosen for OpenLP\n English - always use English book names')) for book in BiblesResourcesDB.get_books(): self.bookNameLabel[book[u'abbreviation']].setText( u'%s:' % unicode(self.booknames[book[u'abbreviation']])) diff --git a/openlp/plugins/bibles/forms/editbibleform.py b/openlp/plugins/bibles/forms/editbibleform.py index 27ec0e3a6..2af4f5726 100644 --- a/openlp/plugins/bibles/forms/editbibleform.py +++ b/openlp/plugins/bibles/forms/editbibleform.py @@ -34,6 +34,7 @@ from openlp.core.lib import PluginStatus, Receiver, MediaType, translate, \ from openlp.core.lib.ui import UiStrings, critical_error_message_box from openlp.core.utils import AppLocation from editbibledialog import Ui_EditBibleDialog +from openlp.plugins.bibles.lib import BibleStrings from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta, BiblesResourcesDB log = logging.getLogger(__name__) @@ -50,7 +51,8 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): """ QtGui.QDialog.__init__(self, parent) self.mediaitem = mediaitem - + self.validate_error = [] + self.booknames = BibleStrings().Booknames # can this be automated? self.width = 400 self.setupUi(self) @@ -77,19 +79,31 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): self.languageSelectionComboBox.setCurrentIndex( int(self.bookname_language.value)+1) self.books = {} - for book in BiblesResourcesDB.get_books(): - self.books[book[u'abbreviation']] = self.manager.get_book_by_id( - self.bible, book[u'id']) - if self.books[book[u'abbreviation']]: - self.bookNameEdit[book[u'abbreviation']].setText( - self.books[book[u'abbreviation']].custom_name) - else: - self.bookNameGroupBoxLayout.removeWidget( - self.bookNameLabel[book[u'abbreviation']]) - self.bookNameLabel[book[u'abbreviation']].setParent(None) - self.bookNameGroupBoxLayout.removeWidget( - self.bookNameEdit[book[u'abbreviation']]) - self.bookNameEdit[book[u'abbreviation']].setParent(None) + self.webbible = self.manager.get_meta_data(self.bible, u'download source') + if self.webbible: + self.bookNameNotice.setText(translate('BiblesPlugin.EditBibleForm', + 'This is a webbible.\nIt is not possible to customize the Book ' + 'Names.')) + self.bookNameTabLayout.removeWidget(self.scrollArea) + self.scrollArea.setParent(None) + else: + self.bookNameNotice.setText(translate('BiblesPlugin.EditBibleForm', + 'You could customize the Book Names of this Bible.\nTo use ' + 'the Book Names below, you have to choose the option "Bible ' + 'language" in general settings or explicit for this Bible.')) + for book in BiblesResourcesDB.get_books(): + self.books[book[u'abbreviation']] = self.manager.get_book_by_id( + self.bible, book[u'id']) + if self.books[book[u'abbreviation']] and not self.webbible: + self.bookNameEdit[book[u'abbreviation']].setText( + self.books[book[u'abbreviation']].name) + else: + self.bookNameGroupBoxLayout.removeWidget( + self.bookNameLabel[book[u'abbreviation']]) + self.bookNameLabel[book[u'abbreviation']].setParent(None) + self.bookNameGroupBoxLayout.removeWidget( + self.bookNameEdit[book[u'abbreviation']]) + self.bookNameEdit[book[u'abbreviation']].setParent(None) def reject(self): """ @@ -104,26 +118,40 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): Exit Dialog and save data """ log.debug(u'BibleEditForm.accept') + save = True self.version = unicode(self.versionNameEdit.text()) self.copyright = unicode(self.copyrightEdit.text()) self.permissions = unicode(self.permissionsEdit.text()) self.bookname_language = \ self.languageSelectionComboBox.currentIndex()-1 - if self.validateInput(): - self.manager.update_meta_data(self.bible, self.version, - self.copyright, self.permissions, self.bookname_language) + if not self.validateMeta(): + save = False + if not self.webbible and save: + custom_names = {} + for error in self.validate_error: + self.changeBackgroundColor(error, 'white') for abbr, book in self.books.iteritems(): if book: - custom_name = unicode(self.bookNameEdit[abbr].text()) - if book.custom_name != custom_name: - book.custom_name = custom_name - self.manager.update_book(self.bible, book) + custom_names[abbr] = unicode(self.bookNameEdit[abbr].text()) + if book.name != custom_names[abbr]: + if not self.validateBook(custom_names[abbr], abbr): + save = False + break + if save: + self.manager.save_meta_data(self.bible, self.version, + self.copyright, self.permissions, self.bookname_language) + if not self.webbible: + for abbr, book in self.books.iteritems(): + if book: + if book.name != custom_names[abbr]: + book.name = custom_names[abbr] + self.manager.update_book(self.bible, book) self.bible = None QtGui.QDialog.accept(self) - def validateInput(self): + def validateMeta(self): """ - Validate the Input before saving. + Validate the Meta before saving. """ if not self.version: critical_error_message_box(UiStrings().EmptyField, @@ -149,3 +177,42 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): self.versionNameEdit.setFocus() return False return True + + def validateBook(self, new_bookname, abbreviation): + """ + Validate a book. + """ + if not new_bookname: + self.changeBackgroundColor(self.bookNameEdit[abbreviation], 'red') + self.validate_error = [self.bookNameEdit[abbreviation]] + self.bookNameEdit[abbreviation].setFocus() + critical_error_message_box(UiStrings().EmptyField, + unicode(translate('BiblesPlugin.BibleEditForm', + 'You need to specify a book name for "%s".')) % + self.booknames[abbreviation]) + return False + for abbr, book in self.books.iteritems(): + if book: + if book.name == new_bookname: + self.changeBackgroundColor(self.bookNameEdit[abbreviation], + 'red') + self.bookNameEdit[abbreviation].setFocus() + self.changeBackgroundColor(self.bookNameEdit[abbr], 'red') + self.validate_error = [self.bookNameEdit[abbr], + self.bookNameEdit[abbreviation]] + critical_error_message_box( + translate('BiblesPlugin.BibleEditForm', + 'Book Name Exists Twice'), + unicode(translate('BiblesPlugin.BibleEditForm', + 'The Book Name "%s" exists twice. Please change one.')) + % new_bookname) + return False + return True + + def changeBackgroundColor(self, lineedit, color): + """ + Change the Background Color of the given LineEdit + """ + pal = QtGui.QPalette(lineedit.palette()) + pal.setColor(QtGui.QPalette.Base,QtGui.QColor(color)) + lineedit.setPalette(pal) diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index cd7c194cb..b6f3a2df8 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -183,7 +183,7 @@ class BibleDB(QtCore.QObject, Manager): The actual Qt wizard form. """ self.wizard = wizard - self.create_meta(u'dbversion', u'2') + self.save_meta(u'dbversion', u'2') return self.name def create_book(self, name, bk_ref_id, testament=1): @@ -284,9 +284,9 @@ class BibleDB(QtCore.QObject, Manager): self.session.add(verse) return verse - def create_meta(self, key, value): + def save_meta(self, key, value): """ - Utility method to save BibleMeta objects in a Bible database. + Utility method to save or update BibleMeta objects in a Bible database. ``key`` The key for this instance. @@ -297,21 +297,6 @@ class BibleDB(QtCore.QObject, Manager): if not isinstance(value, unicode): value = unicode(value) log.debug(u'BibleDB.save_meta("%s/%s")', key, value) - self.save_object(BibleMeta.populate(key=key, value=value)) - - def update_meta(self, key, value): - """ - Utility method to update BibleMeta objects in a Bible database. - - ``key`` - The key for this instance. - - ``value`` - The value for this instance. - """ - if not isinstance(value, unicode): - value = unicode(value) - log.debug(u'BibleDB.update_meta("%s/%s")', key, value) meta = self.get_object(BibleMeta, key) if meta: meta.value = value @@ -507,7 +492,7 @@ class BibleDB(QtCore.QObject, Manager): return False language = BiblesResourcesDB.get_language(language) language_id = language[u'id'] - self.create_meta(u'language_id', language_id) + self.save_meta(u'language_id', language_id) return language_id def is_old_database(self): diff --git a/openlp/plugins/bibles/lib/http.py b/openlp/plugins/bibles/lib/http.py index 72ffed487..630772bf3 100644 --- a/openlp/plugins/bibles/lib/http.py +++ b/openlp/plugins/bibles/lib/http.py @@ -401,16 +401,16 @@ class HTTPBible(BibleDB): self.wizard.incrementProgressBar(unicode(translate( 'BiblesPlugin.HTTPBible', 'Registering Bible and loading books...'))) - self.create_meta(u'download source', self.download_source) - self.create_meta(u'download name', self.download_name) + self.save_meta(u'download source', self.download_source) + self.save_meta(u'download name', self.download_name) if self.proxy_server: - self.create_meta(u'proxy server', self.proxy_server) + self.save_meta(u'proxy server', self.proxy_server) if self.proxy_username: # Store the proxy userid. - self.create_meta(u'proxy username', self.proxy_username) + self.save_meta(u'proxy username', self.proxy_username) if self.proxy_password: # Store the proxy password. - self.create_meta(u'proxy password', self.proxy_password) + self.save_meta(u'proxy password', self.proxy_password) if self.download_source.lower() == u'crosswalk': handler = CWExtract(self.proxy_server) elif self.download_source.lower() == u'biblegateway': @@ -429,7 +429,7 @@ class HTTPBible(BibleDB): self.download_source.lower()) if bible[u'language_id']: language_id = bible[u'language_id'] - self.create_meta(u'language_id', language_id) + self.save_meta(u'language_id', language_id) else: language_id = self.get_language(bible_name) if not language_id: diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index 46cfae6b8..fb4c606d0 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -414,27 +414,17 @@ class BibleManager(object): }) return None - def save_meta_data(self, bible, version, copyright, permissions): + def save_meta_data(self, bible, version, copyright, permissions, + bookname_language): """ Saves the bibles meta data. """ log.debug(u'save_meta data %s, %s, %s, %s', bible, version, copyright, permissions) - self.db_cache[bible].create_meta(u'Version', version) - self.db_cache[bible].create_meta(u'Copyright', copyright) - self.db_cache[bible].create_meta(u'Permissions', permissions) - - def update_meta_data(self, bible, version, copyright, permissions, - bookname_language): - """ - Saves the bibles meta data. - """ - log.debug(u'update_meta data %s, %s, %s, %s', - bible, version, copyright, permissions) - self.db_cache[bible].update_meta(u'Version', version) - self.db_cache[bible].update_meta(u'Copyright', copyright) - self.db_cache[bible].update_meta(u'Permissions', permissions) - self.db_cache[bible].update_meta(u'Bookname language', + self.db_cache[bible].save_meta(u'Version', version) + self.db_cache[bible].save_meta(u'Copyright', copyright) + self.db_cache[bible].save_meta(u'Permissions', permissions) + self.db_cache[bible].save_meta(u'Bookname language', bookname_language) def get_meta_data(self, bible, key): diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 980d8d94d..728bc3931 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -349,10 +349,6 @@ class BibleMediaItem(MediaManagerItem): log.debug(u'bible manager initialise') self.plugin.manager.media = self self.loadBibles() - bible = QtCore.QSettings().value( - self.settingsSection + u'/quick bible', QtCore.QVariant( - self.quickVersionComboBox.currentText())).toString() - find_and_set_in_combo_box(self.quickVersionComboBox, bible) self.quickSearchEdit.setSearchTypes([ (BibleSearch.Reference, u':/bibles/bibles_search_reference.png', translate('BiblesPlugin.MediaItem', 'Scripture Reference')), @@ -392,6 +388,10 @@ class BibleMediaItem(MediaManagerItem): self.initialiseAdvancedBible(unicode(bible)) elif len(bibles): self.initialiseAdvancedBible(bibles[0]) + bible = QtCore.QSettings().value( + self.settingsSection + u'/quick bible', QtCore.QVariant( + self.quickVersionComboBox.currentText())).toString() + find_and_set_in_combo_box(self.quickVersionComboBox, bible) def reloadBibles(self, process=False): log.debug(u'Reloading Bibles') @@ -426,9 +426,14 @@ class BibleMediaItem(MediaManagerItem): book_data = book_data_temp self.advancedBookComboBox.clear() first = True - language_selection = QtCore.QSettings().value( - self.settingsSection + u'/bookname language', - QtCore.QVariant(0)).toInt()[0] + language_selection = self.plugin.manager.get_meta_data( + bible, u'Bookname language') + if language_selection: + language_selection = int(language_selection.value) + if not language_selection or language_selection == -1: + language_selection = QtCore.QSettings().value( + self.settingsSection + u'/bookname language', + QtCore.QVariant(0)).toInt()[0] booknames = BibleStrings().Booknames for book in book_data: row = self.advancedBookComboBox.count() diff --git a/openlp/plugins/bibles/lib/osis.py b/openlp/plugins/bibles/lib/osis.py index 4afee912d..b9420d5cd 100644 --- a/openlp/plugins/bibles/lib/osis.py +++ b/openlp/plugins/bibles/lib/osis.py @@ -123,7 +123,7 @@ class OSISBible(BibleDB): language_match.group(1)) if language: language_id = language[u'id'] - self.create_meta(u'language_id', language_id) + self.save_meta(u'language_id', language_id) continue match = self.verse_regex.search(file_record) if match: From 0e34ed3a948fd9363a50e178d4cb609c77f404ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Armin=20K=C3=B6hler?= Date: Wed, 21 Mar 2012 22:00:44 +0100 Subject: [PATCH 03/11] fixes --- openlp/plugins/bibles/forms/editbibleform.py | 3 ++- openlp/plugins/bibles/lib/db.py | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp/plugins/bibles/forms/editbibleform.py b/openlp/plugins/bibles/forms/editbibleform.py index 2af4f5726..07bf7bbbd 100644 --- a/openlp/plugins/bibles/forms/editbibleform.py +++ b/openlp/plugins/bibles/forms/editbibleform.py @@ -79,7 +79,8 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): self.languageSelectionComboBox.setCurrentIndex( int(self.bookname_language.value)+1) self.books = {} - self.webbible = self.manager.get_meta_data(self.bible, u'download source') + self.webbible = self.manager.get_meta_data(self.bible, + u'download source') if self.webbible: self.bookNameNotice.setText(translate('BiblesPlugin.EditBibleForm', 'This is a webbible.\nIt is not possible to customize the Book ' diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index b6f3a2df8..2f9ce0cb8 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -81,7 +81,6 @@ def init_schema(url): Column(u'book_reference_id', types.Integer, index=True), Column(u'testament_reference_id', types.Integer), Column(u'name', types.Unicode(50), index=True), - #Column(u'custom_name', types.Unicode(50), index=True), ) verse_table = Table(u'verse', metadata, Column(u'id', types.Integer, primary_key=True, index=True), From 800510f2f8e92ef212e042a7cc2225b8d8b6b833 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Armin=20K=C3=B6hler?= Date: Tue, 3 Apr 2012 20:42:21 +0200 Subject: [PATCH 04/11] some fixes - improve error handling with duplicate book names --- .../plugins/bibles/forms/editbibledialog.py | 10 ++-- openlp/plugins/bibles/forms/editbibleform.py | 48 +++++++++++++------ openlp/plugins/bibles/lib/manager.py | 12 +++-- openlp/plugins/bibles/lib/mediaitem.py | 13 +++-- 4 files changed, 56 insertions(+), 27 deletions(-) diff --git a/openlp/plugins/bibles/forms/editbibledialog.py b/openlp/plugins/bibles/forms/editbibledialog.py index c2596ddab..e73af55a1 100644 --- a/openlp/plugins/bibles/forms/editbibledialog.py +++ b/openlp/plugins/bibles/forms/editbibledialog.py @@ -28,7 +28,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import build_icon, translate -from openlp.core.lib.ui import UiStrings, create_accept_reject_button_box +from openlp.core.lib.ui import create_accept_reject_button_box from openlp.plugins.bibles.lib import LanguageSelection, BibleStrings from openlp.plugins.bibles.lib.db import BiblesResourcesDB @@ -36,7 +36,7 @@ from openlp.plugins.bibles.lib.db import BiblesResourcesDB class Ui_EditBibleDialog(object): def setupUi(self, editBibleDialog): editBibleDialog.setObjectName(u'editBibleDialog') - editBibleDialog.resize(650, 400) + editBibleDialog.resize(600, 400) editBibleDialog.setWindowIcon( build_icon(u':/icon/openlp-logo-16x16.png')) editBibleDialog.setModal(True) @@ -166,11 +166,11 @@ class Ui_EditBibleDialog(object): self.languageSelectionComboBox.setItemText(LanguageSelection.English+1, translate('BiblesPlugin.EditBibleForm', 'English')) self.languageSelectionComboBox.setToolTip( - translate('BiblesPlugin.EditBibleForm', 'Multiple options:\n ' + translate('BiblesPlugin.EditBibleForm', 'Multiple options:\n' 'General Settings - the option choosen in settings section\n' 'Bible language - the language in which the Bible book names ' - 'were imported\n Application language - the language you have ' - 'chosen for OpenLP\n English - always use English book names')) + 'were imported\nApplication language - the language you have ' + 'chosen for OpenLP\nEnglish - always use English book names')) for book in BiblesResourcesDB.get_books(): self.bookNameLabel[book[u'abbreviation']].setText( u'%s:' % unicode(self.booknames[book[u'abbreviation']])) diff --git a/openlp/plugins/bibles/forms/editbibleform.py b/openlp/plugins/bibles/forms/editbibleform.py index 07bf7bbbd..5ababcaa0 100644 --- a/openlp/plugins/bibles/forms/editbibleform.py +++ b/openlp/plugins/bibles/forms/editbibleform.py @@ -26,16 +26,15 @@ ############################################################################### import logging +import re -from PyQt4 import QtCore, QtGui +from PyQt4 import QtGui -from openlp.core.lib import PluginStatus, Receiver, MediaType, translate, \ - create_separated_list +from openlp.core.lib import Receiver, translate from openlp.core.lib.ui import UiStrings, critical_error_message_box -from openlp.core.utils import AppLocation from editbibledialog import Ui_EditBibleDialog from openlp.plugins.bibles.lib import BibleStrings -from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta, BiblesResourcesDB +from openlp.plugins.bibles.lib.db import BiblesResourcesDB log = logging.getLogger(__name__) @@ -89,9 +88,8 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): self.scrollArea.setParent(None) else: self.bookNameNotice.setText(translate('BiblesPlugin.EditBibleForm', - 'You could customize the Book Names of this Bible.\nTo use ' - 'the Book Names below, you have to choose the option "Bible ' - 'language" in general settings or explicit for this Bible.')) + 'To use the customized Book Names, choose the option "Bible ' + 'language"\nin general settings or explicit for this Bible.')) for book in BiblesResourcesDB.get_books(): self.books[book[u'abbreviation']] = self.manager.get_book_by_id( self.bible, book[u'id']) @@ -125,12 +123,12 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): self.permissions = unicode(self.permissionsEdit.text()) self.bookname_language = \ self.languageSelectionComboBox.currentIndex()-1 + for error in self.validate_error: + self.changeBackgroundColor(error, 'white') if not self.validateMeta(): save = False if not self.webbible and save: custom_names = {} - for error in self.validate_error: - self.changeBackgroundColor(error, 'white') for abbr, book in self.books.iteritems(): if book: custom_names[abbr] = unicode(self.bookNameEdit[abbr].text()) @@ -139,6 +137,8 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): save = False break if save: + Receiver.send_message(u'openlp_process_events') + Receiver.send_message(u'cursor_busy') self.manager.save_meta_data(self.bible, self.version, self.copyright, self.permissions, self.bookname_language) if not self.webbible: @@ -148,6 +148,7 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): book.name = custom_names[abbr] self.manager.update_book(self.bible, book) self.bible = None + Receiver.send_message(u'cursor_normal') QtGui.QDialog.accept(self) def validateMeta(self): @@ -155,27 +156,33 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): Validate the Meta before saving. """ if not self.version: + self.changeBackgroundColor(self.versionNameEdit, 'red') + self.validate_error = [self.versionNameEdit] + self.versionNameEdit.setFocus() critical_error_message_box(UiStrings().EmptyField, translate('BiblesPlugin.BibleEditForm', 'You need to specify a version name for your Bible.')) - self.versionNameEdit.setFocus() return False elif not self.copyright: + self.changeBackgroundColor(self.copyrightEdit, 'red') + self.validate_error = [self.copyrightEdit] + self.copyrightEdit.setFocus() critical_error_message_box(UiStrings().EmptyField, translate('BiblesPlugin.BibleEditForm', 'You need to set a copyright for your Bible. ' 'Bibles in the Public Domain need to be marked as such.')) - self.copyrightEdit.setFocus() return False elif self.manager.exists(self.version) and \ self.manager.get_meta_data(self.bible, u'Version').value != \ self.version: + self.changeBackgroundColor(self.versionNameEdit, 'red') + self.validate_error = [self.versionNameEdit] + self.versionNameEdit.setFocus() critical_error_message_box( translate('BiblesPlugin.BibleEditForm', 'Bible Exists'), translate('BiblesPlugin.BibleEditForm', 'This Bible already exists. Please import ' 'a different Bible or first delete the existing one.')) - self.versionNameEdit.setFocus() return False return True @@ -183,6 +190,7 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): """ Validate a book. """ + book_regex = re.compile(u'[\d]*[^\d]+$') if not new_bookname: self.changeBackgroundColor(self.bookNameEdit[abbreviation], 'red') self.validate_error = [self.bookNameEdit[abbreviation]] @@ -192,9 +200,21 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): 'You need to specify a book name for "%s".')) % self.booknames[abbreviation]) return False + elif not book_regex.match(new_bookname): + self.changeBackgroundColor(self.bookNameEdit[abbreviation], 'red') + self.validate_error = [self.bookNameEdit[abbreviation]] + self.bookNameEdit[abbreviation].setFocus() + critical_error_message_box(UiStrings().EmptyField, + unicode(translate('BiblesPlugin.BibleEditForm', + 'The book name "%s" is not correct.\nDecimal digits only could ' + 'be used at the beginning and\nmust be followed by one or more ' + 'non-digit characters')) % new_bookname) + return False for abbr, book in self.books.iteritems(): if book: - if book.name == new_bookname: + if abbr == abbreviation: + continue + if unicode(self.bookNameEdit[abbr].text()) == new_bookname: self.changeBackgroundColor(self.bookNameEdit[abbreviation], 'red') self.bookNameEdit[abbreviation].setFocus() diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index fb4c606d0..4879e3434 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -327,9 +327,13 @@ class BibleManager(object): 'Import Wizard to install one or more Bibles.') }) return None - language_selection = QtCore.QSettings().value( - self.settingsSection + u'/bookname language', - QtCore.QVariant(0)).toInt()[0] + language_selection = self.get_meta_data(bible, u'Bookname language') + if language_selection: + language_selection = int(language_selection.value) + if language_selection == None or language_selection == -1: + language_selection = QtCore.QSettings().value( + self.settingsSection + u'/bookname language', + QtCore.QVariant(0)).toInt()[0] reflist = parse_reference(versetext, self.db_cache[bible], language_selection, book_ref_id) if reflist: @@ -415,7 +419,7 @@ class BibleManager(object): return None def save_meta_data(self, bible, version, copyright, permissions, - bookname_language): + bookname_language=-1): """ Saves the bibles meta data. """ diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 4611cb643..82416b832 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -433,7 +433,7 @@ class BibleMediaItem(MediaManagerItem): bible, u'Bookname language') if language_selection: language_selection = int(language_selection.value) - if not language_selection or language_selection == -1: + if language_selection == None or language_selection == -1: language_selection = QtCore.QSettings().value( self.settingsSection + u'/bookname language', QtCore.QVariant(0)).toInt()[0] @@ -508,9 +508,14 @@ class BibleMediaItem(MediaManagerItem): secondbook.book_reference_id: book_data_temp.append(book) book_data = book_data_temp - language_selection = QtCore.QSettings().value( - self.settingsSection + u'/bookname language', - QtCore.QVariant(0)).toInt()[0] + language_selection = self.plugin.manager.get_meta_data( + bible, u'Bookname language') + if language_selection: + language_selection = int(language_selection.value) + if language_selection == None or language_selection == -1: + language_selection = QtCore.QSettings().value( + self.settingsSection + u'/bookname language', + QtCore.QVariant(0)).toInt()[0] if language_selection == LanguageSelection.Bible: books = [book.name + u' ' for book in book_data] elif language_selection == LanguageSelection.Application: From 02e36ba6417e23c84dff5da9bcc9cb6ed81a35f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Armin=20K=C3=B6hler?= Date: Tue, 3 Apr 2012 21:23:26 +0200 Subject: [PATCH 05/11] bookname in list view and shown in footer now uses the choosen language --- openlp/plugins/bibles/lib/mediaitem.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 82416b832..072de9bf6 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -837,9 +837,28 @@ class BibleMediaItem(MediaManagerItem): second_permissions = self.plugin.manager.get_meta_data( second_bible, u'Permissions').value items = [] + language_selection = self.plugin.manager.get_meta_data( + bible, u'Bookname language') + if language_selection: + language_selection = int(language_selection.value) + if language_selection == None or language_selection == -1: + language_selection = QtCore.QSettings().value( + self.settingsSection + u'/bookname language', + QtCore.QVariant(0)).toInt()[0] for count, verse in enumerate(search_results): + if language_selection == LanguageSelection.Bible: + book = verse.book.name + elif language_selection == LanguageSelection.Application: + booknames = BibleStrings().Booknames + data = BiblesResourcesDB.get_book_by_id( + verse.book.book_reference_id) + book = unicode(booknames[data[u'abbreviation']]) + elif language_selection == LanguageSelection.English: + data = BiblesResourcesDB.get_book_by_id( + verse.book.book_reference_id) + book = data[u'name'] data = { - 'book': QtCore.QVariant(verse.book.name), + 'book': QtCore.QVariant(book), 'chapter': QtCore.QVariant(verse.chapter), 'verse': QtCore.QVariant(verse.verse), 'bible': QtCore.QVariant(bible), @@ -861,11 +880,11 @@ class BibleMediaItem(MediaManagerItem): log.exception(u'The second_search_results does not have as ' 'many verses as the search_results.') break - bible_text = u'%s %d%s%d (%s, %s)' % (verse.book.name, + bible_text = u'%s %d%s%d (%s, %s)' % (book, verse.chapter, verse_separator, verse.verse, version, second_version) else: - bible_text = u'%s %d%s%d (%s)' % (verse.book.name, + bible_text = u'%s %d%s%d (%s)' % (book, verse.chapter, verse_separator, verse.verse, version) bible_verse = QtGui.QListWidgetItem(bible_text) bible_verse.setData(QtCore.Qt.UserRole, QtCore.QVariant(data)) From 0b246275b26cf54b13598164a3853fb9fccd3ae6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Armin=20K=C3=B6hler?= Date: Tue, 3 Apr 2012 21:51:20 +0200 Subject: [PATCH 06/11] adapt to run with HEAD r1934 --- openlp/plugins/bibles/forms/editbibledialog.py | 5 +++-- openlp/plugins/bibles/lib/manager.py | 2 -- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/openlp/plugins/bibles/forms/editbibledialog.py b/openlp/plugins/bibles/forms/editbibledialog.py index e73af55a1..51e7a0ab7 100644 --- a/openlp/plugins/bibles/forms/editbibledialog.py +++ b/openlp/plugins/bibles/forms/editbibledialog.py @@ -28,7 +28,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import build_icon, translate -from openlp.core.lib.ui import create_accept_reject_button_box +from openlp.core.lib.ui import create_button_box from openlp.plugins.bibles.lib import LanguageSelection, BibleStrings from openlp.plugins.bibles.lib.db import BiblesResourcesDB @@ -133,7 +133,8 @@ class Ui_EditBibleDialog(object): self.bibleTabWidget.addTab(self.bookNameTab, u'') # Last few bits self.dialogLayout.addWidget(self.bibleTabWidget) - self.buttonBox = create_accept_reject_button_box(editBibleDialog) + self.buttonBox = create_button_box(editBibleDialog, u'buttonBox', + [u'cancel', u'save']) self.dialogLayout.addWidget(self.buttonBox) self.retranslateUi(editBibleDialog) QtCore.QMetaObject.connectSlotsByName(editBibleDialog) diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index 4879e3434..25ca8cd8e 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -31,8 +31,6 @@ import os from PyQt4 import QtCore from openlp.core.lib import Receiver, SettingsManager, translate -from openlp.core.lib.ui import critical_error_message_box, \ - create_accept_reject_button_box from openlp.core.utils import AppLocation, delete_file from openlp.plugins.bibles.lib import parse_reference, \ get_reference_separator, LanguageSelection From 5f88f49754bc709e0e8bed1fc029bf6acd46fd8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Armin=20K=C3=B6hler?= Date: Wed, 4 Apr 2012 21:34:14 +0200 Subject: [PATCH 07/11] some fixes --- .../plugins/bibles/forms/editbibledialog.py | 59 +++++++------------ openlp/plugins/bibles/forms/editbibleform.py | 33 +++++------ openlp/plugins/bibles/lib/__init__.py | 2 +- openlp/plugins/bibles/lib/db.py | 4 +- openlp/plugins/bibles/lib/manager.py | 2 +- openlp/plugins/bibles/lib/mediaitem.py | 19 +++--- 6 files changed, 50 insertions(+), 69 deletions(-) diff --git a/openlp/plugins/bibles/forms/editbibledialog.py b/openlp/plugins/bibles/forms/editbibledialog.py index 51e7a0ab7..febfa820d 100644 --- a/openlp/plugins/bibles/forms/editbibledialog.py +++ b/openlp/plugins/bibles/forms/editbibledialog.py @@ -53,40 +53,29 @@ class Ui_EditBibleDialog(object): self.metaTabLayout.setObjectName(u'metaTabLayout') self.versionNameLabel = QtGui.QLabel(self.metaTab) self.versionNameLabel.setObjectName(u'versionNameLabel') - self.metaTabLayout.setWidget(0, QtGui.QFormLayout.LabelRole, - self.versionNameLabel) self.versionNameEdit = QtGui.QLineEdit(self.metaTab) self.versionNameEdit.setObjectName(u'versionNameEdit') self.versionNameLabel.setBuddy(self.versionNameEdit) - self.metaTabLayout.setWidget(0, QtGui.QFormLayout.FieldRole, - self.versionNameEdit) + self.metaTabLayout.addRow(self.versionNameLabel, self.versionNameEdit) self.copyrightLabel = QtGui.QLabel(self.metaTab) self.copyrightLabel.setObjectName(u'copyrightLabel') - self.metaTabLayout.setWidget(1, QtGui.QFormLayout.LabelRole, - self.copyrightLabel) self.copyrightEdit = QtGui.QLineEdit(self.metaTab) self.copyrightEdit.setObjectName(u'copyrightEdit') self.copyrightLabel.setBuddy(self.copyrightEdit) - self.metaTabLayout.setWidget(1, QtGui.QFormLayout.FieldRole, - self.copyrightEdit) + self.metaTabLayout.addRow(self.copyrightLabel, self.copyrightEdit) self.permissionsLabel = QtGui.QLabel(self.metaTab) self.permissionsLabel.setObjectName(u'permissionsLabel') - self.metaTabLayout.setWidget(2, QtGui.QFormLayout.LabelRole, - self.permissionsLabel) self.permissionsEdit = QtGui.QLineEdit(self.metaTab) self.permissionsEdit.setObjectName(u'permissionsEdit') self.permissionsLabel.setBuddy(self.permissionsEdit) - self.metaTabLayout.setWidget(2, QtGui.QFormLayout.FieldRole, - self.permissionsEdit) + self.metaTabLayout.addRow(self.permissionsLabel, self.permissionsEdit) self.languageSelectionLabel = QtGui.QLabel(self.metaTab) self.languageSelectionLabel.setObjectName(u'languageSelectionLabel') - self.metaTabLayout.setWidget(3, QtGui.QFormLayout.LabelRole, - self.languageSelectionLabel) self.languageSelectionComboBox = QtGui.QComboBox(self.metaTab) self.languageSelectionComboBox.setObjectName( u'languageSelectionComboBox') self.languageSelectionComboBox.addItems([u'', u'', u'', u'']) - self.metaTabLayout.setWidget(3, QtGui.QFormLayout.FieldRole, + self.metaTabLayout.addRow(self.languageSelectionLabel, self.languageSelectionComboBox) self.bibleTabWidget.addTab(self.metaTab, u'') # Book name tab @@ -102,34 +91,29 @@ class Ui_EditBibleDialog(object): self.scrollArea.setObjectName(u'scrollArea') self.scrollArea.setHorizontalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff) - self.bookNameGroupBox = QtGui.QWidget(self.scrollArea) - self.bookNameGroupBox.setObjectName(u'bookNameGroupBox') - self.bookNameGroupBoxLayout = QtGui.QFormLayout(self.bookNameGroupBox) - self.bookNameGroupBoxLayout.setObjectName(u'bookNameGroupBoxLayout') + self.bookNameWidget = QtGui.QWidget(self.scrollArea) + self.bookNameWidget.setObjectName(u'bookNameWidget') + self.bookNameWidgetLayout = QtGui.QFormLayout(self.bookNameWidget) + self.bookNameWidgetLayout.setObjectName(u'bookNameWidgetLayout') self.bookNameLabel = {} self.bookNameEdit= {} x = 0 for book in BiblesResourcesDB.get_books(): self.bookNameLabel[book[u'abbreviation']] = QtGui.QLabel( - self.bookNameGroupBox) + self.bookNameWidget) self.bookNameLabel[book[u'abbreviation']].setObjectName( u'bookNameLabel[%s]' % book[u'abbreviation']) - self.bookNameGroupBoxLayout.setWidget(x, - QtGui.QFormLayout.LabelRole, - self.bookNameLabel[book[u'abbreviation']]) self.bookNameEdit[book[u'abbreviation']] = QtGui.QLineEdit( - self.bookNameGroupBox) + self.bookNameWidget) self.bookNameEdit[book[u'abbreviation']].setObjectName( u'bookNameEdit[%s]' % book[u'abbreviation']) - self.bookNameGroupBoxLayout.setWidget(x, - QtGui.QFormLayout.FieldRole, + self.bookNameWidgetLayout.addRow( + self.bookNameLabel[book[u'abbreviation']], self.bookNameEdit[book[u'abbreviation']]) - x = x+1 - self.scrollArea.setWidget(self.bookNameGroupBox) + x = x + 1 + self.scrollArea.setWidget(self.bookNameWidget) self.bookNameTabLayout.addWidget(self.scrollArea) - self.spacer = QtGui.QSpacerItem(20, 5, QtGui.QSizePolicy.Minimum, - QtGui.QSizePolicy.Expanding) - self.bookNameTabLayout.addItem(self.spacer) + self.bookNameTabLayout.addStretch() self.bibleTabWidget.addTab(self.bookNameTab, u'') # Last few bits self.dialogLayout.addWidget(self.bibleTabWidget) @@ -156,15 +140,16 @@ class Ui_EditBibleDialog(object): self.bibleTabWidget.indexOf(self.bookNameTab), translate('SongsPlugin.EditBibleForm', 'Custom Book Names')) self.languageSelectionLabel.setText( - translate('BiblesPlugin.EditBibleForm', 'Bookname language:')) + translate('BiblesPlugin.EditBibleForm', 'Book name language:')) self.languageSelectionComboBox.setItemText(0, translate('BiblesPlugin.EditBibleForm', 'General Settings')) - self.languageSelectionComboBox.setItemText(LanguageSelection.Bible+1, - translate('BiblesPlugin.EditBibleForm', 'Bible language')) + self.languageSelectionComboBox.setItemText(LanguageSelection.Bible + 1, + translate('BiblesPlugin.EditBibleForm', 'Bible Language')) self.languageSelectionComboBox.setItemText( - LanguageSelection.Application+1, - translate('BiblesPlugin.EditBibleForm', 'Application language')) - self.languageSelectionComboBox.setItemText(LanguageSelection.English+1, + LanguageSelection.Application + 1, + translate('BiblesPlugin.EditBibleForm', 'Application Language')) + self.languageSelectionComboBox.setItemText( + LanguageSelection.English + 1, translate('BiblesPlugin.EditBibleForm', 'English')) self.languageSelectionComboBox.setToolTip( translate('BiblesPlugin.EditBibleForm', 'Multiple options:\n' diff --git a/openlp/plugins/bibles/forms/editbibleform.py b/openlp/plugins/bibles/forms/editbibleform.py index 5ababcaa0..cb825db04 100644 --- a/openlp/plugins/bibles/forms/editbibleform.py +++ b/openlp/plugins/bibles/forms/editbibleform.py @@ -52,8 +52,6 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): self.mediaitem = mediaitem self.validate_error = [] self.booknames = BibleStrings().Booknames - # can this be automated? - self.width = 400 self.setupUi(self) self.manager = manager @@ -76,7 +74,7 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): self.bible, u'Bookname language') if self.bookname_language: self.languageSelectionComboBox.setCurrentIndex( - int(self.bookname_language.value)+1) + int(self.bookname_language.value) + 1) self.books = {} self.webbible = self.manager.get_meta_data(self.bible, u'download source') @@ -97,10 +95,10 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): self.bookNameEdit[book[u'abbreviation']].setText( self.books[book[u'abbreviation']].name) else: - self.bookNameGroupBoxLayout.removeWidget( + self.bookNameWidgetLayout.removeWidget( self.bookNameLabel[book[u'abbreviation']]) self.bookNameLabel[book[u'abbreviation']].setParent(None) - self.bookNameGroupBoxLayout.removeWidget( + self.bookNameWidgetLayout.removeWidget( self.bookNameEdit[book[u'abbreviation']]) self.bookNameEdit[book[u'abbreviation']].setParent(None) @@ -122,9 +120,9 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): self.copyright = unicode(self.copyrightEdit.text()) self.permissions = unicode(self.permissionsEdit.text()) self.bookname_language = \ - self.languageSelectionComboBox.currentIndex()-1 + self.languageSelectionComboBox.currentIndex() - 1 for error in self.validate_error: - self.changeBackgroundColor(error, 'white') + self.changeBackgroundColor(error) if not self.validateMeta(): save = False if not self.webbible and save: @@ -156,7 +154,7 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): Validate the Meta before saving. """ if not self.version: - self.changeBackgroundColor(self.versionNameEdit, 'red') + self.changeBackgroundColor(self.versionNameEdit, u'red') self.validate_error = [self.versionNameEdit] self.versionNameEdit.setFocus() critical_error_message_box(UiStrings().EmptyField, @@ -164,7 +162,7 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): 'You need to specify a version name for your Bible.')) return False elif not self.copyright: - self.changeBackgroundColor(self.copyrightEdit, 'red') + self.changeBackgroundColor(self.copyrightEdit, u'red') self.validate_error = [self.copyrightEdit] self.copyrightEdit.setFocus() critical_error_message_box(UiStrings().EmptyField, @@ -175,7 +173,7 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): elif self.manager.exists(self.version) and \ self.manager.get_meta_data(self.bible, u'Version').value != \ self.version: - self.changeBackgroundColor(self.versionNameEdit, 'red') + self.changeBackgroundColor(self.versionNameEdit, u'red') self.validate_error = [self.versionNameEdit] self.versionNameEdit.setFocus() critical_error_message_box( @@ -192,7 +190,7 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): """ book_regex = re.compile(u'[\d]*[^\d]+$') if not new_bookname: - self.changeBackgroundColor(self.bookNameEdit[abbreviation], 'red') + self.changeBackgroundColor(self.bookNameEdit[abbreviation], u'red') self.validate_error = [self.bookNameEdit[abbreviation]] self.bookNameEdit[abbreviation].setFocus() critical_error_message_box(UiStrings().EmptyField, @@ -201,7 +199,7 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): self.booknames[abbreviation]) return False elif not book_regex.match(new_bookname): - self.changeBackgroundColor(self.bookNameEdit[abbreviation], 'red') + self.changeBackgroundColor(self.bookNameEdit[abbreviation], u'red') self.validate_error = [self.bookNameEdit[abbreviation]] self.bookNameEdit[abbreviation].setFocus() critical_error_message_box(UiStrings().EmptyField, @@ -216,9 +214,9 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): continue if unicode(self.bookNameEdit[abbr].text()) == new_bookname: self.changeBackgroundColor(self.bookNameEdit[abbreviation], - 'red') + u'red') self.bookNameEdit[abbreviation].setFocus() - self.changeBackgroundColor(self.bookNameEdit[abbr], 'red') + self.changeBackgroundColor(self.bookNameEdit[abbr], u'red') self.validate_error = [self.bookNameEdit[abbr], self.bookNameEdit[abbreviation]] critical_error_message_box( @@ -230,10 +228,11 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): return False return True - def changeBackgroundColor(self, lineedit, color): + def changeBackgroundColor(self, lineedit, color=None): """ Change the Background Color of the given LineEdit """ - pal = QtGui.QPalette(lineedit.palette()) - pal.setColor(QtGui.QPalette.Base,QtGui.QColor(color)) + pal = QtGui.QPalette(self.palette()) + if color: + pal.setColor(QtGui.QPalette.Base, QtGui.QColor(color)) lineedit.setPalette(pal) diff --git a/openlp/plugins/bibles/lib/__init__.py b/openlp/plugins/bibles/lib/__init__.py index 8d51afdee..0b232959b 100644 --- a/openlp/plugins/bibles/lib/__init__.py +++ b/openlp/plugins/bibles/lib/__init__.py @@ -386,7 +386,7 @@ def parse_reference(reference, bible, language_selection, book_ref_id=False): if bible.get_book_by_book_ref_id(value[u'id']): book_ref_id = value[u'id'] break - elif bible.get_book_by_book_ref_id(book_ref_id): + elif not bible.get_book_by_book_ref_id(book_ref_id): book_ref_id = False ranges = match.group(u'ranges') range_list = get_reference_match(u'range_separator').split(ranges) diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index 704e0da4b..15f4147e3 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -213,9 +213,7 @@ class BibleDB(QtCore.QObject, Manager): The book object """ log.debug(u'BibleDB.update_book("%s")', book.name) - if self.save_object(book): - return True - return False + return self.save_object(book) def delete_book(self, db_book): """ diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index 25ca8cd8e..6dfa56fd2 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -328,7 +328,7 @@ class BibleManager(object): language_selection = self.get_meta_data(bible, u'Bookname language') if language_selection: language_selection = int(language_selection.value) - if language_selection == None or language_selection == -1: + if language_selection is None or language_selection == -1: language_selection = QtCore.QSettings().value( self.settingsSection + u'/bookname language', QtCore.QVariant(0)).toInt()[0] diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 5c38b5f4f..74a8b7304 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -435,7 +435,7 @@ class BibleMediaItem(MediaManagerItem): bible, u'Bookname language') if language_selection: language_selection = int(language_selection.value) - if language_selection == None or language_selection == -1: + if language_selection is None or language_selection == -1: language_selection = QtCore.QSettings().value( self.settingsSection + u'/bookname language', QtCore.QVariant(0)).toInt()[0] @@ -514,7 +514,7 @@ class BibleMediaItem(MediaManagerItem): bible, u'Bookname language') if language_selection: language_selection = int(language_selection.value) - if language_selection == None or language_selection == -1: + if language_selection is None or language_selection == -1: language_selection = QtCore.QSettings().value( self.settingsSection + u'/bookname language', QtCore.QVariant(0)).toInt()[0] @@ -554,7 +554,7 @@ class BibleMediaItem(MediaManagerItem): bible = unicode(self.quickVersionComboBox.currentText()) elif self.advancedTab.isVisible(): bible = unicode(self.advancedVersionComboBox.currentText()) - if bible != u'': + if bible: self.editBibleForm = EditBibleForm(self, self.plugin.formparent, self.plugin.manager) self.editBibleForm.loadBible(bible) @@ -566,7 +566,7 @@ class BibleMediaItem(MediaManagerItem): bible = unicode(self.quickVersionComboBox.currentText()) elif self.advancedTab.isVisible(): bible = unicode(self.advancedVersionComboBox.currentText()) - if bible != u'': + if bible: if QtGui.QMessageBox.question(self, UiStrings().ConfirmDelete, unicode(translate('BiblesPlugin.MediaItem', 'Are you sure you want to delete "%s"?')) % bible, @@ -843,7 +843,7 @@ class BibleMediaItem(MediaManagerItem): bible, u'Bookname language') if language_selection: language_selection = int(language_selection.value) - if language_selection == None or language_selection == -1: + if language_selection is None or language_selection == -1: language_selection = QtCore.QSettings().value( self.settingsSection + u'/bookname language', QtCore.QVariant(0)).toInt()[0] @@ -882,12 +882,11 @@ class BibleMediaItem(MediaManagerItem): log.exception(u'The second_search_results does not have as ' 'many verses as the search_results.') break - bible_text = u'%s %d%s%d (%s, %s)' % (book, - verse.chapter, verse_separator, verse.verse, version, - second_version) + bible_text = u'%s %d%s%d (%s, %s)' % (book, verse.chapter, + verse_separator, verse.verse, version, second_version) else: - bible_text = u'%s %d%s%d (%s)' % (book, - verse.chapter, verse_separator, verse.verse, version) + bible_text = u'%s %d%s%d (%s)' % (book, verse.chapter, + verse_separator, verse.verse, version) bible_verse = QtGui.QListWidgetItem(bible_text) bible_verse.setData(QtCore.Qt.UserRole, QtCore.QVariant(data)) items.append(bible_verse) From 06033df8adf32a72d0ef33173afa2bdf47ce47ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Armin=20K=C3=B6hler?= Date: Thu, 5 Apr 2012 20:31:15 +0200 Subject: [PATCH 08/11] adapt editbibleform - some fixes --- .../plugins/bibles/forms/editbibledialog.py | 76 ++++++++++++------- openlp/plugins/bibles/forms/editbibleform.py | 5 +- openlp/plugins/bibles/lib/biblestab.py | 7 +- 3 files changed, 53 insertions(+), 35 deletions(-) diff --git a/openlp/plugins/bibles/forms/editbibledialog.py b/openlp/plugins/bibles/forms/editbibledialog.py index febfa820d..c3db88e91 100644 --- a/openlp/plugins/bibles/forms/editbibledialog.py +++ b/openlp/plugins/bibles/forms/editbibledialog.py @@ -49,34 +49,52 @@ class Ui_EditBibleDialog(object): # Meta tab self.metaTab = QtGui.QWidget() self.metaTab.setObjectName(u'metaTab') - self.metaTabLayout = QtGui.QFormLayout(self.metaTab) + self.metaTabLayout = QtGui.QVBoxLayout(self.metaTab) self.metaTabLayout.setObjectName(u'metaTabLayout') - self.versionNameLabel = QtGui.QLabel(self.metaTab) + self.licenseDetailsGroupBox = QtGui.QGroupBox(self.metaTab) + self.licenseDetailsGroupBox.setObjectName(u'licenseDetailsGroupBox') + self.licenseDetailsLayout = QtGui.QFormLayout( + self.licenseDetailsGroupBox) + self.licenseDetailsLayout.setObjectName(u'licenseDetailsLayout') + self.versionNameLabel = QtGui.QLabel(self.licenseDetailsGroupBox) self.versionNameLabel.setObjectName(u'versionNameLabel') - self.versionNameEdit = QtGui.QLineEdit(self.metaTab) + self.versionNameEdit = QtGui.QLineEdit(self.licenseDetailsGroupBox) self.versionNameEdit.setObjectName(u'versionNameEdit') self.versionNameLabel.setBuddy(self.versionNameEdit) - self.metaTabLayout.addRow(self.versionNameLabel, self.versionNameEdit) - self.copyrightLabel = QtGui.QLabel(self.metaTab) + self.licenseDetailsLayout.addRow(self.versionNameLabel, + self.versionNameEdit) + self.copyrightLabel = QtGui.QLabel(self.licenseDetailsGroupBox) self.copyrightLabel.setObjectName(u'copyrightLabel') - self.copyrightEdit = QtGui.QLineEdit(self.metaTab) + self.copyrightEdit = QtGui.QLineEdit(self.licenseDetailsGroupBox) self.copyrightEdit.setObjectName(u'copyrightEdit') self.copyrightLabel.setBuddy(self.copyrightEdit) - self.metaTabLayout.addRow(self.copyrightLabel, self.copyrightEdit) - self.permissionsLabel = QtGui.QLabel(self.metaTab) + self.licenseDetailsLayout.addRow(self.copyrightLabel, + self.copyrightEdit) + self.permissionsLabel = QtGui.QLabel(self.licenseDetailsGroupBox) self.permissionsLabel.setObjectName(u'permissionsLabel') - self.permissionsEdit = QtGui.QLineEdit(self.metaTab) + self.permissionsEdit = QtGui.QLineEdit(self.licenseDetailsGroupBox) self.permissionsEdit.setObjectName(u'permissionsEdit') self.permissionsLabel.setBuddy(self.permissionsEdit) - self.metaTabLayout.addRow(self.permissionsLabel, self.permissionsEdit) - self.languageSelectionLabel = QtGui.QLabel(self.metaTab) + self.licenseDetailsLayout.addRow(self.permissionsLabel, + self.permissionsEdit) + self.metaTabLayout.addWidget(self.licenseDetailsGroupBox) + self.languageSelectionGroupBox = QtGui.QGroupBox(self.metaTab) + self.languageSelectionGroupBox.setObjectName( + u'languageSelectionGroupBox') + self.languageSelectionLayout = QtGui.QVBoxLayout( + self.languageSelectionGroupBox) + self.languageSelectionLabel = QtGui.QLabel( + self.languageSelectionGroupBox) self.languageSelectionLabel.setObjectName(u'languageSelectionLabel') - self.languageSelectionComboBox = QtGui.QComboBox(self.metaTab) + self.languageSelectionComboBox = QtGui.QComboBox( + self.languageSelectionGroupBox) self.languageSelectionComboBox.setObjectName( u'languageSelectionComboBox') self.languageSelectionComboBox.addItems([u'', u'', u'', u'']) - self.metaTabLayout.addRow(self.languageSelectionLabel, - self.languageSelectionComboBox) + self.languageSelectionLayout.addWidget(self.languageSelectionLabel) + self.languageSelectionLayout.addWidget(self.languageSelectionComboBox) + self.metaTabLayout.addWidget(self.languageSelectionGroupBox) + self.metaTabLayout.addStretch() self.bibleTabWidget.addTab(self.metaTab, u'') # Book name tab self.bookNameTab = QtGui.QWidget() @@ -97,7 +115,6 @@ class Ui_EditBibleDialog(object): self.bookNameWidgetLayout.setObjectName(u'bookNameWidgetLayout') self.bookNameLabel = {} self.bookNameEdit= {} - x = 0 for book in BiblesResourcesDB.get_books(): self.bookNameLabel[book[u'abbreviation']] = QtGui.QLabel( self.bookNameWidget) @@ -110,7 +127,6 @@ class Ui_EditBibleDialog(object): self.bookNameWidgetLayout.addRow( self.bookNameLabel[book[u'abbreviation']], self.bookNameEdit[book[u'abbreviation']]) - x = x + 1 self.scrollArea.setWidget(self.bookNameWidget) self.bookNameTabLayout.addWidget(self.scrollArea) self.bookNameTabLayout.addStretch() @@ -126,23 +142,27 @@ class Ui_EditBibleDialog(object): def retranslateUi(self, editBibleDialog): self.booknames = BibleStrings().Booknames editBibleDialog.setWindowTitle( - translate('BiblesPlugin.EditBibleForm', 'Song Editor')) + translate('BiblesPlugin.EditBibleForm', 'Bible Editor')) + # Meta tab self.bibleTabWidget.setTabText( self.bibleTabWidget.indexOf(self.metaTab), - translate('SongsPlugin.EditBibleForm', 'License Details')) + translate('SongsPlugin.EditBibleForm', 'Meta Data')) + self.licenseDetailsGroupBox.setTitle( + translate('BiblesPlugin.EditBibleForm', 'License Details')) self.versionNameLabel.setText( translate('BiblesPlugin.EditBibleForm', 'Version name:')) self.copyrightLabel.setText( translate('BiblesPlugin.EditBibleForm', 'Copyright:')) self.permissionsLabel.setText( translate('BiblesPlugin.EditBibleForm', 'Permissions:')) - self.bibleTabWidget.setTabText( - self.bibleTabWidget.indexOf(self.bookNameTab), - translate('SongsPlugin.EditBibleForm', 'Custom Book Names')) + self.languageSelectionGroupBox.setTitle(translate( + 'BiblesPlugin.EditBibleForm', 'Default Bible Language')) self.languageSelectionLabel.setText( - translate('BiblesPlugin.EditBibleForm', 'Book name language:')) + translate('BiblesPlugin.EditBibleForm', + 'Book name language in search field, search results and on ' + 'display:')) self.languageSelectionComboBox.setItemText(0, - translate('BiblesPlugin.EditBibleForm', 'General Settings')) + translate('BiblesPlugin.EditBibleForm', 'Global Settings')) self.languageSelectionComboBox.setItemText(LanguageSelection.Bible + 1, translate('BiblesPlugin.EditBibleForm', 'Bible Language')) self.languageSelectionComboBox.setItemText( @@ -151,12 +171,10 @@ class Ui_EditBibleDialog(object): self.languageSelectionComboBox.setItemText( LanguageSelection.English + 1, translate('BiblesPlugin.EditBibleForm', 'English')) - self.languageSelectionComboBox.setToolTip( - translate('BiblesPlugin.EditBibleForm', 'Multiple options:\n' - 'General Settings - the option choosen in settings section\n' - 'Bible language - the language in which the Bible book names ' - 'were imported\nApplication language - the language you have ' - 'chosen for OpenLP\nEnglish - always use English book names')) + # Book name tab + self.bibleTabWidget.setTabText( + self.bibleTabWidget.indexOf(self.bookNameTab), + translate('SongsPlugin.EditBibleForm', 'Custom Book Names')) for book in BiblesResourcesDB.get_books(): self.bookNameLabel[book[u'abbreviation']].setText( u'%s:' % unicode(self.booknames[book[u'abbreviation']])) diff --git a/openlp/plugins/bibles/forms/editbibleform.py b/openlp/plugins/bibles/forms/editbibleform.py index cb825db04..4fc73e607 100644 --- a/openlp/plugins/bibles/forms/editbibleform.py +++ b/openlp/plugins/bibles/forms/editbibleform.py @@ -82,12 +82,11 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): self.bookNameNotice.setText(translate('BiblesPlugin.EditBibleForm', 'This is a webbible.\nIt is not possible to customize the Book ' 'Names.')) - self.bookNameTabLayout.removeWidget(self.scrollArea) - self.scrollArea.setParent(None) + self.scrollArea.hide() else: self.bookNameNotice.setText(translate('BiblesPlugin.EditBibleForm', 'To use the customized Book Names, choose the option "Bible ' - 'language"\nin general settings or explicit for this Bible.')) + 'language"\nin global settings or explicit for this Bible.')) for book in BiblesResourcesDB.get_books(): self.books[book[u'abbreviation']] = self.manager.get_book_by_id( self.bible, book[u'id']) diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index 353dc265d..751c23264 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -276,10 +276,11 @@ class BiblesTab(SettingsTab): 'end marks may be defined.\nThey have to be separated by a ' 'vertical bar "|".\nPlease clear this edit line to use the ' 'default value.')) - self.languageSelectionGroupBox.setTitle(translate('BiblesPlugin.BiblesTab', - 'Default Search Field Language')) + self.languageSelectionGroupBox.setTitle(translate( + 'BiblesPlugin.BiblesTab', 'Default Bible Language')) self.languageSelectionLabel.setText(translate('BiblesPlugin.BiblesTab', - 'Book name language in search field:')) + 'Book name language in search field,\nsearch results and on ' + 'display:')) self.languageSelectionComboBox.setItemText(LanguageSelection.Bible, translate('BiblesPlugin.BiblesTab', 'Bible language')) self.languageSelectionComboBox.setItemText( From e310c20cccde70ee87bd9b4fb5a9c439b6e55e82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Armin=20K=C3=B6hler?= Date: Fri, 6 Apr 2012 20:14:38 +0200 Subject: [PATCH 09/11] fixes --- .../plugins/bibles/forms/editbibledialog.py | 9 ++- openlp/plugins/bibles/forms/editbibleform.py | 81 ++++++------------- 2 files changed, 31 insertions(+), 59 deletions(-) diff --git a/openlp/plugins/bibles/forms/editbibledialog.py b/openlp/plugins/bibles/forms/editbibledialog.py index c3db88e91..83e8d39d6 100644 --- a/openlp/plugins/bibles/forms/editbibledialog.py +++ b/openlp/plugins/bibles/forms/editbibledialog.py @@ -36,7 +36,7 @@ from openlp.plugins.bibles.lib.db import BiblesResourcesDB class Ui_EditBibleDialog(object): def setupUi(self, editBibleDialog): editBibleDialog.setObjectName(u'editBibleDialog') - editBibleDialog.resize(600, 400) + editBibleDialog.resize(520, 400) editBibleDialog.setWindowIcon( build_icon(u':/icon/openlp-logo-16x16.png')) editBibleDialog.setModal(True) @@ -103,6 +103,7 @@ class Ui_EditBibleDialog(object): self.bookNameTabLayout.setObjectName(u'bookNameTabLayout') self.bookNameNotice = QtGui.QLabel(self.bookNameTab) self.bookNameNotice.setObjectName(u'bookNameNotice') + self.bookNameNotice.setWordWrap(True) self.bookNameTabLayout.addWidget(self.bookNameNotice) self.scrollArea = QtGui.QScrollArea(self.bookNameTab) self.scrollArea.setWidgetResizable(True) @@ -162,12 +163,12 @@ class Ui_EditBibleDialog(object): 'Book name language in search field, search results and on ' 'display:')) self.languageSelectionComboBox.setItemText(0, - translate('BiblesPlugin.EditBibleForm', 'Global Settings')) + translate('BiblesPlugin.EditBibleForm', 'Global settings')) self.languageSelectionComboBox.setItemText(LanguageSelection.Bible + 1, - translate('BiblesPlugin.EditBibleForm', 'Bible Language')) + translate('BiblesPlugin.EditBibleForm', 'Bible language')) self.languageSelectionComboBox.setItemText( LanguageSelection.Application + 1, - translate('BiblesPlugin.EditBibleForm', 'Application Language')) + translate('BiblesPlugin.EditBibleForm', 'Application language')) self.languageSelectionComboBox.setItemText( LanguageSelection.English + 1, translate('BiblesPlugin.EditBibleForm', 'English')) diff --git a/openlp/plugins/bibles/forms/editbibleform.py b/openlp/plugins/bibles/forms/editbibleform.py index 4fc73e607..9300fa079 100644 --- a/openlp/plugins/bibles/forms/editbibleform.py +++ b/openlp/plugins/bibles/forms/editbibleform.py @@ -50,7 +50,6 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): """ QtGui.QDialog.__init__(self, parent) self.mediaitem = mediaitem - self.validate_error = [] self.booknames = BibleStrings().Booknames self.setupUi(self) self.manager = manager @@ -80,13 +79,14 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): u'download source') if self.webbible: self.bookNameNotice.setText(translate('BiblesPlugin.EditBibleForm', - 'This is a webbible.\nIt is not possible to customize the Book ' - 'Names.')) + 'This is a Web Download Bible.\nIt is not possible to ' + 'customize the Book Names.')) self.scrollArea.hide() else: self.bookNameNotice.setText(translate('BiblesPlugin.EditBibleForm', - 'To use the customized Book Names, choose the option "Bible ' - 'language"\nin global settings or explicit for this Bible.')) + 'To use the customized book names, "Bible language" must be ' + 'selected on the Meta Data tab or, if "Global settings" is ' + 'selected, on the Bible page in Configure OpenLP.')) for book in BiblesResourcesDB.get_books(): self.books[book[u'abbreviation']] = self.manager.get_book_by_id( self.bible, book[u'id']) @@ -114,55 +114,46 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): Exit Dialog and save data """ log.debug(u'BibleEditForm.accept') - save = True self.version = unicode(self.versionNameEdit.text()) self.copyright = unicode(self.copyrightEdit.text()) self.permissions = unicode(self.permissionsEdit.text()) self.bookname_language = \ self.languageSelectionComboBox.currentIndex() - 1 - for error in self.validate_error: - self.changeBackgroundColor(error) if not self.validateMeta(): - save = False - if not self.webbible and save: + return + if not self.webbible: custom_names = {} for abbr, book in self.books.iteritems(): if book: custom_names[abbr] = unicode(self.bookNameEdit[abbr].text()) if book.name != custom_names[abbr]: if not self.validateBook(custom_names[abbr], abbr): - save = False - break - if save: - Receiver.send_message(u'openlp_process_events') - Receiver.send_message(u'cursor_busy') - self.manager.save_meta_data(self.bible, self.version, - self.copyright, self.permissions, self.bookname_language) - if not self.webbible: - for abbr, book in self.books.iteritems(): - if book: - if book.name != custom_names[abbr]: - book.name = custom_names[abbr] - self.manager.update_book(self.bible, book) - self.bible = None - Receiver.send_message(u'cursor_normal') - QtGui.QDialog.accept(self) + return + Receiver.send_message(u'openlp_process_events') + Receiver.send_message(u'cursor_busy') + self.manager.save_meta_data(self.bible, self.version, + self.copyright, self.permissions, self.bookname_language) + if not self.webbible: + for abbr, book in self.books.iteritems(): + if book: + if book.name != custom_names[abbr]: + book.name = custom_names[abbr] + self.manager.update_book(self.bible, book) + self.bible = None + Receiver.send_message(u'cursor_normal') + QtGui.QDialog.accept(self) def validateMeta(self): """ Validate the Meta before saving. """ if not self.version: - self.changeBackgroundColor(self.versionNameEdit, u'red') - self.validate_error = [self.versionNameEdit] self.versionNameEdit.setFocus() critical_error_message_box(UiStrings().EmptyField, translate('BiblesPlugin.BibleEditForm', 'You need to specify a version name for your Bible.')) return False elif not self.copyright: - self.changeBackgroundColor(self.copyrightEdit, u'red') - self.validate_error = [self.copyrightEdit] self.copyrightEdit.setFocus() critical_error_message_box(UiStrings().EmptyField, translate('BiblesPlugin.BibleEditForm', @@ -172,8 +163,6 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): elif self.manager.exists(self.version) and \ self.manager.get_meta_data(self.bible, u'Version').value != \ self.version: - self.changeBackgroundColor(self.versionNameEdit, u'red') - self.validate_error = [self.versionNameEdit] self.versionNameEdit.setFocus() critical_error_message_box( translate('BiblesPlugin.BibleEditForm', 'Bible Exists'), @@ -189,8 +178,6 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): """ book_regex = re.compile(u'[\d]*[^\d]+$') if not new_bookname: - self.changeBackgroundColor(self.bookNameEdit[abbreviation], u'red') - self.validate_error = [self.bookNameEdit[abbreviation]] self.bookNameEdit[abbreviation].setFocus() critical_error_message_box(UiStrings().EmptyField, unicode(translate('BiblesPlugin.BibleEditForm', @@ -198,40 +185,24 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): self.booknames[abbreviation]) return False elif not book_regex.match(new_bookname): - self.changeBackgroundColor(self.bookNameEdit[abbreviation], u'red') - self.validate_error = [self.bookNameEdit[abbreviation]] self.bookNameEdit[abbreviation].setFocus() critical_error_message_box(UiStrings().EmptyField, unicode(translate('BiblesPlugin.BibleEditForm', - 'The book name "%s" is not correct.\nDecimal digits only could ' - 'be used at the beginning and\nmust be followed by one or more ' - 'non-digit characters')) % new_bookname) + 'The book name "%s" is not correct.\nNumbers can only be used ' + 'at the beginning and must\nbe followed by one or more ' + 'non-numeric characters.')) % new_bookname) return False for abbr, book in self.books.iteritems(): if book: if abbr == abbreviation: continue if unicode(self.bookNameEdit[abbr].text()) == new_bookname: - self.changeBackgroundColor(self.bookNameEdit[abbreviation], - u'red') self.bookNameEdit[abbreviation].setFocus() - self.changeBackgroundColor(self.bookNameEdit[abbr], u'red') - self.validate_error = [self.bookNameEdit[abbr], - self.bookNameEdit[abbreviation]] critical_error_message_box( translate('BiblesPlugin.BibleEditForm', - 'Book Name Exists Twice'), + 'Duplicate Book Name'), unicode(translate('BiblesPlugin.BibleEditForm', - 'The Book Name "%s" exists twice. Please change one.')) + 'The Book Name "%s" has been entered more than once.')) % new_bookname) return False return True - - def changeBackgroundColor(self, lineedit, color=None): - """ - Change the Background Color of the given LineEdit - """ - pal = QtGui.QPalette(self.palette()) - if color: - pal.setColor(QtGui.QPalette.Base, QtGui.QColor(color)) - lineedit.setPalette(pal) From 5f16ddc73ce0102435ce5a34bd0841f944e55d29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Armin=20K=C3=B6hler?= Date: Wed, 11 Apr 2012 19:39:15 +0200 Subject: [PATCH 10/11] fixes --- openlp/plugins/bibles/forms/editbibledialog.py | 6 +++--- openlp/plugins/bibles/forms/editbibleform.py | 6 ++++-- openlp/plugins/bibles/lib/biblestab.py | 4 ++-- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/openlp/plugins/bibles/forms/editbibledialog.py b/openlp/plugins/bibles/forms/editbibledialog.py index 83e8d39d6..0d59db62e 100644 --- a/openlp/plugins/bibles/forms/editbibledialog.py +++ b/openlp/plugins/bibles/forms/editbibledialog.py @@ -163,12 +163,12 @@ class Ui_EditBibleDialog(object): 'Book name language in search field, search results and on ' 'display:')) self.languageSelectionComboBox.setItemText(0, - translate('BiblesPlugin.EditBibleForm', 'Global settings')) + translate('BiblesPlugin.EditBibleForm', 'Global Settings')) self.languageSelectionComboBox.setItemText(LanguageSelection.Bible + 1, - translate('BiblesPlugin.EditBibleForm', 'Bible language')) + translate('BiblesPlugin.EditBibleForm', 'Bible Language')) self.languageSelectionComboBox.setItemText( LanguageSelection.Application + 1, - translate('BiblesPlugin.EditBibleForm', 'Application language')) + translate('BiblesPlugin.EditBibleForm', 'Application Language')) self.languageSelectionComboBox.setItemText( LanguageSelection.English + 1, translate('BiblesPlugin.EditBibleForm', 'English')) diff --git a/openlp/plugins/bibles/forms/editbibleform.py b/openlp/plugins/bibles/forms/editbibleform.py index 9300fa079..b4afa6295 100644 --- a/openlp/plugins/bibles/forms/editbibleform.py +++ b/openlp/plugins/bibles/forms/editbibleform.py @@ -94,12 +94,14 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): self.bookNameEdit[book[u'abbreviation']].setText( self.books[book[u'abbreviation']].name) else: + # It is nessecary to remove the Widget otherwise there still + # exists the vertical spacing in QFormLayout self.bookNameWidgetLayout.removeWidget( self.bookNameLabel[book[u'abbreviation']]) - self.bookNameLabel[book[u'abbreviation']].setParent(None) + self.bookNameLabel[book[u'abbreviation']].hide() self.bookNameWidgetLayout.removeWidget( self.bookNameEdit[book[u'abbreviation']]) - self.bookNameEdit[book[u'abbreviation']].setParent(None) + self.bookNameEdit[book[u'abbreviation']].hide() def reject(self): """ diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index 751c23264..b8ef7bdba 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -282,10 +282,10 @@ class BiblesTab(SettingsTab): 'Book name language in search field,\nsearch results and on ' 'display:')) self.languageSelectionComboBox.setItemText(LanguageSelection.Bible, - translate('BiblesPlugin.BiblesTab', 'Bible language')) + translate('BiblesPlugin.BiblesTab', 'Bible Language')) self.languageSelectionComboBox.setItemText( LanguageSelection.Application, - translate('BiblesPlugin.BiblesTab', 'Application language')) + translate('BiblesPlugin.BiblesTab', 'Application Language')) self.languageSelectionComboBox.setItemText(LanguageSelection.English, translate('BiblesPlugin.BiblesTab', 'English')) From 665c27c785bfa19d043afd6e6f15bd26cc809e7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Armin=20K=C3=B6hler?= Date: Thu, 12 Apr 2012 22:58:11 +0200 Subject: [PATCH 11/11] fixes --- openlp/plugins/bibles/forms/editbibleform.py | 37 ++++++++++---------- openlp/plugins/bibles/lib/manager.py | 35 ++++++++++++++---- openlp/plugins/bibles/lib/mediaitem.py | 28 +++------------ 3 files changed, 51 insertions(+), 49 deletions(-) diff --git a/openlp/plugins/bibles/forms/editbibleform.py b/openlp/plugins/bibles/forms/editbibleform.py index b4afa6295..aee42dbcc 100644 --- a/openlp/plugins/bibles/forms/editbibleform.py +++ b/openlp/plugins/bibles/forms/editbibleform.py @@ -69,11 +69,11 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): self.manager.get_meta_data(self.bible, u'Copyright').value) self.permissionsEdit.setText( self.manager.get_meta_data(self.bible, u'Permissions').value) - self.bookname_language = self.manager.get_meta_data( - self.bible, u'Bookname language') - if self.bookname_language: + bookname_language = self.manager.get_meta_data(self.bible, + u'Bookname language') + if bookname_language and bookname_language.value != u'None': self.languageSelectionComboBox.setCurrentIndex( - int(self.bookname_language.value) + 1) + int(bookname_language.value) + 1) self.books = {} self.webbible = self.manager.get_meta_data(self.bible, u'download source') @@ -107,7 +107,7 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): """ Exit Dialog and do not save """ - log.debug (u'BibleEditForm.reject') + log.debug(u'BibleEditForm.reject') self.bible = None QtGui.QDialog.reject(self) @@ -116,12 +116,13 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): Exit Dialog and save data """ log.debug(u'BibleEditForm.accept') - self.version = unicode(self.versionNameEdit.text()) - self.copyright = unicode(self.copyrightEdit.text()) - self.permissions = unicode(self.permissionsEdit.text()) - self.bookname_language = \ - self.languageSelectionComboBox.currentIndex() - 1 - if not self.validateMeta(): + version = unicode(self.versionNameEdit.text()) + copyright = unicode(self.copyrightEdit.text()) + permissions = unicode(self.permissionsEdit.text()) + bookname_language = self.languageSelectionComboBox.currentIndex() - 1 + if bookname_language == -1: + bookname_language = None + if not self.validateMeta(version, copyright): return if not self.webbible: custom_names = {} @@ -133,8 +134,8 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): return Receiver.send_message(u'openlp_process_events') Receiver.send_message(u'cursor_busy') - self.manager.save_meta_data(self.bible, self.version, - self.copyright, self.permissions, self.bookname_language) + self.manager.save_meta_data(self.bible, version, copyright, permissions, + bookname_language) if not self.webbible: for abbr, book in self.books.iteritems(): if book: @@ -145,26 +146,26 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): Receiver.send_message(u'cursor_normal') QtGui.QDialog.accept(self) - def validateMeta(self): + def validateMeta(self, version, copyright): """ Validate the Meta before saving. """ - if not self.version: + if not version: self.versionNameEdit.setFocus() critical_error_message_box(UiStrings().EmptyField, translate('BiblesPlugin.BibleEditForm', 'You need to specify a version name for your Bible.')) return False - elif not self.copyright: + elif not copyright: self.copyrightEdit.setFocus() critical_error_message_box(UiStrings().EmptyField, translate('BiblesPlugin.BibleEditForm', 'You need to set a copyright for your Bible. ' 'Bibles in the Public Domain need to be marked as such.')) return False - elif self.manager.exists(self.version) and \ + elif self.manager.exists(version) and \ self.manager.get_meta_data(self.bible, u'Version').value != \ - self.version: + version: self.versionNameEdit.setFocus() critical_error_message_box( translate('BiblesPlugin.BibleEditForm', 'Bible Exists'), diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index 8edd80dfa..b0dd92e3c 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -140,14 +140,14 @@ class BibleManager(object): BibleDB class. """ log.debug(u'Reload bibles') - self.files = SettingsManager.get_files(self.settingsSection, + files = SettingsManager.get_files(self.settingsSection, self.suffix) - if u'alternative_book_names.sqlite' in self.files: - self.files.remove(u'alternative_book_names.sqlite') - log.debug(u'Bible Files %s', self.files) + if u'alternative_book_names.sqlite' in files: + files.remove(u'alternative_book_names.sqlite') + log.debug(u'Bible Files %s', files) self.db_cache = {} self.old_bible_databases = [] - for filename in self.files: + for filename in files: bible = BibleDB(self.parent, path=self.path, file=filename) name = bible.get_name() # Remove corrupted files. @@ -211,7 +211,12 @@ class BibleManager(object): ``name`` The name of the bible. """ - for filename in self.files: + log.debug(u'BibleManager.delete_bible("%s")', name) + files = SettingsManager.get_files(self.settingsSection, + self.suffix) + if u'alternative_book_names.sqlite' in files: + files.remove(u'alternative_book_names.sqlite') + for filename in files: bible = BibleDB(self.parent, path=self.path, file=filename) # Remove the bible files if name == bible.get_name(): @@ -364,6 +369,22 @@ class BibleManager(object): }) return None + def get_language_selection(self, bible): + """ + Returns the language selection of a bible. + + ``bible`` + Unicode. The Bible to get the language selection from. + """ + log.debug(u'BibleManager.get_language_selection("%s")', bible) + language_selection = self.get_meta_data(bible, u'Bookname language') + if language_selection and language_selection.value != u'None': + return int(language_selection.value) + if language_selection is None or language_selection.value == u'None': + return QtCore.QSettings().value( + self.settingsSection + u'/bookname language', + QtCore.QVariant(0)).toInt()[0] + def verse_search(self, bible, second_bible, text): """ Does a verse search for the given bible and text. @@ -417,7 +438,7 @@ class BibleManager(object): return None def save_meta_data(self, bible, version, copyright, permissions, - bookname_language=-1): + bookname_language=None): """ Saves the bibles meta data. """ diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index ba77766ec..bca73fc70 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -432,14 +432,7 @@ class BibleMediaItem(MediaManagerItem): book_data = book_data_temp self.advancedBookComboBox.clear() first = True - language_selection = self.plugin.manager.get_meta_data( - bible, u'Bookname language') - if language_selection: - language_selection = int(language_selection.value) - if language_selection is None or language_selection == -1: - language_selection = QtCore.QSettings().value( - self.settingsSection + u'/bookname language', - QtCore.QVariant(0)).toInt()[0] + language_selection = self.plugin.manager.get_language_selection(bible) booknames = BibleStrings().Booknames for book in book_data: row = self.advancedBookComboBox.count() @@ -511,14 +504,8 @@ class BibleMediaItem(MediaManagerItem): secondbook.book_reference_id: book_data_temp.append(book) book_data = book_data_temp - language_selection = self.plugin.manager.get_meta_data( - bible, u'Bookname language') - if language_selection: - language_selection = int(language_selection.value) - if language_selection is None or language_selection == -1: - language_selection = QtCore.QSettings().value( - self.settingsSection + u'/bookname language', - QtCore.QVariant(0)).toInt()[0] + language_selection = self.plugin.manager.get_language_selection( + bible) if language_selection == LanguageSelection.Bible: books = [book.name + u' ' for book in book_data] elif language_selection == LanguageSelection.Application: @@ -834,14 +821,7 @@ class BibleMediaItem(MediaManagerItem): second_permissions = self.plugin.manager.get_meta_data( second_bible, u'Permissions').value items = [] - language_selection = self.plugin.manager.get_meta_data( - bible, u'Bookname language') - if language_selection: - language_selection = int(language_selection.value) - if language_selection is None or language_selection == -1: - language_selection = QtCore.QSettings().value( - self.settingsSection + u'/bookname language', - QtCore.QVariant(0)).toInt()[0] + language_selection = self.plugin.manager.get_language_selection(bible) for count, verse in enumerate(search_results): if language_selection == LanguageSelection.Bible: book = verse.book.name