← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~trb143/openlp/splitter into lp:openlp

 

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/322053

This is a POC request to show how forced splits can be done.
The split is only done at render time.
Called the split Divide as having 2 splits is confusing.

Will add tests if this idea is fine to progress!
-- 
Your team OpenLP Core is requested to review the proposed merge of lp:~trb143/openlp/splitter into lp:openlp.
=== modified file 'openlp/plugins/songs/forms/editversedialog.py'
--- openlp/plugins/songs/forms/editversedialog.py	2016-12-31 11:01:36 +0000
+++ openlp/plugins/songs/forms/editversedialog.py	2017-04-05 20:35:34 +0000
@@ -41,6 +41,10 @@
         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 @@
         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.'))

=== modified file 'openlp/plugins/songs/forms/editverseform.py'
--- openlp/plugins/songs/forms/editverseform.py	2016-12-31 11:01:36 +0000
+++ openlp/plugins/songs/forms/editverseform.py	2017-04-05 20:35:34 +0000
@@ -48,6 +48,7 @@
         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 @@
         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

=== modified file 'openlp/plugins/songs/lib/mediaitem.py'
--- openlp/plugins/songs/lib/mediaitem.py	2017-01-08 19:12:12 +0000
+++ openlp/plugins/songs/lib/mediaitem.py	2017-04-05 20:35:34 +0000
@@ -573,7 +573,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:
@@ -584,7 +584,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('[##-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 @@
                             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)}


Follow ups