From c8295eef112f423f20dac6ea18a954a9d6f7a2f0 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 5 Apr 2017 21:28:43 +0100 Subject: [PATCH 1/9] Add forced dividers to songs --- openlp/plugins/songs/forms/editversedialog.py | 7 +++++++ openlp/plugins/songs/forms/editverseform.py | 15 +++++++++++++++ openlp/plugins/songs/lib/mediaitem.py | 10 +++++++--- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/openlp/plugins/songs/forms/editversedialog.py b/openlp/plugins/songs/forms/editversedialog.py index 957d97adf..c892dad23 100644 --- a/openlp/plugins/songs/forms/editversedialog.py +++ b/openlp/plugins/songs/forms/editversedialog.py @@ -41,6 +41,10 @@ class Ui_EditVerseDialog(object): self.dialog_layout.addWidget(self.verse_text_edit) self.verse_type_layout = QtWidgets.QHBoxLayout() self.verse_type_layout.setObjectName('verse_type_layout') + self.force_split_button = QtWidgets.QPushButton(edit_verse_dialog) + self.force_split_button.setIcon(build_icon(':/general/general_add.png')) + self.force_split_button.setObjectName('force_split_button') + self.verse_type_layout.addWidget(self.force_split_button) self.split_button = QtWidgets.QPushButton(edit_verse_dialog) self.split_button.setIcon(build_icon(':/general/general_add.png')) self.split_button.setObjectName('split_button') @@ -79,6 +83,9 @@ class Ui_EditVerseDialog(object): self.verse_type_combo_box.setItemText(VerseType.Other, VerseType.translated_names[VerseType.Other]) self.split_button.setText(UiStrings().Split) self.split_button.setToolTip(UiStrings().SplitToolTip) + self.force_split_button.setText(translate('SongsPlugin.EditVerseForm', '&Divide')) + self.force_split_button.setToolTip(translate('SongsPlugin.EditVerseForm', 'Divide the verse when displayed ' + 'regardless of the screen size.')) self.insert_button.setText(translate('SongsPlugin.EditVerseForm', '&Insert')) self.insert_button.setToolTip(translate('SongsPlugin.EditVerseForm', 'Split a slide into two by inserting a verse splitter.')) diff --git a/openlp/plugins/songs/forms/editverseform.py b/openlp/plugins/songs/forms/editverseform.py index 226647adc..359795b0c 100644 --- a/openlp/plugins/songs/forms/editverseform.py +++ b/openlp/plugins/songs/forms/editverseform.py @@ -48,6 +48,7 @@ class EditVerseForm(QtWidgets.QDialog, Ui_EditVerseDialog): self.split_button.clicked.connect(self.on_split_button_clicked) self.verse_text_edit.cursorPositionChanged.connect(self.on_cursor_position_changed) self.verse_type_combo_box.currentIndexChanged.connect(self.on_verse_type_combo_box_changed) + self.force_split_button.clicked.connect(self.on_force_split_button_clicked) def insert_verse(self, verse_tag, verse_num=1): """ @@ -76,6 +77,20 @@ class EditVerseForm(QtWidgets.QDialog, Ui_EditVerseDialog): self.verse_text_edit.insertPlainText(insert_string) self.verse_text_edit.setFocus() + def on_force_split_button_clicked(self): + """ + The force split button has been pressed so we need add the split + """ + text = self.verse_text_edit.toPlainText() + position = self.verse_text_edit.textCursor().position() + insert_string = '[##-divide-##]' + if position and text[position - 1] != '\n': + insert_string = '\n' + insert_string + if position == len(text) or text[position] != '\n': + insert_string += '\n' + self.verse_text_edit.insertPlainText(insert_string) + self.verse_text_edit.setFocus() + def on_insert_button_clicked(self): """ The insert button has been pressed diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 7c4d128d2..e3a268620 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -573,7 +573,7 @@ class SongMediaItem(MediaManagerItem): if not song.verse_order.strip(): for verse in verse_list: # We cannot use from_loose_input() here, because database is supposed to contain English lowercase - # singlechar tags. + # single char tags. verse_tag = verse[0]['type'] verse_index = None if len(verse_tag) > 1: @@ -584,7 +584,9 @@ class SongMediaItem(MediaManagerItem): verse_index = VerseType.from_tag(verse_tag) verse_tag = VerseType.translated_tags[verse_index].upper() verse_def = '{tag}{label}'.format(tag=verse_tag, label=verse[0]['label']) - service_item.add_from_text(str(verse[1]), verse_def) + force_verse = verse[1].split('[##-divide-##]\n', 2) + for split_verse in force_verse: + service_item.add_from_text(split_verse, verse_def) else: # Loop through the verse list and expand the song accordingly. for order in song.verse_order.lower().split(): @@ -599,7 +601,9 @@ class SongMediaItem(MediaManagerItem): verse_index = VerseType.from_tag(verse[0]['type']) verse_tag = VerseType.translated_tags[verse_index] verse_def = '{tag}{text}'.format(tag=verse_tag, text=verse[0]['label']) - service_item.add_from_text(verse[1], verse_def) + force_verse = verse[1].split('[##-divide-##]\n', 2) + for split_verse in force_verse: + service_item.add_from_text(split_verse, verse_def) service_item.title = song.title author_list = self.generate_footer(service_item, song) service_item.data_string = {'title': song.search_title, 'authors': ', '.join(author_list)} From bfade0050a80d43e4cedcd1e161983629076e01f Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 9 Aug 2017 06:02:42 +0100 Subject: [PATCH 2/9] fix split to work with chords --- openlp/plugins/songs/forms/editverseform.py | 10 +-- openlp/plugins/songs/lib/__init__.py | 67 +++++++++++---------- openlp/plugins/songs/lib/mediaitem.py | 2 +- 3 files changed, 40 insertions(+), 39 deletions(-) diff --git a/openlp/plugins/songs/forms/editverseform.py b/openlp/plugins/songs/forms/editverseform.py index fff59cfbd..c942b4a68 100644 --- a/openlp/plugins/songs/forms/editverseform.py +++ b/openlp/plugins/songs/forms/editverseform.py @@ -53,8 +53,8 @@ class EditVerseForm(QtWidgets.QDialog, Ui_EditVerseDialog): self.verse_type_combo_box.currentIndexChanged.connect(self.on_verse_type_combo_box_changed) self.force_split_button.clicked.connect(self.on_force_split_button_clicked) if Settings().value('songs/enable chords'): - self.transpose_down_button.clicked.connect(self.on_transepose_down_button_clicked) - self.transpose_up_button.clicked.connect(self.on_transepose_up_button_clicked) + self.transpose_down_button.clicked.connect(self.on_transpose_down_button_clicked) + self.transpose_up_button.clicked.connect(self.on_transpose_up_button_clicked) def insert_verse(self, verse_tag, verse_num=1): """ @@ -89,7 +89,7 @@ class EditVerseForm(QtWidgets.QDialog, Ui_EditVerseDialog): """ text = self.verse_text_edit.toPlainText() position = self.verse_text_edit.textCursor().position() - insert_string = '[##-divide-##]' + insert_string = '[--}{--]' if position and text[position - 1] != '\n': insert_string = '\n' + insert_string if position == len(text) or text[position] != '\n': @@ -116,7 +116,7 @@ class EditVerseForm(QtWidgets.QDialog, Ui_EditVerseDialog): """ self.update_suggested_verse_number() - def on_transepose_up_button_clicked(self): + def on_transpose_up_button_clicked(self): """ The transpose up button clicked """ @@ -133,7 +133,7 @@ class EditVerseForm(QtWidgets.QDialog, Ui_EditVerseDialog): self.verse_text_edit.setFocus() self.verse_text_edit.moveCursor(QtGui.QTextCursor.End) - def on_transepose_down_button_clicked(self): + def on_transpose_down_button_clicked(self): """ The transpose down button clicked """ diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index b342edc19..a689ed62a 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -546,12 +546,12 @@ def delete_song(song_id, song_plugin): song_plugin.manager.delete_object(Song, song_id) -def transpose_lyrics(lyrics, transepose_value): +def transpose_lyrics(lyrics, transpose_value): """ - Transepose lyrics + Transpose lyrics - :param lyrcs: The lyrics to be transposed - :param transepose_value: The value to transpose the lyrics with + :param lyrics: The lyrics to be transposed + :param transpose_value: The value to transpose the lyrics with :return: The transposed lyrics """ # Split text by verse delimiter - both normal and optional @@ -562,16 +562,17 @@ def transpose_lyrics(lyrics, transepose_value): if verse.startswith('---[') or verse == '[---]': transposed_lyrics += verse else: - transposed_lyrics += transpose_verse(verse, transepose_value, notation) + transposed_lyrics += transpose_verse(verse, transpose_value, notation) return transposed_lyrics -def transpose_verse(verse_text, transepose_value, notation): +def transpose_verse(verse_text, transpose_value, notation): """ - Transepose lyrics + Transpose Verse - :param lyrcs: The lyrics to be transposed - :param transepose_value: The value to transpose the lyrics with + :param verse_text: The lyrics to be transposed + :param transpose_value: The value to transpose the lyrics with + :param notation: which notation to use :return: The transposed lyrics """ if '[' not in verse_text: @@ -589,11 +590,11 @@ def transpose_verse(verse_text, transepose_value, notation): if word == ']': in_tag = False transposed_lyrics += word - elif word == '/': + elif word == '/' or word == '--}{--': transposed_lyrics += word else: # This MUST be a chord - transposed_lyrics += transpose_chord(word, transepose_value, notation) + transposed_lyrics += transpose_chord(word, transpose_value, notation) # If still inside a chord tag something is wrong! if in_tag: return verse_text @@ -629,36 +630,36 @@ def transpose_chord(chord, transpose_value, notation): for i in range(0, len(chord_split)): if i > 0: transposed_chord += '/' - currentchord = chord_split[i] - if currentchord and currentchord[0] == '(': + current_chord = chord_split[i] + if current_chord and current_chord[0] == '(': transposed_chord += '(' - if len(currentchord) > 1: - currentchord = currentchord[1:] + if len(current_chord) > 1: + current_chord = current_chord[1:] else: - currentchord = '' - if len(currentchord) > 0: - if len(currentchord) > 1: - if '#b'.find(currentchord[1]) == -1: - note = currentchord[0:1] - rest = currentchord[1:] + current_chord = '' + if len(current_chord) > 0: + if len(current_chord) > 1: + if '#b'.find(current_chord[1]) == -1: + note = current_chord[0:1] + rest = current_chord[1:] else: - note = currentchord[0:2] - rest = currentchord[2:] + note = current_chord[0:2] + rest = current_chord[2:] else: - note = currentchord + note = current_chord rest = '' - notenumber = notes_flat.index(note) if note not in notes_sharp else notes_sharp.index(note) - notenumber += transpose_value - while notenumber > 11: - notenumber -= 12 - while notenumber < 0: - notenumber += 12 + note_number = notes_flat.index(note) if note not in notes_sharp else notes_sharp.index(note) + note_number += transpose_value + while note_number > 11: + note_number -= 12 + while note_number < 0: + note_number += 12 if i == 0: - current_chord = notes_sharp[notenumber] if notes_preferred[notenumber] == '#' else notes_flat[ - notenumber] + current_chord = notes_sharp[note_number] if notes_preferred[note_number] == '#' else notes_flat[ + note_number] last_chord = current_chord else: - current_chord = notes_flat[notenumber] if last_chord not in notes_sharp else notes_sharp[notenumber] + current_chord = notes_flat[note_number] if last_chord not in notes_sharp else notes_sharp[note_number] if not (note not in notes_flat and note not in notes_sharp): transposed_chord += current_chord + rest else: diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index c9a0ade04..5f93e6f06 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -589,7 +589,7 @@ class SongMediaItem(MediaManagerItem): verse_index = VerseType.from_tag(verse_tag) verse_tag = VerseType.translated_tags[verse_index].upper() verse_def = '{tag}{label}'.format(tag=verse_tag, label=verse[0]['label']) - force_verse = verse[1].split('[##-divide-##]\n', 2) + force_verse = verse[1].split('[--}{--]\n', 2) for split_verse in force_verse: service_item.add_from_text(split_verse, verse_def) else: From 7bcaec2cb3fe2cc71a35e703e3f81d27c50acfda Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 9 Aug 2017 06:15:10 +0100 Subject: [PATCH 3/9] start of the tests --- openlp/core/lib/db.py | 2 +- .../songs/forms/duplicatesongremovalform.py | 3 +-- openlp/plugins/songs/forms/editversedialog.py | 14 +++++++------- openlp/plugins/songs/forms/editverseform.py | 4 ++-- .../openlp_plugins/songs/test_editverseform.py | 17 +++++++++++++++++ 5 files changed, 28 insertions(+), 12 deletions(-) diff --git a/openlp/core/lib/db.py b/openlp/core/lib/db.py index 0021a41e7..ae578029a 100644 --- a/openlp/core/lib/db.py +++ b/openlp/core/lib/db.py @@ -208,7 +208,7 @@ def upgrade_db(url, upgrade): :param upgrade: The python module that contains the upgrade instructions. """ if not database_exists(url): - log.warn("Database {db} doesn't exist - skipping upgrade checks".format(db=url)) + log.warning("Database {db} doesn't exist - skipping upgrade checks".format(db=url)) return (0, 0) log.debug('Checking upgrades for DB {db}'.format(db=url)) diff --git a/openlp/plugins/songs/forms/duplicatesongremovalform.py b/openlp/plugins/songs/forms/duplicatesongremovalform.py index b89748402..0135b35ba 100644 --- a/openlp/plugins/songs/forms/duplicatesongremovalform.py +++ b/openlp/plugins/songs/forms/duplicatesongremovalform.py @@ -25,14 +25,13 @@ The duplicate song removal logic for OpenLP. import logging import multiprocessing -import os from PyQt5 import QtCore, QtWidgets from openlp.core.common import Registry, RegistryProperties, translate from openlp.core.ui.lib.wizard import OpenLPWizard, WizardStrings from openlp.plugins.songs.lib import delete_song -from openlp.plugins.songs.lib.db import Song, MediaFile +from openlp.plugins.songs.lib.db import Song from openlp.plugins.songs.forms.songreviewwidget import SongReviewWidget from openlp.plugins.songs.lib.songcompare import songs_probably_equal diff --git a/openlp/plugins/songs/forms/editversedialog.py b/openlp/plugins/songs/forms/editversedialog.py index 80398ce3d..380f023f7 100644 --- a/openlp/plugins/songs/forms/editversedialog.py +++ b/openlp/plugins/songs/forms/editversedialog.py @@ -42,10 +42,10 @@ class Ui_EditVerseDialog(object): self.dialog_layout.addWidget(self.verse_text_edit) self.verse_type_layout = QtWidgets.QHBoxLayout() self.verse_type_layout.setObjectName('verse_type_layout') - self.force_split_button = QtWidgets.QPushButton(edit_verse_dialog) - self.force_split_button.setIcon(build_icon(':/general/general_add.png')) - self.force_split_button.setObjectName('force_split_button') - self.verse_type_layout.addWidget(self.force_split_button) + self.divide_split_button = QtWidgets.QPushButton(edit_verse_dialog) + self.divide_split_button.setIcon(build_icon(':/general/general_add.png')) + self.divide_split_button.setObjectName('divide_split_button') + self.verse_type_layout.addWidget(self.divide_split_button) self.split_button = QtWidgets.QPushButton(edit_verse_dialog) self.split_button.setIcon(build_icon(':/general/general_add.png')) self.split_button.setObjectName('split_button') @@ -99,9 +99,9 @@ class Ui_EditVerseDialog(object): self.verse_type_combo_box.setItemText(VerseType.Other, VerseType.translated_names[VerseType.Other]) self.split_button.setText(UiStrings().Split) self.split_button.setToolTip(UiStrings().SplitToolTip) - self.force_split_button.setText(translate('SongsPlugin.EditVerseForm', '&Divide')) - self.force_split_button.setToolTip(translate('SongsPlugin.EditVerseForm', 'Divide the verse when displayed ' - 'regardless of the screen size.')) + self.divide_split_button.setText(translate('SongsPlugin.EditVerseForm', '&Divide')) + self.divide_split_button.setToolTip(translate('SongsPlugin.EditVerseForm', 'Divide the verse when displayed ' + 'regardless of the screen size.')) self.insert_button.setText(translate('SongsPlugin.EditVerseForm', '&Insert')) self.insert_button.setToolTip(translate('SongsPlugin.EditVerseForm', 'Split a slide into two by inserting a verse splitter.')) diff --git a/openlp/plugins/songs/forms/editverseform.py b/openlp/plugins/songs/forms/editverseform.py index c942b4a68..5d58dd336 100644 --- a/openlp/plugins/songs/forms/editverseform.py +++ b/openlp/plugins/songs/forms/editverseform.py @@ -51,7 +51,7 @@ class EditVerseForm(QtWidgets.QDialog, Ui_EditVerseDialog): self.split_button.clicked.connect(self.on_split_button_clicked) self.verse_text_edit.cursorPositionChanged.connect(self.on_cursor_position_changed) self.verse_type_combo_box.currentIndexChanged.connect(self.on_verse_type_combo_box_changed) - self.force_split_button.clicked.connect(self.on_force_split_button_clicked) + self.divide_split_button.clicked.connect(self.on_divide_split_button_clicked) if Settings().value('songs/enable chords'): self.transpose_down_button.clicked.connect(self.on_transpose_down_button_clicked) self.transpose_up_button.clicked.connect(self.on_transpose_up_button_clicked) @@ -83,7 +83,7 @@ class EditVerseForm(QtWidgets.QDialog, Ui_EditVerseDialog): self.verse_text_edit.insertPlainText(insert_string) self.verse_text_edit.setFocus() - def on_force_split_button_clicked(self): + def on_divide_split_button_clicked(self): """ The force split button has been pressed so we need add the split """ diff --git a/tests/functional/openlp_plugins/songs/test_editverseform.py b/tests/functional/openlp_plugins/songs/test_editverseform.py index 3e97abbb7..634b5bd4c 100644 --- a/tests/functional/openlp_plugins/songs/test_editverseform.py +++ b/tests/functional/openlp_plugins/songs/test_editverseform.py @@ -72,3 +72,20 @@ class TestEditVerseForm(TestCase, TestMixin): # THEN the verse number must not be changed self.assertEqual(3, self.edit_verse_form.verse_number_box.value(), 'The verse number should be 3') + + def test_on_divide_split_button_clicked(self): + """ + Test that divide adds text at the correct position + """ + # GIVEN some input values + self.edit_verse_form.has_single_verse = True + self.edit_verse_form.verse_type_combo_box.currentIndex = MagicMock(return_value=0) + self.edit_verse_form.verse_text_edit.toPlainText = MagicMock(return_value='Text') + self.edit_verse_form.verse_number_box.setValue(3) + + # WHEN the method is called + self.edit_verse_form.on_divide_split_button_clicked() + a = self.edit_verse_form.verse_text_edit.toPlainText() + # THEN the verse number must not be changed + self.assertEqual('--}{--Text', self.edit_verse_form.verse_text_edit.toPlainText(), + 'The verse number should be 3') From bc03652cda4dbef79f0074f1daa9f7718c4d236f Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Fri, 11 Aug 2017 17:09:14 +0100 Subject: [PATCH 4/9] Finish tests --- openlp/plugins/songs/forms/editverseform.py | 22 ++++++++-------- .../songs/test_editverseform.py | 25 +++++++++++++------ 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/openlp/plugins/songs/forms/editverseform.py b/openlp/plugins/songs/forms/editverseform.py index 5d58dd336..6a12f0eac 100644 --- a/openlp/plugins/songs/forms/editverseform.py +++ b/openlp/plugins/songs/forms/editverseform.py @@ -71,25 +71,25 @@ class EditVerseForm(QtWidgets.QDialog, Ui_EditVerseDialog): def on_split_button_clicked(self): """ - The split button has been pressed + The optional split button has been pressed so we need add the split """ - text = self.verse_text_edit.toPlainText() - position = self.verse_text_edit.textCursor().position() - insert_string = '[---]' - if position and text[position - 1] != '\n': - insert_string = '\n' + insert_string - if position == len(text) or text[position] != '\n': - insert_string += '\n' - self.verse_text_edit.insertPlainText(insert_string) - self.verse_text_edit.setFocus() + self._add_splitter_to_text('[---]') def on_divide_split_button_clicked(self): """ The force split button has been pressed so we need add the split """ + self._add_splitter_to_text('[--}{--]') + + def _add_splitter_to_text(self, insert_string): + """ + Add a custom splitter to the song text + + :param insert_string: The string to insert + :return: + """ text = self.verse_text_edit.toPlainText() position = self.verse_text_edit.textCursor().position() - insert_string = '[--}{--]' if position and text[position - 1] != '\n': insert_string = '\n' + insert_string if position == len(text) or text[position] != '\n': diff --git a/tests/functional/openlp_plugins/songs/test_editverseform.py b/tests/functional/openlp_plugins/songs/test_editverseform.py index 634b5bd4c..223cb7e4a 100644 --- a/tests/functional/openlp_plugins/songs/test_editverseform.py +++ b/tests/functional/openlp_plugins/songs/test_editverseform.py @@ -78,14 +78,25 @@ class TestEditVerseForm(TestCase, TestMixin): Test that divide adds text at the correct position """ # GIVEN some input values - self.edit_verse_form.has_single_verse = True - self.edit_verse_form.verse_type_combo_box.currentIndex = MagicMock(return_value=0) - self.edit_verse_form.verse_text_edit.toPlainText = MagicMock(return_value='Text') - self.edit_verse_form.verse_number_box.setValue(3) + self.edit_verse_form.verse_type_combo_box.currentIndex = MagicMock(return_value=4) + self.edit_verse_form.verse_text_edit.setPlainText('Text\n') # WHEN the method is called self.edit_verse_form.on_divide_split_button_clicked() - a = self.edit_verse_form.verse_text_edit.toPlainText() # THEN the verse number must not be changed - self.assertEqual('--}{--Text', self.edit_verse_form.verse_text_edit.toPlainText(), - 'The verse number should be 3') + self.assertEqual('[--}{--]\nText\n', self.edit_verse_form.verse_text_edit.toPlainText(), + 'The verse number should be [--}{--]\nText\n') + + def test_on_split_button_clicked(self): + """ + Test that divide adds text at the correct position + """ + # GIVEN some input values + self.edit_verse_form.verse_type_combo_box.currentIndex = MagicMock(return_value=4) + self.edit_verse_form.verse_text_edit.setPlainText('Text\n') + + # WHEN the method is called + self.edit_verse_form.on_split_button_clicked() + # THEN the verse number must not be changed + self.assertEqual('[---]\nText\n', self.edit_verse_form.verse_text_edit.toPlainText(), + 'The verse number should be [---]\nText\n') From 8d7e4dbe01ab8b4b73c103884cf0fe950ac77f80 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Fri, 11 Aug 2017 17:19:07 +0100 Subject: [PATCH 5/9] remove whitespace --- openlp/plugins/songs/forms/editverseform.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/plugins/songs/forms/editverseform.py b/openlp/plugins/songs/forms/editverseform.py index 6a12f0eac..ca74ccbe5 100644 --- a/openlp/plugins/songs/forms/editverseform.py +++ b/openlp/plugins/songs/forms/editverseform.py @@ -77,7 +77,7 @@ class EditVerseForm(QtWidgets.QDialog, Ui_EditVerseDialog): def on_divide_split_button_clicked(self): """ - The force split button has been pressed so we need add the split + The force split button has been pressed so we need add the split """ self._add_splitter_to_text('[--}{--]') From 2c813be4cc5f587e13de10d145b79007508c7114 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Fri, 11 Aug 2017 17:37:57 +0100 Subject: [PATCH 6/9] fixed missed string --- openlp/plugins/songs/lib/mediaitem.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 5f93e6f06..b0fe8698d 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -606,7 +606,7 @@ class SongMediaItem(MediaManagerItem): verse_index = VerseType.from_tag(verse[0]['type']) verse_tag = VerseType.translated_tags[verse_index] verse_def = '{tag}{text}'.format(tag=verse_tag, text=verse[0]['label']) - force_verse = verse[1].split('[##-divide-##]\n', 2) + force_verse = verse[1].split('[--}{--]\n', 2) for split_verse in force_verse: service_item.add_from_text(split_verse, verse_def) service_item.title = song.title From 7abef1df22f4d0beccb06d4c5306b1bc967b8820 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 27 Aug 2017 18:13:14 +0100 Subject: [PATCH 7/9] fix lables and render bug --- openlp/core/common/uistrings.py | 2 +- openlp/core/lib/renderer.py | 3 +++ openlp/core/ui/lib/listpreviewwidget.py | 10 ++++---- openlp/plugins/songs/forms/editversedialog.py | 24 +++++++++---------- openlp/plugins/songs/forms/editverseform.py | 8 +++---- openlp/plugins/songs/lib/mediaitem.py | 4 ++-- .../songs/test_editverseform.py | 4 ++-- 7 files changed, 29 insertions(+), 26 deletions(-) diff --git a/openlp/core/common/uistrings.py b/openlp/core/common/uistrings.py index 02937351d..b599c3ea0 100644 --- a/openlp/core/common/uistrings.py +++ b/openlp/core/common/uistrings.py @@ -150,7 +150,7 @@ class UiStrings(object): self.SaveService = translate('OpenLP.Ui', 'Save Service') self.Service = translate('OpenLP.Ui', 'Service') self.ShortResults = translate('OpenLP.Ui', 'Please type more text to use \'Search As You Type\'') - self.Split = translate('OpenLP.Ui', 'Optional &Split') + self.Split = translate('OpenLP.Ui', 'Overflow &Split') self.SplitToolTip = translate('OpenLP.Ui', 'Split a slide into two only if it does not fit on the screen as one slide.') self.StartingImport = translate('OpenLP.Ui', 'Starting import...') diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 67d33ce04..124209f88 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -242,6 +242,9 @@ class Renderer(OpenLPMixin, RegistryMixin, RegistryProperties): elif item.is_capable(ItemCapabilities.CanSoftBreak): pages = [] if '[---]' in text: + # Remove Overflow split if at start of the text + if text.startswith('[---]'): + text = text[5:] # Remove two or more option slide breaks next to each other (causing infinite loop). while '\n[---]\n[---]\n' in text: text = text.replace('\n[---]\n[---]\n', '\n[---]\n') diff --git a/openlp/core/ui/lib/listpreviewwidget.py b/openlp/core/ui/lib/listpreviewwidget.py index 142034785..c5c2b01d2 100644 --- a/openlp/core/ui/lib/listpreviewwidget.py +++ b/openlp/core/ui/lib/listpreviewwidget.py @@ -209,21 +209,21 @@ class ListPreviewWidget(QtWidgets.QTableWidget, RegistryProperties): Switches to the given row. """ # Retrieve setting - autoscrolling = Settings().value('advanced/autoscrolling') + auto_scrolling = Settings().value('advanced/autoscrolling') # Check if auto-scroll disabled (None) and validate value as dict containing 'dist' and 'pos' # 'dist' represents the slide to scroll to relative to the new slide (-1 = previous, 0 = current, 1 = next) # 'pos' represents the vert position of of the slide (0 = in view, 1 = top, 2 = middle, 3 = bottom) - if not (isinstance(autoscrolling, dict) and 'dist' in autoscrolling and 'pos' in autoscrolling and - isinstance(autoscrolling['dist'], int) and isinstance(autoscrolling['pos'], int)): + if not (isinstance(auto_scrolling, dict) and 'dist' in auto_scrolling and 'pos' in auto_scrolling and + isinstance(auto_scrolling['dist'], int) and isinstance(auto_scrolling['pos'], int)): return # prevent scrolling past list bounds - scroll_to_slide = slide + autoscrolling['dist'] + scroll_to_slide = slide + auto_scrolling['dist'] if scroll_to_slide < 0: scroll_to_slide = 0 if scroll_to_slide >= self.slide_count(): scroll_to_slide = self.slide_count() - 1 # Scroll to item if possible. - self.scrollToItem(self.item(scroll_to_slide, 0), autoscrolling['pos']) + self.scrollToItem(self.item(scroll_to_slide, 0), auto_scrolling['pos']) self.selectRow(slide) def current_slide_number(self): diff --git a/openlp/plugins/songs/forms/editversedialog.py b/openlp/plugins/songs/forms/editversedialog.py index 380f023f7..04e3a8c8f 100644 --- a/openlp/plugins/songs/forms/editversedialog.py +++ b/openlp/plugins/songs/forms/editversedialog.py @@ -42,14 +42,14 @@ class Ui_EditVerseDialog(object): self.dialog_layout.addWidget(self.verse_text_edit) self.verse_type_layout = QtWidgets.QHBoxLayout() self.verse_type_layout.setObjectName('verse_type_layout') - self.divide_split_button = QtWidgets.QPushButton(edit_verse_dialog) - self.divide_split_button.setIcon(build_icon(':/general/general_add.png')) - self.divide_split_button.setObjectName('divide_split_button') - self.verse_type_layout.addWidget(self.divide_split_button) - self.split_button = QtWidgets.QPushButton(edit_verse_dialog) - self.split_button.setIcon(build_icon(':/general/general_add.png')) - self.split_button.setObjectName('split_button') - self.verse_type_layout.addWidget(self.split_button) + self.forced_split_button = QtWidgets.QPushButton(edit_verse_dialog) + self.forced_split_button.setIcon(build_icon(':/general/general_add.png')) + self.forced_split_button.setObjectName('forced_split_button') + self.verse_type_layout.addWidget(self.forced_split_button) + self.overflow_split_button = QtWidgets.QPushButton(edit_verse_dialog) + self.overflow_split_button.setIcon(build_icon(':/general/general_add.png')) + self.overflow_split_button.setObjectName('overflow_split_button') + self.verse_type_layout.addWidget(self.overflow_split_button) self.verse_type_label = QtWidgets.QLabel(edit_verse_dialog) self.verse_type_label.setObjectName('verse_type_label') self.verse_type_layout.addWidget(self.verse_type_label) @@ -97,10 +97,10 @@ class Ui_EditVerseDialog(object): self.verse_type_combo_box.setItemText(VerseType.Intro, VerseType.translated_names[VerseType.Intro]) self.verse_type_combo_box.setItemText(VerseType.Ending, VerseType.translated_names[VerseType.Ending]) self.verse_type_combo_box.setItemText(VerseType.Other, VerseType.translated_names[VerseType.Other]) - self.split_button.setText(UiStrings().Split) - self.split_button.setToolTip(UiStrings().SplitToolTip) - self.divide_split_button.setText(translate('SongsPlugin.EditVerseForm', '&Divide')) - self.divide_split_button.setToolTip(translate('SongsPlugin.EditVerseForm', 'Divide the verse when displayed ' + self.overflow_split_button.setText(UiStrings().Split) + self.overflow_split_button.setToolTip(UiStrings().SplitToolTip) + self.forced_split_button.setText(translate('SongsPlugin.EditVerseForm', '&Forced Split')) + self.forced_split_button.setToolTip(translate('SongsPlugin.EditVerseForm', 'Split the verse when displayed ' 'regardless of the screen size.')) self.insert_button.setText(translate('SongsPlugin.EditVerseForm', '&Insert')) self.insert_button.setToolTip(translate('SongsPlugin.EditVerseForm', diff --git a/openlp/plugins/songs/forms/editverseform.py b/openlp/plugins/songs/forms/editverseform.py index ca74ccbe5..51dae7b4b 100644 --- a/openlp/plugins/songs/forms/editverseform.py +++ b/openlp/plugins/songs/forms/editverseform.py @@ -48,10 +48,10 @@ class EditVerseForm(QtWidgets.QDialog, Ui_EditVerseDialog): self.setupUi(self) self.has_single_verse = False self.insert_button.clicked.connect(self.on_insert_button_clicked) - self.split_button.clicked.connect(self.on_split_button_clicked) + self.overflow_split_button.clicked.connect(self.on_overflow_split_button_clicked) self.verse_text_edit.cursorPositionChanged.connect(self.on_cursor_position_changed) self.verse_type_combo_box.currentIndexChanged.connect(self.on_verse_type_combo_box_changed) - self.divide_split_button.clicked.connect(self.on_divide_split_button_clicked) + self.forced_split_button.clicked.connect(self.on_forced_split_button_clicked) if Settings().value('songs/enable chords'): self.transpose_down_button.clicked.connect(self.on_transpose_down_button_clicked) self.transpose_up_button.clicked.connect(self.on_transpose_up_button_clicked) @@ -69,13 +69,13 @@ class EditVerseForm(QtWidgets.QDialog, Ui_EditVerseDialog): self.verse_text_edit.insertPlainText('---[{tag}:{number}]---\n'.format(tag=verse_tag, number=verse_num)) self.verse_text_edit.setFocus() - def on_split_button_clicked(self): + def on_overflow_split_button_clicked(self): """ The optional split button has been pressed so we need add the split """ self._add_splitter_to_text('[---]') - def on_divide_split_button_clicked(self): + def on_forced_split_button_clicked(self): """ The force split button has been pressed so we need add the split """ diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index ee66804ed..400c64fdc 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -590,7 +590,7 @@ class SongMediaItem(MediaManagerItem): verse_index = VerseType.from_tag(verse_tag) verse_tag = VerseType.translated_tags[verse_index].upper() verse_def = '{tag}{label}'.format(tag=verse_tag, label=verse[0]['label']) - force_verse = verse[1].split('[--}{--]\n', 2) + force_verse = verse[1].split('[--}{--]\n') for split_verse in force_verse: service_item.add_from_text(split_verse, verse_def) else: @@ -607,7 +607,7 @@ class SongMediaItem(MediaManagerItem): verse_index = VerseType.from_tag(verse[0]['type']) verse_tag = VerseType.translated_tags[verse_index] verse_def = '{tag}{label}'.format(tag=verse_tag, label=verse[0]['label']) - force_verse = verse[1].split('[--}{--]\n', 2) + force_verse = verse[1].split('[--}{--]\n') for split_verse in force_verse: service_item.add_from_text(split_verse, verse_def) service_item.title = song.title diff --git a/tests/functional/openlp_plugins/songs/test_editverseform.py b/tests/functional/openlp_plugins/songs/test_editverseform.py index 223cb7e4a..78dd4ebb5 100644 --- a/tests/functional/openlp_plugins/songs/test_editverseform.py +++ b/tests/functional/openlp_plugins/songs/test_editverseform.py @@ -82,7 +82,7 @@ class TestEditVerseForm(TestCase, TestMixin): self.edit_verse_form.verse_text_edit.setPlainText('Text\n') # WHEN the method is called - self.edit_verse_form.on_divide_split_button_clicked() + self.edit_verse_form.on_forced_split_button_clicked() # THEN the verse number must not be changed self.assertEqual('[--}{--]\nText\n', self.edit_verse_form.verse_text_edit.toPlainText(), 'The verse number should be [--}{--]\nText\n') @@ -96,7 +96,7 @@ class TestEditVerseForm(TestCase, TestMixin): self.edit_verse_form.verse_text_edit.setPlainText('Text\n') # WHEN the method is called - self.edit_verse_form.on_split_button_clicked() + self.edit_verse_form.on_overflow_split_button_clicked() # THEN the verse number must not be changed self.assertEqual('[---]\nText\n', self.edit_verse_form.verse_text_edit.toPlainText(), 'The verse number should be [---]\nText\n') From 158fdd3e63aaf584aa61eeb51334ba759bad0738 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Fri, 29 Sep 2017 19:41:55 +0100 Subject: [PATCH 8/9] spelling --- openlp/plugins/songs/lib/openlyricsxml.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/plugins/songs/lib/openlyricsxml.py b/openlp/plugins/songs/lib/openlyricsxml.py index 807ea5593..84fba0343 100644 --- a/openlp/plugins/songs/lib/openlyricsxml.py +++ b/openlp/plugins/songs/lib/openlyricsxml.py @@ -281,7 +281,7 @@ class OpenLyrics(object): tags_element = None match = re.search('\{/?\w+\}', song.lyrics, re.UNICODE) if match: - # Named 'format_' - 'format' is built-in fuction in Python. + # Named 'format_' - 'format' is built-in function in Python. format_ = etree.SubElement(song_xml, 'format') tags_element = etree.SubElement(format_, 'tags') tags_element.set('application', 'OpenLP') From dddd5ab4cdb3f01c13848f17853e7dfa38bb8194 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 30 Sep 2017 15:17:37 +0100 Subject: [PATCH 9/9] Import export --- openlp/plugins/songs/lib/openlyricsxml.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/openlp/plugins/songs/lib/openlyricsxml.py b/openlp/plugins/songs/lib/openlyricsxml.py index f8c316cc8..8edb64e84 100644 --- a/openlp/plugins/songs/lib/openlyricsxml.py +++ b/openlp/plugins/songs/lib/openlyricsxml.py @@ -71,6 +71,7 @@ log = logging.getLogger(__name__) NAMESPACE = 'http://openlyrics.info/namespace/2009/song' NSMAP = '{{' + NAMESPACE + '}}{tag}' +NEWPAGETAG = '

' class SongXML(object): @@ -472,6 +473,7 @@ class OpenLyrics(object): text = text.replace('{{/{tag}}}'.format(tag=tag), '') # Replace \n with
. text = text.replace('\n', '
') + text = text.replace('[--}{--]', NEWPAGETAG) element = etree.XML('{text}'.format(text=text)) verse_element.append(element) return element @@ -634,6 +636,9 @@ class OpenLyrics(object): if element.tail: text += element.tail return text + elif newlines and element.tag == NSMAP.format(tag='p') and 'page-break-after' in str(element.attrib): + text += '[--}{--]' + return text # Start formatting tag. if element.tag == NSMAP.format(tag='tag'): text += '{{{name}}}'.format(name=element.get('name'))