Raoul Snyman has proposed merging lp:~raoul-snyman/openlp/bug-716405 into lp:openlp.
Requested reviews: OpenLP Core (openlp-core) Related bugs: Bug #716405 in OpenLP: "RFE using verses and the warning dialog they are not used." https://bugs.launchpad.net/openlp/+bug/716405 For more details, see: https://code.launchpad.net/~raoul-snyman/openlp/bug-716405/+merge/95993 Added a label on the edit dialog to show when you have an incomplete verse order. -- https://code.launchpad.net/~raoul-snyman/openlp/bug-716405/+merge/95993 Your team OpenLP Core is requested to review the proposed merge of lp:~raoul-snyman/openlp/bug-716405 into lp:openlp.
=== modified file '.bzrignore' --- .bzrignore 2011-07-23 22:39:37 +0000 +++ .bzrignore 2012-03-05 20:41:18 +0000 @@ -21,3 +21,4 @@ *.qm resources/windows/warnOpenLP.txt openlp.cfg +.idea === modified file 'openlp/plugins/songs/forms/editsongdialog.py' --- openlp/plugins/songs/forms/editsongdialog.py 2011-12-27 10:33:55 +0000 +++ openlp/plugins/songs/forms/editsongdialog.py 2012-03-05 20:41:18 +0000 @@ -280,8 +280,15 @@ self.songTabWidget.addTab(self.audioTab, u'') # Last few bits self.dialogLayout.addWidget(self.songTabWidget) + self.bottomLayout = QtGui.QHBoxLayout() + self.bottomLayout.setObjectName(u'bottomLayout') + self.warningLabel = QtGui.QLabel(editSongDialog) + self.warningLabel.setObjectName(u'warningLabel') + self.warningLabel.setVisible(False) + self.bottomLayout.addWidget(self.warningLabel) self.buttonBox = create_accept_reject_button_box(editSongDialog) - self.dialogLayout.addWidget(self.buttonBox) + self.bottomLayout.addWidget(self.buttonBox) + self.dialogLayout.addLayout(self.bottomLayout) self.retranslateUi(editSongDialog) QtCore.QMetaObject.connectSlotsByName(editSongDialog) @@ -349,14 +356,19 @@ translate('SongsPlugin.EditSongForm', '&Remove')) self.audioRemoveAllButton.setText( translate('SongsPlugin.EditSongForm', 'Remove &All')) + self.warningLabel.setText( + translate('SongsPlugin.EditSongForm', '<strong>Warning:</strong>' + ' Not all of the verses are in use.')) def editSongDialogComboBox(parent, name): """ Utility method to generate a standard combo box for this dialog. """ comboBox = QtGui.QComboBox(parent) - comboBox.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToMinimumContentsLength) - comboBox.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed) + comboBox.setSizeAdjustPolicy( + QtGui.QComboBox.AdjustToMinimumContentsLength) + comboBox.setSizePolicy( + QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed) comboBox.setEditable(True) comboBox.setInsertPolicy(QtGui.QComboBox.NoInsert) comboBox.setObjectName(name) === modified file 'openlp/plugins/songs/forms/editsongform.py' --- openlp/plugins/songs/forms/editsongform.py 2012-02-16 20:36:35 +0000 +++ openlp/plugins/songs/forms/editsongform.py 2012-03-05 20:41:18 +0000 @@ -92,6 +92,9 @@ QtCore.QObject.connect(self.verseListWidget, QtCore.SIGNAL(u'itemClicked(QTableWidgetItem*)'), self.onVerseListViewPressed) + QtCore.QObject.connect(self.verseOrderEdit, + QtCore.SIGNAL(u'textChanged(QString)'), + self.onVerseOrderTextChanged) QtCore.QObject.connect(self.themeAddButton, QtCore.SIGNAL(u'clicked()'), self.mediaitem.plugin.renderer.themeManager.onAddTheme) @@ -574,6 +577,54 @@ self.verseEditButton.setEnabled(False) self.verseDeleteButton.setEnabled(False) + def onVerseOrderTextChanged(self, text): + self._validate_verse_list(text, self.verseListWidget.rowCount()) + + def _validate_verse_list(self, verse_list, verse_count): + errors = [] + order = [] + order_names = unicode(verse_list).split() + for item in order_names: + if len(item) == 1: + verse_index = VerseType.from_translated_tag(item, None) + if verse_index is not None: + order.append(VerseType.Tags[verse_index] + u'1') + else: + # it matches no verses anyway + order.append(u'') + else: + verse_index = VerseType.from_translated_tag(item[0], None) + if verse_index is None: + # it matches no verses anyway + order.append(u'') + else: + verse_tag = VerseType.Tags[verse_index] + verse_num = item[1:].lower() + order.append(verse_tag + verse_num) + verses = [] + verse_names = [] + for index in range(0, verse_count): + verse = self.verseListWidget.item(index, 0) + verse = unicode(verse.data(QtCore.Qt.UserRole).toString()) + if verse not in verse_names: + verses.append(verse) + verse_names.append(u'%s%s' % ( + VerseType.translated_tag(verse[0]), verse[1:])) + for count, item in enumerate(order): + if item not in verses: + valid = create_separated_list(verse_names) + errors.append(unicode(translate('SongsPlugin.EditSongForm', + 'The verse order is invalid. There is no verse ' + 'corresponding to %s. Valid entries are %s.')) % \ + (order_names[count], valid)) + return False + verses_not_used = [] + for count, verse in enumerate(verses): + if not verse in order: + verses_not_used.append(verse) + self.warningLabel.setVisible(len(verses_not_used) > 0) + return errors + def _validate_song(self): """ Check the validity of the song. @@ -604,56 +655,10 @@ 'You need to have an author for this song.')) return False if self.verseOrderEdit.text(): - order = [] - order_names = unicode(self.verseOrderEdit.text()).split() - for item in order_names: - if len(item) == 1: - verse_index = VerseType.from_translated_tag(item, None) - if verse_index is not None: - order.append(VerseType.Tags[verse_index] + u'1') - else: - # it matches no verses anyway - order.append(u'') - else: - verse_index = VerseType.from_translated_tag(item[0], None) - if verse_index is None: - # it matches no verses anyway - order.append(u'') - else: - verse_tag = VerseType.Tags[verse_index] - verse_num = item[1:].lower() - order.append(verse_tag + verse_num) - verses = [] - verse_names = [] - for index in range(0, self.verseListWidget.rowCount()): - verse = self.verseListWidget.item(index, 0) - verse = unicode(verse.data(QtCore.Qt.UserRole).toString()) - if verse not in verse_names: - verses.append(verse) - verse_names.append(u'%s%s' % ( - VerseType.translated_tag(verse[0]), verse[1:])) - for count, item in enumerate(order): - if item not in verses: - valid = create_separated_list(verse_names) - critical_error_message_box( - message=unicode(translate('SongsPlugin.EditSongForm', - 'The verse order is invalid. There is no verse ' - 'corresponding to %s. Valid entries are %s.')) % \ - (order_names[count], valid)) - return False - for count, verse in enumerate(verses): - if verse not in order: - self.songTabWidget.setCurrentIndex(0) - self.verseOrderEdit.setFocus() - answer = QtGui.QMessageBox.warning(self, - translate('SongsPlugin.EditSongForm', 'Warning'), - unicode(translate('SongsPlugin.EditSongForm', - 'You have not used %s anywhere in the verse ' - 'order. Are you sure you want to save the song ' - 'like this?')) % verse_names[count], - QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) - if answer == QtGui.QMessageBox.No: - return False + errors = self._validate_verse_list(self.verseOrderEdit.text(), + self.verseListWidget.rowCount()) + if errors: + critical_error_message_box(message=u'\n\n'.join(errors)) item = int(self.songBookComboBox.currentIndex()) text = unicode(self.songBookComboBox.currentText()) if self.songBookComboBox.findText(text, QtCore.Qt.MatchExactly) < 0:
_______________________________________________ Mailing list: https://launchpad.net/~openlp-core Post to : openlp-core@lists.launchpad.net Unsubscribe : https://launchpad.net/~openlp-core More help : https://help.launchpad.net/ListHelp