From 2347b4c741cbd93907c5d9848780c05deb3628a0 Mon Sep 17 00:00:00 2001
From: Jason Pruitt <55477390+Json-To-String@users.noreply.github.com>
Date: Sun, 10 Aug 2025 00:20:22 -0400
Subject: [PATCH 1/8] Add themes support
Added themes in plugins, added scaffolding for other users to add themes as well. Click buttons currently don't follow theme.
---
blacs/plugins/theme/__init__.py | 303 +++++++++++++++++--
blacs/plugins/theme/theme.ui | 21 +-
blacs/plugins/theme/themes/blue_theme.qss | 120 ++++++++
blacs/plugins/theme/themes/dark_theme.qss | 120 ++++++++
blacs/plugins/theme/themes/default_theme.qss | 75 +++++
blacs/plugins/theme/themes/warm_theme.qss | 120 ++++++++
6 files changed, 735 insertions(+), 24 deletions(-)
create mode 100644 blacs/plugins/theme/themes/blue_theme.qss
create mode 100644 blacs/plugins/theme/themes/dark_theme.qss
create mode 100644 blacs/plugins/theme/themes/default_theme.qss
create mode 100644 blacs/plugins/theme/themes/warm_theme.qss
diff --git a/blacs/plugins/theme/__init__.py b/blacs/plugins/theme/__init__.py
index 77ba0d90..3f7c4cd9 100644
--- a/blacs/plugins/theme/__init__.py
+++ b/blacs/plugins/theme/__init__.py
@@ -12,15 +12,22 @@
#####################################################################
import logging
import os
-
from qtutils import *
-
from blacs.plugins import PLUGINS_DIR
name = "GUI Theme"
module = "theme" # should be folder name
logger = logging.getLogger('BLACS.plugin.%s'%module)
+def load_theme(theme_name):
+ theme_path = os.path.join(PLUGINS_DIR, module, "themes", f"{theme_name}_theme.qss")
+ try:
+ with open(theme_path, "r") as f:
+ return f.read()
+ except Exception as e:
+ logger.warning(f"Could not load theme '{theme_name}': {e}")
+ return ""
+
DEFAULT_STYLESHEET = """DigitalOutput {
font-size: 12px;
@@ -99,6 +106,252 @@
}
"""
+# DARK_STYLESHEET = """
+# # /* ===== Global & Widget Defaults ===== */
+# # QWidget {
+# # background-color: #0f1115;
+# # color: #e6eef3;
+# # selection-background-color: #2b6ea3;
+# # selection-color: #ffffff;
+# # font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif;
+# # }
+
+# # /* ===== Push Buttons ===== */
+# # QPushButton {
+# # background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,
+# # stop:0 #2a2e34, stop:1 #212427);
+# # border: 1px solid #2e3338;
+# # padding: 6px 10px;
+# # border-radius: 6px;
+# # color: #e6eef3;
+# # }
+# # QPushButton:hover { border-color: #3a7bd5; }
+# # QPushButton:pressed { background-color: #1b1d20; }
+
+# # /* ===== LineEdits, TextEdits ===== */
+# # QLineEdit, QPlainTextEdit, QTextEdit {
+# # background-color: #0c0d0f;
+# # border: 1px solid #26282c;
+# # padding: 6px;
+# # border-radius: 4px;
+# # color: #e6eef3;
+# # }
+# # QLineEdit:focus, QTextEdit:focus { border-color: #3a7bd5; }
+
+# # /* ===== Tables, Headers ===== */
+# # QHeaderView::section {
+# # background-color: #131417;
+# # color: #cfd8de;
+# # padding: 6px;
+# # border: 1px solid #232427;
+# # }
+# # QTableView, QTreeView, QListView {
+# # background-color: #0b0c0e;
+# # gridline-color: #17181b;
+# # alternate-background-color: #0f1013;
+# # }
+# # QTableView::item:selected, QTreeView::item:selected, QListView::item:selected {
+# # background-color: #2b6ea3;
+# # color: #fff;
+# # }
+
+# # /* ===== Combo & Spin Boxes ===== */
+# # QComboBox, QSpinBox, QDoubleSpinBox {
+# # background-color: #0c0d0f;
+# # border: 1px solid #26282c;
+# # padding: 4px;
+# # color: #e6eef3;
+# # }
+
+# # /* ===== Checkboxes / Radios ===== */
+# # QCheckBox, QRadioButton { spacing: 6px; }
+# # QCheckBox::indicator, QRadioButton::indicator {
+# # background-color: transparent;
+# # border: 1px solid #3a3d42;
+# # }
+
+# # /* ===== Progress Bar ===== */
+# # QProgressBar {
+# # border: 1px solid #2b2f34;
+# # background: #0c0d0f;
+# # text-align: center;
+# # border-radius: 6px;
+# # }
+# # QProgressBar::chunk {
+# # background-color: #3a7bd5;
+# # border-radius: 6px;
+# # }
+
+# # /* ===== Tabs ===== */
+# # QTabWidget::pane { border: 1px solid #232427; }
+# # QTabBar::tab {
+# # background: #0f1115;
+# # color: #cfd8de;
+# # padding: 8px;
+# # border: 1px solid #232427;
+# # border-bottom: none;
+# # border-top-left-radius: 6px;
+# # border-top-right-radius: 6px;
+# # }
+# # QTabBar::tab:selected { background: #16181c; }
+
+# # /* ===== Dock Widgets ===== */
+# # QDockWidget { titlebar-close-icon: url(:/icons/close.png); title: " "; }
+# # QDockWidget::title { background: #101215; }
+
+# # /* ===== Menus & Tooltips ===== */
+# # QMenuBar, QMenu {
+# # background-color: #0f1115;
+# # color: #e6eef3;
+# # }
+# # QMenu::item:selected { background-color: #2b6ea3; color: #fff; }
+# # QToolTip {
+# # background-color: #1c1f22;
+# # color: #e6eef3;
+# # border: 1px solid #3a3f45;
+# # padding: 6px;
+# # }
+
+# # /* ===== Scrollbars & Splitters ===== */
+# # QScrollBar:vertical {
+# # background: #0f1115;
+# # width: 12px;
+# # }
+# # QScrollBar::handle:vertical {
+# # background: #2b2e33;
+# # min-height: 20px;
+# # border-radius: 6px;
+# # }
+# # QScrollBar::add-line, QScrollBar::sub-line { height: 0px; }
+# # QSplitter::handle { background: #151618; }
+
+# # /* ===== Status Bar ===== */
+# # QStatusBar { background: #0f1115; color: #cfd8de; }
+
+# # """
+
+# BLUE_STYLESHEET = """
+# /* ===== Global & Widget Defaults ===== */
+# QWidget {
+# background-color: #0a0f1a;
+# color: #e1e8f0;
+# selection-background-color: #1e4a72;
+# selection-color: #ffffff;
+# font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif;
+# }
+
+# /* ===== Push Buttons ===== */
+# QPushButton {
+# background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,
+# stop:0 #1a2332, stop:1 #0f1520);
+# border: 1px solid #1e2b3d;
+# padding: 6px 10px;
+# border-radius: 6px;
+# color: #e1e8f0;
+# }
+# QPushButton:hover { border-color: #2563eb; }
+# QPushButton:pressed { background-color: #0d1117; }
+
+# /* ===== LineEdits, TextEdits ===== */
+# QLineEdit, QPlainTextEdit, QTextEdit {
+# background-color: #070b14;
+# border: 1px solid #1a2332;
+# padding: 6px;
+# border-radius: 4px;
+# color: #e1e8f0;
+# }
+# QLineEdit:focus, QTextEdit:focus { border-color: #2563eb; }
+
+# /* ===== Tables, Headers ===== */
+# QHeaderView::section {
+# background-color: #0d1421;
+# color: #b8c5d6;
+# padding: 6px;
+# border: 1px solid #1a2332;
+# }
+# QTableView, QTreeView, QListView {
+# background-color: #060a12;
+# gridline-color: #0f1520;
+# alternate-background-color: #080d17;
+# }
+# QTableView::item:selected, QTreeView::item:selected, QListView::item:selected {
+# background-color: #1e4a72;
+# color: #fff;
+# }
+
+# /* ===== Combo & Spin Boxes ===== */
+# QComboBox, QSpinBox, QDoubleSpinBox {
+# background-color: #070b14;
+# border: 1px solid #1a2332;
+# padding: 4px;
+# color: #e1e8f0;
+# }
+
+# /* ===== Checkboxes / Radios ===== */
+# QCheckBox, QRadioButton { spacing: 6px; }
+# QCheckBox::indicator, QRadioButton::indicator {
+# background-color: transparent;
+# border: 1px solid #2c3e50;
+# }
+
+# /* ===== Progress Bar ===== */
+# QProgressBar {
+# border: 1px solid #1a2332;
+# background: #070b14;
+# text-align: center;
+# border-radius: 6px;
+# }
+# QProgressBar::chunk {
+# background-color: #2563eb;
+# border-radius: 6px;
+# }
+
+# /* ===== Tabs ===== */
+# QTabWidget::pane { border: 1px solid #1a2332; }
+# QTabBar::tab {
+# background: #0a0f1a;
+# color: #b8c5d6;
+# padding: 8px;
+# border: 1px solid #1a2332;
+# border-bottom: none;
+# border-top-left-radius: 6px;
+# border-top-right-radius: 6px;
+# }
+# QTabBar::tab:selected { background: #0f1520; }
+
+# /* ===== Dock Widgets ===== */
+# QDockWidget { titlebar-close-icon: url(:/icons/close.png); title: " "; }
+# QDockWidget::title { background: #0a0f1a; }
+
+# /* ===== Menus & Tooltips ===== */
+# QMenuBar, QMenu {
+# background-color: #0a0f1a;
+# color: #e1e8f0;
+# }
+# QMenu::item:selected { background-color: #1e4a72; color: #fff; }
+# QToolTip {
+# background-color: #0f1520;
+# color: #e1e8f0;
+# border: 1px solid #2c3e50;
+# padding: 6px;
+# }
+
+# /* ===== Scrollbars & Splitters ===== */
+# QScrollBar:vertical {
+# background: #0a0f1a;
+# width: 12px;
+# }
+# QScrollBar::handle:vertical {
+# background: #1a2332;
+# min-height: 20px;
+# border-radius: 6px;
+# }
+# QScrollBar::add-line, QScrollBar::sub-line { height: 0px; }
+# QSplitter::handle { background: #0f1520; }
+
+# /* ===== Status Bar ===== */
+# QStatusBar { background: #0a0f1a; color: #b8c5d6; }
+# """
def is_default_stylesheet(stylesheet):
"""Return whether a stylesheet is the same as the default stylesheet, modulo whitespace"""
@@ -157,31 +410,49 @@ def close(self):
class Setting(object):
name = name
- def __init__(self,data):
- # This is our data store!
+ def __init__(self, data):
self.data = data
-
if 'stylesheet' not in self.data or not self.data['stylesheet']:
- # If it's absent or an empty string, use the default stylesheet:
- self.data['stylesheet'] = DEFAULT_STYLESHEET
-
- def on_set_green_button_theme(self):
- self.widgets['stylesheet'].appendPlainText(DEFAULT_STYLESHEET)
+ self.data['stylesheet'] = load_theme('default') or DEFAULT_STYLESHEET
+
+ def on_set_default_theme(self):
+ self.widgets['stylesheet'].setPlainText(load_theme('default'))
- # Create the page, return the page and an icon to use on the label (the class name attribute will be used for the label text)
- def create_dialog(self,notebook):
+ def on_set_green_button_theme(self):
+ self.widgets['stylesheet'].setPlainText(DEFAULT_STYLESHEET)
+
+ def create_dialog(self, notebook):
ui = UiLoader().load(os.path.join(PLUGINS_DIR, module, 'theme.ui'))
-
# restore current stylesheet
ui.stylesheet_text.setPlainText(self.data['stylesheet'])
+ # Populate theme_combo with available .qss files
+ theme_dir = os.path.join(PLUGINS_DIR, module, 'themes')
+ themes = [f for f in os.listdir(theme_dir) if f.endswith('.qss')]
+ theme_names = [os.path.splitext(f)[0].replace('_theme','') for f in themes]
+ ui.theme_combo.clear()
+ ui.theme_combo.addItems(theme_names)
+ # Select current theme if possible
+ current_theme = None
+ for name in theme_names:
+ if load_theme(name) == self.data['stylesheet']:
+ current_theme = name
+ break
+ if current_theme:
+ idx = theme_names.index(current_theme)
+ ui.theme_combo.setCurrentIndex(idx)
+ # Handler for theme selection
+ def on_theme_selected(idx):
+ theme_name = theme_names[idx]
+ ui.stylesheet_text.setPlainText(load_theme(theme_name))
+ ui.theme_combo.currentIndexChanged.connect(on_theme_selected)
ui.example_button.clicked.connect(self.on_set_green_button_theme)
# save reference to widget
self.widgets = {}
self.widgets['stylesheet'] = ui.stylesheet_text
self.widgets['example_button'] = ui.example_button
-
- return ui,None
+ self.widgets['theme_combo'] = ui.theme_combo
+ return ui, None
def get_value(self,name):
if name in self.data:
@@ -206,5 +477,3 @@ def save(self):
def close(self):
self.widgets['example_button'].clicked.disconnect(self.on_set_green_button_theme)
-
-
diff --git a/blacs/plugins/theme/theme.ui b/blacs/plugins/theme/theme.ui
index 26b70f7c..ab9d6b77 100644
--- a/blacs/plugins/theme/theme.ui
+++ b/blacs/plugins/theme/theme.ui
@@ -54,13 +54,20 @@
-
- -
-
-
- Append example green digital out theme to custom stylesheet
-
-
-
+ -
+
+
+ Append example green digital out theme to custom stylesheet
+
+
+
+ -
+
+
+ Select a theme to load its stylesheet
+
+
+
diff --git a/blacs/plugins/theme/themes/blue_theme.qss b/blacs/plugins/theme/themes/blue_theme.qss
new file mode 100644
index 00000000..250055df
--- /dev/null
+++ b/blacs/plugins/theme/themes/blue_theme.qss
@@ -0,0 +1,120 @@
+/* ===== Global & Widget Defaults ===== */
+QWidget {
+ background-color: #0a0f1a;
+ color: #e1e8f0;
+ selection-background-color: #1e4a72;
+ selection-color: #ffffff;
+ font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif;
+}
+
+/* ===== Push Buttons ===== */
+QPushButton {
+ background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,
+ stop:0 #1a2332, stop:1 #0f1520);
+ border: 1px solid #1e2b3d;
+ padding: 6px 10px;
+ border-radius: 6px;
+ color: #e1e8f0;
+}
+QPushButton:hover { border-color: #2563eb; }
+QPushButton:pressed { background-color: #0d1117; }
+
+/* ===== LineEdits, TextEdits ===== */
+QLineEdit, QPlainTextEdit, QTextEdit {
+ background-color: #070b14;
+ border: 1px solid #1a2332;
+ padding: 6px;
+ border-radius: 4px;
+ color: #e1e8f0;
+}
+QLineEdit:focus, QTextEdit:focus { border-color: #2563eb; }
+
+/* ===== Tables, Headers ===== */
+QHeaderView::section {
+ background-color: #0d1421;
+ color: #b8c5d6;
+ padding: 6px;
+ border: 1px solid #1a2332;
+}
+QTableView, QTreeView, QListView {
+ background-color: #060a12;
+ gridline-color: #0f1520;
+ alternate-background-color: #080d17;
+}
+QTableView::item:selected, QTreeView::item:selected, QListView::item:selected {
+ background-color: #1e4a72;
+ color: #fff;
+}
+
+/* ===== Combo & Spin Boxes ===== */
+QComboBox, QSpinBox, QDoubleSpinBox {
+ background-color: #070b14;
+ border: 1px solid #1a2332;
+ padding: 4px;
+ color: #e1e8f0;
+}
+
+/* ===== Checkboxes / Radios ===== */
+QCheckBox, QRadioButton { spacing: 6px; }
+QCheckBox::indicator, QRadioButton::indicator {
+ background-color: transparent;
+ border: 1px solid #2c3e50;
+}
+
+/* ===== Progress Bar ===== */
+QProgressBar {
+ border: 1px solid #1a2332;
+ background: #070b14;
+ text-align: center;
+ border-radius: 6px;
+}
+QProgressBar::chunk {
+ background-color: #2563eb;
+ border-radius: 6px;
+}
+
+/* ===== Tabs ===== */
+QTabWidget::pane { border: 1px solid #1a2332; }
+QTabBar::tab {
+ background: #0a0f1a;
+ color: #b8c5d6;
+ padding: 8px;
+ border: 1px solid #1a2332;
+ border-bottom: none;
+ border-top-left-radius: 6px;
+ border-top-right-radius: 6px;
+}
+QTabBar::tab:selected { background: #0f1520; }
+
+/* ===== Dock Widgets ===== */
+QDockWidget { titlebar-close-icon: url(:/icons/close.png); title: " "; }
+QDockWidget::title { background: #0a0f1a; }
+
+/* ===== Menus & Tooltips ===== */
+QMenuBar, QMenu {
+ background-color: #0a0f1a;
+ color: #e1e8f0;
+}
+QMenu::item:selected { background-color: #1e4a72; color: #fff; }
+QToolTip {
+ background-color: #0f1520;
+ color: #e1e8f0;
+ border: 1px solid #2c3e50;
+ padding: 6px;
+}
+
+/* ===== Scrollbars & Splitters ===== */
+QScrollBar:vertical {
+ background: #0a0f1a;
+ width: 12px;
+}
+QScrollBar::handle:vertical {
+ background: #1a2332;
+ min-height: 20px;
+ border-radius: 6px;
+}
+QScrollBar::add-line, QScrollBar::sub-line { height: 0px; }
+QSplitter::handle { background: #0f1520; }
+
+/* ===== Status Bar ===== */
+QStatusBar { background: #0a0f1a; color: #b8c5d6; }
diff --git a/blacs/plugins/theme/themes/dark_theme.qss b/blacs/plugins/theme/themes/dark_theme.qss
new file mode 100644
index 00000000..fdb57bdc
--- /dev/null
+++ b/blacs/plugins/theme/themes/dark_theme.qss
@@ -0,0 +1,120 @@
+/* ===== Global & Widget Defaults ===== */
+QWidget {
+ background-color: #0f1115;
+ color: #e6eef3;
+ selection-background-color: #2b6ea3;
+ selection-color: #ffffff;
+ font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif;
+}
+
+/* ===== Push Buttons ===== */
+QPushButton {
+ background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,
+ stop:0 #2a2e34, stop:1 #212427);
+ border: 1px solid #2e3338;
+ padding: 6px 10px;
+ border-radius: 6px;
+ color: #e6eef3;
+}
+QPushButton:hover { border-color: #3a7bd5; }
+QPushButton:pressed { background-color: #1b1d20; }
+
+/* ===== LineEdits, TextEdits ===== */
+QLineEdit, QPlainTextEdit, QTextEdit {
+ background-color: #0c0d0f;
+ border: 1px solid #26282c;
+ padding: 6px;
+ border-radius: 4px;
+ color: #e6eef3;
+}
+QLineEdit:focus, QTextEdit:focus { border-color: #3a7bd5; }
+
+/* ===== Tables, Headers ===== */
+QHeaderView::section {
+ background-color: #131417;
+ color: #cfd8de;
+ padding: 6px;
+ border: 1px solid #232427;
+}
+QTableView, QTreeView, QListView {
+ background-color: #0b0c0e;
+ gridline-color: #17181b;
+ alternate-background-color: #0f1013;
+}
+QTableView::item:selected, QTreeView::item:selected, QListView::item:selected {
+ background-color: #2b6ea3;
+ color: #fff;
+}
+
+/* ===== Combo & Spin Boxes ===== */
+QComboBox, QSpinBox, QDoubleSpinBox {
+ background-color: #0c0d0f;
+ border: 1px solid #26282c;
+ padding: 4px;
+ color: #e6eef3;
+}
+
+/* ===== Checkboxes / Radios ===== */
+QCheckBox, QRadioButton { spacing: 6px; }
+QCheckBox::indicator, QRadioButton::indicator {
+ background-color: transparent;
+ border: 1px solid #3a3d42;
+}
+
+/* ===== Progress Bar ===== */
+QProgressBar {
+ border: 1px solid #2b2f34;
+ background: #0c0d0f;
+ text-align: center;
+ border-radius: 6px;
+}
+QProgressBar::chunk {
+ background-color: #3a7bd5;
+ border-radius: 6px;
+}
+
+/* ===== Tabs ===== */
+QTabWidget::pane { border: 1px solid #232427; }
+QTabBar::tab {
+ background: #0f1115;
+ color: #cfd8de;
+ padding: 8px;
+ border: 1px solid #232427;
+ border-bottom: none;
+ border-top-left-radius: 6px;
+ border-top-right-radius: 6px;
+}
+QTabBar::tab:selected { background: #16181c; }
+
+/* ===== Dock Widgets ===== */
+QDockWidget { titlebar-close-icon: url(:/icons/close.png); title: " "; }
+QDockWidget::title { background: #101215; }
+
+/* ===== Menus & Tooltips ===== */
+QMenuBar, QMenu {
+ background-color: #0f1115;
+ color: #e6eef3;
+}
+QMenu::item:selected { background-color: #2b6ea3; color: #fff; }
+QToolTip {
+ background-color: #1c1f22;
+ color: #e6eef3;
+ border: 1px solid #3a3f45;
+ padding: 6px;
+}
+
+/* ===== Scrollbars & Splitters ===== */
+QScrollBar:vertical {
+ background: #0f1115;
+ width: 12px;
+}
+QScrollBar::handle:vertical {
+ background: #2b2e33;
+ min-height: 20px;
+ border-radius: 6px;
+}
+QScrollBar::add-line, QScrollBar::sub-line { height: 0px; }
+QSplitter::handle { background: #151618; }
+
+/* ===== Status Bar ===== */
+QStatusBar { background: #0f1115; color: #cfd8de; }
diff --git a/blacs/plugins/theme/themes/default_theme.qss b/blacs/plugins/theme/themes/default_theme.qss
new file mode 100644
index 00000000..61781f97
--- /dev/null
+++ b/blacs/plugins/theme/themes/default_theme.qss
@@ -0,0 +1,75 @@
+DigitalOutput {
+ font-size: 12px;
+ background-color: rgb(50,100,50,255);
+ border: 1px solid rgb(50,100,50,128);
+ border-radius: 3px;
+ padding: 2px;
+ color: #202020;
+}
+
+DigitalOutput:hover {
+ background-color: rgb(50,130,50);
+ border: None;
+}
+
+DigitalOutput:disabled{
+ background-color: rgb(50,100,50,128);
+ color: #505050;
+}
+
+DigitalOutput:checked {
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+ stop: 0 rgb(32,200,32), stop: 1 rgb(32,255,32));
+ border: 1px solid #8f8f91;
+ color: #000000;
+}
+
+DigitalOutput:hover:checked {
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+ stop: 0 rgb(32,200,32), stop: 1 rgb(120,255,120));
+ border: 1px solid #8f8f91;
+}
+
+DigitalOutput:checked:disabled{
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+ stop: 0 rgba(32,200,32,128), stop: 1 rgba(32,255,32,128));
+ color: #606060;
+}
+
+InvertedDigitalOutput {
+ font-size: 12px;
+ background-color: rgb(70,100,170,255);
+ border: 1px solid rgb(70,100,170,128);
+ border-radius: 3px;
+ padding: 2px;
+ color: #202020;
+}
+
+InvertedDigitalOutput:hover {
+ background-color: rgb(70, 130, 220);
+ border: None;
+}
+
+InvertedDigitalOutput:disabled{
+ background-color: rgba(70,100,170,128);
+ color: #505050;
+}
+
+InvertedDigitalOutput:checked {
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+ stop: 0 rgb(50,150,221), stop: 1 rgb(32,192,255));
+ border: 1px solid #8f8f91;
+ color: #000000;
+}
+
+InvertedDigitalOutput:hover:checked {
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+ stop: 0 rgb(50,150,221), stop: 1 rgb(120,192,255));
+ border: 1px solid #8f8f91;
+}
+
+InvertedDigitalOutput:checked:disabled{
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+ stop: 0 rgba(50,150,221,128), stop: 1 rgba(32,192,255,128));
+ color: #606060;
+}
diff --git a/blacs/plugins/theme/themes/warm_theme.qss b/blacs/plugins/theme/themes/warm_theme.qss
new file mode 100644
index 00000000..e85574e3
--- /dev/null
+++ b/blacs/plugins/theme/themes/warm_theme.qss
@@ -0,0 +1,120 @@
+/* ===== Global & Widget Defaults ===== */
+QWidget {
+ background-color: #1a1510;
+ color: #f0e6d2;
+ selection-background-color: #b8860b;
+ selection-color: #ffffff;
+ font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif;
+}
+
+/* ===== Push Buttons ===== */
+QPushButton {
+ background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,
+ stop:0 #332a1a, stop:1 #201b10);
+ border: 1px solid #3d2f1e;
+ padding: 6px 10px;
+ border-radius: 6px;
+ color: #f0e6d2;
+}
+QPushButton:hover { border-color: #d2691e; }
+QPushButton:pressed { background-color: #17130d; }
+
+/* ===== LineEdits, TextEdits ===== */
+QLineEdit, QPlainTextEdit, QTextEdit {
+ background-color: #14110a;
+ border: 1px solid #2a1f14;
+ padding: 6px;
+ border-radius: 4px;
+ color: #f0e6d2;
+}
+QLineEdit:focus, QTextEdit:focus { border-color: #d2691e; }
+
+/* ===== Tables, Headers ===== */
+QHeaderView::section {
+ background-color: #211a0d;
+ color: #d6c5a8;
+ padding: 6px;
+ border: 1px solid #2a1f14;
+}
+QTableView, QTreeView, QListView {
+ background-color: #120f08;
+ gridline-color: #1f1a0f;
+ alternate-background-color: #171308;
+}
+QTableView::item:selected, QTreeView::item:selected, QListView::item:selected {
+ background-color: #b8860b;
+ color: #fff;
+}
+
+/* ===== Combo & Spin Boxes ===== */
+QComboBox, QSpinBox, QDoubleSpinBox {
+ background-color: #14110a;
+ border: 1px solid #2a1f14;
+ padding: 4px;
+ color: #f0e6d2;
+}
+
+/* ===== Checkboxes / Radios ===== */
+QCheckBox, QRadioButton { spacing: 6px; }
+QCheckBox::indicator, QRadioButton::indicator {
+ background-color: transparent;
+ border: 1px solid #4a3d2c;
+}
+
+/* ===== Progress Bar ===== */
+QProgressBar {
+ border: 1px solid #2a1f14;
+ background: #14110a;
+ text-align: center;
+ border-radius: 6px;
+}
+QProgressBar::chunk {
+ background-color: #cd853f;
+ border-radius: 6px;
+}
+
+/* ===== Tabs ===== */
+QTabWidget::pane { border: 1px solid #2a1f14; }
+QTabBar::tab {
+ background: #1a1510;
+ color: #d6c5a8;
+ padding: 8px;
+ border: 1px solid #2a1f14;
+ border-bottom: none;
+ border-top-left-radius: 6px;
+ border-top-right-radius: 6px;
+}
+QTabBar::tab:selected { background: #201b10; }
+
+/* ===== Dock Widgets ===== */
+QDockWidget { titlebar-close-icon: url(:/icons/close.png); title: " "; }
+QDockWidget::title { background: #1a1510; }
+
+/* ===== Menus & Tooltips ===== */
+QMenuBar, QMenu {
+ background-color: #1a1510;
+ color: #f0e6d2;
+}
+QMenu::item:selected { background-color: #b8860b; color: #fff; }
+QToolTip {
+ background-color: #201b10;
+ color: #f0e6d2;
+ border: 1px solid #4a3d2c;
+ padding: 6px;
+}
+
+/* ===== Scrollbars & Splitters ===== */
+QScrollBar:vertical {
+ background: #1a1510;
+ width: 12px;
+}
+QScrollBar::handle:vertical {
+ background: #332a1a;
+ min-height: 20px;
+ border-radius: 6px;
+}
+QScrollBar::add-line, QScrollBar::sub-line { height: 0px; }
+QSplitter::handle { background: #201b10; }
+
+/* ===== Status Bar ===== */
+QStatusBar { background: #1a1510; color: #d6c5a8; }
From 04594965aa6fff1b1907757ed1ef55d319ba65ab Mon Sep 17 00:00:00 2001
From: Jason Pruitt
Date: Thu, 14 Aug 2025 01:22:07 -0400
Subject: [PATCH 2/8] Fix button click color setting, move override from
main.ui to specific .qss
---
blacs/main.ui | 58 --
blacs/oldmain.ui | 742 +++++++++++++++++++
blacs/plugins/theme/themes/blue_theme.qss | 6 +-
blacs/plugins/theme/themes/dark_theme.qss | 11 +-
blacs/plugins/theme/themes/default_theme.qss | 59 ++
blacs/plugins/theme/themes/warm_theme.qss | 7 +-
6 files changed, 820 insertions(+), 63 deletions(-)
create mode 100644 blacs/oldmain.ui
diff --git a/blacs/main.ui b/blacs/main.ui
index d79727e1..1c090a90 100644
--- a/blacs/main.ui
+++ b/blacs/main.ui
@@ -24,64 +24,6 @@
padding: 4px;
}
-QPushButton:hover {
- background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
- stop: 0 #f6f7fa, stop: 1 #dadbde);
- border: 1px solid #8f8f91;
- border-radius: 3px;
- }
-
- QPushButton:pressed {
- background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
- stop: 0 #dadbde, stop: 1 #f6f7fa);
- border: 1px solid #8f8f91;
- border-radius: 3px;
- }
-
-QPushButton:checked {
- background-color: #dadbde;
- border: 1px solid #8f8f91;
- border-radius: 3px;
- }
-
-QPushButton:hover:checked {
- background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
- stop: 0 #dadbde, stop: 1 #f6f7fa);
- border: 1px solid #8f8f91;
- border-radius: 3px;
- }
-
-QToolButton {
- border: none;
- padding: 2px;
- }
-
-QToolButton:hover {
- background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
- stop: 0 #f6f7fa, stop: 1 #dadbde);
- border: 1px solid #8f8f91;
- border-radius: 3px;
- }
-
- QToolButton:pressed {
- background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
- stop: 0 #dadbde, stop: 1 #f6f7fa);
- border: 1px solid #8f8f91;
- border-radius: 3px;
- }
-
-QToolButton:checked {
- background-color: #dadbde;
- border: 1px solid #8f8f91;
- border-radius: 3px;
- }
-
-QToolButton:hover:checked {
- background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
- stop: 0 #dadbde, stop: 1 #f6f7fa);
- border: 1px solid #8f8f91;
- border-radius: 3px;
- }
diff --git a/blacs/oldmain.ui b/blacs/oldmain.ui
new file mode 100644
index 00000000..d79727e1
--- /dev/null
+++ b/blacs/oldmain.ui
@@ -0,0 +1,742 @@
+
+
+ BLACS
+
+
+
+ 0
+ 0
+ 821
+ 723
+
+
+
+ blacs - the labscript suite
+
+
+
+ :/qtutils/custom/blacs.png:/qtutils/custom/blacs.png
+
+
+
+ QPushButton {
+ border: none;
+ padding: 4px;
+ }
+
+QPushButton:hover {
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+ stop: 0 #f6f7fa, stop: 1 #dadbde);
+ border: 1px solid #8f8f91;
+ border-radius: 3px;
+ }
+
+ QPushButton:pressed {
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+ stop: 0 #dadbde, stop: 1 #f6f7fa);
+ border: 1px solid #8f8f91;
+ border-radius: 3px;
+ }
+
+QPushButton:checked {
+ background-color: #dadbde;
+ border: 1px solid #8f8f91;
+ border-radius: 3px;
+ }
+
+QPushButton:hover:checked {
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+ stop: 0 #dadbde, stop: 1 #f6f7fa);
+ border: 1px solid #8f8f91;
+ border-radius: 3px;
+ }
+
+QToolButton {
+ border: none;
+ padding: 2px;
+ }
+
+QToolButton:hover {
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+ stop: 0 #f6f7fa, stop: 1 #dadbde);
+ border: 1px solid #8f8f91;
+ border-radius: 3px;
+ }
+
+ QToolButton:pressed {
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+ stop: 0 #dadbde, stop: 1 #f6f7fa);
+ border: 1px solid #8f8f91;
+ border-radius: 3px;
+ }
+
+QToolButton:checked {
+ background-color: #dadbde;
+ border: 1px solid #8f8f91;
+ border-radius: 3px;
+ }
+
+QToolButton:hover:checked {
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+ stop: 0 #dadbde, stop: 1 #f6f7fa);
+ border: 1px solid #8f8f91;
+ border-radius: 3px;
+ }
+
+
+
+
+ 0
+
+
+ 6
+
+ -
+
+
+ QLayout::SetMinimumSize
+
+
-
+
+
+ 3
+
+
+ QLayout::SetMinimumSize
+
+
-
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Expanding
+
+
+
+ 40
+ 0
+
+
+
+
+
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+ Qt::Horizontal
+
+
+
+
+ QLayout::SetMinimumSize
+
+
-
+
+
-
+
+
+ 0
+
+
-
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ QFrame::StyledPanel
+
+
+
+ 6
+
+
-
+
+
+ 6
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
-
+
+
+ Qt::NoFocus
+
+
+ Pause the queue
+
+
+ Pause
+
+
+
+ :/qtutils/fugue/control-pause.png:/qtutils/fugue/control-pause.png
+
+
+ true
+
+
+ false
+
+
+
+ -
+
+
+ 0
+
+
+ 0
+
+
-
+
+
+ Qt::NoFocus
+
+
+ Re-add shots to the end of the queue after completion
+
+
+ Repeat
+
+
+
+ :/qtutils/fugue/arrow-repeat.png:/qtutils/fugue/arrow-repeat.png
+
+
+ true
+
+
+
+ -
+
+
+ Select repeat mode
+
+
+
+
+
+
+ :/qtutils/fugue/control-270.png:/qtutils/fugue/control-270.png
+
+
+
+ 8
+ 19
+
+
+
+ QToolButton::InstantPopup
+
+
+ Qt::NoArrow
+
+
+
+
+
+ -
+
+
+ false
+
+
+ Qt::NoFocus
+
+
+ Abort current shot in progress
+
+
+ Abort
+
+
+
+ :/qtutils/fugue/cross-octagon.png:/qtutils/fugue/cross-octagon.png
+
+
+
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+
+ 0
+ 1
+
+
+
+ true
+
+
+
+
+
+ QAbstractItemView::NoEditTriggers
+
+
+ QAbstractItemView::DropOnly
+
+
+ QAbstractItemView::ExtendedSelection
+
+
+ Qt::ElideLeft
+
+
+ 0
+
+
+ true
+
+
+
+ -
+
+
+ QLayout::SetMinimumSize
+
+
-
+
+
+ Add to queue
+
+
+
+
+
+
+ :/qtutils/fugue/plus.png:/qtutils/fugue/plus.png
+
+
+
+ -
+
+
+ Qt::NoFocus
+
+
+ Delete selected shots from queue
+
+
+
+
+
+
+ :/qtutils/fugue/minus.png:/qtutils/fugue/minus.png
+
+
+
+ -
+
+
+ Qt::NoFocus
+
+
+ Clear queue of all shots
+
+
+ Clear
+
+
+
+ :/qtutils/fugue/bin-metal-full.png:/qtutils/fugue/bin-metal-full.png
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Qt::NoFocus
+
+
+ Move to top
+
+
+
+
+
+
+ :/qtutils/fugue/arrow-stop-090.png:/qtutils/fugue/arrow-stop-090.png
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Qt::NoFocus
+
+
+ Move up
+
+
+
+
+
+
+ :/qtutils/fugue/arrow-090.png:/qtutils/fugue/arrow-090.png
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Qt::NoFocus
+
+
+ Move down
+
+
+
+
+
+
+ :/qtutils/fugue/arrow-270.png:/qtutils/fugue/arrow-270.png
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Qt::NoFocus
+
+
+ Move to bottom
+
+
+
+
+
+
+ :/qtutils/fugue/arrow-stop-270.png:/qtutils/fugue/arrow-stop-270.png
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+
+
+ -
+
+
+ 3
+
+
+ 0
+
+
-
+
+
+ [Queue status]
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ <b>[running_shot.h5]</b>
+
+
+ Qt::AlignCenter
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+
+
+
+ Qt::Vertical
+
+
+
+
+ 0
+ 0
+
+
+
+ Qt::Horizontal
+
+
+
+
+ 6
+
+ -
+
+
+
+
+
+
+
+ 6
+
+ -
+
+
+
+
+
+
+
+
+ 0
+ 0
+
+
+
+ Qt::Horizontal
+
+
+
+
+ 6
+
+ -
+
+
+
+
+
+
+
+ 6
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ :/qtutils/fugue/folder-open.png:/qtutils/fugue/folder-open.png
+
+
+ Load front-panel
+
+
+
+
+
+ :/qtutils/fugue/disk.png:/qtutils/fugue/disk.png
+
+
+ Save front-panel
+
+
+
+
+
+ :/qtutils/fugue/cross-button.png:/qtutils/fugue/cross-button.png
+
+
+ Exit
+
+
+
+
+
+ :/qtutils/fugue/gear.png:/qtutils/fugue/gear.png
+
+
+ Preferences
+
+
+
+
+
+ :/qtutils/fugue/plus.png:/qtutils/fugue/plus.png
+
+
+ Add to queue
+
+
+
+
+ Edit
+
+
+
+
+ Select Globals
+
+
+
+
+ Recompile
+
+
+
+
+
+ QueueTreeview
+ QTreeView
+
+
+
+
+
+
+
+
+ actionExit
+ triggered()
+ BLACS
+ close()
+
+
+ -1
+ -1
+
+
+ 360
+ 299
+
+
+
+
+
diff --git a/blacs/plugins/theme/themes/blue_theme.qss b/blacs/plugins/theme/themes/blue_theme.qss
index 250055df..d8e10da4 100644
--- a/blacs/plugins/theme/themes/blue_theme.qss
+++ b/blacs/plugins/theme/themes/blue_theme.qss
@@ -17,7 +17,11 @@ QPushButton {
color: #e1e8f0;
}
QPushButton:hover { border-color: #2563eb; }
-QPushButton:pressed { background-color: #0d1117; }
+QPushButton:pressed { background-color: #e1e8f0; }
+QPushButton:checked {
+ color: #e1e8f0;
+ background-color: #0d1117;
+}
/* ===== LineEdits, TextEdits ===== */
QLineEdit, QPlainTextEdit, QTextEdit {
diff --git a/blacs/plugins/theme/themes/dark_theme.qss b/blacs/plugins/theme/themes/dark_theme.qss
index fdb57bdc..f3e019bc 100644
--- a/blacs/plugins/theme/themes/dark_theme.qss
+++ b/blacs/plugins/theme/themes/dark_theme.qss
@@ -17,7 +17,14 @@ QPushButton {
color: #e6eef3;
}
QPushButton:hover { border-color: #3a7bd5; }
-QPushButton:pressed { background-color: #1b1d20; }
+QPushButton:pressed {
+ color: #3a7bd5;
+ background-color: #a5bddeff;
+}
+QPushButton:checked {
+ color: #3a7bd5;
+ background-color: #a5bddeff;
+}
/* ===== LineEdits, TextEdits ===== */
QLineEdit, QPlainTextEdit, QTextEdit {
@@ -95,7 +102,7 @@ QMenuBar, QMenu {
background-color: #0f1115;
color: #e6eef3;
}
-QMenu::item:selected { background-color: #2b6ea3; color: #fff; }
+QMenu::item:selected { background-color: #323232ff; color: #fff; }
QToolTip {
background-color: #1c1f22;
color: #e6eef3;
diff --git a/blacs/plugins/theme/themes/default_theme.qss b/blacs/plugins/theme/themes/default_theme.qss
index 61781f97..06a5e2c8 100644
--- a/blacs/plugins/theme/themes/default_theme.qss
+++ b/blacs/plugins/theme/themes/default_theme.qss
@@ -1,3 +1,62 @@
+QPushButton:hover {
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+ stop: 0 #f6f7fa, stop: 1 #dadbde);
+ border: 1px solid #8f8f91;
+ border-radius: 3px;
+ }
+
+ QPushButton:pressed {
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+ stop: 0 #dadbde, stop: 1 #f6f7fa);
+ border: 1px solid #8f8f91;
+ border-radius: 3px;
+ }
+
+QPushButton:checked {
+ background-color: #dadbde;
+ border: 1px solid #8f8f91;
+ border-radius: 3px;
+ }
+
+QPushButton:hover:checked {
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+ stop: 0 #dadbde, stop: 1 #f6f7fa);
+ border: 1px solid #8f8f91;
+ border-radius: 3px;
+ }
+
+QToolButton {
+ border: none;
+ padding: 2px;
+ }
+
+QToolButton:hover {
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+ stop: 0 #f6f7fa, stop: 1 #dadbde);
+ border: 1px solid #8f8f91;
+ border-radius: 3px;
+ }
+
+ QToolButton:pressed {
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+ stop: 0 #dadbde, stop: 1 #f6f7fa);
+ border: 1px solid #8f8f91;
+ border-radius: 3px;
+ }
+
+QToolButton:checked {
+ background-color: #dadbde;
+ border: 1px solid #8f8f91;
+ border-radius: 3px;
+ }
+
+QToolButton:hover:checked {
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+ stop: 0 #dadbde, stop: 1 #f6f7fa);
+ border: 1px solid #8f8f91;
+ border-radius: 3px;
+ }
+
DigitalOutput {
font-size: 12px;
background-color: rgb(50,100,50,255);
diff --git a/blacs/plugins/theme/themes/warm_theme.qss b/blacs/plugins/theme/themes/warm_theme.qss
index e85574e3..5ee6c3fe 100644
--- a/blacs/plugins/theme/themes/warm_theme.qss
+++ b/blacs/plugins/theme/themes/warm_theme.qss
@@ -17,8 +17,11 @@ QPushButton {
color: #f0e6d2;
}
QPushButton:hover { border-color: #d2691e; }
-QPushButton:pressed { background-color: #17130d; }
-
+QPushButton:pressed { background-color: #d2691e; }
+QPushButton:checked {
+ color: #14110a;
+ background-color: #d2691e;
+}
/* ===== LineEdits, TextEdits ===== */
QLineEdit, QPlainTextEdit, QTextEdit {
background-color: #14110a;
From 94c45f3bab9ae7036b25904f946ca02aff815b6e Mon Sep 17 00:00:00 2001
From: Jason Pruitt
Date: Thu, 14 Aug 2025 01:22:35 -0400
Subject: [PATCH 3/8] Remove old file
---
blacs/oldmain.ui | 742 -----------------------------------------------
1 file changed, 742 deletions(-)
delete mode 100644 blacs/oldmain.ui
diff --git a/blacs/oldmain.ui b/blacs/oldmain.ui
deleted file mode 100644
index d79727e1..00000000
--- a/blacs/oldmain.ui
+++ /dev/null
@@ -1,742 +0,0 @@
-
-
- BLACS
-
-
-
- 0
- 0
- 821
- 723
-
-
-
- blacs - the labscript suite
-
-
-
- :/qtutils/custom/blacs.png:/qtutils/custom/blacs.png
-
-
-
- QPushButton {
- border: none;
- padding: 4px;
- }
-
-QPushButton:hover {
- background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
- stop: 0 #f6f7fa, stop: 1 #dadbde);
- border: 1px solid #8f8f91;
- border-radius: 3px;
- }
-
- QPushButton:pressed {
- background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
- stop: 0 #dadbde, stop: 1 #f6f7fa);
- border: 1px solid #8f8f91;
- border-radius: 3px;
- }
-
-QPushButton:checked {
- background-color: #dadbde;
- border: 1px solid #8f8f91;
- border-radius: 3px;
- }
-
-QPushButton:hover:checked {
- background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
- stop: 0 #dadbde, stop: 1 #f6f7fa);
- border: 1px solid #8f8f91;
- border-radius: 3px;
- }
-
-QToolButton {
- border: none;
- padding: 2px;
- }
-
-QToolButton:hover {
- background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
- stop: 0 #f6f7fa, stop: 1 #dadbde);
- border: 1px solid #8f8f91;
- border-radius: 3px;
- }
-
- QToolButton:pressed {
- background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
- stop: 0 #dadbde, stop: 1 #f6f7fa);
- border: 1px solid #8f8f91;
- border-radius: 3px;
- }
-
-QToolButton:checked {
- background-color: #dadbde;
- border: 1px solid #8f8f91;
- border-radius: 3px;
- }
-
-QToolButton:hover:checked {
- background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
- stop: 0 #dadbde, stop: 1 #f6f7fa);
- border: 1px solid #8f8f91;
- border-radius: 3px;
- }
-
-
-
-
- 0
-
-
- 6
-
- -
-
-
- QLayout::SetMinimumSize
-
-
-
-
-
- 3
-
-
- QLayout::SetMinimumSize
-
-
-
-
-
- Qt::Horizontal
-
-
- QSizePolicy::Expanding
-
-
-
- 40
- 0
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
- 0
- 0
-
-
-
- Qt::Horizontal
-
-
-
-
- QLayout::SetMinimumSize
-
-
-
-
-
-
-
-
- 0
-
-
-
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
-
- QFrame::StyledPanel
-
-
-
- 6
-
-
-
-
-
- 6
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
-
- Qt::NoFocus
-
-
- Pause the queue
-
-
- Pause
-
-
-
- :/qtutils/fugue/control-pause.png:/qtutils/fugue/control-pause.png
-
-
- true
-
-
- false
-
-
-
- -
-
-
- 0
-
-
- 0
-
-
-
-
-
- Qt::NoFocus
-
-
- Re-add shots to the end of the queue after completion
-
-
- Repeat
-
-
-
- :/qtutils/fugue/arrow-repeat.png:/qtutils/fugue/arrow-repeat.png
-
-
- true
-
-
-
- -
-
-
- Select repeat mode
-
-
-
-
-
-
- :/qtutils/fugue/control-270.png:/qtutils/fugue/control-270.png
-
-
-
- 8
- 19
-
-
-
- QToolButton::InstantPopup
-
-
- Qt::NoArrow
-
-
-
-
-
- -
-
-
- false
-
-
- Qt::NoFocus
-
-
- Abort current shot in progress
-
-
- Abort
-
-
-
- :/qtutils/fugue/cross-octagon.png:/qtutils/fugue/cross-octagon.png
-
-
-
-
-
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
-
-
- -
-
-
- -
-
-
-
- 0
- 1
-
-
-
- true
-
-
-
-
-
- QAbstractItemView::NoEditTriggers
-
-
- QAbstractItemView::DropOnly
-
-
- QAbstractItemView::ExtendedSelection
-
-
- Qt::ElideLeft
-
-
- 0
-
-
- true
-
-
-
- -
-
-
- QLayout::SetMinimumSize
-
-
-
-
-
- Add to queue
-
-
-
-
-
-
- :/qtutils/fugue/plus.png:/qtutils/fugue/plus.png
-
-
-
- -
-
-
- Qt::NoFocus
-
-
- Delete selected shots from queue
-
-
-
-
-
-
- :/qtutils/fugue/minus.png:/qtutils/fugue/minus.png
-
-
-
- -
-
-
- Qt::NoFocus
-
-
- Clear queue of all shots
-
-
- Clear
-
-
-
- :/qtutils/fugue/bin-metal-full.png:/qtutils/fugue/bin-metal-full.png
-
-
-
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 40
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Qt::NoFocus
-
-
- Move to top
-
-
-
-
-
-
- :/qtutils/fugue/arrow-stop-090.png:/qtutils/fugue/arrow-stop-090.png
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Qt::NoFocus
-
-
- Move up
-
-
-
-
-
-
- :/qtutils/fugue/arrow-090.png:/qtutils/fugue/arrow-090.png
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Qt::NoFocus
-
-
- Move down
-
-
-
-
-
-
- :/qtutils/fugue/arrow-270.png:/qtutils/fugue/arrow-270.png
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Qt::NoFocus
-
-
- Move to bottom
-
-
-
-
-
-
- :/qtutils/fugue/arrow-stop-270.png:/qtutils/fugue/arrow-stop-270.png
-
-
-
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 40
-
-
-
-
-
-
- -
-
-
- 3
-
-
- 0
-
-
-
-
-
- [Queue status]
-
-
- Qt::AlignCenter
-
-
-
- -
-
-
- <b>[running_shot.h5]</b>
-
-
- Qt::AlignCenter
-
-
-
-
-
-
-
-
-
-
-
-
- 0
- 0
-
-
-
- Qt::Vertical
-
-
-
-
- 0
- 0
-
-
-
- Qt::Horizontal
-
-
-
-
- 6
-
- -
-
-
-
-
-
-
-
- 6
-
- -
-
-
-
-
-
-
-
-
- 0
- 0
-
-
-
- Qt::Horizontal
-
-
-
-
- 6
-
- -
-
-
-
-
-
-
-
- 6
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- :/qtutils/fugue/folder-open.png:/qtutils/fugue/folder-open.png
-
-
- Load front-panel
-
-
-
-
-
- :/qtutils/fugue/disk.png:/qtutils/fugue/disk.png
-
-
- Save front-panel
-
-
-
-
-
- :/qtutils/fugue/cross-button.png:/qtutils/fugue/cross-button.png
-
-
- Exit
-
-
-
-
-
- :/qtutils/fugue/gear.png:/qtutils/fugue/gear.png
-
-
- Preferences
-
-
-
-
-
- :/qtutils/fugue/plus.png:/qtutils/fugue/plus.png
-
-
- Add to queue
-
-
-
-
- Edit
-
-
-
-
- Select Globals
-
-
-
-
- Recompile
-
-
-
-
-
- QueueTreeview
- QTreeView
-
-
-
-
-
-
-
-
- actionExit
- triggered()
- BLACS
- close()
-
-
- -1
- -1
-
-
- 360
- 299
-
-
-
-
-
From cf74569fafc911901e316dfa0bdb234ab4a1c565 Mon Sep 17 00:00:00 2001
From: Jason Pruitt
Date: Thu, 4 Sep 2025 10:01:47 -0400
Subject: [PATCH 4/8] Swap dark checked button color for readability
---
blacs/plugins/theme/__init__.py | 247 ----------------------
blacs/plugins/theme/themes/dark_theme.qss | 4 +-
2 files changed, 2 insertions(+), 249 deletions(-)
diff --git a/blacs/plugins/theme/__init__.py b/blacs/plugins/theme/__init__.py
index 3f7c4cd9..dd7c3878 100644
--- a/blacs/plugins/theme/__init__.py
+++ b/blacs/plugins/theme/__init__.py
@@ -106,253 +106,6 @@ def load_theme(theme_name):
}
"""
-# DARK_STYLESHEET = """
-# # /* ===== Global & Widget Defaults ===== */
-# # QWidget {
-# # background-color: #0f1115;
-# # color: #e6eef3;
-# # selection-background-color: #2b6ea3;
-# # selection-color: #ffffff;
-# # font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif;
-# # }
-
-# # /* ===== Push Buttons ===== */
-# # QPushButton {
-# # background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,
-# # stop:0 #2a2e34, stop:1 #212427);
-# # border: 1px solid #2e3338;
-# # padding: 6px 10px;
-# # border-radius: 6px;
-# # color: #e6eef3;
-# # }
-# # QPushButton:hover { border-color: #3a7bd5; }
-# # QPushButton:pressed { background-color: #1b1d20; }
-
-# # /* ===== LineEdits, TextEdits ===== */
-# # QLineEdit, QPlainTextEdit, QTextEdit {
-# # background-color: #0c0d0f;
-# # border: 1px solid #26282c;
-# # padding: 6px;
-# # border-radius: 4px;
-# # color: #e6eef3;
-# # }
-# # QLineEdit:focus, QTextEdit:focus { border-color: #3a7bd5; }
-
-# # /* ===== Tables, Headers ===== */
-# # QHeaderView::section {
-# # background-color: #131417;
-# # color: #cfd8de;
-# # padding: 6px;
-# # border: 1px solid #232427;
-# # }
-# # QTableView, QTreeView, QListView {
-# # background-color: #0b0c0e;
-# # gridline-color: #17181b;
-# # alternate-background-color: #0f1013;
-# # }
-# # QTableView::item:selected, QTreeView::item:selected, QListView::item:selected {
-# # background-color: #2b6ea3;
-# # color: #fff;
-# # }
-
-# # /* ===== Combo & Spin Boxes ===== */
-# # QComboBox, QSpinBox, QDoubleSpinBox {
-# # background-color: #0c0d0f;
-# # border: 1px solid #26282c;
-# # padding: 4px;
-# # color: #e6eef3;
-# # }
-
-# # /* ===== Checkboxes / Radios ===== */
-# # QCheckBox, QRadioButton { spacing: 6px; }
-# # QCheckBox::indicator, QRadioButton::indicator {
-# # background-color: transparent;
-# # border: 1px solid #3a3d42;
-# # }
-
-# # /* ===== Progress Bar ===== */
-# # QProgressBar {
-# # border: 1px solid #2b2f34;
-# # background: #0c0d0f;
-# # text-align: center;
-# # border-radius: 6px;
-# # }
-# # QProgressBar::chunk {
-# # background-color: #3a7bd5;
-# # border-radius: 6px;
-# # }
-
-# # /* ===== Tabs ===== */
-# # QTabWidget::pane { border: 1px solid #232427; }
-# # QTabBar::tab {
-# # background: #0f1115;
-# # color: #cfd8de;
-# # padding: 8px;
-# # border: 1px solid #232427;
-# # border-bottom: none;
-# # border-top-left-radius: 6px;
-# # border-top-right-radius: 6px;
-# # }
-# # QTabBar::tab:selected { background: #16181c; }
-
-# # /* ===== Dock Widgets ===== */
-# # QDockWidget { titlebar-close-icon: url(:/icons/close.png); title: " "; }
-# # QDockWidget::title { background: #101215; }
-
-# # /* ===== Menus & Tooltips ===== */
-# # QMenuBar, QMenu {
-# # background-color: #0f1115;
-# # color: #e6eef3;
-# # }
-# # QMenu::item:selected { background-color: #2b6ea3; color: #fff; }
-# # QToolTip {
-# # background-color: #1c1f22;
-# # color: #e6eef3;
-# # border: 1px solid #3a3f45;
-# # padding: 6px;
-# # }
-
-# # /* ===== Scrollbars & Splitters ===== */
-# # QScrollBar:vertical {
-# # background: #0f1115;
-# # width: 12px;
-# # }
-# # QScrollBar::handle:vertical {
-# # background: #2b2e33;
-# # min-height: 20px;
-# # border-radius: 6px;
-# # }
-# # QScrollBar::add-line, QScrollBar::sub-line { height: 0px; }
-# # QSplitter::handle { background: #151618; }
-
-# # /* ===== Status Bar ===== */
-# # QStatusBar { background: #0f1115; color: #cfd8de; }
-
-# # """
-
-# BLUE_STYLESHEET = """
-# /* ===== Global & Widget Defaults ===== */
-# QWidget {
-# background-color: #0a0f1a;
-# color: #e1e8f0;
-# selection-background-color: #1e4a72;
-# selection-color: #ffffff;
-# font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif;
-# }
-
-# /* ===== Push Buttons ===== */
-# QPushButton {
-# background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,
-# stop:0 #1a2332, stop:1 #0f1520);
-# border: 1px solid #1e2b3d;
-# padding: 6px 10px;
-# border-radius: 6px;
-# color: #e1e8f0;
-# }
-# QPushButton:hover { border-color: #2563eb; }
-# QPushButton:pressed { background-color: #0d1117; }
-
-# /* ===== LineEdits, TextEdits ===== */
-# QLineEdit, QPlainTextEdit, QTextEdit {
-# background-color: #070b14;
-# border: 1px solid #1a2332;
-# padding: 6px;
-# border-radius: 4px;
-# color: #e1e8f0;
-# }
-# QLineEdit:focus, QTextEdit:focus { border-color: #2563eb; }
-
-# /* ===== Tables, Headers ===== */
-# QHeaderView::section {
-# background-color: #0d1421;
-# color: #b8c5d6;
-# padding: 6px;
-# border: 1px solid #1a2332;
-# }
-# QTableView, QTreeView, QListView {
-# background-color: #060a12;
-# gridline-color: #0f1520;
-# alternate-background-color: #080d17;
-# }
-# QTableView::item:selected, QTreeView::item:selected, QListView::item:selected {
-# background-color: #1e4a72;
-# color: #fff;
-# }
-
-# /* ===== Combo & Spin Boxes ===== */
-# QComboBox, QSpinBox, QDoubleSpinBox {
-# background-color: #070b14;
-# border: 1px solid #1a2332;
-# padding: 4px;
-# color: #e1e8f0;
-# }
-
-# /* ===== Checkboxes / Radios ===== */
-# QCheckBox, QRadioButton { spacing: 6px; }
-# QCheckBox::indicator, QRadioButton::indicator {
-# background-color: transparent;
-# border: 1px solid #2c3e50;
-# }
-
-# /* ===== Progress Bar ===== */
-# QProgressBar {
-# border: 1px solid #1a2332;
-# background: #070b14;
-# text-align: center;
-# border-radius: 6px;
-# }
-# QProgressBar::chunk {
-# background-color: #2563eb;
-# border-radius: 6px;
-# }
-
-# /* ===== Tabs ===== */
-# QTabWidget::pane { border: 1px solid #1a2332; }
-# QTabBar::tab {
-# background: #0a0f1a;
-# color: #b8c5d6;
-# padding: 8px;
-# border: 1px solid #1a2332;
-# border-bottom: none;
-# border-top-left-radius: 6px;
-# border-top-right-radius: 6px;
-# }
-# QTabBar::tab:selected { background: #0f1520; }
-
-# /* ===== Dock Widgets ===== */
-# QDockWidget { titlebar-close-icon: url(:/icons/close.png); title: " "; }
-# QDockWidget::title { background: #0a0f1a; }
-
-# /* ===== Menus & Tooltips ===== */
-# QMenuBar, QMenu {
-# background-color: #0a0f1a;
-# color: #e1e8f0;
-# }
-# QMenu::item:selected { background-color: #1e4a72; color: #fff; }
-# QToolTip {
-# background-color: #0f1520;
-# color: #e1e8f0;
-# border: 1px solid #2c3e50;
-# padding: 6px;
-# }
-
-# /* ===== Scrollbars & Splitters ===== */
-# QScrollBar:vertical {
-# background: #0a0f1a;
-# width: 12px;
-# }
-# QScrollBar::handle:vertical {
-# background: #1a2332;
-# min-height: 20px;
-# border-radius: 6px;
-# }
-# QScrollBar::add-line, QScrollBar::sub-line { height: 0px; }
-# QSplitter::handle { background: #0f1520; }
-
-# /* ===== Status Bar ===== */
-# QStatusBar { background: #0a0f1a; color: #b8c5d6; }
-# """
-
def is_default_stylesheet(stylesheet):
"""Return whether a stylesheet is the same as the default stylesheet, modulo whitespace"""
diff --git a/blacs/plugins/theme/themes/dark_theme.qss b/blacs/plugins/theme/themes/dark_theme.qss
index f3e019bc..8f71708e 100644
--- a/blacs/plugins/theme/themes/dark_theme.qss
+++ b/blacs/plugins/theme/themes/dark_theme.qss
@@ -22,8 +22,8 @@ QPushButton:pressed {
background-color: #a5bddeff;
}
QPushButton:checked {
- color: #3a7bd5;
- background-color: #a5bddeff;
+ color: #0f1115;
+ background-color: #e6eef3;
}
/* ===== LineEdits, TextEdits ===== */
From e19e3d1e46e8e7a4550e98239948f34a6a779595 Mon Sep 17 00:00:00 2001
From: Jason Pruitt
Date: Thu, 4 Sep 2025 10:15:09 -0400
Subject: [PATCH 5/8] Add new green/black theme
---
blacs/plugins/theme/themes/matrix_theme.qss | 127 ++++++++++++++++++++
1 file changed, 127 insertions(+)
create mode 100644 blacs/plugins/theme/themes/matrix_theme.qss
diff --git a/blacs/plugins/theme/themes/matrix_theme.qss b/blacs/plugins/theme/themes/matrix_theme.qss
new file mode 100644
index 00000000..a8422432
--- /dev/null
+++ b/blacs/plugins/theme/themes/matrix_theme.qss
@@ -0,0 +1,127 @@
+/* ===== Global & Widget Defaults ===== */
+QWidget {
+ background-color: #0f1115;
+ color: #33FF00;
+ selection-background-color: #33FF33;
+ selection-color: #00FF33;
+ font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif;
+}
+
+/* ===== Push Buttons ===== */
+QPushButton {
+ background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,
+ stop:0 #2a2e34, stop:1 #212427);
+ border: 1px solid #0f1115;
+ padding: 6px 10px;
+ border-radius: 6px;
+ color: #33FF00;
+}
+QPushButton:hover { border-color: #33FF00; }
+QPushButton:pressed {
+ color: #33FF00;
+ background-color: #0f1115;
+}
+QPushButton:checked {
+ color: #0f1115;
+ background-color: #33FF00;
+}
+
+/* ===== LineEdits, TextEdits ===== */
+QLineEdit, QPlainTextEdit, QTextEdit {
+ background-color: #0f1115;
+ border: 1px solid #0f1115;
+ padding: 6px;
+ border-radius: 4px;
+ color: #33FF00;
+}
+QLineEdit:focus, QTextEdit:focus { border-color: #33FF00; }
+
+/* ===== Tables, Headers ===== */
+QHeaderView::section {
+ background-color: #131417;
+ color: #33FF00;
+ padding: 6px;
+ border: 1px solid #232427;
+}
+QTableView, QTreeView, QListView {
+ background-color: #0b0c0e;
+ gridline-color: #17181b;
+ alternate-background-color: #0f1013;
+}
+QTableView::item:selected, QTreeView::item:selected, QListView::item:selected {
+ background-color: #2b6ea3;
+ color: #fff;
+}
+
+/* ===== Combo & Spin Boxes ===== */
+QComboBox, QSpinBox, QDoubleSpinBox {
+ background-color: #0c0d0f;
+ border: 1px solid #26282c;
+ padding: 4px;
+ color: #33FF00;
+}
+
+/* ===== Checkboxes / Radios ===== */
+QCheckBox, QRadioButton { spacing: 6px; }
+QCheckBox::indicator, QRadioButton::indicator {
+ background-color: transparent;
+ border: 1px solid #3a3d42;
+}
+
+/* ===== Progress Bar ===== */
+QProgressBar {
+ border: 1px solid #2b2f34;
+ background: #0c0d0f;
+ text-align: center;
+ border-radius: 6px;
+}
+QProgressBar::chunk {
+ background-color: #33FF00;
+ border-radius: 6px;
+}
+
+/* ===== Tabs ===== */
+QTabWidget::pane { border: 1px solid #232427; }
+QTabBar::tab {
+ background: #0f1115;
+ color: #33FF00;
+ padding: 8px;
+ border: 1px solid #232427;
+ border-bottom: none;
+ border-top-left-radius: 6px;
+ border-top-right-radius: 6px;
+}
+QTabBar::tab:selected { background: #16181c; }
+
+/* ===== Dock Widgets ===== */
+QDockWidget { titlebar-close-icon: url(:/icons/close.png); title: " "; }
+QDockWidget::title { background: #101215; }
+
+/* ===== Menus & Tooltips ===== */
+QMenuBar, QMenu {
+ background-color: #0f1115;
+ color: #33FF00;
+}
+QMenu::item:selected { background-color: #323232ff; color: #fff; }
+QToolTip {
+ background-color: #1c1f22;
+ color: #33FF00;
+ border: 1px solid #3a3f45;
+ padding: 6px;
+}
+
+/* ===== Scrollbars & Splitters ===== */
+QScrollBar:vertical {
+ background: #0f1115;
+ width: 12px;
+}
+QScrollBar::handle:vertical {
+ background: #2b2e33;
+ min-height: 20px;
+ border-radius: 6px;
+}
+QScrollBar::add-line, QScrollBar::sub-line { height: 0px; }
+QSplitter::handle { background: #151618; }
+
+/* ===== Status Bar ===== */
+QStatusBar { background: #0f1115; color: #33FF00; }
From 1b29b7c981dd17c2695b3eeb54991f2cd7918b9d Mon Sep 17 00:00:00 2001
From: Jason Pruitt
Date: Thu, 4 Sep 2025 10:39:39 -0400
Subject: [PATCH 6/8] Add peach theme, and fix a stray blue in the green/black
---
blacs/plugins/theme/themes/matrix_theme.qss | 2 +-
blacs/plugins/theme/themes/peach_theme.qss | 127 ++++++++++++++++++++
2 files changed, 128 insertions(+), 1 deletion(-)
create mode 100644 blacs/plugins/theme/themes/peach_theme.qss
diff --git a/blacs/plugins/theme/themes/matrix_theme.qss b/blacs/plugins/theme/themes/matrix_theme.qss
index a8422432..999e8482 100644
--- a/blacs/plugins/theme/themes/matrix_theme.qss
+++ b/blacs/plugins/theme/themes/matrix_theme.qss
@@ -49,7 +49,7 @@ QTableView, QTreeView, QListView {
alternate-background-color: #0f1013;
}
QTableView::item:selected, QTreeView::item:selected, QListView::item:selected {
- background-color: #2b6ea3;
+ background-color: #33FF33;
color: #fff;
}
diff --git a/blacs/plugins/theme/themes/peach_theme.qss b/blacs/plugins/theme/themes/peach_theme.qss
new file mode 100644
index 00000000..6a0d3e30
--- /dev/null
+++ b/blacs/plugins/theme/themes/peach_theme.qss
@@ -0,0 +1,127 @@
+/* ===== Global & Widget Defaults ===== */
+QWidget {
+ background-color: #F9ECE6;
+ color: #FF92A9;
+ selection-background-color: #FED361;
+ selection-color: #FFFFFF;
+ font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif;
+}
+
+/* ===== Push Buttons ===== */
+QPushButton {
+ background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,
+ stop:0 #FFFFFF, stop:1 #F9ECE6);
+ border: 1px solid #F9ECE6;
+ padding: 6px 10px;
+ border-radius: 6px;
+ color: #FF92A9;
+}
+QPushButton:hover { border-color: #FED361; }
+QPushButton:pressed {
+ color: #FFFFFF;
+ background-color: #FF92A9;
+}
+QPushButton:checked {
+ color: #FFFFFF;
+ background-color: #FED361;
+}
+
+/* ===== LineEdits, TextEdits ===== */
+QLineEdit, QPlainTextEdit, QTextEdit {
+ background-color: #FFFFFF;
+ border: 1px solid #F9ECE6;
+ padding: 6px;
+ border-radius: 4px;
+ color: #FF92A9;
+}
+QLineEdit:focus, QTextEdit:focus { border-color: #FED361; }
+
+/* ===== Tables, Headers ===== */
+QHeaderView::section {
+ background-color: #FED361;
+ color: #FFFFFF;
+ padding: 6px;
+ border: 1px solid #F9ECE6;
+}
+QTableView, QTreeView, QListView {
+ background-color: #FFFFFF;
+ gridline-color: #F9ECE6;
+ alternate-background-color: #F9ECE6;
+}
+QTableView::item:selected, QTreeView::item:selected, QListView::item:selected {
+ background-color: #FF92A9;
+ color: #FFFFFF;
+}
+
+/* ===== Combo & Spin Boxes ===== */
+QComboBox, QSpinBox, QDoubleSpinBox {
+ background-color: #FFFFFF;
+ border: 1px solid #F9ECE6;
+ padding: 4px;
+ color: #FF92A9;
+}
+
+/* ===== Checkboxes / Radios ===== */
+QCheckBox, QRadioButton { spacing: 6px; }
+QCheckBox::indicator, QRadioButton::indicator {
+ background-color: transparent;
+ border: 1px solid #FED361;
+}
+
+/* ===== Progress Bar ===== */
+QProgressBar {
+ border: 1px solid #F9ECE6;
+ background: #FFFFFF;
+ text-align: center;
+ border-radius: 6px;
+}
+QProgressBar::chunk {
+ background-color: #FF92A9;
+ border-radius: 6px;
+}
+
+/* ===== Tabs ===== */
+QTabWidget::pane { border: 1px solid #F9ECE6; }
+QTabBar::tab {
+ background: #FFFFFF;
+ color: #FF92A9;
+ padding: 8px;
+ border: 1px solid #F9ECE6;
+ border-bottom: none;
+ border-top-left-radius: 6px;
+ border-top-right-radius: 6px;
+}
+QTabBar::tab:selected { background: #FED361; color: #FFFFFF; }
+
+/* ===== Dock Widgets ===== */
+QDockWidget { titlebar-close-icon: url(:/icons/close.png); title: " "; }
+QDockWidget::title { background: #FED361; color: #FFFFFF; }
+
+/* ===== Menus & Tooltips ===== */
+QMenuBar, QMenu {
+ background-color: #FFFFFF;
+ color: #FF92A9;
+}
+QMenu::item:selected { background-color: #FED361; color: #FFFFFF; }
+QToolTip {
+ background-color: #F9ECE6;
+ color: #FF92A9;
+ border: 1px solid #FED361;
+ padding: 6px;
+}
+
+/* ===== Scrollbars & Splitters ===== */
+QScrollBar:vertical {
+ background: #FFFFFF;
+ width: 12px;
+}
+QScrollBar::handle:vertical {
+ background: #FED361;
+ min-height: 20px;
+ border-radius: 6px;
+}
+QScrollBar::add-line, QScrollBar::sub-line { height: 0px; }
+QSplitter::handle { background: #F9ECE6; }
+
+/* ===== Status Bar ===== */
+QStatusBar { background: #FFFFFF; color: #FF92A9; }
From 7276a59d06a70393602f9ea08e96521ee20ab534 Mon Sep 17 00:00:00 2001
From: Jason Pruitt
Date: Thu, 4 Sep 2025 10:44:16 -0400
Subject: [PATCH 7/8] Change blue theme to include more blue
---
blacs/plugins/theme/themes/blue_theme.qss | 88 +++++++++++------------
1 file changed, 44 insertions(+), 44 deletions(-)
diff --git a/blacs/plugins/theme/themes/blue_theme.qss b/blacs/plugins/theme/themes/blue_theme.qss
index d8e10da4..6424fe7a 100644
--- a/blacs/plugins/theme/themes/blue_theme.qss
+++ b/blacs/plugins/theme/themes/blue_theme.qss
@@ -1,8 +1,8 @@
/* ===== Global & Widget Defaults ===== */
QWidget {
- background-color: #0a0f1a;
- color: #e1e8f0;
- selection-background-color: #1e4a72;
+ background-color: #0a1224; /* deep navy */
+ color: #dce7f7; /* light bluish text */
+ selection-background-color: #3b82f6; /* vibrant blue */
selection-color: #ffffff;
font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif;
}
@@ -10,115 +10,115 @@ QWidget {
/* ===== Push Buttons ===== */
QPushButton {
background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,
- stop:0 #1a2332, stop:1 #0f1520);
- border: 1px solid #1e2b3d;
+ stop:0 #1e2d4d, stop:1 #14213a);
+ border: 1px solid #24324f;
padding: 6px 10px;
border-radius: 6px;
- color: #e1e8f0;
+ color: #dce7f7;
}
-QPushButton:hover { border-color: #2563eb; }
-QPushButton:pressed { background-color: #e1e8f0; }
+QPushButton:hover { border-color: #3b82f6; }
+QPushButton:pressed { background-color: #2563eb; color: #fff; }
QPushButton:checked {
- color: #e1e8f0;
- background-color: #0d1117;
+ color: #dce7f7;
+ background-color: #2563eb;
}
/* ===== LineEdits, TextEdits ===== */
QLineEdit, QPlainTextEdit, QTextEdit {
- background-color: #070b14;
- border: 1px solid #1a2332;
+ background-color: #0f1a33;
+ border: 1px solid #24324f;
padding: 6px;
border-radius: 4px;
- color: #e1e8f0;
+ color: #dce7f7;
}
-QLineEdit:focus, QTextEdit:focus { border-color: #2563eb; }
+QLineEdit:focus, QTextEdit:focus { border-color: #3b82f6; }
/* ===== Tables, Headers ===== */
QHeaderView::section {
- background-color: #0d1421;
- color: #b8c5d6;
+ background-color: #1a2740;
+ color: #b8cfee;
padding: 6px;
- border: 1px solid #1a2332;
+ border: 1px solid #24324f;
}
QTableView, QTreeView, QListView {
- background-color: #060a12;
- gridline-color: #0f1520;
- alternate-background-color: #080d17;
+ background-color: #0d162b;
+ gridline-color: #1e2d4d;
+ alternate-background-color: #101b33;
}
QTableView::item:selected, QTreeView::item:selected, QListView::item:selected {
- background-color: #1e4a72;
+ background-color: #3b82f6;
color: #fff;
}
/* ===== Combo & Spin Boxes ===== */
QComboBox, QSpinBox, QDoubleSpinBox {
- background-color: #070b14;
- border: 1px solid #1a2332;
+ background-color: #0f1a33;
+ border: 1px solid #24324f;
padding: 4px;
- color: #e1e8f0;
+ color: #dce7f7;
}
/* ===== Checkboxes / Radios ===== */
QCheckBox, QRadioButton { spacing: 6px; }
QCheckBox::indicator, QRadioButton::indicator {
background-color: transparent;
- border: 1px solid #2c3e50;
+ border: 1px solid #3b4e72;
}
/* ===== Progress Bar ===== */
QProgressBar {
- border: 1px solid #1a2332;
- background: #070b14;
+ border: 1px solid #24324f;
+ background: #0f1a33;
text-align: center;
border-radius: 6px;
}
QProgressBar::chunk {
- background-color: #2563eb;
+ background-color: #60a5fa; /* brighter blue chunk */
border-radius: 6px;
}
/* ===== Tabs ===== */
-QTabWidget::pane { border: 1px solid #1a2332; }
+QTabWidget::pane { border: 1px solid #24324f; }
QTabBar::tab {
- background: #0a0f1a;
- color: #b8c5d6;
+ background: #0a1224;
+ color: #b8cfee;
padding: 8px;
- border: 1px solid #1a2332;
+ border: 1px solid #24324f;
border-bottom: none;
border-top-left-radius: 6px;
border-top-right-radius: 6px;
}
-QTabBar::tab:selected { background: #0f1520; }
+QTabBar::tab:selected { background: #1a2740; color: #fff; }
/* ===== Dock Widgets ===== */
QDockWidget { titlebar-close-icon: url(:/icons/close.png); title: " "; }
-QDockWidget::title { background: #0a0f1a; }
+QDockWidget::title { background: #14213a; color: #dce7f7; }
/* ===== Menus & Tooltips ===== */
QMenuBar, QMenu {
- background-color: #0a0f1a;
- color: #e1e8f0;
+ background-color: #0a1224;
+ color: #dce7f7;
}
-QMenu::item:selected { background-color: #1e4a72; color: #fff; }
+QMenu::item:selected { background-color: #2563eb; color: #fff; }
QToolTip {
- background-color: #0f1520;
- color: #e1e8f0;
- border: 1px solid #2c3e50;
+ background-color: #1a2740;
+ color: #dce7f7;
+ border: 1px solid #3b4e72;
padding: 6px;
}
/* ===== Scrollbars & Splitters ===== */
QScrollBar:vertical {
- background: #0a0f1a;
+ background: #0a1224;
width: 12px;
}
QScrollBar::handle:vertical {
- background: #1a2332;
+ background: #24324f;
min-height: 20px;
border-radius: 6px;
}
QScrollBar::add-line, QScrollBar::sub-line { height: 0px; }
-QSplitter::handle { background: #0f1520; }
+QSplitter::handle { background: #1a2740; }
/* ===== Status Bar ===== */
-QStatusBar { background: #0a0f1a; color: #b8c5d6; }
+QStatusBar { background: #0a1224; color: #b8cfee; }
From a71a3684c792fd3710b041b5bcc5f0dad8cc0193 Mon Sep 17 00:00:00 2001
From: Jason Pruitt
Date: Fri, 5 Sep 2025 15:25:16 -0400
Subject: [PATCH 8/8] Fix formatting nitpick
---
blacs/plugins/theme/themes/blue_theme.qss | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/blacs/plugins/theme/themes/blue_theme.qss b/blacs/plugins/theme/themes/blue_theme.qss
index 6424fe7a..d2f93e12 100644
--- a/blacs/plugins/theme/themes/blue_theme.qss
+++ b/blacs/plugins/theme/themes/blue_theme.qss
@@ -1,8 +1,8 @@
/* ===== Global & Widget Defaults ===== */
QWidget {
- background-color: #0a1224; /* deep navy */
- color: #dce7f7; /* light bluish text */
- selection-background-color: #3b82f6; /* vibrant blue */
+ background-color: #0a1224;
+ color: #dce7f7;
+ selection-background-color: #3b82f6;
selection-color: #ffffff;
font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif;
}
@@ -17,7 +17,10 @@ QPushButton {
color: #dce7f7;
}
QPushButton:hover { border-color: #3b82f6; }
-QPushButton:pressed { background-color: #2563eb; color: #fff; }
+QPushButton:pressed {
+ background-color: #2563eb;
+ color: #fff;
+}
QPushButton:checked {
color: #dce7f7;
background-color: #2563eb;