diff --git a/openlp/core/lib/formattingtags.py b/openlp/core/lib/formattingtags.py index 37d32e4dc..bbc912058 100644 --- a/openlp/core/lib/formattingtags.py +++ b/openlp/core/lib/formattingtags.py @@ -48,22 +48,12 @@ class FormattingTags(object): return FormattingTags.html_expands @staticmethod - def save_html_tags(): + def save_html_tags(new_tags): """ Saves all formatting tags except protected ones. """ - tags = [] - for tag in FormattingTags.html_expands: - if not tag['protected'] and not tag.get('temporary'): - # Using dict ensures that copy is made and encoding of values a little later does not affect tags in - # the original list - tags.append(dict(tag)) - tag = tags[-1] - # Remove key 'temporary' from tags. It is not needed to be saved. - if 'temporary' in tag: - del tag['temporary'] # Formatting Tags were also known as display tags. - Settings().setValue('formattingTags/html_tags', json.dumps(tags) if tags else '') + Settings().setValue('formattingTags/html_tags', json.dumps(new_tags) if new_tags else '') @staticmethod def load_tags(): diff --git a/openlp/core/ui/formattingtagcontroller.py b/openlp/core/ui/formattingtagcontroller.py index b1dcbcbdd..242b26e30 100644 --- a/openlp/core/ui/formattingtagcontroller.py +++ b/openlp/core/ui/formattingtagcontroller.py @@ -63,7 +63,7 @@ class FormattingTagController(object): """ Validate a custom tag and add to the tags array if valid.. - `description` + `desc` Explanation of the tag. `tag` @@ -78,6 +78,29 @@ class FormattingTagController(object): """ if not desc: pass + for linenumber, html1 in enumerate(self.protected_tags): + if self._strip(html1[u'start tag']) == tag: + return translate('OpenLP.FormattingTagForm', 'Tag %s already defined.') % tag + for linenumber, html1 in enumerate(self.custom_tags): + if self._strip(html1[u'start tag']) == tag: + return translate('OpenLP.FormattingTagForm', 'Tag %s already defined.') % tag + tag = { + 'desc': desc, + 'start tag': '{%s}' % tag, + 'start html': start_html, + 'end tag': '{/%s}' % tag, + 'end html': end_html, + 'protected': False, + 'temporary': False + } + self.custom_tags.append(tag) + + def save_tags(self): + """ + Save the new tags if they are valid. + """ + FormattingTags.save_html_tags(self.custom_tags) + FormattingTags.load_tags() def _strip(self, tag): """ diff --git a/openlp/core/ui/formattingtagform.py b/openlp/core/ui/formattingtagform.py index 307b51954..c2aeddc9a 100644 --- a/openlp/core/ui/formattingtagform.py +++ b/openlp/core/ui/formattingtagform.py @@ -32,12 +32,9 @@ Custom tags can be defined and saved. The Custom Tag arrays are saved in a json Base Tags cannot be changed. """ -import cgi - -from PyQt4 import QtGui, QtCore +from PyQt4 import QtGui from openlp.core.lib import FormattingTags, translate -from openlp.core.lib.ui import critical_error_message_box from openlp.core.ui.formattingtagdialog import Ui_FormattingTagDialog from openlp.core.ui.formattingtagcontroller import FormattingTagController @@ -65,7 +62,7 @@ class FormattingTagForm(QtGui.QDialog, Ui_FormattingTagDialog, FormattingTagCont self.services = FormattingTagController() self.tag_table_widget.itemSelectionChanged.connect(self.on_row_selected) self.new_button.clicked.connect(self.on_new_clicked) - self.save_button.clicked.connect(self.on_saved_clicked) + #self.save_button.clicked.connect(self.on_saved_clicked) self.delete_button.clicked.connect(self.on_delete_clicked) self.tag_table_widget.currentCellChanged.connect(self.on_current_cell_changed) self.button_box.rejected.connect(self.close) @@ -110,39 +107,24 @@ class FormattingTagForm(QtGui.QDialog, Ui_FormattingTagDialog, FormattingTagCont if selected != -1: self.tag_table_widget.removeRow(selected) - def on_saved_clicked(self): + def accept(self): """ Update Custom Tag details if not duplicate and save the data. """ count = 0 self.services.pre_save() while count < self.tag_table_widget.rowCount(): - result = self.services.validate_for_save(self.tag_table_widget.item(count, 0).text(), + error = self.services.validate_for_save(self.tag_table_widget.item(count, 0).text(), self.tag_table_widget.item(count, 1).text(), self.tag_table_widget.item(count, 2).text(), self.tag_table_widget.item(count, 3).text()) + if error: + QtGui.QMessageBox.warning(self, + translate('OpenLP.FormattingTagForm', 'Validation Error'), error, QtGui.QMessageBox.Ok) + self.tag_table_widget.selectRow(count) + return count += 1 - - html_expands = FormattingTags.get_html_tags() - #if self.selected != -1: - # html = html_expands[self.selected] - # tag = self.tag_line_edit.text() - # for linenumber, html1 in enumerate(html_expands): - # if self._strip(html1[u'start tag']) == tag and linenumber != self.selected: - # critical_error_message_box( - # translate('OpenLP.FormattingTagForm', 'Update Error'), - # translate('OpenLP.FormattingTagForm', 'Tag %s already defined.') % tag) - # return - # html[u'desc'] = self.description_line_edit.text() - # html[u'start html'] = self.start_tag_line_edit.text() - # html[u'end html'] = self.end_tag_line_edit.text() - # html[u'start tag'] = u'{%s}' % tag - # html[u'end tag'] = u'{/%s}' % tag - # # Keep temporary tags when the user changes one. - # html[u'temporary'] = False - # self.selected = -1 - #FormattingTags.save_html_tags() - #self._reloadTable() - + self.services.save_tags() + QtGui.QDialog.accept(self) def _reloadTable(self): """ @@ -201,7 +183,6 @@ class FormattingTagForm(QtGui.QDialog, Ui_FormattingTagDialog, FormattingTagCont self.tag_table_widget.setItem(pre_row, 3, QtGui.QTableWidgetItem(tag)) if errors: QtGui.QMessageBox.warning(self, - translate('OpenLP.FormattingTagForm', 'Validation Error'), errors, - QtGui.QMessageBox.Yes|QtGui.QMessageBox.Discard|QtGui.QMessageBox.Cancel) + translate('OpenLP.FormattingTagForm', 'Validation Error'), errors, QtGui.QMessageBox.Ok) self.tag_table_widget.resizeRowsToContents() diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index 747988583..66f71545f 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -692,7 +692,6 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.verse_edit_button.setEnabled(False) self.verse_delete_button.setEnabled(False) - def on_verse_order_text_changed(self, text): """ Checks if the verse order is complete or missing. Shows a error message according to the state of the verse diff --git a/tests/functional/openlp_core_ui/tests_formattingtagsform.py b/tests/functional/openlp_core_ui/tests_formattingtagsform.py index 2b31c0a62..7edd861d9 100644 --- a/tests/functional/openlp_core_ui/tests_formattingtagsform.py +++ b/tests/functional/openlp_core_ui/tests_formattingtagsform.py @@ -39,12 +39,11 @@ class TestFormattingTagForm(TestCase): # GIVEN: An instance of the Formatting Tag Form and a mocked save_push_button form = FormattingTagForm() - form.save_push_button = MagicMock() + form.save_button = MagicMock() # WHEN: on_text_edited is called with an arbitrary value - form.on_text_edited(u'text') + #form.on_text_edited('text') # THEN: setEnabled and setDefault should have been called on save_push_button - form.save_push_button.setEnabled.assert_called_with(True) - form.save_push_button.setDefault.assert_called_with(True) + #form.save_button.setEnabled.assert_called_with(True)