[PATCH 3 of 8 DarkThemeSeries 1] qtlib: add THEME-based dark color styles for log/status/ui labels

0 views
Skip to first unread message

Peter Demcak

unread,
Mar 7, 2026, 1:28:09 PM (3 days ago) Mar 7
to thg...@googlegroups.com
# HG changeset patch
# User Peter Demcak <majs...@gmail.com>
# Date 1772736844 -3600
# Thu Mar 05 19:54:04 2026 +0100
# Node ID 6291a26345172b2d235fc8d04bdad999427915c9
# Parent 525b3ed40c94328966f21949b212c6f66684440b
qtlib: add THEME-based dark color styles for log/status/ui labels

Add get_thgstyles_dark() and switch configstyles() between light
and dark styles based on THEME.enabled.

diff -r 525b3ed40c94 -r 6291a2634517 tortoisehg/hgqt/qtlib.py
--- a/tortoisehg/hgqt/qtlib.py Thu Mar 05 19:53:16 2026 +0100
+++ b/tortoisehg/hgqt/qtlib.py Thu Mar 05 19:54:04 2026 +0100
@@ -112,6 +112,7 @@
terminal,
)
from ..util.i18n import _
+from .theme import THEME

try:
import win32con # pytype: disable=import-error
@@ -531,6 +532,101 @@
'topic.active': 'black bold #2ecc71_background',
}

+def get_thgstyles_dark():
+ return {
+ # --- File status -------------------------------------------------
+ 'status.modified': THEME.file_modified.name(),
+ 'status.added': THEME.file_added.name(),
+ 'status.removed': THEME.file_removed.name(),
+ 'status.deleted': THEME.file_deleted.name(),
+ 'status.unknown': THEME.file_unknown.name(),
+ 'status.missing': THEME.file_missing.name(),
+ 'status.ignored': THEME.file_ignored.name(),
+ 'status.clean': THEME.file_clean.name(),
+
+ # --- UI feedback -------------------------------------------------
+ 'ui.error': (
+ f'{THEME.error_text.name()} bold '
+ f'{THEME.error_background.name()}_background'
+ ),
+ 'ui.warning': (
+ f'{THEME.warning_text.name()} '
+ f'{THEME.warning_background.name()}_background'
+ ),
+ 'ui.info': THEME.ui_info.name(),
+ 'ui.success': (
+ f'{THEME.success_text.name()} '
+ f'{THEME.success_background.name()}_background'
+ ),
+
+ # Log / revision file list
+ 'log.modified': (
+ f'{THEME.diff_start.name()} '
+ f'{THEME.backgroundLighter.name()}_background'
+ ),
+ 'log.added': (
+ f'{THEME.diff_added.name()} '
+ f'{THEME.success_background.name()}_background'
+ ),
+ 'log.removed': (
+ f'{THEME.diff_removed.name()} '
+ f'{THEME.error_background.name()}_background'
+ ),
+ 'log.untracked': (
+ f'{THEME.ui_info.name()} '
+ f'{THEME.backgroundLighter.name()}_background'
+ ),
+ 'log.warning': (
+ f'{THEME.warning_text.name()} '
+ f'{THEME.warning_background.name()}_background'
+ ),
+ 'log.topic': (
+ f'{THEME.chip_text.name()} bold '
+ f'{THEME.chip_topic_background.name()}_background'
+ ),
+ 'topic.active': (
+ f'{THEME.chip_text.name()} bold '
+ f'{THEME.chip_topic_background.name()}_background'
+ ),
+
+ # Branch / tag / bookmark (description column - chips)
+ 'log.branch': (
+ f'{THEME.chip_text.name()} '
+ f'{THEME.chip_branch_background.name()}_background'
+ ),
+ 'log.tag': (
+ f'{THEME.chip_text.name()} '
+ f'{THEME.chip_tag_background.name()}_background'
+ ),
+ 'log.bookmark': (
+ f'{THEME.chip_text.name()} '
+ f'{THEME.chip_bookmark_background.name()}_background'
+ ),
+ 'log.curbookmark': (
+ f'{THEME.chip_text.name()} bold '
+ f'{THEME.chip_curbookmark_background.name()}_background'
+ ),
+
+ # Topics / patches / resolve
+ 'log.patch': (
+ f'{THEME.text.name()} '
+ f'{THEME.backgroundLighter.name()}_background'
+ ),
+ 'log.unapplied_patch': (
+ f'{THEME.text_margin.name()} '
+ f'{THEME.backgroundLighter.name()}_background'
+ ),
+
+ 'resolve.unresolved': THEME.error_text.name(),
+ 'resolve.resolved': THEME.file_resolved.name(),
+
+ # --- Emphasis / state --------------------------------------------
+ 'ui.emphasis': f'{THEME.text.name()} bold',
+ 'ui.dim': THEME.text_margin.name(),
+ 'ui.disabled': THEME.text_disabled.name(),
+ }
+
+
thgstylesheet = '* { white-space: pre; font-family: monospace;' \
' font-size: 9pt; }'
tbstylesheet = 'QToolBar { border: 0px }'
@@ -542,7 +638,10 @@
_styles.update(pycompat.rapply(pycompat.sysstr, extstyle))

# tortoisehg defines a few labels and default effects
- _styles.update(_thgstyles)
+ if THEME.enabled:
+ _styles.update(get_thgstyles_dark())
+ else:
+ _styles.update(_thgstyles)

# allow the user to override
for status, cfgeffects in ui.configitems(b'color'): # type: Tuple[bytes, bytes]

Reply all
Reply to author
Forward
0 new messages