diff --git a/spyder/plugins/appearance/widgets.py b/spyder/plugins/appearance/widgets.py index ca558b906f3..72fde03d9d5 100644 --- a/spyder/plugins/appearance/widgets.py +++ b/spyder/plugins/appearance/widgets.py @@ -9,6 +9,7 @@ import re from qtpy.QtCore import Qt +from qtpy.QtGui import QColor from qtpy.QtWidgets import ( QDialog, QDialogButtonBox, @@ -39,6 +40,7 @@ def __init__(self, parent=None, stack=None): self.scheme_name_textbox = {} self.last_edited_color_scheme = None self.last_used_scheme = None + self.original_scheme = None # Widgets bbox = SpyderDialogButtonBox( @@ -62,6 +64,7 @@ def set_scheme(self, scheme_name): """Set the current stack by 'scheme_name'.""" self.stack.setCurrentIndex(self.order.index(scheme_name)) self.last_used_scheme = scheme_name + self.original_scheme = self.get_edited_color_scheme() def get_scheme_name(self): """ @@ -87,12 +90,14 @@ def validate_colors(self): invalid_colors[key] = items[0].text() if invalid_colors: - message = _("The following properties have invalid colors:\n\n") + message = _( + "The following properties have invalid colors:

" + ) for property_name, color in invalid_colors.items(): name = syntaxhighlighters.COLOR_SCHEME_KEYS[property_name] clean_name = name[:-1].replace("
", "") message += _( - "The property {} has an invalid color: {}\n" + 'The property {} has an invalid color: {}
' ).format(clean_name, color) msgbox = QMessageBox( @@ -102,6 +107,7 @@ def validate_colors(self): QMessageBox.Ok, self ) + msgbox.setTextFormat(Qt.RichText) msgbox.exec_() else: self.accept() @@ -143,25 +149,25 @@ def add_color_scheme_stack(self, scheme_name, custom=False): ] parent = self.parent - line_edit = parent.create_lineedit(_("Scheme name:"), + self.line_edit = parent.create_lineedit(_("Scheme name:"), '{0}/name'.format(scheme_name)) self.widgets[scheme_name] = {} # Widget setup - line_edit.label.setAlignment(Qt.AlignRight | Qt.AlignVCenter) + self.line_edit.label.setAlignment(Qt.AlignRight | Qt.AlignVCenter) self.setWindowTitle(_('Color scheme editor')) # Layout name_layout = QHBoxLayout() - name_layout.addWidget(line_edit.label) - name_layout.addWidget(line_edit.textbox) - self.scheme_name_textbox[scheme_name] = line_edit.textbox + name_layout.addWidget(self.line_edit.label) + name_layout.addWidget(self.line_edit.textbox) + self.scheme_name_textbox[scheme_name] = self.line_edit.textbox if not custom: - line_edit.textbox.setDisabled(True) + self.line_edit.textbox.setDisabled(True) if not self.isVisible(): - line_edit.setVisible(False) + self.line_edit.setVisible(False) cs_layout = QVBoxLayout() cs_layout.addLayout(name_layout) @@ -229,3 +235,26 @@ def delete_color_scheme_stack(self, scheme_name): self.stack.removeWidget(widget) index = self.order.index(scheme_name) self.order.pop(index) + + def restore_original_scheme(self, scheme_name): + "Restores the original values of the scheme being edited." + parent = self.parent + self.line_edit.textbox.setText( + str(parent.get_option('{0}/name'.format(scheme_name)))) + + for key, value in self.original_scheme.items(): + if isinstance(value, tuple): + color = QColor() + color.setNamedColor(value[0]) + self.widgets[scheme_name][key][0].update_text(color) + self.widgets[scheme_name][key][1].setChecked(value[1]) + self.widgets[scheme_name][key][2].setChecked(value[2]) + else: + color = QColor() + color.setNamedColor(value) + self.widgets[scheme_name][key][0].update_text(color) + + def reject(self): + """Executes when Cancel is pressed: Restores the edited scheme.""" + self.restore_original_scheme(self.last_used_scheme) + super().reject()