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/plugins/theme/__init__.py b/blacs/plugins/theme/__init__.py index 77ba0d90..dd7c3878 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,7 +106,6 @@ } """ - def is_default_stylesheet(stylesheet): """Return whether a stylesheet is the same as the default stylesheet, modulo whitespace""" @@ -157,31 +163,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 +230,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..d2f93e12 --- /dev/null +++ b/blacs/plugins/theme/themes/blue_theme.qss @@ -0,0 +1,127 @@ +/* ===== Global & Widget Defaults ===== */ +QWidget { + background-color: #0a1224; + color: #dce7f7; + selection-background-color: #3b82f6; + 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 #1e2d4d, stop:1 #14213a); + border: 1px solid #24324f; + padding: 6px 10px; + border-radius: 6px; + color: #dce7f7; +} +QPushButton:hover { border-color: #3b82f6; } +QPushButton:pressed { + background-color: #2563eb; + color: #fff; +} +QPushButton:checked { + color: #dce7f7; + background-color: #2563eb; +} + +/* ===== LineEdits, TextEdits ===== */ +QLineEdit, QPlainTextEdit, QTextEdit { + background-color: #0f1a33; + border: 1px solid #24324f; + padding: 6px; + border-radius: 4px; + color: #dce7f7; +} +QLineEdit:focus, QTextEdit:focus { border-color: #3b82f6; } + +/* ===== Tables, Headers ===== */ +QHeaderView::section { + background-color: #1a2740; + color: #b8cfee; + padding: 6px; + border: 1px solid #24324f; +} +QTableView, QTreeView, QListView { + background-color: #0d162b; + gridline-color: #1e2d4d; + alternate-background-color: #101b33; +} +QTableView::item:selected, QTreeView::item:selected, QListView::item:selected { + background-color: #3b82f6; + color: #fff; +} + +/* ===== Combo & Spin Boxes ===== */ +QComboBox, QSpinBox, QDoubleSpinBox { + background-color: #0f1a33; + border: 1px solid #24324f; + padding: 4px; + color: #dce7f7; +} + +/* ===== Checkboxes / Radios ===== */ +QCheckBox, QRadioButton { spacing: 6px; } +QCheckBox::indicator, QRadioButton::indicator { + background-color: transparent; + border: 1px solid #3b4e72; +} + +/* ===== Progress Bar ===== */ +QProgressBar { + border: 1px solid #24324f; + background: #0f1a33; + text-align: center; + border-radius: 6px; +} +QProgressBar::chunk { + background-color: #60a5fa; /* brighter blue chunk */ + border-radius: 6px; +} + +/* ===== Tabs ===== */ +QTabWidget::pane { border: 1px solid #24324f; } +QTabBar::tab { + background: #0a1224; + color: #b8cfee; + padding: 8px; + border: 1px solid #24324f; + border-bottom: none; + border-top-left-radius: 6px; + border-top-right-radius: 6px; +} +QTabBar::tab:selected { background: #1a2740; color: #fff; } + +/* ===== Dock Widgets ===== */ +QDockWidget { titlebar-close-icon: url(:/icons/close.png); title: " "; } +QDockWidget::title { background: #14213a; color: #dce7f7; } + +/* ===== Menus & Tooltips ===== */ +QMenuBar, QMenu { + background-color: #0a1224; + color: #dce7f7; +} +QMenu::item:selected { background-color: #2563eb; color: #fff; } +QToolTip { + background-color: #1a2740; + color: #dce7f7; + border: 1px solid #3b4e72; + padding: 6px; +} + +/* ===== Scrollbars & Splitters ===== */ +QScrollBar:vertical { + background: #0a1224; + width: 12px; +} +QScrollBar::handle:vertical { + background: #24324f; + min-height: 20px; + border-radius: 6px; +} +QScrollBar::add-line, QScrollBar::sub-line { height: 0px; } +QSplitter::handle { background: #1a2740; } + +/* ===== Status Bar ===== */ +QStatusBar { background: #0a1224; color: #b8cfee; } diff --git a/blacs/plugins/theme/themes/dark_theme.qss b/blacs/plugins/theme/themes/dark_theme.qss new file mode 100644 index 00000000..8f71708e --- /dev/null +++ b/blacs/plugins/theme/themes/dark_theme.qss @@ -0,0 +1,127 @@ +/* ===== 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 { + color: #3a7bd5; + background-color: #a5bddeff; +} +QPushButton:checked { + color: #0f1115; + background-color: #e6eef3; +} + +/* ===== 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: #323232ff; 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..06a5e2c8 --- /dev/null +++ b/blacs/plugins/theme/themes/default_theme.qss @@ -0,0 +1,134 @@ +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); + 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/matrix_theme.qss b/blacs/plugins/theme/themes/matrix_theme.qss new file mode 100644 index 00000000..999e8482 --- /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: #33FF33; + 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; } 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; } diff --git a/blacs/plugins/theme/themes/warm_theme.qss b/blacs/plugins/theme/themes/warm_theme.qss new file mode 100644 index 00000000..5ee6c3fe --- /dev/null +++ b/blacs/plugins/theme/themes/warm_theme.qss @@ -0,0 +1,123 @@ +/* ===== 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: #d2691e; } +QPushButton:checked { + color: #14110a; + background-color: #d2691e; +} +/* ===== 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; }