Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] PR: improve functionality for color scheme cancel button #23633

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 38 additions & 9 deletions spyder/plugins/appearance/widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import re

from qtpy.QtCore import Qt
from qtpy.QtGui import QColor
from qtpy.QtWidgets import (
QDialog,
QDialogButtonBox,
Expand Down Expand Up @@ -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(
Expand All @@ -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):
"""
Expand All @@ -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:<br><br>"
)
for property_name, color in invalid_colors.items():
name = syntaxhighlighters.COLOR_SCHEME_KEYS[property_name]
clean_name = name[:-1].replace("<br>", "")
message += _(
"The property <b>{}</b> has an invalid color: {}\n"
'The property <b>{}</b> has an invalid color: {}<br>'
).format(clean_name, color)

msgbox = QMessageBox(
Expand All @@ -102,6 +107,7 @@ def validate_colors(self):
QMessageBox.Ok,
self
)
msgbox.setTextFormat(Qt.RichText)
msgbox.exec_()
else:
self.accept()
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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()
Loading