improve BookNameForm (add possibility to reduce the books in the ComboBox and try to autodetect if a bible only contains only parts of a bible, so that only a part of the bible books are displayed at startup)

This commit is contained in:
Armin Köhler 2011-05-03 13:44:23 +02:00
parent 907434c705
commit d44b42aaff
9 changed files with 89 additions and 18 deletions

View File

@ -582,7 +582,7 @@ class BibleUpgradeForm(OpenLPWizard):
'Importing %s ...')) % 'Importing %s ...')) %
(number+1, self.maxBibles, name, book)) (number+1, self.maxBibles, name, book))
book_ref_id = self.newbibles[number].\ book_ref_id = self.newbibles[number].\
get_book_ref_id_by_name(book, language_id) get_book_ref_id_by_name(book, len(books), language_id)
if not book_ref_id: if not book_ref_id:
log.exception(u'Importing books from %s - download '\ log.exception(u'Importing books from %s - download '\
u'name: "%s" aborted by user' % ( u'name: "%s" aborted by user' % (
@ -623,7 +623,8 @@ class BibleUpgradeForm(OpenLPWizard):
'Importing %s ...')) % 'Importing %s ...')) %
(number+1, self.maxBibles, name, book[u'name'])) (number+1, self.maxBibles, name, book[u'name']))
book_ref_id = self.newbibles[number].\ book_ref_id = self.newbibles[number].\
get_book_ref_id_by_name(book[u'name'], language_id) get_book_ref_id_by_name(book[u'name'], len(books),
language_id)
if not book_ref_id: if not book_ref_id:
log.exception(u'Importing books from %s " '\ log.exception(u'Importing books from %s " '\
'failed - aborted by user' % name) 'failed - aborted by user' % name)

View File

@ -32,7 +32,7 @@ from openlp.core.lib.ui import create_accept_reject_button_box
class Ui_BookNameDialog(object): class Ui_BookNameDialog(object):
def setupUi(self, bookNameDialog): def setupUi(self, bookNameDialog):
bookNameDialog.setObjectName(u'BookNameDialog') bookNameDialog.setObjectName(u'BookNameDialog')
bookNameDialog.resize(400, 175) bookNameDialog.resize(400, 275)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred,
QtGui.QSizePolicy.MinimumExpanding) QtGui.QSizePolicy.MinimumExpanding)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
@ -41,7 +41,7 @@ class Ui_BookNameDialog(object):
.hasHeightForWidth()) .hasHeightForWidth())
bookNameDialog.setSizePolicy(sizePolicy) bookNameDialog.setSizePolicy(sizePolicy)
self.widget = QtGui.QWidget(bookNameDialog) self.widget = QtGui.QWidget(bookNameDialog)
self.widget.setGeometry(QtCore.QRect(10, 15, 381, 151)) self.widget.setGeometry(QtCore.QRect(10, 15, 381, 251))
self.widget.setObjectName(u'widget') self.widget.setObjectName(u'widget')
self.verticalLayout = QtGui.QVBoxLayout(self.widget) self.verticalLayout = QtGui.QVBoxLayout(self.widget)
self.verticalLayout.setObjectName(u'verticalLayout') self.verticalLayout.setObjectName(u'verticalLayout')
@ -75,13 +75,28 @@ class Ui_BookNameDialog(object):
self.formLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.formLayout.setWidget(0, QtGui.QFormLayout.FieldRole,
self.requestComboBox) self.requestComboBox)
self.verticalLayout.addLayout(self.formLayout) self.verticalLayout.addLayout(self.formLayout)
self.infoLabelTestaments = QtGui.QLabel(self.widget)
self.infoLabelTestaments.setObjectName(u'InfoLabelTestaments')
self.verticalLayout.addWidget(self.infoLabelTestaments)
self.checkBoxOldTestament = QtGui.QCheckBox(self.widget)
self.checkBoxOldTestament.setObjectName(u'OldTestament')
self.checkBoxOldTestament.setCheckState(2)
self.verticalLayout.addWidget(self.checkBoxOldTestament)
self.checkBoxNewTestament = QtGui.QCheckBox(self.widget)
self.checkBoxNewTestament.setObjectName(u'OldTestament')
self.checkBoxNewTestament.setCheckState(2)
self.verticalLayout.addWidget(self.checkBoxNewTestament)
self.checkBoxApocrypha = QtGui.QCheckBox(self.widget)
self.checkBoxApocrypha.setObjectName(u'OldTestament')
self.checkBoxApocrypha.setCheckState(2)
self.verticalLayout.addWidget(self.checkBoxApocrypha)
self.verticalLayout.addWidget(
create_accept_reject_button_box(bookNameDialog))
spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum,
QtGui.QSizePolicy.Expanding) QtGui.QSizePolicy.Expanding)
self.verticalLayout.addItem(spacerItem) self.verticalLayout.addItem(spacerItem)
self.formLayout.addWidget(
create_accept_reject_button_box(bookNameDialog))
self.retranslateUi(bookNameDialog) self.retranslateUi(bookNameDialog)
QtCore.QMetaObject.connectSlotsByName(bookNameDialog) QtCore.QMetaObject.connectSlotsByName(self)
def retranslateUi(self, bookNameDialog): def retranslateUi(self, bookNameDialog):
bookNameDialog.setWindowTitle( bookNameDialog.setWindowTitle(
@ -93,3 +108,11 @@ class Ui_BookNameDialog(object):
'Please choose the book it is.')) 'Please choose the book it is.'))
self.requestLabel.setText(translate('BiblesPlugin.BookNameDialog', self.requestLabel.setText(translate('BiblesPlugin.BookNameDialog',
'Book:')) 'Book:'))
self.infoLabelTestaments.setText(translate(
'BiblesPlugin.BookNameDialog', 'Show books from:'))
self.checkBoxOldTestament.setText(translate(
'BiblesPlugin.BookNameDialog', 'Old Testament'))
self.checkBoxNewTestament.setText(translate(
'BiblesPlugin.BookNameDialog', 'New Testament'))
self.checkBoxApocrypha.setText(translate('BiblesPlugin.BookNameDialog',
'Apocrypha'))

View File

@ -30,6 +30,7 @@ Module implementing BookNameForm.
import logging import logging
from PyQt4.QtGui import QDialog from PyQt4.QtGui import QDialog
from PyQt4 import QtCore
from openlp.core.lib import translate from openlp.core.lib import translate
from openlp.core.lib.ui import critical_error_message_box from openlp.core.lib.ui import critical_error_message_box
@ -52,20 +53,64 @@ class BookNameForm(QDialog, Ui_BookNameDialog):
""" """
QDialog.__init__(self, parent) QDialog.__init__(self, parent)
self.setupUi(self) self.setupUi(self)
self.customSignals()
def exec_(self, name, books): def customSignals(self):
"""
Set up the signals used in the booknameform.
"""
QtCore.QObject.connect(self.checkBoxOldTestament,
QtCore.SIGNAL(u'stateChanged(int)'),
self.onCheckBoxIndexChanged)
QtCore.QObject.connect(self.checkBoxNewTestament,
QtCore.SIGNAL(u'stateChanged(int)'),
self.onCheckBoxIndexChanged)
QtCore.QObject.connect(self.checkBoxApocrypha,
QtCore.SIGNAL(u'stateChanged(int)'),
self.onCheckBoxIndexChanged)
def onCheckBoxIndexChanged(self, index):
'''
Reload Combobox if CheckBox state has changed
'''
self.reloadComboBox()
def reloadComboBox(self):
'''
Reload the Combobox items
'''
items = [] items = []
self.requestComboBox.clear()
self.requestComboBox.addItem(u'') self.requestComboBox.addItem(u'')
self.requestLabel.setText(name)
items = BiblesResourcesDB.get_books() items = BiblesResourcesDB.get_books()
for item in items: for item in items:
addBook = True addBook = True
for book in books: for book in self.books:
if book.book_reference_id == item[u'id']: if book.book_reference_id == item[u'id']:
addBook = False addBook = False
break break
if self.checkBoxOldTestament.checkState() == 0 and \
item[u'testament_id'] == 1:
addBook = False
elif self.checkBoxNewTestament.checkState() == 0 and \
item[u'testament_id'] == 2:
addBook = False
elif self.checkBoxApocrypha.checkState() == 0 and \
item[u'testament_id'] == 3:
addBook = False
if addBook == True: if addBook == True:
self.requestComboBox.addItem(item[u'name']) self.requestComboBox.addItem(item[u'name'])
def exec_(self, name, books, maxbooks):
self.books = books
log.debug(maxbooks)
if maxbooks <= 27:
self.checkBoxOldTestament.setCheckState(0)
self.checkBoxApocrypha.setCheckState(0)
elif maxbooks <= 66:
self.checkBoxApocrypha.setCheckState(0)
self.reloadComboBox()
self.requestLabel.setText(name)
return QDialog.exec_(self) return QDialog.exec_(self)
def accept(self): def accept(self):

View File

@ -118,7 +118,7 @@ class CSVBible(BibleDB):
translate('BibleDB.Wizard', 'Importing books... %s')) % translate('BibleDB.Wizard', 'Importing books... %s')) %
unicode(line[2], details['encoding'])) unicode(line[2], details['encoding']))
book_ref_id = self.get_book_ref_id_by_name( book_ref_id = self.get_book_ref_id_by_name(
unicode(line[2], details['encoding']), language_id) unicode(line[2], details['encoding']), 67, language_id)
if not book_ref_id: if not book_ref_id:
log.exception(u'Importing books from "%s" '\ log.exception(u'Importing books from "%s" '\
'failed' % self.booksfile) 'failed' % self.booksfile)

View File

@ -327,7 +327,7 @@ class BibleDB(QtCore.QObject, Manager):
log.debug(u'BibleDB.get_book_by_book_ref_id("%s")', id) log.debug(u'BibleDB.get_book_by_book_ref_id("%s")', id)
return self.get_object_filtered(Book, Book.book_reference_id.like(id)) return self.get_object_filtered(Book, Book.book_reference_id.like(id))
def get_book_ref_id_by_name(self, book, language_id=None): def get_book_ref_id_by_name(self, book, maxbooks, language_id=None):
log.debug(u'BibleDB.get_book_ref_id_by_name:("%s", "%s")', book, log.debug(u'BibleDB.get_book_ref_id_by_name:("%s", "%s")', book,
language_id) language_id)
if BiblesResourcesDB.get_book(book, True): if BiblesResourcesDB.get_book(book, True):
@ -341,7 +341,7 @@ class BibleDB(QtCore.QObject, Manager):
from openlp.plugins.bibles.forms import BookNameForm from openlp.plugins.bibles.forms import BookNameForm
book_ref = None book_ref = None
book_name = BookNameForm(self.wizard) book_name = BookNameForm(self.wizard)
if book_name.exec_(book, self.get_books()): if book_name.exec_(book, self.get_books(), maxbooks):
book_ref = unicode(book_name.requestComboBox.currentText()) book_ref = unicode(book_name.requestComboBox.currentText())
if not book_ref: if not book_ref:
return None return None

View File

@ -422,7 +422,8 @@ class HTTPBible(BibleDB):
self.wizard.incrementProgressBar(unicode(translate( self.wizard.incrementProgressBar(unicode(translate(
'BiblesPlugin.HTTPBible', 'Importing %s...', 'BiblesPlugin.HTTPBible', 'Importing %s...',
'Importing <book name>...')) % book) 'Importing <book name>...')) % book)
book_ref_id = self.get_book_ref_id_by_name(book, language_id) book_ref_id = self.get_book_ref_id_by_name(book, len(books),
language_id)
if not book_ref_id: if not book_ref_id:
log.exception(u'Importing books from %s - download name: "%s" '\ log.exception(u'Importing books from %s - download name: "%s" '\
'failed' % (self.download_source, self.download_name)) 'failed' % (self.download_source, self.download_name))

View File

@ -74,7 +74,8 @@ class OpenLP1Bible(BibleDB):
testament_id = int(book[1]) testament_id = int(book[1])
name = unicode(book[2], u'cp1252') name = unicode(book[2], u'cp1252')
abbreviation = unicode(book[3], u'cp1252') abbreviation = unicode(book[3], u'cp1252')
book_ref_id = self.get_book_ref_id_by_name(name, language_id) book_ref_id = self.get_book_ref_id_by_name(name, len(books),
language_id)
if not book_ref_id: if not book_ref_id:
log.exception(u'Importing books from "%s" '\ log.exception(u'Importing books from "%s" '\
'failed' % self.filename) 'failed' % self.filename)

View File

@ -70,7 +70,7 @@ class OpenSongBible(BibleDB):
if self.stop_import_flag: if self.stop_import_flag:
break break
book_ref_id = self.get_book_ref_id_by_name( book_ref_id = self.get_book_ref_id_by_name(
unicode(book.attrib[u'n']), language_id) unicode(book.attrib[u'n']), len(bible.b), language_id)
if not book_ref_id: if not book_ref_id:
log.exception(u'Importing books from "%s" '\ log.exception(u'Importing books from "%s" '\
'failed' % self.filename) 'failed' % self.filename)

View File

@ -128,8 +128,8 @@ class OSISBible(BibleDB):
verse_text = match.group(4) verse_text = match.group(4)
if not db_book or db_book.name != self.books[book][0]: if not db_book or db_book.name != self.books[book][0]:
log.debug(u'New book: "%s"' % self.books[book][0]) log.debug(u'New book: "%s"' % self.books[book][0])
book_ref_id = self.get_book_ref_id_by_name( book_ref_id = self.get_book_ref_id_by_name(unicode(
unicode(self.books[book][0]), language_id) self.books[book][0]), 67, language_id)
if not book_ref_id: if not book_ref_id:
log.exception(u'Importing books from "%s" '\ log.exception(u'Importing books from "%s" '\
'failed' % self.filename) 'failed' % self.filename)