Merge pull request #2501 from zas/color_groups

Options > Interface > Colors: Separate colors in different groups
This commit is contained in:
Laurent Monin
2024-05-27 19:09:39 +02:00
committed by GitHub
2 changed files with 54 additions and 25 deletions

View File

@@ -37,28 +37,34 @@ class UnknownColorException(Exception):
pass pass
class ColorDescription:
def __init__(self, title, group):
self.title = title
self.group = group
_COLOR_DESCRIPTIONS = { _COLOR_DESCRIPTIONS = {
'entity_error': N_("Errored entity"), 'entity_error': ColorDescription(title=N_("Errored entity"), group=N_("Entities")),
'entity_pending': N_("Pending entity"), 'entity_pending': ColorDescription(title=N_("Pending entity"), group=N_("Entities")),
'entity_saved': N_("Saved entity"), 'entity_saved': ColorDescription(title=N_("Saved entity"), group=N_("Entities")),
'first_cover_hl': N_("First cover art"), 'first_cover_hl': ColorDescription(title=N_("First cover art"), group=N_("Others")),
'log_debug': N_('Log view text (debug)'), 'log_debug': ColorDescription(title=N_('Log view text (debug)'), group=N_("Logging")),
'log_error': N_('Log view text (error)'), 'log_error': ColorDescription(title=N_('Log view text (error)'), group=N_("Logging")),
'log_info': N_('Log view text (info)'), 'log_info': ColorDescription(title=N_('Log view text (info)'), group=N_("Logging")),
'log_warning': N_('Log view text (warning)'), 'log_warning': ColorDescription(title=N_('Log view text (warning)'), group=N_("Logging")),
'profile_hl_bg': N_("Profile highlight background"), 'profile_hl_bg': ColorDescription(title=N_("Profile highlight background"), group=N_("Profiles")),
'profile_hl_fg': N_("Profile highlight foreground"), 'profile_hl_fg': ColorDescription(title=N_("Profile highlight foreground"), group=N_("Profiles")),
'row_highlight': N_("Row Highlight"), 'row_highlight': ColorDescription(title=N_("Row Highlight"), group=N_("Others")),
'tagstatus_added': N_("Tag added"), 'tagstatus_added': ColorDescription(title=N_("Tag added"), group=N_("Tags")),
'tagstatus_changed': N_("Tag changed"), 'tagstatus_changed': ColorDescription(title=N_("Tag changed"), group=N_("Tags")),
'tagstatus_removed': N_("Tag removed"), 'tagstatus_removed': ColorDescription(title=N_("Tag removed"), group=N_("Tags")),
'syntax_hl_error': N_("Error syntax highlight"), 'syntax_hl_error': ColorDescription(title=N_("Error syntax highlight"), group=N_("Syntax Highlighting")),
'syntax_hl_escape': N_("Escape syntax highlight"), 'syntax_hl_escape': ColorDescription(title=N_("Escape syntax highlight"), group=N_("Syntax Highlighting")),
'syntax_hl_func': N_("Function syntax highlight"), 'syntax_hl_func': ColorDescription(title=N_("Function syntax highlight"), group=N_("Syntax Highlighting")),
'syntax_hl_noop': N_("Noop syntax highlight"), 'syntax_hl_noop': ColorDescription(title=N_("Noop syntax highlight"), group=N_("Syntax Highlighting")),
'syntax_hl_special': N_("Special syntax highlight"), 'syntax_hl_special': ColorDescription(title=N_("Special syntax highlight"), group=N_("Syntax Highlighting")),
'syntax_hl_unicode': N_("Unicode syntax highlight"), 'syntax_hl_unicode': ColorDescription(title=N_("Unicode syntax highlight"), group=N_("Syntax Highlighting")),
'syntax_hl_var': N_("Variable syntax highlight"), 'syntax_hl_var': ColorDescription(title=N_("Variable syntax highlight"), group=N_("Syntax Highlighting")),
} }
@@ -186,6 +192,12 @@ class InterfaceColors:
def get_color_description(self, color_key): def get_color_description(self, color_key):
return _(self.default_colors[color_key].description) return _(self.default_colors[color_key].description)
def get_color_title(self, color_key):
return _(self.default_colors[color_key].description.title)
def get_color_group(self, color_key):
return _(self.default_colors[color_key].description.group)
def set_color(self, color_key, color_value): def set_color(self, color_key, color_value):
if color_key in self.default_colors: if color_key in self.default_colors:
qcolor = QtGui.QColor(color_value) qcolor = QtGui.QColor(color_value)

View File

@@ -34,7 +34,10 @@ from picard.i18n import (
N_, N_,
gettext as _, gettext as _,
) )
from picard.util import icontheme from picard.util import (
icontheme,
strxfrm,
)
from picard.ui.colors import interface_colors from picard.ui.colors import interface_colors
from picard.ui.forms.ui_options_interface_colors import ( from picard.ui.forms.ui_options_interface_colors import (
@@ -121,13 +124,27 @@ class InterfaceColorsOptionsPage(OptionsPage):
interface_colors.set_default_color(color_key) interface_colors.set_default_color(color_key)
color_button.update_color(interface_colors.get_qcolor(color_key)) color_button.update_color(interface_colors.get_qcolor(color_key))
for color_key, color_value in interface_colors.get_colors().items(): def colors():
for color_key, color_value in interface_colors.get_colors().items():
group = interface_colors.get_color_group(color_key)
title = interface_colors.get_color_title(color_key)
yield color_key, color_value, title, group
prev_group = None
for color_key, color_value, title, group in sorted(colors(), key=lambda c: (strxfrm(c[3]), strxfrm(c[2]))):
if prev_group != group:
groupbox = QtWidgets.QGroupBox(group)
self.colors_list.addWidget(groupbox)
groupbox_layout = QtWidgets.QVBoxLayout()
groupbox.setLayout(groupbox_layout)
prev_group = group
widget = QtWidgets.QWidget() widget = QtWidgets.QWidget()
hlayout = QtWidgets.QHBoxLayout() hlayout = QtWidgets.QHBoxLayout()
hlayout.setContentsMargins(0, 0, 0, 0) hlayout.setContentsMargins(0, 0, 0, 0)
label = QtWidgets.QLabel(interface_colors.get_color_description(color_key)) label = QtWidgets.QLabel(title)
label.setSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) label.setSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
hlayout.addWidget(label) hlayout.addWidget(label)
@@ -141,7 +158,7 @@ class InterfaceColorsOptionsPage(OptionsPage):
hlayout.addWidget(refresh_button, 0, QtCore.Qt.AlignmentFlag.AlignRight) hlayout.addWidget(refresh_button, 0, QtCore.Qt.AlignmentFlag.AlignRight)
widget.setLayout(hlayout) widget.setLayout(hlayout)
self.colors_list.addWidget(widget) groupbox_layout.addWidget(widget)
spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding) spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
self.colors_list.addItem(spacerItem1) self.colors_list.addItem(spacerItem1)