Tim Bentley has proposed merging lp:~trb143/openlp/splitter into lp:openlp.
Requested reviews: OpenLP Core (openlp-core) For more details, see: https://code.launchpad.net/~trb143/openlp/splitter/+merge/328924 Add option to add a split to a song This will split the verse when added to the service but keep the verse together for editing. Useful for the 10 line hymn verses which need 2 slides to display. Fix some iffy spelling lp:~trb143/openlp/splitter (revision 2734) [SUCCESS] https://ci.openlp.io/job/Branch-01-Pull/2135/ [SUCCESS] https://ci.openlp.io/job/Branch-02-Functional-Tests/2042/ [SUCCESS] https://ci.openlp.io/job/Branch-03-Interface-Tests/1946/ [SUCCESS] https://ci.openlp.io/job/Branch-04a-Code_Analysis/1323/ [SUCCESS] https://ci.openlp.io/job/Branch-04b-Test_Coverage/1161/ [SUCCESS] https://ci.openlp.io/job/Branch-04c-Code_Analysis2/291/ [SUCCESS] https://ci.openlp.io/job/Branch-05-AppVeyor-Tests/136/ -- Your team OpenLP Core is requested to review the proposed merge of lp:~trb143/openlp/splitter into lp:openlp.
=== modified file 'openlp/core/lib/db.py' --- openlp/core/lib/db.py 2017-08-01 20:59:41 +0000 +++ openlp/core/lib/db.py 2017-08-11 16:39:27 +0000 @@ -208,7 +208,7 @@ :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)) === modified file 'openlp/plugins/songs/forms/duplicatesongremovalform.py' --- openlp/plugins/songs/forms/duplicatesongremovalform.py 2017-06-09 06:06:49 +0000 +++ openlp/plugins/songs/forms/duplicatesongremovalform.py 2017-08-11 16:39:27 +0000 @@ -25,14 +25,13 @@ 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 === modified file 'openlp/plugins/songs/forms/editversedialog.py' --- openlp/plugins/songs/forms/editversedialog.py 2017-07-04 23:13:51 +0000 +++ openlp/plugins/songs/forms/editversedialog.py 2017-08-11 16:39:27 +0000 @@ -42,6 +42,10 @@ 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') @@ -95,6 +99,9 @@ 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 ' + '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.')) === modified file 'openlp/plugins/songs/forms/editverseform.py' --- openlp/plugins/songs/forms/editverseform.py 2017-06-04 12:14:23 +0000 +++ openlp/plugins/songs/forms/editverseform.py 2017-08-11 16:39:27 +0000 @@ -51,9 +51,10 @@ 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.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_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): """ @@ -70,11 +71,25 @@ 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 + """ + 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': @@ -101,7 +116,7 @@ """ self.update_suggested_verse_number() - def on_transepose_up_button_clicked(self): + def on_transpose_up_button_clicked(self): """ The transpose up button clicked """ @@ -118,7 +133,7 @@ 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 """ === modified file 'openlp/plugins/songs/lib/__init__.py' --- openlp/plugins/songs/lib/__init__.py 2017-08-01 20:59:41 +0000 +++ openlp/plugins/songs/lib/__init__.py 2017-08-11 16:39:27 +0000 @@ -546,12 +546,12 @@ 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 @@ 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 @@ 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 @@ 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: === modified file 'openlp/plugins/songs/lib/mediaitem.py' --- openlp/plugins/songs/lib/mediaitem.py 2017-08-02 06:09:38 +0000 +++ openlp/plugins/songs/lib/mediaitem.py 2017-08-11 16:39:27 +0000 @@ -578,7 +578,7 @@ 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: @@ -589,7 +589,9 @@ 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('[--}{--]\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(): @@ -604,7 +606,9 @@ 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('[--}{--]\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)} === modified file 'tests/functional/openlp_plugins/songs/test_editverseform.py' --- tests/functional/openlp_plugins/songs/test_editverseform.py 2017-05-30 20:06:27 +0000 +++ tests/functional/openlp_plugins/songs/test_editverseform.py 2017-08-11 16:39:27 +0000 @@ -72,3 +72,31 @@ # 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.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() + # 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') + + 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')
_______________________________________________ Mailing list: https://launchpad.net/~openlp-core Post to : openlp-core@lists.launchpad.net Unsubscribe : https://launchpad.net/~openlp-core More help : https://help.launchpad.net/ListHelp