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) self.verse_delete_button.setEnabled(True)
def on_verse_add_button_clicked(self): 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_(): 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) verse_def = u'%s%s' % (verse_tag, verse_num)
item = QtGui.QTableWidgetItem(after_text) item = QtGui.QTableWidgetItem(after_text)
item.setData(QtCore.Qt.UserRole, verse_def) item.setData(QtCore.Qt.UserRole, verse_def)
@ -596,9 +596,9 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog):
if item: if item:
temp_text = item.text() temp_text = item.text()
verse_id = item.data(QtCore.Qt.UserRole) 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_(): 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) verse_def = u'%s%s' % (verse_tag, verse_num)
item.setData(QtCore.Qt.UserRole, verse_def) item.setData(QtCore.Qt.UserRole, verse_def)
item.setText(after_text) 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 += u'---[%s:%s]---\n' % (verse_tag, verse_num)
verse_list += item.text() verse_list += item.text()
verse_list += u'\n' verse_list += u'\n'
self.verse_form.setVerse(verse_list) self.verse_form.set_verse(verse_list)
else: else:
self.verse_form.setVerse(u'') self.verse_form.set_verse(u'')
if not self.verse_form.exec_(): if not self.verse_form.exec_():
return 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')) verse_list = unicode(verse_list.replace(u'\r\n', u'\n'))
self.verse_list_widget.clear() self.verse_list_widget.clear()
self.verse_list_widget.setRowCount(0) 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.core.lib.ui import UiStrings, create_button_box
from openlp.plugins.songs.lib import VerseType 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): class Ui_EditVerseDialog(object):
editVerseDialog.setWindowTitle(translate('SongsPlugin.EditVerseForm', 'Edit Verse')) def setupUi(self, edit_verse_dialog):
self.verseTypeLabel.setText(translate('SongsPlugin.EditVerseForm', '&Verse type:')) edit_verse_dialog.setObjectName(u'editVerseDialog')
self.verseTypeComboBox.setItemText(VerseType.Verse, VerseType.translated_names[VerseType.Verse]) edit_verse_dialog.resize(400, 400)
self.verseTypeComboBox.setItemText(VerseType.Chorus, VerseType.translated_names[VerseType.Chorus]) edit_verse_dialog.setModal(True)
self.verseTypeComboBox.setItemText(VerseType.Bridge, VerseType.translated_names[VerseType.Bridge]) self.dialog_layout = QtGui.QVBoxLayout(edit_verse_dialog)
self.verseTypeComboBox.setItemText(VerseType.PreChorus, VerseType.translated_names[VerseType.PreChorus]) self.dialog_layout.setObjectName(u'dialog_layout')
self.verseTypeComboBox.setItemText(VerseType.Intro, VerseType.translated_names[VerseType.Intro]) self.verse_text_edit = SpellTextEdit(edit_verse_dialog)
self.verseTypeComboBox.setItemText(VerseType.Ending, VerseType.translated_names[VerseType.Ending]) self.verse_text_edit.setObjectName(u'verseTextEdit')
self.verseTypeComboBox.setItemText(VerseType.Other, VerseType.translated_names[VerseType.Other]) self.dialog_layout.addWidget(self.verse_text_edit)
self.splitButton.setText(UiStrings().Split) self.verse_type_layout = QtGui.QHBoxLayout()
self.splitButton.setToolTip(UiStrings().SplitToolTip) self.verse_type_layout.setObjectName(u'verseTypeLayout')
self.insertButton.setText(translate('SongsPlugin.EditVerseForm', '&Insert')) self.split_button = QtGui.QPushButton(edit_verse_dialog)
self.insertButton.setToolTip(translate('SongsPlugin.EditVerseForm', 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.')) '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) QtGui.QDialog.__init__(self, parent)
self.setupUi(self) self.setupUi(self)
QtCore.QObject.connect(self.verseTextEdit, QtCore.SIGNAL('customContextMenuRequested(QPoint)'), self.verse_text_edit.customContextMenuRequested.connect(self.context_menu)
self.contextMenu) self.insert_button.clicked.connect(self.on_insert_button_clicked)
QtCore.QObject.connect(self.insertButton, QtCore.SIGNAL(u'clicked()'), self.onInsertButtonClicked) self.split_button.clicked.connect(self.on_split_button_clicked)
QtCore.QObject.connect(self.splitButton, QtCore.SIGNAL(u'clicked()'), self.onSplitButtonClicked) self.verse_text_edit.cursorPositionChanged.connect(self.on_cursor_position_changed)
QtCore.QObject.connect(self.verseTextEdit, QtCore.SIGNAL(u'cursorPositionChanged()'), self.verse_type_combo_box.currentIndexChanged.connect(self.on_verse_type_combo_box_changed)
self.onCursorPositionChanged)
QtCore.QObject.connect(self.verseTypeComboBox, QtCore.SIGNAL(u'currentIndexChanged(int)'),
self.onVerseTypeComboBoxChanged)
def contextMenu(self, point): def context_menu(self, point):
item = self.serviceManagerList.itemAt(point) item = self.serviceManagerList.itemAt(point)
def insertVerse(self, verse_tag, verse_num=1): def insert_verse(self, verse_tag, verse_num=1):
if self.verseTextEdit.textCursor().columnNumber() != 0: if self.verse_text_edit.textCursor().columnNumber() != 0:
self.verseTextEdit.insertPlainText(u'\n') self.verse_text_edit.insertPlainText(u'\n')
verse_tag = VerseType.translated_name(verse_tag) verse_tag = VerseType.translated_name(verse_tag)
self.verseTextEdit.insertPlainText(u'---[%s:%s]---\n' % (verse_tag, verse_num)) self.verse_text_edit.insertPlainText(u'---[%s:%s]---\n' % (verse_tag, verse_num))
self.verseTextEdit.setFocus() self.verse_text_edit.setFocus()
def onSplitButtonClicked(self): def on_split_button_clicked(self):
text = self.verseTextEdit.toPlainText() text = self.verse_text_edit.toPlainText()
position = self.verseTextEdit.textCursor().position() position = self.verse_text_edit.textCursor().position()
insert_string = u'[---]' insert_string = u'[---]'
if position and text[position-1] != u'\n': 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': if position == len(text) or text[position] != u'\n':
insert_string += u'\n' insert_string += u'\n'
self.verseTextEdit.insertPlainText(insert_string) self.verse_text_edit.insertPlainText(insert_string)
self.verseTextEdit.setFocus() self.verse_text_edit.setFocus()
def onInsertButtonClicked(self): def on_insert_button_clicked(self):
verse_type_index = self.verseTypeComboBox.currentIndex() verse_type_index = self.verse_type_combo_box.currentIndex()
self.insertVerse(VerseType.tags[verse_type_index], self.verseNumberBox.value()) self.insert_verse(VerseType.tags[verse_type_index], self.verse_number_box.value())
def onVerseTypeComboBoxChanged(self): def on_verse_type_combo_box_changed(self):
self.updateSuggestedVerseNumber() self.update_suggested_verse_number()
def onCursorPositionChanged(self): def on_cursor_position_changed(self):
self.updateSuggestedVerseNumber() 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. Adjusts the verse number SpinBox in regard to the selected verse type and the cursor's position.
""" """
position = self.verseTextEdit.textCursor().position() position = self.verse_text_edit.textCursor().position()
text = self.verseTextEdit.toPlainText() text = self.verse_text_edit.toPlainText()
verse_name = VerseType.translated_names[ verse_name = VerseType.translated_names[
self.verseTypeComboBox.currentIndex()] self.verse_type_combo_box.currentIndex()]
if not text: if not text:
return return
position = text.rfind(u'---[%s' % verse_name, 0, position) position = text.rfind(u'---[%s' % verse_name, 0, position)
if position == -1: if position == -1:
self.verseNumberBox.setValue(1) self.verse_number_box.setValue(1)
return return
text = text[position:] text = text[position:]
position = text.find(u']---') position = text.find(u']---')
@ -111,38 +108,39 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog):
text = text[:position + 4] text = text[:position + 4]
match = VERSE_REGEX.match(text) match = VERSE_REGEX.match(text)
if match: if match:
verse_tag = match.group(1) # TODO: Not used, remove?
# verse_tag = match.group(1)
try: try:
verse_num = int(match.group(2)) + 1 verse_num = int(match.group(2)) + 1
except ValueError: except ValueError:
verse_num = 1 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]): def set_verse(self, text, single=False, tag=u'%s1' % VerseType.tags[VerseType.Verse]):
self.hasSingleVerse = single self.has_single_verse = single
if single: if single:
verse_type_index = VerseType.from_tag(tag[0], None) verse_type_index = VerseType.from_tag(tag[0], None)
verse_number = tag[1:] verse_number = tag[1:]
if verse_type_index is not None: if verse_type_index is not None:
self.verseTypeComboBox.setCurrentIndex(verse_type_index) self.verse_type_combo_box.setCurrentIndex(verse_type_index)
self.verseNumberBox.setValue(int(verse_number)) self.verse_number_box.setValue(int(verse_number))
self.insertButton.setVisible(False) self.insert_button.setVisible(False)
else: else:
if not text: if not text:
text = u'---[%s:1]---\n' % VerseType.translated_names[VerseType.Verse] text = u'---[%s:1]---\n' % VerseType.translated_names[VerseType.Verse]
self.verseTypeComboBox.setCurrentIndex(0) self.verse_type_combo_box.setCurrentIndex(0)
self.verseNumberBox.setValue(1) self.verse_number_box.setValue(1)
self.insertButton.setVisible(True) self.insert_button.setVisible(True)
self.verseTextEdit.setPlainText(text) self.verse_text_edit.setPlainText(text)
self.verseTextEdit.setFocus() self.verse_text_edit.setFocus()
self.verseTextEdit.moveCursor(QtGui.QTextCursor.End) self.verse_text_edit.moveCursor(QtGui.QTextCursor.End)
def getVerse(self): def get_verse(self):
return self.verseTextEdit.toPlainText(), VerseType.tags[self.verseTypeComboBox.currentIndex()], \ return self.verse_text_edit.toPlainText(), VerseType.tags[self.verse_type_combo_box.currentIndex()], \
unicode(self.verseNumberBox.value()) unicode(self.verse_number_box.value())
def getVerseAll(self): def get_all_verses(self):
text = self.verseTextEdit.toPlainText() text = self.verse_text_edit.toPlainText()
if not text.startswith(u'---['): if not text.startswith(u'---['):
text = u'---[%s:1]---\n%s' % (VerseType.translated_names[VerseType.Verse], text) text = u'---[%s:1]---\n%s' % (VerseType.translated_names[VerseType.Verse], text)
return text return text

View File

@ -3,7 +3,7 @@ Package to test the openlp.plugins.songs.forms.editverseform package.
""" """
from unittest import TestCase from unittest import TestCase
from PyQt4 import QtGui from PyQt4 import QtCore, QtGui, QtTest
from openlp.core.lib import Registry from openlp.core.lib import Registry
from openlp.plugins.songs.forms.editverseform import EditVerseForm from openlp.plugins.songs.forms.editverseform import EditVerseForm
@ -32,4 +32,19 @@ class TestEditVerseForm(TestCase):
""" """
Test the EditVerseForm defaults are correct 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')