diff --git a/openlp/plugins/bibles/bibleplugin.py b/openlp/plugins/bibles/bibleplugin.py index 32beeac3d..18aab2a0d 100644 --- a/openlp/plugins/bibles/bibleplugin.py +++ b/openlp/plugins/bibles/bibleplugin.py @@ -48,6 +48,7 @@ __default_settings__ = { 'bibles/verse layout style': LayoutStyle.VersePerSlide, 'bibles/book name language': LanguageSelection.Bible, 'bibles/display brackets': DisplayStyle.NoBrackets, + 'bibles/is verse number visible': True, 'bibles/display new chapter': False, 'bibles/second bibles': True, 'bibles/advanced bible': '', diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index 8451d59c9..dd95d9b33 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -58,6 +58,9 @@ class BiblesTab(SettingsTab): self.verse_display_group_box.setObjectName('verse_display_group_box') self.verse_display_layout = QtGui.QFormLayout(self.verse_display_group_box) self.verse_display_layout.setObjectName('verse_display_layout') + self.is_verse_number_visible_check_box = QtGui.QCheckBox(self.verse_display_group_box) + self.is_verse_number_visible_check_box.setObjectName('is_verse_number_visible_check_box') + self.verse_display_layout.addRow(self.is_verse_number_visible_check_box) self.new_chapters_check_box = QtGui.QCheckBox(self.verse_display_group_box) self.new_chapters_check_box.setObjectName('new_chapters_check_box') self.verse_display_layout.addRow(self.new_chapters_check_box) @@ -134,6 +137,7 @@ class BiblesTab(SettingsTab): self.left_layout.addStretch() self.right_layout.addStretch() # Signals and slots + self.is_verse_number_visible_check_box.stateChanged.connect(self.on_is_verse_number_visible_check_box_changed) self.new_chapters_check_box.stateChanged.connect(self.on_new_chapters_check_box_changed) self.display_style_combo_box.activated.connect(self.on_display_style_combo_box_changed) self.bible_theme_combo_box.activated.connect(self.on_bible_theme_combo_box_changed) @@ -156,6 +160,7 @@ class BiblesTab(SettingsTab): def retranslateUi(self): self.verse_display_group_box.setTitle(translate('BiblesPlugin.BiblesTab', 'Verse Display')) + self.is_verse_number_visible_check_box.setText(translate('BiblesPlugin.BiblesTab', 'Show verse numbers')) self.new_chapters_check_box.setText(translate('BiblesPlugin.BiblesTab', 'Only show new chapter numbers')) self.layout_style_label.setText(UiStrings().LayoutStyle) self.display_style_label.setText(UiStrings().DisplayStyle) @@ -208,6 +213,13 @@ class BiblesTab(SettingsTab): def on_language_selection_combo_box_changed(self): self.language_selection = self.language_selection_combo_box.currentIndex() + def on_is_verse_number_visible_check_box_changed(self, check_state): + """ + Event handler for the 'verse number visible' check box + """ + self.is_verse_number_visible = (check_state == QtCore.Qt.Checked) + self.check_is_verse_number_visible() + def on_new_chapters_check_box_changed(self, check_state): self.show_new_chapters = False # We have a set value convert to True/False. @@ -299,11 +311,14 @@ class BiblesTab(SettingsTab): def load(self): settings = Settings() settings.beginGroup(self.settings_section) + self.is_verse_number_visible = settings.value('is verse number visible') self.show_new_chapters = settings.value('display new chapter') self.display_style = settings.value('display brackets') self.layout_style = settings.value('verse layout style') self.bible_theme = settings.value('bible theme') self.second_bibles = settings.value('second bibles') + self.is_verse_number_visible_check_box.setChecked(self.is_verse_number_visible) + self.check_is_verse_number_visible() self.new_chapters_check_box.setChecked(self.show_new_chapters) self.display_style_combo_box.setCurrentIndex(self.display_style) self.layout_style_combo_box.setCurrentIndex(self.layout_style) @@ -351,6 +366,7 @@ class BiblesTab(SettingsTab): def save(self): settings = Settings() settings.beginGroup(self.settings_section) + settings.setValue('is verse number visible', self.is_verse_number_visible) settings.setValue('display new chapter', self.show_new_chapters) settings.setValue('display brackets', self.display_style) settings.setValue('verse layout style', self.layout_style) @@ -405,3 +421,12 @@ class BiblesTab(SettingsTab): color.setAlpha(128) palette.setColor(QtGui.QPalette.Active, QtGui.QPalette.Text, color) return palette + + def check_is_verse_number_visible(self): + """ + Enables / Disables verse settings dependent on is_verse_number_visible + """ + self.new_chapters_check_box.setEnabled(self.is_verse_number_visible) + self.display_style_label.setEnabled(self.is_verse_number_visible) + self.display_style_combo_box.setEnabled(self.is_verse_number_visible) + diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 15f09699f..94f015fdb 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -803,20 +803,20 @@ class BibleMediaItem(MediaManagerItem): verses.add(book, chapter, verse, version, copyright, permissions) verse_text = self.formatVerse(old_chapter, chapter, verse) if second_bible: - bible_text = '%s %s\n\n%s %s' % (verse_text, text, verse_text, second_text) + bible_text = '%s%s\n\n%s %s' % (verse_text, text, verse_text, second_text) raw_slides.append(bible_text.rstrip()) bible_text = '' # If we are 'Verse Per Slide' then create a new slide. elif self.settings.layout_style == LayoutStyle.VersePerSlide: - bible_text = '%s %s' % (verse_text, text) + bible_text = '%s%s' % (verse_text, text) raw_slides.append(bible_text.rstrip()) bible_text = '' # If we are 'Verse Per Line' then force a new line. elif self.settings.layout_style == LayoutStyle.VersePerLine: - bible_text = '%s%s %s\n' % (bible_text, verse_text, text) + bible_text = '%s%s%s\n' % (bible_text, verse_text, text) # We have to be 'Continuous'. else: - bible_text = '%s %s %s\n' % (bible_text, verse_text, text) + bible_text = '%s %s%s\n' % (bible_text, verse_text, text) bible_text = bible_text.strip(' ') if not old_item: start_item = bitem @@ -943,17 +943,19 @@ class BibleMediaItem(MediaManagerItem): The verse number (int). """ verse_separator = get_reference_separator('sep_v_display') + if not self.settings.is_verse_number_visible: + return '' if not self.settings.show_new_chapters or old_chapter != chapter: verse_text = str(chapter) + verse_separator + str(verse) else: verse_text = str(verse) if self.settings.display_style == DisplayStyle.Round: - return '{su}(%s){/su}' % verse_text + return '{su}(%s){/su} ' % verse_text if self.settings.display_style == DisplayStyle.Curly: - return '{su}{%s}{/su}' % verse_text + return '{su}{%s}{/su} ' % verse_text if self.settings.display_style == DisplayStyle.Square: - return '{su}[%s]{/su}' % verse_text - return '{su}%s{/su}' % verse_text + return '{su}[%s]{/su} ' % verse_text + return '{su}%s{/su} ' % verse_text def search(self, string, showError): """ diff --git a/tests/functional/openlp_plugins/bibles/test_versereferencelist.py b/tests/functional/openlp_plugins/bibles/test_versereferencelist.py new file mode 100644 index 000000000..372264a76 --- /dev/null +++ b/tests/functional/openlp_plugins/bibles/test_versereferencelist.py @@ -0,0 +1,116 @@ +""" +This module contains tests for the versereferencelist submodule of the Bibles plugin. +""" +from unittest import TestCase +from openlp.plugins.bibles.lib.versereferencelist import VerseReferenceList + +class TestVerseReferenceList(TestCase): + def setUp(self): + """ + Initializes all we need + """ + + def add_first_verse_test(self): + """ + Test the addition of a verse to the empty list + """ + # GIVEN: an empty list + reference_list = VerseReferenceList() + book = 'testBook' + chapter = 1 + verse = 1 + version = 'testVersion' + copyright = 'testCopyright' + permission = 'testPermision' + + # WHEN: We add it to the verse list + reference_list.add(book, chapter, verse, version, copyright, permission) + + # THEN: The entries should be in the first entry of the list + self.assertEqual(reference_list.current_index, 0, 'The current index should be 0') + self.assertEqual(reference_list.verse_list[0]['book'], book, 'The book in first entry should be %s' % book) + self.assertEqual(reference_list.verse_list[0]['chapter'], chapter, 'The chapter in first entry should be %u' % chapter) + self.assertEqual(reference_list.verse_list[0]['start'], verse, 'The start in first entry should be %u' % verse) + self.assertEqual(reference_list.verse_list[0]['version'], version, 'The version in first entry should be %s' % version) + self.assertEqual(reference_list.verse_list[0]['end'], verse, 'The end in first entry should be %u' % verse) + + def add_next_verse_test(self): + """ + Test the addition of the following verse + """ + # GIVEN: 1 line in the list of verses + book = 'testBook' + chapter = 1 + verse = 1 + next_verse = 2 + version = 'testVersion' + copyright = 'testCopyright' + permission = 'testPermision' + reference_list = VerseReferenceList() + reference_list.add(book, chapter, verse, version, copyright, permission) + + # WHEN: We add the following verse to the verse list + reference_list.add(book, chapter, next_verse, version, copyright, permission) + + # THEN: The current index should be 0 and the end pointer of the entry should be '2' + self.assertEqual(reference_list.current_index, 0, 'The current index should be 0') + self.assertEqual(reference_list.verse_list[0]['end'], next_verse, 'The end in first entry should be %u' % next_verse) + + def add_another_verse_test(self): + """ + Test the addition of a verse in another book + """ + # GIVEN: 1 line in the list of verses + book = 'testBook' + chapter = 1 + verse = 1 + next_verse = 2 + another_book = 'testBook2' + another_chapter = 2 + another_verse = 5 + version = 'testVersion' + copyright = 'testCopyright' + permission = 'testPermision' + reference_list = VerseReferenceList() + reference_list.add(book, chapter, verse, version, copyright, permission) + + # WHEN: We add a verse of another book to the verse list + reference_list.add(another_book, another_chapter, another_verse, version, copyright, permission) + + # THEN: the current index should be 1 + self.assertEqual(reference_list.current_index, 1, 'The current index should be 1') + + def add_version_test(self): + """ + Test the addition of a version to the list + """ + # GIVEN: version, copyright and permission + reference_list = VerseReferenceList() + version = 'testVersion' + copyright = 'testCopyright' + permission = 'testPermision' + + # WHEN: a not existing version will be added + reference_list.add_version(version, copyright, permission) + + # THEN: the data will be appended to the list + self.assertEqual(len(reference_list.version_list), 1, 'The version data should be appended') + self.assertEqual(reference_list.version_list[0], {'version': version, 'copyright': copyright, 'permission': permission}, + 'The version data should be appended') + + def add_existing_version_test(self): + """ + Test the addition of an existing version to the list + """ + # GIVEN: version, copyright and permission, added to the version list + reference_list = VerseReferenceList() + version = 'testVersion' + copyright = 'testCopyright' + permission = 'testPermision' + reference_list.add_version(version, copyright, permission) + + # WHEN: an existing version will be added + reference_list.add_version(version, copyright, permission) + + # THEN: the data will not be appended to the list + self.assertEqual(len(reference_list.version_list), 1, 'The version data should not be appended')