From 02ffc24f723c0e7a7ef8f2d49440aef2f97385f6 Mon Sep 17 00:00:00 2001 From: STEPHANVS Date: Tue, 3 May 2022 00:14:11 +0200 Subject: [PATCH] add "Continuous (whole verse)" bible layout --- openlp/core/common/enum.py | 1 + openlp/core/common/i18n.py | 1 + openlp/core/display/render.py | 11 +++++++++-- openlp/plugins/bibles/lib/biblestab.py | 3 ++- openlp/plugins/bibles/lib/mediaitem.py | 11 +++++++++-- 5 files changed, 22 insertions(+), 5 deletions(-) diff --git a/openlp/core/common/enum.py b/openlp/core/common/enum.py index a6de80730..04eb8ba57 100644 --- a/openlp/core/common/enum.py +++ b/openlp/core/common/enum.py @@ -90,6 +90,7 @@ class LayoutStyle(IntEnum): VersePerSlide = 0 VersePerLine = 1 Continuous = 2 + WholeVerseContinuous = 3 @unique diff --git a/openlp/core/common/i18n.py b/openlp/core/common/i18n.py index a435ad5ce..5f98c0511 100644 --- a/openlp/core/common/i18n.py +++ b/openlp/core/common/i18n.py @@ -454,6 +454,7 @@ class UiStrings(metaclass=Singleton): self.ViewMode = translate('OpenLP.Ui', 'View Mode') self.Video = translate('OpenLP.Ui', 'Video') self.WebDownloadText = translate('OpenLP.Ui', 'Web Interface, Download and Install Latest Version') + self.WholeVerseContinuous = translate('OpenLP.Ui', 'Continuous (whole verses)') self.ZeroconfErrorIntro = translate('OpenLP.Ui', 'There was a problem advertising OpenLP\'s remote ' 'interface on the network:') self.ZeroconfGenericError = translate('OpenLP.Ui', 'An unknown error occurred') diff --git a/openlp/core/display/render.py b/openlp/core/display/render.py index 2e1cbbb06..5ed753be1 100644 --- a/openlp/core/display/render.py +++ b/openlp/core/display/render.py @@ -617,7 +617,13 @@ class ThemePreviewRenderer(DisplayWindow, LogMixin): line_end = ' ' # Bibles if item and item.name == 'bibles': - pages = self._paginate_slide_words(text.split('\n'), line_end) + if item.is_capable(ItemCapabilities.CanWordSplit): + pages = self._paginate_slide_words(text.split('\n'), line_end) + else: + if item.is_capable(ItemCapabilities.NoLineBreaks): + pages = self._paginate_slide(text.split('\n'), "") + else: + pages = self._paginate_slide(text.split('\n'), line_end) # Songs and Custom elif item is None or (item and item.is_capable(ItemCapabilities.CanSoftBreak)): pages = [] @@ -705,7 +711,8 @@ class ThemePreviewRenderer(DisplayWindow, LogMixin): formatted = [] previous_html = '' previous_raw = '' - separator = '
' + #separator = '
' + separator = line_end html_lines = list(map(render_tags, lines)) # Text too long so go to next page. if not self._text_fits_on_slide(separator.join(html_lines)): diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index 4a7fc2b33..78cf344e2 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -69,7 +69,7 @@ class BiblesTab(SettingsTab): self.layout_style_label.setObjectName('layout_style_label') self.layout_style_combo_box = QtWidgets.QComboBox(self.verse_display_group_box) self.layout_style_combo_box.setObjectName('layout_style_combo_box') - self.layout_style_combo_box.addItems(['', '', '']) + self.layout_style_combo_box.addItems(['', '', '', '']) self.verse_display_layout.addRow(self.layout_style_label, self.layout_style_combo_box) self.bible_second_check_box = QtWidgets.QCheckBox(self.verse_display_group_box) self.bible_second_check_box.setObjectName('bible_second_check_box') @@ -183,6 +183,7 @@ class BiblesTab(SettingsTab): self.layout_style_combo_box.setItemText(LayoutStyle.VersePerSlide, UiStrings().VersePerSlide) self.layout_style_combo_box.setItemText(LayoutStyle.VersePerLine, UiStrings().VersePerLine) self.layout_style_combo_box.setItemText(LayoutStyle.Continuous, UiStrings().Continuous) + self.layout_style_combo_box.setItemText(LayoutStyle.WholeVerseContinuous, UiStrings().WholeVerseContinuous) self.display_style_combo_box.setItemText(DisplayStyle.NoBrackets, translate('BiblesPlugin.BiblesTab', 'No Brackets')) self.display_style_combo_box.setItemText(DisplayStyle.Round, diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index f2dd30df6..518b15345 100755 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -198,7 +198,7 @@ class BibleMediaItem(MediaManagerItem): self.second_combo_box = create_horizontal_adjusting_combo_box(self, 'second_combo_box') self.general_bible_layout.addRow(translate('BiblesPlugin.MediaItem', 'Second:'), self.second_combo_box) self.style_combo_box = create_horizontal_adjusting_combo_box(self, 'style_combo_box') - self.style_combo_box.addItems(['', '', '']) + self.style_combo_box.addItems(['', '', '', '']) self.general_bible_layout.addRow(UiStrings().LayoutStyle, self.style_combo_box) self.options_tab.setVisible(False) self.page_layout.addWidget(self.options_tab) @@ -265,6 +265,7 @@ class BibleMediaItem(MediaManagerItem): self.style_combo_box.setItemText(LayoutStyle.VersePerSlide, UiStrings().VersePerSlide) self.style_combo_box.setItemText(LayoutStyle.VersePerLine, UiStrings().VersePerLine) self.style_combo_box.setItemText(LayoutStyle.Continuous, UiStrings().Continuous) + self.style_combo_box.setItemText(LayoutStyle.WholeVerseContinuous, UiStrings().WholeVerseContinuous) self.clear_button.setToolTip(translate('BiblesPlugin.MediaItem', 'Clear the results on the current tab.')) self.save_results_button.setToolTip( translate('BiblesPlugin.MediaItem', 'Add the search results to the saved list.')) @@ -954,6 +955,8 @@ class BibleMediaItem(MediaManagerItem): # If we are 'Verse Per Line' then force a new line. elif self.settings_tab.layout_style == LayoutStyle.VersePerLine: bible_text = '{bible} {verse}{data[text]}\n'.format(bible=bible_text, verse=verse_text, data=data) + elif self.settings_tab.layout_style == LayoutStyle.WholeVerseContinuous: + bible_text = '{bible} {verse}{data[text]}\n'.format(bible=bible_text, verse=verse_text, data=data) # We have to be 'Continuous'. else: bible_text = '{bible} {verse}{data[text]}'.format(bible=bible_text, verse=verse_text, data=data) @@ -989,9 +992,13 @@ class BibleMediaItem(MediaManagerItem): if self.settings_tab.layout_style == LayoutStyle.Continuous and not data['second_bible']: # Split the line but do not replace line breaks in renderer. service_item.add_capability(ItemCapabilities.NoLineBreaks) + if self.settings_tab.layout_style == LayoutStyle.WholeVerseContinuous: + if not data['second_bible']: + service_item.add_capability(ItemCapabilities.NoLineBreaks) + else: + service_item.add_capability(ItemCapabilities.CanWordSplit) service_item.add_capability(ItemCapabilities.CanPreview) service_item.add_capability(ItemCapabilities.CanLoop) - service_item.add_capability(ItemCapabilities.CanWordSplit) service_item.add_capability(ItemCapabilities.CanEditTitle) # Service Item: Title service_item.title = '{verse} {version}'.format(verse=verses.format_verses(), version=verses.format_versions())