Cleanup EditVerseForm and friends, and expand the test.

This commit is contained in:
Raoul Snyman 2013-03-11 10:07:17 +02:00
parent d61509e5dd
commit 837118bf07
4 changed files with 125 additions and 111 deletions

View File

@ -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)

View File

@ -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.'))

View File

@ -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

View File

@ -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')