diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index 80c3c45b8..a75a0916c 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -578,9 +578,9 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.verse_delete_button.setEnabled(True) def on_verse_add_button_clicked(self): - self.verse_form.setVerse(u'', True) + self.verse_form.set_verse(u'', True) if self.verse_form.exec_(): - after_text, verse_tag, verse_num = self.verse_form.getVerse() + after_text, verse_tag, verse_num = self.verse_form.get_verse() verse_def = u'%s%s' % (verse_tag, verse_num) item = QtGui.QTableWidgetItem(after_text) item.setData(QtCore.Qt.UserRole, verse_def) @@ -596,9 +596,9 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): if item: temp_text = item.text() verse_id = item.data(QtCore.Qt.UserRole) - self.verse_form.setVerse(temp_text, True, verse_id) + self.verse_form.set_verse(temp_text, True, verse_id) if self.verse_form.exec_(): - after_text, verse_tag, verse_num = self.verse_form.getVerse() + after_text, verse_tag, verse_num = self.verse_form.get_verse() verse_def = u'%s%s' % (verse_tag, verse_num) item.setData(QtCore.Qt.UserRole, verse_def) item.setText(after_text) @@ -630,12 +630,12 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): verse_list += u'---[%s:%s]---\n' % (verse_tag, verse_num) verse_list += item.text() verse_list += u'\n' - self.verse_form.setVerse(verse_list) + self.verse_form.set_verse(verse_list) else: - self.verse_form.setVerse(u'') + self.verse_form.set_verse(u'') if not self.verse_form.exec_(): return - verse_list = self.verse_form.getVerseAll() + verse_list = self.verse_form.get_all_verses() verse_list = unicode(verse_list.replace(u'\r\n', u'\n')) self.verse_list_widget.clear() self.verse_list_widget.setRowCount(0) diff --git a/openlp/plugins/songs/forms/editversedialog.py b/openlp/plugins/songs/forms/editversedialog.py index b694d046c..b7b8f2df2 100644 --- a/openlp/plugins/songs/forms/editversedialog.py +++ b/openlp/plugins/songs/forms/editversedialog.py @@ -33,56 +33,57 @@ from openlp.core.lib import SpellTextEdit, build_icon, translate from openlp.core.lib.ui import UiStrings, create_button_box from openlp.plugins.songs.lib import VerseType -class Ui_EditVerseDialog(object): - def setupUi(self, editVerseDialog): - editVerseDialog.setObjectName(u'editVerseDialog') - editVerseDialog.resize(400, 400) - editVerseDialog.setModal(True) - self.dialogLayout = QtGui.QVBoxLayout(editVerseDialog) - self.dialogLayout.setObjectName(u'dialog_layout') - self.verseTextEdit = SpellTextEdit(editVerseDialog) - self.verseTextEdit.setObjectName(u'verseTextEdit') - self.dialogLayout.addWidget(self.verseTextEdit) - self.verseTypeLayout = QtGui.QHBoxLayout() - self.verseTypeLayout.setObjectName(u'verseTypeLayout') - self.splitButton = QtGui.QPushButton(editVerseDialog) - self.splitButton.setIcon(build_icon(u':/general/general_add.png')) - self.splitButton.setObjectName(u'splitButton') - self.verseTypeLayout.addWidget(self.splitButton) - self.verseTypeLabel = QtGui.QLabel(editVerseDialog) - self.verseTypeLabel.setObjectName(u'verseTypeLabel') - self.verseTypeLayout.addWidget(self.verseTypeLabel) - self.verseTypeComboBox = QtGui.QComboBox(editVerseDialog) - self.verseTypeComboBox.addItems([u'', u'', u'', u'', u'', u'', u'']) - self.verseTypeComboBox.setObjectName(u'verseTypeComboBox') - self.verseTypeLabel.setBuddy(self.verseTypeComboBox) - self.verseTypeLayout.addWidget(self.verseTypeComboBox) - self.verseNumberBox = QtGui.QSpinBox(editVerseDialog) - self.verseNumberBox.setMinimum(1) - self.verseNumberBox.setObjectName(u'verseNumberBox') - self.verseTypeLayout.addWidget(self.verseNumberBox) - self.insertButton = QtGui.QPushButton(editVerseDialog) - self.insertButton.setIcon(build_icon(u':/general/general_add.png')) - self.insertButton.setObjectName(u'insertButton') - self.verseTypeLayout.addWidget(self.insertButton) - self.verseTypeLayout.addStretch() - self.dialogLayout.addLayout(self.verseTypeLayout) - self.button_box = create_button_box(editVerseDialog, u'button_box', [u'cancel', u'ok']) - self.dialogLayout.addWidget(self.button_box) - self.retranslateUi(editVerseDialog) - def retranslateUi(self, editVerseDialog): - editVerseDialog.setWindowTitle(translate('SongsPlugin.EditVerseForm', 'Edit Verse')) - self.verseTypeLabel.setText(translate('SongsPlugin.EditVerseForm', '&Verse type:')) - self.verseTypeComboBox.setItemText(VerseType.Verse, VerseType.translated_names[VerseType.Verse]) - self.verseTypeComboBox.setItemText(VerseType.Chorus, VerseType.translated_names[VerseType.Chorus]) - self.verseTypeComboBox.setItemText(VerseType.Bridge, VerseType.translated_names[VerseType.Bridge]) - self.verseTypeComboBox.setItemText(VerseType.PreChorus, VerseType.translated_names[VerseType.PreChorus]) - self.verseTypeComboBox.setItemText(VerseType.Intro, VerseType.translated_names[VerseType.Intro]) - self.verseTypeComboBox.setItemText(VerseType.Ending, VerseType.translated_names[VerseType.Ending]) - self.verseTypeComboBox.setItemText(VerseType.Other, VerseType.translated_names[VerseType.Other]) - self.splitButton.setText(UiStrings().Split) - self.splitButton.setToolTip(UiStrings().SplitToolTip) - self.insertButton.setText(translate('SongsPlugin.EditVerseForm', '&Insert')) - self.insertButton.setToolTip(translate('SongsPlugin.EditVerseForm', +class Ui_EditVerseDialog(object): + def setupUi(self, edit_verse_dialog): + edit_verse_dialog.setObjectName(u'editVerseDialog') + edit_verse_dialog.resize(400, 400) + edit_verse_dialog.setModal(True) + self.dialog_layout = QtGui.QVBoxLayout(edit_verse_dialog) + self.dialog_layout.setObjectName(u'dialog_layout') + self.verse_text_edit = SpellTextEdit(edit_verse_dialog) + self.verse_text_edit.setObjectName(u'verseTextEdit') + self.dialog_layout.addWidget(self.verse_text_edit) + self.verse_type_layout = QtGui.QHBoxLayout() + self.verse_type_layout.setObjectName(u'verseTypeLayout') + self.split_button = QtGui.QPushButton(edit_verse_dialog) + self.split_button.setIcon(build_icon(u':/general/general_add.png')) + self.split_button.setObjectName(u'splitButton') + self.verse_type_layout.addWidget(self.split_button) + self.verse_type_label = QtGui.QLabel(edit_verse_dialog) + self.verse_type_label.setObjectName(u'verseTypeLabel') + self.verse_type_layout.addWidget(self.verse_type_label) + self.verse_type_combo_box = QtGui.QComboBox(edit_verse_dialog) + self.verse_type_combo_box.addItems([u'', u'', u'', u'', u'', u'', u'']) + self.verse_type_combo_box.setObjectName(u'verseTypeComboBox') + self.verse_type_label.setBuddy(self.verse_type_combo_box) + self.verse_type_layout.addWidget(self.verse_type_combo_box) + self.verse_number_box = QtGui.QSpinBox(edit_verse_dialog) + self.verse_number_box.setMinimum(1) + self.verse_number_box.setObjectName(u'verseNumberBox') + self.verse_type_layout.addWidget(self.verse_number_box) + self.insert_button = QtGui.QPushButton(edit_verse_dialog) + self.insert_button.setIcon(build_icon(u':/general/general_add.png')) + self.insert_button.setObjectName(u'insertButton') + self.verse_type_layout.addWidget(self.insert_button) + self.verse_type_layout.addStretch() + self.dialog_layout.addLayout(self.verse_type_layout) + self.button_box = create_button_box(edit_verse_dialog, u'button_box', [u'cancel', u'ok']) + self.dialog_layout.addWidget(self.button_box) + self.retranslateUi(edit_verse_dialog) + + def retranslateUi(self, edit_verse_dialog): + edit_verse_dialog.setWindowTitle(translate('SongsPlugin.EditVerseForm', 'Edit Verse')) + self.verse_type_label.setText(translate('SongsPlugin.EditVerseForm', '&Verse type:')) + self.verse_type_combo_box.setItemText(VerseType.Verse, VerseType.translated_names[VerseType.Verse]) + self.verse_type_combo_box.setItemText(VerseType.Chorus, VerseType.translated_names[VerseType.Chorus]) + self.verse_type_combo_box.setItemText(VerseType.Bridge, VerseType.translated_names[VerseType.Bridge]) + self.verse_type_combo_box.setItemText(VerseType.PreChorus, VerseType.translated_names[VerseType.PreChorus]) + 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.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 b145c0e6a..80bf719b7 100644 --- a/openlp/plugins/songs/forms/editverseform.py +++ b/openlp/plugins/songs/forms/editverseform.py @@ -50,59 +50,56 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): """ QtGui.QDialog.__init__(self, parent) self.setupUi(self) - QtCore.QObject.connect(self.verseTextEdit, QtCore.SIGNAL('customContextMenuRequested(QPoint)'), - self.contextMenu) - QtCore.QObject.connect(self.insertButton, QtCore.SIGNAL(u'clicked()'), self.onInsertButtonClicked) - QtCore.QObject.connect(self.splitButton, QtCore.SIGNAL(u'clicked()'), self.onSplitButtonClicked) - QtCore.QObject.connect(self.verseTextEdit, QtCore.SIGNAL(u'cursorPositionChanged()'), - self.onCursorPositionChanged) - QtCore.QObject.connect(self.verseTypeComboBox, QtCore.SIGNAL(u'currentIndexChanged(int)'), - self.onVerseTypeComboBoxChanged) + self.verse_text_edit.customContextMenuRequested.connect(self.context_menu) + self.insert_button.clicked.connect(self.on_insert_button_clicked) + 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) - def contextMenu(self, point): + def context_menu(self, point): item = self.serviceManagerList.itemAt(point) - def insertVerse(self, verse_tag, verse_num=1): - if self.verseTextEdit.textCursor().columnNumber() != 0: - self.verseTextEdit.insertPlainText(u'\n') + def insert_verse(self, verse_tag, verse_num=1): + if self.verse_text_edit.textCursor().columnNumber() != 0: + self.verse_text_edit.insertPlainText(u'\n') verse_tag = VerseType.translated_name(verse_tag) - self.verseTextEdit.insertPlainText(u'---[%s:%s]---\n' % (verse_tag, verse_num)) - self.verseTextEdit.setFocus() + self.verse_text_edit.insertPlainText(u'---[%s:%s]---\n' % (verse_tag, verse_num)) + self.verse_text_edit.setFocus() - def onSplitButtonClicked(self): - text = self.verseTextEdit.toPlainText() - position = self.verseTextEdit.textCursor().position() + def on_split_button_clicked(self): + text = self.verse_text_edit.toPlainText() + position = self.verse_text_edit.textCursor().position() insert_string = u'[---]' if position and text[position-1] != u'\n': - insert_string = u'\n' + insert_string + insert_string = u'\n' + insert_string if position == len(text) or text[position] != u'\n': - insert_string += u'\n' - self.verseTextEdit.insertPlainText(insert_string) - self.verseTextEdit.setFocus() + insert_string += u'\n' + self.verse_text_edit.insertPlainText(insert_string) + self.verse_text_edit.setFocus() - def onInsertButtonClicked(self): - verse_type_index = self.verseTypeComboBox.currentIndex() - self.insertVerse(VerseType.tags[verse_type_index], self.verseNumberBox.value()) + def on_insert_button_clicked(self): + verse_type_index = self.verse_type_combo_box.currentIndex() + self.insert_verse(VerseType.tags[verse_type_index], self.verse_number_box.value()) - def onVerseTypeComboBoxChanged(self): - self.updateSuggestedVerseNumber() + def on_verse_type_combo_box_changed(self): + self.update_suggested_verse_number() - def onCursorPositionChanged(self): - self.updateSuggestedVerseNumber() + def on_cursor_position_changed(self): + self.update_suggested_verse_number() - def updateSuggestedVerseNumber(self): + def update_suggested_verse_number(self): """ Adjusts the verse number SpinBox in regard to the selected verse type and the cursor's position. """ - position = self.verseTextEdit.textCursor().position() - text = self.verseTextEdit.toPlainText() + position = self.verse_text_edit.textCursor().position() + text = self.verse_text_edit.toPlainText() verse_name = VerseType.translated_names[ - self.verseTypeComboBox.currentIndex()] + self.verse_type_combo_box.currentIndex()] if not text: return position = text.rfind(u'---[%s' % verse_name, 0, position) if position == -1: - self.verseNumberBox.setValue(1) + self.verse_number_box.setValue(1) return text = text[position:] position = text.find(u']---') @@ -111,38 +108,39 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): text = text[:position + 4] match = VERSE_REGEX.match(text) if match: - verse_tag = match.group(1) + # TODO: Not used, remove? + # verse_tag = match.group(1) try: verse_num = int(match.group(2)) + 1 except ValueError: verse_num = 1 - self.verseNumberBox.setValue(verse_num) + self.verse_number_box.setValue(verse_num) - def setVerse(self, text, single=False, tag=u'%s1' % VerseType.tags[VerseType.Verse]): - self.hasSingleVerse = single + def set_verse(self, text, single=False, tag=u'%s1' % VerseType.tags[VerseType.Verse]): + self.has_single_verse = single if single: verse_type_index = VerseType.from_tag(tag[0], None) verse_number = tag[1:] if verse_type_index is not None: - self.verseTypeComboBox.setCurrentIndex(verse_type_index) - self.verseNumberBox.setValue(int(verse_number)) - self.insertButton.setVisible(False) + self.verse_type_combo_box.setCurrentIndex(verse_type_index) + self.verse_number_box.setValue(int(verse_number)) + self.insert_button.setVisible(False) else: if not text: text = u'---[%s:1]---\n' % VerseType.translated_names[VerseType.Verse] - self.verseTypeComboBox.setCurrentIndex(0) - self.verseNumberBox.setValue(1) - self.insertButton.setVisible(True) - self.verseTextEdit.setPlainText(text) - self.verseTextEdit.setFocus() - self.verseTextEdit.moveCursor(QtGui.QTextCursor.End) + self.verse_type_combo_box.setCurrentIndex(0) + self.verse_number_box.setValue(1) + self.insert_button.setVisible(True) + self.verse_text_edit.setPlainText(text) + self.verse_text_edit.setFocus() + self.verse_text_edit.moveCursor(QtGui.QTextCursor.End) - def getVerse(self): - return self.verseTextEdit.toPlainText(), VerseType.tags[self.verseTypeComboBox.currentIndex()], \ - unicode(self.verseNumberBox.value()) + def get_verse(self): + return self.verse_text_edit.toPlainText(), VerseType.tags[self.verse_type_combo_box.currentIndex()], \ + unicode(self.verse_number_box.value()) - def getVerseAll(self): - text = self.verseTextEdit.toPlainText() + def get_all_verses(self): + text = self.verse_text_edit.toPlainText() if not text.startswith(u'---['): text = u'---[%s:1]---\n%s' % (VerseType.translated_names[VerseType.Verse], text) return text diff --git a/tests/interfaces/openlp_plugins_songs_forms/test_editverseform.py b/tests/interfaces/openlp_plugins_songs_forms/test_editverseform.py index cfd5ed0ef..5dbfb2a16 100644 --- a/tests/interfaces/openlp_plugins_songs_forms/test_editverseform.py +++ b/tests/interfaces/openlp_plugins_songs_forms/test_editverseform.py @@ -3,7 +3,7 @@ Package to test the openlp.plugins.songs.forms.editverseform package. """ from unittest import TestCase -from PyQt4 import QtGui +from PyQt4 import QtCore, QtGui, QtTest from openlp.core.lib import Registry from openlp.plugins.songs.forms.editverseform import EditVerseForm @@ -32,4 +32,19 @@ class TestEditVerseForm(TestCase): """ Test the EditVerseForm defaults are correct """ - self.assertEqual(self.form.verseTextEdit.toPlainText(), u'', u'The verse edit box is empty.') + # GIVEN: An EditVerseForm instance + # WHEN: The form is shown + # THEN: The default value is correct + self.assertEqual(self.form.verse_text_edit.toPlainText(), u'', u'The verse edit box is empty.') + + def insert_verse_test(self): + """ + Test that inserting a verse works as it should. + """ + # GIVEN: An instance of the EditVerseForm + # WHEN: The Insert button is clicked + QtTest.QTest.mouseClick(self.form.insert_button, QtCore.Qt.LeftButton) + + # THEN: The verse text edit should have a Verse:1 in it + self.assertIn(u'---[Verse:1]---', self.form.verse_text_edit.toPlainText(), + u'The verse text edit should have a verse identifier') \ No newline at end of file