diff --git a/openlp/.version b/openlp/.version index 94ff29cc4..50e47c89c 100644 --- a/openlp/.version +++ b/openlp/.version @@ -1 +1 @@ -3.1.1 +3.1.1 \ No newline at end of file diff --git a/openlp/core/common/settings.py b/openlp/core/common/settings.py index 2666fd403..105a2f5a1 100644 --- a/openlp/core/common/settings.py +++ b/openlp/core/common/settings.py @@ -363,6 +363,7 @@ class Settings(QtCore.QSettings): 'songs/chord notation': 'english', # Can be english, german or neo-latin 'songs/disable chords import': False, 'songs/auto play audio': False, + 'songs/uppercase songs': False, 'songusage/status': PluginStatus.Inactive, 'songusage/db type': 'sqlite', 'songusage/db username': '', diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index ec9974037..7ec4affe2 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -560,6 +560,7 @@ class SongMediaItem(MediaManagerItem): """ log.debug('generate_slide_data: {service}, {item}, {remote}'.format(service=service_item, item=item, remote=self.remote_song)) + uppercase = bool(self.settings.value('songs/uppercase songs')) item_id = self._get_id_of_item_to_generate(item, self.remote_song) service_item.add_capability(ItemCapabilities.CanEdit) service_item.add_capability(ItemCapabilities.CanPreview) @@ -597,6 +598,8 @@ class SongMediaItem(MediaManagerItem): verse_def = '{tag}{label}'.format(tag=verse_tag, label=verse[0]['label']) force_verse = verse[1].split('[--}{--]\n') for split_verse in force_verse: + if uppercase: + split_verse = "{uc}" + split_verse + "{/uc}" service_item.add_from_text(split_verse, verse_def) else: # Loop through the verse list and expand the song accordingly. @@ -614,6 +617,8 @@ class SongMediaItem(MediaManagerItem): verse_def = '{tag}{label}'.format(tag=verse_tag, label=verse[0]['label']) force_verse = verse[1].split('[--}{--]\n') for split_verse in force_verse: + if uppercase: + split_verse = "{uc}" + split_verse + "{/uc}" service_item.add_from_text(split_verse, verse_def) service_item.data_string = { 'title': song.search_title, diff --git a/openlp/plugins/songs/lib/songstab.py b/openlp/plugins/songs/lib/songstab.py index ab164f7e0..43e4dd88e 100644 --- a/openlp/plugins/songs/lib/songstab.py +++ b/openlp/plugins/songs/lib/songstab.py @@ -54,6 +54,9 @@ class SongsTab(SettingsTab): self.auto_play_check_box = QtWidgets.QCheckBox(self.mode_group_box) self.auto_play_check_box.setObjectName('auto_play_check_box') self.mode_layout.addWidget(self.auto_play_check_box) + self.uppercase_check_box = QtWidgets.QCheckBox(self.mode_group_box) + self.uppercase_check_box.setObjectName('uppercase_check_box') + self.mode_layout.addWidget(self.uppercase_check_box) # First Slide Mode self.first_slide_mode_widget = QtWidgets.QWidget(self.mode_group_box) self.first_slide_mode_layout = QtWidgets.QHBoxLayout(self.first_slide_mode_widget) @@ -152,6 +155,7 @@ class SongsTab(SettingsTab): self.add_from_service_check_box.stateChanged.connect(self.on_add_from_service_check_box_changed) self.first_slide_mode_combobox.currentIndexChanged.connect(self.on_first_slide_mode_combo_box_changed) self.auto_play_check_box.stateChanged.connect(self.on_auto_play_check_box_changed) + self.uppercase_check_box.stateChanged.connect(self.on_uppercase_check_box_changed) self.disable_chords_import_check_box.stateChanged.connect(self.on_disable_chords_import_check_box_changed) self.song_key_warning_check_box.stateChanged.connect(self.on_song_key_warning_check_box_changed) self.english_notation_radio_button.clicked.connect(self.on_english_notation_button_clicked) @@ -171,6 +175,7 @@ class SongsTab(SettingsTab): self.first_slide_mode_combobox.setItemText(1, translate('SongsPlugin.SongsTab', 'Songbook')) self.first_slide_mode_combobox.setItemText(2, translate('SongsPlugin.SongsTab', 'Same as Footer')) self.auto_play_check_box.setText(translate('SongsPlugin.SongsTab', 'Auto-play background audio')) + self.uppercase_check_box.setText(translate('SongsPlugin.SongsTab', 'Apply UPPERCASE globally to all songs.')) self.chords_info_label.setText(translate('SongsPlugin.SongsTab', 'If enabled all text between "[" and "]" will ' 'be regarded as chords.')) self.chords_group_box.setTitle(translate('SongsPlugin.SongsTab', 'Chords')) @@ -253,6 +258,9 @@ class SongsTab(SettingsTab): def on_auto_play_check_box_changed(self, check_state): self.auto_play = (check_state == QtCore.Qt.Checked) + def on_uppercase_check_box_changed(self, check_state): + self.uppercase = (check_state == QtCore.Qt.Checked) + def on_disable_chords_import_check_box_changed(self, check_state): self.disable_chords_import = (check_state == QtCore.Qt.Checked) @@ -280,6 +288,7 @@ class SongsTab(SettingsTab): self.update_load = self.settings.value('songs/add song from service') self.first_slide_mode = self.settings.value('songs/first slide mode') self.auto_play = self.settings.value('songs/auto play audio') + self.uppercase = self.settings.value('songs/uppercase songs') self.enable_chords = self.settings.value('songs/enable chords') self.chord_notation = self.settings.value('songs/chord notation') self.disable_chords_import = self.settings.value('songs/disable chords import') @@ -288,6 +297,7 @@ class SongsTab(SettingsTab): self.update_on_edit_check_box.setChecked(self.update_edit) self.add_from_service_check_box.setChecked(self.update_load) self.auto_play_check_box.setChecked(self.auto_play) + self.uppercase_check_box.setChecked(self.uppercase) self.chords_group_box.setChecked(self.enable_chords) self.disable_chords_import_check_box.setChecked(self.disable_chords_import) self.song_key_warning_check_box.setChecked(self.song_key_warning) @@ -311,6 +321,7 @@ class SongsTab(SettingsTab): self.settings.setValue('songs/update service on edit', self.update_edit) self.settings.setValue('songs/add song from service', self.update_load) self.settings.setValue('songs/auto play audio', self.auto_play) + self.settings.setValue('songs/uppercase songs', self.uppercase) self.settings.setValue('songs/enable chords', self.chords_group_box.isChecked()) self.settings.setValue('songs/disable chords import', self.disable_chords_import) self.settings.setValue('songs/warn about missing song key', self.song_key_warning) diff --git a/tests/openlp_plugins/songs/test_songstab.py b/tests/openlp_plugins/songs/test_songstab.py index 3859da0f4..6b52a2ece 100644 --- a/tests/openlp_plugins/songs/test_songstab.py +++ b/tests/openlp_plugins/songs/test_songstab.py @@ -92,6 +92,7 @@ def test_save_check_box_settings(form): form.on_add_from_service_check_box_changed(QtCore.Qt.Checked) form.on_disable_chords_import_check_box_changed(QtCore.Qt.Unchecked) form.on_auto_play_check_box_changed(QtCore.Qt.Checked) + form.on_uppercase_check_box_changed(QtCore.Qt.Checked) # WHEN: Save is invoked form.save() # THEN: The correct values should be stored in the settings @@ -101,6 +102,7 @@ def test_save_check_box_settings(form): assert form.settings.value('songs/add song from service') is True assert form.settings.value('songs/disable chords import') is False assert form.settings.value('songs/auto play audio') is True + assert form.settings.value('songs/uppercase songs') is True def test_english_notation_button(form): @@ -149,7 +151,7 @@ def test_password_change(mocked_settings_set_val, mocked_question, form): form.save() # THEN: footer should not have been saved (one less call than the change test below) mocked_question.assert_called_once() - assert mocked_settings_set_val.call_count == 11 + assert mocked_settings_set_val.call_count == 12 @patch('openlp.plugins.songs.lib.songstab.QtWidgets.QMessageBox.question') @@ -165,7 +167,7 @@ def test_password_change_cancelled(mocked_settings_set_val, mocked_question, for form.save() # THEN: footer should not have been saved (one less call than the change test below) mocked_question.assert_called_once() - assert mocked_settings_set_val.call_count == 10 + assert mocked_settings_set_val.call_count == 11 @patch('openlp.core.common.settings.Settings.setValue') @@ -177,7 +179,7 @@ def test_footer_nochange(mocked_settings_set_val, form): # WHEN: save is invoked form.save() # THEN: footer should not have been saved (one less call than the change test below) - assert mocked_settings_set_val.call_count == 11 + assert mocked_settings_set_val.call_count == 12 @patch('openlp.core.common.settings.Settings.setValue') @@ -190,7 +192,7 @@ def test_footer_change(mocked_settings_set_val, form): # WHEN: save is invoked form.save() # THEN: footer should have been saved (one more call to setValue than the nochange test) - assert mocked_settings_set_val.call_count == 12 + assert mocked_settings_set_val.call_count == 13 assert form.footer_edit_box.toPlainText() == 'A new footer'