From 50c82bca432c7a50435ca8ca4b6fad98b4867c2f Mon Sep 17 00:00:00 2001 From: "PANIK\\chris" Date: Tue, 6 Jan 2026 19:52:55 +0100 Subject: [PATCH] Style updates. --- bcanimateddelegate.cpp | 2 +- bcdriver.cpp | 1 - bcmainwindow.cpp | 16 +- bcmainwindow.h | 1 + bctransmitter.cpp | 38 +- bctransmitter.h | 1 + bionxcontrol.qrc | 3 - bionxcontrol.qrc.autosave | 16 + resources/bc_light.qss | 173 +++++++ resources/claude_dark_mode.qss | 871 ------------------------------- resources/claude_light_mode.qss | 890 -------------------------------- resources/connect.svg | 2 +- resources/connect_white.svg | 1 - 13 files changed, 240 insertions(+), 1775 deletions(-) create mode 100644 bionxcontrol.qrc.autosave create mode 100644 resources/bc_light.qss delete mode 100644 resources/claude_dark_mode.qss delete mode 100644 resources/claude_light_mode.qss delete mode 100644 resources/connect_white.svg diff --git a/bcanimateddelegate.cpp b/bcanimateddelegate.cpp index ca8e6c3..91e6eee 100644 --- a/bcanimateddelegate.cpp +++ b/bcanimateddelegate.cpp @@ -230,7 +230,7 @@ void BCAnimatedDelegate::paintSliderIndicator(QPainter* painter, const QStyleOpt { const BCValue& valueX = *(_valueList[ index.row()].get()); - int value = 50;index.model()->data(index, Qt::DisplayRole).toInt(); + int value = 50;//index.model()->data(index, Qt::DisplayRole).toInt(); // Hintergrund if (option.state & QStyle::State_Selected) diff --git a/bcdriver.cpp b/bcdriver.cpp index 4e3c8c1..c85eae9 100644 --- a/bcdriver.cpp +++ b/bcdriver.cpp @@ -74,7 +74,6 @@ TransmitResult BCDriverDummy::readRawByte( uint32_t deviceID, uint8_t registerID { Q_UNUSED(deviceID) Q_UNUSED(registerID) - qDebug() << " --- Dummy: readRawByte:DriverState: " << getDriverState(); uint8_t myRandomByte = static_cast(QRandomGenerator::global()->bounded(256)); return myRandomByte; } diff --git a/bcmainwindow.cpp b/bcmainwindow.cpp index 990d0a5..511cc7d 100644 --- a/bcmainwindow.cpp +++ b/bcmainwindow.cpp @@ -150,6 +150,7 @@ void BCMainWindow::initMainWindow() connect( this, &BCMainWindow::requestValueUpdate, &_transmitter, &BCTransmitter::onUpdateValue); connect( &_worker, &QThread::finished, &_transmitter, &QObject::deleteLater); connect( &_transmitter, &BCTransmitter::driverStateChanged, this, &BCMainWindow::onDriverStateChanged ); + connect( &_transmitter, &BCTransmitter::valueQueueEmpty, this, &BCMainWindow::onValueQueueEmpty ); // transmitter starten _transmitter.moveToThread(&_worker); @@ -305,6 +306,11 @@ void BCMainWindow::onValueUpdated(BCDevice::ID deviceID, int index, BCValue::Sta } } +void BCMainWindow::onValueQueueEmpty() +{ + qDebug() << " --- END sync"; + _syncButton->setEnabled( true ); +} /** * @brief SLOT, der aufgerufen wird, um das akutelle Device (Battery, Motor, ... ) @@ -316,14 +322,18 @@ void BCMainWindow::onSyncDeviceView() Q_ASSERT_X(_currentPanel, "onSyncDeviceView()", "_currentpanel ist null!"); const BCValueList& currentList =_currentPanel->getValueListX(); - _syncButton->setEnabled( false ); + // wir schalten den Button hier ab, + // wenn der Autrag bearbeitet wurde, wird der + // Button wieder eingeschaltet. for( const BCValuePtr& value : currentList ) { - qDebug() << " --- begin sync of value: " << QThread::currentThreadId() << " : " << value->label; + qDebug() << " --- ### begin sync of value: " << QThread::currentThreadId() << " : " << value->label; // wir setzen auf 'lesen' value->state.setFlag( BCValue::State::ReadMe ); + _syncButton->setEnabled( false ); + // statt '_transmitter.onUpdateValue( value )' müssen wir hier // über emit requestValueUpdate() zur Thread sysnchronisation // entkoppeln, @@ -332,6 +342,6 @@ void BCMainWindow::onSyncDeviceView() } - //_syncButton->setEnabled( true ); + } diff --git a/bcmainwindow.h b/bcmainwindow.h index 3b0bddc..0b8de50 100644 --- a/bcmainwindow.h +++ b/bcmainwindow.h @@ -62,6 +62,7 @@ public slots: // Slots für Rückmeldungen vom Transmitter void onValueUpdated( BCDevice::ID deviceID, int index, BCValue::State state, const QString& newValue="" ); + void onValueQueueEmpty(); void onSyncDeviceView(); void onShowMessage( const QString& message, int timeOut=3000); diff --git a/bctransmitter.cpp b/bctransmitter.cpp index d8d83b9..21a9ecb 100644 --- a/bctransmitter.cpp +++ b/bctransmitter.cpp @@ -140,8 +140,39 @@ void BCTransmitter::onUpdateValue( BCValuePtrConst valuePtr) // Das klappt aber nur in der hier gewählten Konstellation mit einer Parent-Thread // und einem Worker. + // Wir benutzen doch eine zusätzliche Queue, um erkennen zu können, ob der + // der aktuelle Auftragsblock abgearbeit wurde. + + _valueQueue.enqueue( valuePtr ); + qDebug() << " # #### ENQ: " <<_valueQueue.size(); + + // Wir schicken den event gleich wieder weiter ... + QMetaObject::invokeMethod(this, "onProcessValue", Qt::QueuedConnection); +} + +void BCTransmitter::onProcessValue() +{ + while (true) + { + BCValuePtrConst valuePtr{}; + { + //QMutexLocker locker(&_mutex); + if (_valueQueue.isEmpty()) + { + //_isBusy = false; + qDebug() << " --- XXXXXXXXXX Warum so oft?"; + emit valueQueueEmpty(); + break; // Schleife verlassen, warten auf neue Events + } + valuePtr =_valueQueue.dequeue(); + qDebug() << " # #### DEQ: " <<_valueQueue.size(); + } // Mutex wird hier freigegeben! WICHTIG: Execute ohne Lock! + + // Kosmetik + const BCValue& value = *(valuePtr.get()); + // Kosmetik - const BCValue& value = *(valuePtr.get()); + //const BCValue& value = *(valuePtr.get()); qDebug() << "------- DE.-.QUEUE: " << QThread::currentThreadId() << ": " << value.label; @@ -184,12 +215,11 @@ void BCTransmitter::onUpdateValue( BCValuePtrConst valuePtr) // __fix //bc::processEventsFor(150); bc::delay_millis(150); - + } // while } -void BCTransmitter::onProcessValue() -{} + TransmitResult BCTransmitter::readByteValue( uint32_t deviceID, uint8_t registerID ) { diff --git a/bctransmitter.h b/bctransmitter.h index a307a7f..d66ab61 100644 --- a/bctransmitter.h +++ b/bctransmitter.h @@ -69,6 +69,7 @@ public slots: signals: + void valueQueueEmpty(); void valueUpdated(BCDevice::ID deviceID, int index, BCValue::State state, const QString& newValue="" ); void driverStateChanged( BCDriver::DriverState state, const QString& message="" ); diff --git a/bionxcontrol.qrc b/bionxcontrol.qrc index 758bfc4..15d0d25 100644 --- a/bionxcontrol.qrc +++ b/bionxcontrol.qrc @@ -2,8 +2,6 @@ resources/bikeinfo.xml resources/bionxcontrol.qss - resources/claude_dark_mode.qss - resources/claude_light_mode.qss resources/bionx_akku.png resources/bionx_console.png resources/bionx_motor.png @@ -12,7 +10,6 @@ resources/exit_red.svg resources/sync_green.svg resources/sync_yellow.svg - resources/connect_white.svg resources/sync.svg diff --git a/bionxcontrol.qrc.autosave b/bionxcontrol.qrc.autosave new file mode 100644 index 0000000..f863b03 --- /dev/null +++ b/bionxcontrol.qrc.autosave @@ -0,0 +1,16 @@ + + + resources/bikeinfo.xml + resources/bc_light.qss + resources/bionx_akku.png + resources/bionx_console.png + resources/bionx_motor.png + resources/connect.svg + resources/exit.svg + resources/exit_red.svg + resources/sync_green.svg + resources/sync_yellow.svg + resources/sync.svg + resources/bc_dark.qss + + diff --git a/resources/bc_light.qss b/resources/bc_light.qss new file mode 100644 index 0000000..95f48e7 --- /dev/null +++ b/resources/bc_light.qss @@ -0,0 +1,173 @@ +/* appqss */ + +/* Alle QWidgets bekommen diesen Font */ +QWidget +{ + font-family: "Calibri", "Carlito", "Open Sans", sans-serif; + font-size: 10pt; + margin: 0px; + padding: 0px; +} + +QLabel#_headerLabel +{ + font-size: 14pt; + font-weight: bold; +} + +/* +QToolButton +{ + background-color: white; + color: #201F1E; + border: 1px solid #8A8886; + border-radius: 4px; + + + min-width: 64px; + max-width: 64px; + min-height: 64px; + max-height: 64px; + +} + +QToolButton:hover +{ + background-color: #F3F2F1; + border: 1px solid #323130; +} + +QToolButton:pressed +{ + background-color: #EDEBE9; + border: 1px solid #201F1E; +} + +QToolButton:disabled +{ + background-color: #F3F2F1; + color: #A19F9D; + border: 1px solid #EDEBE9; +} +*/ + +/* === QToolButton === */ +QToolButton +{ + background-color: transparent; + color: #000000; + border: none; + border-radius: 4px; + padding: 6px; + + min-width: 64px; + max-width: 64px; + min-height: 64px; + max-height: 64px; +} + +QToolButton:hover +{ + background-color: #F9F9F9; + border: 1px solid #DDDDDD; +} + +QToolButton:pressed +{ + background-color: #E0E0E0; +} + +QToolButton:checked +{ + background-color: green;/*#0078D4;*/ + color: #FFFFFF; +} + +QToolButton:disabled +{ + color: #A19F9D; + background-color: #666666; +} + + + +/* === QTableView & QTableWidget === */ + +QTableView, QTableWidget + { + background-color: #FFFFFF; + color: #000000; + gridline-color: #E1DFDD; + border: 1px solid #E1DFDD; + border-radius: 4px; + selection-background-color: #0078D4; +} + +QTableView::item:hover +{ + background-color: #e8f4f8; +} + + +QScrollBar::handle:horizontal + { + background-color: #C8C6C4; + min-width: 40px; + border-radius: 6px; + margin: 2px; +} + +QScrollBar::handle:horizontal:hover +{ + background-color: #A19F9D; +} + +QScrollBar::handle:horizontal:pressed +{ + background-color: #8A8886; +} + +QScrollBar::add-line:horizontal, +QScrollBar::sub-line:horizontal +{ + width: 0px; +} + +QScrollBar::add-page:horizontal, +QScrollBar::sub-page:horizontal +{ + background: none; +} + +QScrollBar:vertical { + background-color: transparent; + width: 12px; + margin: 0; +} + +QScrollBar::handle:vertical { + background-color: #C8C6C4; + min-height: 40px; + border-radius: 6px; + margin: 2px; +} + +QScrollBar::handle:vertical:hover { + background-color: #A19F9D; +} + +QScrollBar::handle:vertical:pressed { + background-color: #8A8886; +} + +QScrollBar::add-line:vertical, +QScrollBar::sub-line:vertical { + height: 0px; +} + +QScrollBar::add-page:vertical, +QScrollBar::sub-page:vertical { + background: none; +} + + diff --git a/resources/claude_dark_mode.qss b/resources/claude_dark_mode.qss deleted file mode 100644 index 8c5423f..0000000 --- a/resources/claude_dark_mode.qss +++ /dev/null @@ -1,871 +0,0 @@ -/* =================================================================== - Fluent Design Dark Mode Stylesheet for Qt6 - Windows 11 inspired dark theme - =================================================================== */ - -/* === Color Palette === - Background: #202020 - Surface: #2B2B2B - Surface Hover: #3A3A3A - Border: #3F3F3F - Text: #FFFFFF - Text Secondary: #B0B0B0 - Accent: #0078D4 - Accent Hover: #106EBE - === */ - -/* === Global Styles === */ -* { - font-family: "Segoe UI", "Noto Sans", Roboto, sans-serif; - font-size: 9pt; -} - -QWidget { - background-color: #202020; - color: #FFFFFF; - selection-background-color: #0078D4; - selection-color: #FFFFFF; -} - -/* === QMainWindow === */ -QMainWindow { - background-color: #202020; -} - -QMainWindow::separator { - background-color: #3F3F3F; - width: 1px; - height: 1px; -} - -QMainWindow::separator:hover { - background-color: #0078D4; -} - -/* === QPushButton === */ -QPushButton { - background-color: #2B2B2B; - color: #FFFFFF; - border: 1px solid #3F3F3F; - border-radius: 4px; - padding: 6px 16px; - min-height: 20px; - font-weight: 500; -} - -QPushButton:hover { - background-color: #3A3A3A; - border-color: #5A5A5A; -} - -QPushButton:pressed { - background-color: #1F1F1F; - border-color: #3F3F3F; -} - -QPushButton:disabled { - background-color: #2B2B2B; - color: #5A5A5A; - border-color: #3F3F3F; -} - -QPushButton:default { - background-color: #0078D4; - border-color: #0078D4; - color: #FFFFFF; -} - -QPushButton:default:hover { - background-color: #106EBE; - border-color: #106EBE; -} - -QPushButton:default:pressed { - background-color: #005A9E; - border-color: #005A9E; -} - -/* === QLineEdit === */ -QLineEdit { - background-color: #2B2B2B; - color: #FFFFFF; - border: 1px solid #3F3F3F; - border-radius: 4px; - padding: 6px 8px; - selection-background-color: #0078D4; -} - -QLineEdit:hover { - border-color: #5A5A5A; -} - -QLineEdit:focus { - background-color: #1F1F1F; - border: 2px solid #0078D4; - padding: 5px 7px; -} - -QLineEdit:disabled { - background-color: #2B2B2B; - color: #5A5A5A; - border-color: #3F3F3F; -} - -QLineEdit[readOnly="true"] { - background-color: #2B2B2B; - color: #B0B0B0; -} - -/* === QTextEdit & QPlainTextEdit === */ -QTextEdit, QPlainTextEdit { - background-color: #2B2B2B; - color: #FFFFFF; - border: 1px solid #3F3F3F; - border-radius: 4px; - padding: 8px; - selection-background-color: #0078D4; -} - -QTextEdit:hover, QPlainTextEdit:hover { - border-color: #5A5A5A; -} - -QTextEdit:focus, QPlainTextEdit:focus { - border: 2px solid #0078D4; - padding: 7px; -} - -QTextEdit:disabled, QPlainTextEdit:disabled { - background-color: #2B2B2B; - color: #5A5A5A; -} - -/* === QComboBox === */ -QComboBox { - background-color: #2B2B2B; - color: #FFFFFF; - border: 1px solid #3F3F3F; - border-radius: 4px; - padding: 6px 8px; - min-height: 20px; -} - -QComboBox:hover { - background-color: #3A3A3A; - border-color: #5A5A5A; -} - -QComboBox:focus { - border: 2px solid #0078D4; -} - -QComboBox:disabled { - background-color: #2B2B2B; - color: #5A5A5A; -} - -QComboBox::drop-down { - border: none; - width: 20px; -} - -QComboBox::down-arrow { - image: url(:/icons/down-arrow.png); - width: 12px; - height: 12px; -} - -QComboBox QAbstractItemView { - background-color: #2B2B2B; - color: #FFFFFF; - border: 1px solid #3F3F3F; - selection-background-color: #0078D4; - selection-color: #FFFFFF; - outline: none; -} - -QComboBox QAbstractItemView::item { - min-height: 28px; - padding-left: 8px; -} - -QComboBox QAbstractItemView::item:hover { - background-color: #3A3A3A; -} - -/* === QSpinBox & QDoubleSpinBox === */ -QSpinBox, QDoubleSpinBox { - background-color: #2B2B2B; - color: #FFFFFF; - border: 1px solid #3F3F3F; - border-radius: 4px; - padding: 6px 8px; - min-height: 20px; -} - -QSpinBox:hover, QDoubleSpinBox:hover { - border-color: #5A5A5A; -} - -QSpinBox:focus, QDoubleSpinBox:focus { - border: 2px solid #0078D4; -} - -QSpinBox:disabled, QDoubleSpinBox:disabled { - background-color: #2B2B2B; - color: #5A5A5A; -} - -QSpinBox::up-button, QDoubleSpinBox::up-button { - background-color: transparent; - border: none; - width: 16px; -} - -QSpinBox::up-button:hover, QDoubleSpinBox::up-button:hover { - background-color: #3A3A3A; -} - -QSpinBox::down-button, QDoubleSpinBox::down-button { - background-color: transparent; - border: none; - width: 16px; -} - -QSpinBox::down-button:hover, QDoubleSpinBox::down-button:hover { - background-color: #3A3A3A; -} - -/* === QCheckBox === */ -QCheckBox { - spacing: 8px; - color: #FFFFFF; -} - -QCheckBox::indicator { - width: 18px; - height: 18px; - border-radius: 4px; - border: 1px solid #5A5A5A; - background-color: #2B2B2B; -} - -QCheckBox::indicator:hover { - background-color: #3A3A3A; - border-color: #6A6A6A; -} - -QCheckBox::indicator:checked { - background-color: #0078D4; - border-color: #0078D4; - image: url(:/icons/checkmark.png); -} - -QCheckBox::indicator:checked:hover { - background-color: #106EBE; - border-color: #106EBE; -} - -QCheckBox::indicator:disabled { - background-color: #2B2B2B; - border-color: #3F3F3F; -} - -QCheckBox:disabled { - color: #5A5A5A; -} - -/* === QRadioButton === */ -QRadioButton { - spacing: 8px; - color: #FFFFFF; -} - -QRadioButton::indicator { - width: 18px; - height: 18px; - border-radius: 9px; - border: 1px solid #5A5A5A; - background-color: #2B2B2B; -} - -QRadioButton::indicator:hover { - background-color: #3A3A3A; - border-color: #6A6A6A; -} - -QRadioButton::indicator:checked { - background-color: #0078D4; - border-color: #0078D4; -} - -QRadioButton::indicator:checked:hover { - background-color: #106EBE; - border-color: #106EBE; -} - -QRadioButton::indicator:checked::after { - width: 8px; - height: 8px; - border-radius: 4px; - background-color: #FFFFFF; -} - -QRadioButton::indicator:disabled { - background-color: #2B2B2B; - border-color: #3F3F3F; -} - -QRadioButton:disabled { - color: #5A5A5A; -} - -/* === QSlider === */ -QSlider::groove:horizontal { - height: 4px; - background-color: #3F3F3F; - border-radius: 2px; -} - -QSlider::handle:horizontal { - background-color: #FFFFFF; - border: 2px solid #0078D4; - width: 16px; - height: 16px; - margin: -7px 0; - border-radius: 8px; -} - -QSlider::handle:horizontal:hover { - background-color: #FFFFFF; - border: 2px solid #106EBE; -} - -QSlider::handle:horizontal:pressed { - background-color: #E0E0E0; -} - -QSlider::sub-page:horizontal { - background-color: #0078D4; - border-radius: 2px; -} - -QSlider::groove:vertical { - width: 4px; - background-color: #3F3F3F; - border-radius: 2px; -} - -QSlider::handle:vertical { - background-color: #FFFFFF; - border: 2px solid #0078D4; - width: 16px; - height: 16px; - margin: 0 -7px; - border-radius: 8px; -} - -QSlider::sub-page:vertical { - background-color: #0078D4; - border-radius: 2px; -} - -/* === QProgressBar === */ -QProgressBar { - background-color: #3F3F3F; - border: none; - border-radius: 2px; - height: 4px; - text-align: center; - color: transparent; -} - -QProgressBar::chunk { - background-color: #0078D4; - border-radius: 2px; -} - -QProgressBar:disabled { - background-color: #3F3F3F; -} - -/* === QScrollBar === */ -QScrollBar:horizontal { - background-color: transparent; - height: 12px; - margin: 0; -} - -QScrollBar::handle:horizontal { - background-color: #5A5A5A; - min-width: 40px; - border-radius: 6px; - margin: 2px; -} - -QScrollBar::handle:horizontal:hover { - background-color: #6A6A6A; -} - -QScrollBar::handle:horizontal:pressed { - background-color: #7A7A7A; -} - -QScrollBar::add-line:horizontal, -QScrollBar::sub-line:horizontal { - width: 0px; -} - -QScrollBar::add-page:horizontal, -QScrollBar::sub-page:horizontal { - background: none; -} - -QScrollBar:vertical { - background-color: transparent; - width: 12px; - margin: 0; -} - -QScrollBar::handle:vertical { - background-color: #5A5A5A; - min-height: 40px; - border-radius: 6px; - margin: 2px; -} - -QScrollBar::handle:vertical:hover { - background-color: #6A6A6A; -} - -QScrollBar::handle:vertical:pressed { - background-color: #7A7A7A; -} - -QScrollBar::add-line:vertical, -QScrollBar::sub-line:vertical { - height: 0px; -} - -QScrollBar::add-page:vertical, -QScrollBar::sub-page:vertical { - background: none; -} - -/* === QTabWidget === */ -QTabWidget::pane { - background-color: #2B2B2B; - border: 1px solid #3F3F3F; - border-radius: 4px; - top: -1px; -} - -QTabBar::tab { - background-color: transparent; - color: #B0B0B0; - border: none; - border-bottom: 2px solid transparent; - padding: 8px 16px; - margin-right: 4px; -} - -QTabBar::tab:hover { - color: #FFFFFF; - background-color: #3A3A3A; - border-bottom: 2px solid #5A5A5A; -} - -QTabBar::tab:selected { - color: #FFFFFF; - background-color: #2B2B2B; - border-bottom: 2px solid #0078D4; -} - -QTabBar::tab:disabled { - color: #5A5A5A; -} - -/* === QGroupBox === */ -QGroupBox { - background-color: #2B2B2B; - border: 1px solid #3F3F3F; - border-radius: 6px; - margin-top: 12px; - padding-top: 12px; - font-weight: 600; -} - -QGroupBox::title { - subcontrol-origin: margin; - subcontrol-position: top left; - padding: 0 8px; - color: #FFFFFF; - background-color: #2B2B2B; -} - -/* === QLabel === */ -QLabel { - background-color: transparent; - color: #FFFFFF; -} - -QLabel:disabled { - color: #5A5A5A; -} - -/* === QToolButton === */ -QToolButton { - background-color: transparent; - color: #FFFFFF; - border: none; - border-radius: 4px; - padding: 6px; -} - -QToolButton:hover { - background-color: #3A3A3A; -} - -QToolButton:pressed { - background-color: #1F1F1F; -} - -QToolButton:checked { - background-color: #0078D4; -} - -QToolButton:disabled { - color: #5A5A5A; -} - -/* === QMenu === */ -QMenu { - background-color: #2B2B2B; - color: #FFFFFF; - border: 1px solid #3F3F3F; - padding: 4px; -} - -QMenu::item { - background-color: transparent; - padding: 6px 24px 6px 8px; - border-radius: 4px; -} - -QMenu::item:selected { - background-color: #3A3A3A; -} - -QMenu::item:disabled { - color: #5A5A5A; -} - -QMenu::separator { - height: 1px; - background-color: #3F3F3F; - margin: 4px 0; -} - -QMenu::icon { - padding-left: 8px; -} - -/* === QMenuBar === */ -QMenuBar { - background-color: #2B2B2B; - color: #FFFFFF; - border-bottom: 1px solid #3F3F3F; -} - -QMenuBar::item { - background-color: transparent; - padding: 6px 12px; - border-radius: 4px; -} - -QMenuBar::item:selected { - background-color: #3A3A3A; -} - -QMenuBar::item:pressed { - background-color: #1F1F1F; -} - -/* === QToolBar === */ -QToolBar { - background-color: #2B2B2B; - border: none; - border-bottom: 1px solid #3F3F3F; - spacing: 4px; - padding: 4px; -} - -QToolBar::handle { - background-color: #3F3F3F; - width: 1px; - height: 1px; - margin: 4px; -} - -QToolBar::separator { - background-color: #3F3F3F; - width: 1px; - height: 1px; - margin: 4px; -} - -/* === QStatusBar === */ -QStatusBar { - background-color: #2B2B2B; - color: #B0B0B0; - border-top: 1px solid #3F3F3F; -} - -QStatusBar::item { - border: none; -} - -/* === QDockWidget === */ -QDockWidget { - background-color: #2B2B2B; - color: #FFFFFF; - titlebar-close-icon: url(:/icons/close.png); - titlebar-normal-icon: url(:/icons/float.png); -} - -QDockWidget::title { - background-color: #2B2B2B; - border: 1px solid #3F3F3F; - padding: 6px; - text-align: left; -} - -QDockWidget::close-button, -QDockWidget::float-button { - background-color: transparent; - border: none; - padding: 4px; -} - -QDockWidget::close-button:hover, -QDockWidget::float-button:hover { - background-color: #3A3A3A; - border-radius: 4px; -} - -/* === QListView & QListWidget === */ -QListView, QListWidget { - background-color: #2B2B2B; - color: #FFFFFF; - border: 1px solid #3F3F3F; - border-radius: 4px; - outline: none; -} - -QListView::item, QListWidget::item { - padding: 6px; - border-radius: 4px; -} - -QListView::item:hover, QListWidget::item:hover { - background-color: #3A3A3A; -} - -QListView::item:selected, QListWidget::item:selected { - background-color: #0078D4; - color: #FFFFFF; -} - -QListView::item:disabled, QListWidget::item:disabled { - color: #5A5A5A; -} - -/* === QTreeView & QTreeWidget === */ -QTreeView, QTreeWidget { - background-color: #2B2B2B; - color: #FFFFFF; - border: 1px solid #3F3F3F; - border-radius: 4px; - outline: none; - show-decoration-selected: 1; -} - -QTreeView::item, QTreeWidget::item { - padding: 4px; - border-radius: 4px; -} - -QTreeView::item:hover, QTreeWidget::item:hover { - background-color: #3A3A3A; -} - -QTreeView::item:selected, QTreeWidget::item:selected { - background-color: #0078D4; - color: #FFFFFF; -} - -QTreeView::branch, QTreeWidget::branch { - background-color: transparent; -} - -QTreeView::branch:closed:has-children, QTreeWidget::branch:closed:has-children { - image: url(:/icons/branch-closed.png); -} - -QTreeView::branch:open:has-children, QTreeWidget::branch:open:has-children { - image: url(:/icons/branch-open.png); -} - -/* === QTableView & QTableWidget === */ -QTableView, QTableWidget { - background-color: #2B2B2B; - color: #FFFFFF; - gridline-color: #3F3F3F; - border: 1px solid #3F3F3F; - border-radius: 4px; - selection-background-color: #0078D4; -} - -QTableView::item, QTableWidget::item { - padding: 4px; -} - -QTableView::item:hover, QTableWidget::item:hover { - background-color: #3A3A3A; -} - -QTableView::item:selected, QTableWidget::item:selected { - background-color: #0078D4; - color: #FFFFFF; -} - -QHeaderView::section { - background-color: #2B2B2B; - color: #FFFFFF; - padding: 6px; - border: none; - border-right: 1px solid #3F3F3F; - border-bottom: 1px solid #3F3F3F; - font-weight: 600; -} - -QHeaderView::section:hover { - background-color: #3A3A3A; -} - -/* === QDialog === */ -QDialog { - background-color: #2B2B2B; -} - -/* === QMessageBox === */ -QMessageBox { - background-color: #2B2B2B; -} - -QMessageBox QLabel { - color: #FFFFFF; -} - -/* === QToolTip === */ -QToolTip { - background-color: #3A3A3A; - color: #FFFFFF; - border: 1px solid #5A5A5A; - border-radius: 4px; - padding: 4px 8px; -} - -/* === QCalendarWidget === */ -QCalendarWidget { - background-color: #2B2B2B; -} - -QCalendarWidget QToolButton { - color: #FFFFFF; - background-color: transparent; - border: none; - border-radius: 4px; - padding: 4px; -} - -QCalendarWidget QToolButton:hover { - background-color: #3A3A3A; -} - -QCalendarWidget QMenu { - background-color: #2B2B2B; -} - -QCalendarWidget QSpinBox { - background-color: #2B2B2B; - color: #FFFFFF; - selection-background-color: #0078D4; -} - -QCalendarWidget QAbstractItemView { - background-color: #2B2B2B; - color: #FFFFFF; - selection-background-color: #0078D4; - selection-color: #FFFFFF; -} - -/* === QSplitter === */ -QSplitter::handle { - background-color: #3F3F3F; -} - -QSplitter::handle:hover { - background-color: #0078D4; -} - -QSplitter::handle:horizontal { - width: 1px; -} - -QSplitter::handle:vertical { - height: 1px; -} - -/* === Custom Classes === */ -.accent-button { - background-color: #0078D4; - color: #FFFFFF; - border: none; -} - -.accent-button:hover { - background-color: #106EBE; -} - -.accent-button:pressed { - background-color: #005A9E; -} - -.danger-button { - background-color: #C42B1C; - color: #FFFFFF; - border: none; -} - -.danger-button:hover { - background-color: #A52314; -} - -.card { - background-color: #2B2B2B; - border: 1px solid #3F3F3F; - border-radius: 8px; - padding: 16px; -} - -.surface { - background-color: #2B2B2B; - border: 1px solid #3F3F3F; -} - -.divider { - background-color: #3F3F3F; - min-height: 1px; - max-height: 1px; -} \ No newline at end of file diff --git a/resources/claude_light_mode.qss b/resources/claude_light_mode.qss deleted file mode 100644 index 7df148e..0000000 --- a/resources/claude_light_mode.qss +++ /dev/null @@ -1,890 +0,0 @@ -/* =================================================================== - Fluent Design Light Mode Stylesheet for Qt6 - Windows 11 inspired light theme - =================================================================== */ - -/* === Color Palette === - Background: #F3F3F3 - Surface: #FFFFFF - Surface Hover: #F9F9F9 - Border: #E1DFDD - Text: #000000 - Text Secondary: #605E5C - Accent: #0078D4 - Accent Hover: #106EBE - === */ - -/* === Global Styles === */ -* { - font-family: "Segoe UI", "Noto Sans", Roboto, sans-serif; - font-size: 9pt; -} - -QWidget { - background-color: #F3F3F3; - color: #000000; - selection-background-color: #0078D4; - selection-color: #FFFFFF; -} - -/* === QMainWindow === */ -QMainWindow { - background-color: #F3F3F3; -} - -QMainWindow::separator { - background-color: #E1DFDD; - width: 1px; - height: 1px; -} - -QMainWindow::separator:hover { - background-color: #0078D4; -} - -/* === QPushButton === */ -QPushButton { - background-color: #FFFFFF; - color: #000000; - border: 1px solid #E1DFDD; - border-radius: 4px; - padding: 6px 16px; - min-height: 20px; - font-weight: 500; -} - -QPushButton:hover { - background-color: #F9F9F9; - border-color: #D1CFCD; -} - -QPushButton:pressed { - background-color: #F0F0F0; - border-color: #E1DFDD; -} - -QPushButton:disabled { - background-color: #F9F9F9; - color: #A19F9D; - border-color: #E1DFDD; -} - -QPushButton:default { - background-color: #0078D4; - border-color: #0078D4; - color: #FFFFFF; -} - -QPushButton:default:hover { - background-color: #106EBE; - border-color: #106EBE; -} - -QPushButton:default:pressed { - background-color: #005A9E; - border-color: #005A9E; -} - -/* === QLineEdit === */ -QLineEdit { - background-color: #FFFFFF; - color: #000000; - border: 1px solid #E1DFDD; - border-radius: 4px; - padding: 6px 8px; - selection-background-color: #0078D4; -} - -QLineEdit:hover { - border-color: #D1CFCD; -} - -QLineEdit:focus { - background-color: #FFFFFF; - border: 2px solid #0078D4; - padding: 5px 7px; -} - -QLineEdit:disabled { - background-color: #F9F9F9; - color: #A19F9D; - border-color: #E1DFDD; -} - -QLineEdit[readOnly="true"] { - background-color: #F9F9F9; - color: #605E5C; -} - -/* === QTextEdit & QPlainTextEdit === */ -QTextEdit, QPlainTextEdit { - background-color: #FFFFFF; - color: #000000; - border: 1px solid #E1DFDD; - border-radius: 4px; - padding: 8px; - selection-background-color: #0078D4; -} - -QTextEdit:hover, QPlainTextEdit:hover { - border-color: #D1CFCD; -} - -QTextEdit:focus, QPlainTextEdit:focus { - border: 2px solid #0078D4; - padding: 7px; -} - -QTextEdit:disabled, QPlainTextEdit:disabled { - background-color: #F9F9F9; - color: #A19F9D; -} - -/* === QComboBox === */ -QComboBox { - background-color: #FFFFFF; - color: #000000; - border: 1px solid #E1DFDD; - border-radius: 4px; - padding: 6px 8px; - min-height: 20px; -} - -QComboBox:hover { - background-color: #F9F9F9; - border-color: #D1CFCD; -} - -QComboBox:focus { - border: 2px solid #0078D4; -} - -QComboBox:disabled { - background-color: #F9F9F9; - color: #A19F9D; -} - -QComboBox::drop-down { - border: none; - width: 20px; -} - -QComboBox::down-arrow { - image: url(:/icons/down-arrow-light.png); - width: 12px; - height: 12px; -} - -QComboBox QAbstractItemView { - background-color: #FFFFFF; - color: #000000; - border: 1px solid #E1DFDD; - selection-background-color: #0078D4; - selection-color: #FFFFFF; - outline: none; -} - -QComboBox QAbstractItemView::item { - min-height: 28px; - padding-left: 8px; -} - -QComboBox QAbstractItemView::item:hover { - background-color: #F9F9F9; -} - -/* === QSpinBox & QDoubleSpinBox === */ -QSpinBox, QDoubleSpinBox { - background-color: #FFFFFF; - color: #000000; - border: 1px solid #E1DFDD; - border-radius: 4px; - padding: 6px 8px; - min-height: 20px; -} - -QSpinBox:hover, QDoubleSpinBox:hover { - border-color: #D1CFCD; -} - -QSpinBox:focus, QDoubleSpinBox:focus { - border: 2px solid #0078D4; -} - -QSpinBox:disabled, QDoubleSpinBox:disabled { - background-color: #F9F9F9; - color: #A19F9D; -} - -QSpinBox::up-button, QDoubleSpinBox::up-button { - background-color: transparent; - border: none; - width: 16px; -} - -QSpinBox::up-button:hover, QDoubleSpinBox::up-button:hover { - background-color: #F0F0F0; -} - -QSpinBox::down-button, QDoubleSpinBox::down-button { - background-color: transparent; - border: none; - width: 16px; -} - -QSpinBox::down-button:hover, QDoubleSpinBox::down-button:hover { - background-color: #F0F0F0; -} - -/* === QCheckBox === */ -QCheckBox { - spacing: 8px; - color: #000000; -} - -QCheckBox::indicator { - width: 18px; - height: 18px; - border-radius: 4px; - border: 1px solid #8A8886; - background-color: #FFFFFF; -} - -QCheckBox::indicator:hover { - background-color: #F9F9F9; - border-color: #605E5C; -} - -QCheckBox::indicator:checked { - background-color: #0078D4; - border-color: #0078D4; - image: url(:/icons/checkmark-white.png); -} - -QCheckBox::indicator:checked:hover { - background-color: #106EBE; - border-color: #106EBE; -} - -QCheckBox::indicator:disabled { - background-color: #F9F9F9; - border-color: #E1DFDD; -} - -QCheckBox:disabled { - color: #A19F9D; -} - -/* === QRadioButton === */ -QRadioButton { - spacing: 8px; - color: #000000; -} - -QRadioButton::indicator { - width: 18px; - height: 18px; - border-radius: 9px; - border: 1px solid #8A8886; - background-color: #FFFFFF; -} - -QRadioButton::indicator:hover { - background-color: #F9F9F9; - border-color: #605E5C; -} - -QRadioButton::indicator:checked { - background-color: #0078D4; - border-color: #0078D4; -} - -QRadioButton::indicator:checked:hover { - background-color: #106EBE; - border-color: #106EBE; -} - -QRadioButton::indicator:checked::after { - width: 8px; - height: 8px; - border-radius: 4px; - background-color: #FFFFFF; -} - -QRadioButton::indicator:disabled { - background-color: #F9F9F9; - border-color: #E1DFDD; -} - -QRadioButton:disabled { - color: #A19F9D; -} - -/* === QSlider === */ -QSlider::groove:horizontal { - height: 4px; - background-color: #E1DFDD; - border-radius: 2px; -} - -QSlider::handle:horizontal { - background-color: #FFFFFF; - border: 2px solid #0078D4; - width: 16px; - height: 16px; - margin: -7px 0; - border-radius: 8px; -} - -QSlider::handle:horizontal:hover { - background-color: #FFFFFF; - border: 2px solid #106EBE; -} - -QSlider::handle:horizontal:pressed { - background-color: #F0F0F0; -} - -QSlider::sub-page:horizontal { - background-color: #0078D4; - border-radius: 2px; -} - -QSlider::groove:vertical { - width: 4px; - background-color: #E1DFDD; - border-radius: 2px; -} - -QSlider::handle:vertical { - background-color: #FFFFFF; - border: 2px solid #0078D4; - width: 16px; - height: 16px; - margin: 0 -7px; - border-radius: 8px; -} - -QSlider::sub-page:vertical { - background-color: #0078D4; - border-radius: 2px; -} - -/* === QProgressBar === */ -QProgressBar { - background-color: #E1DFDD; - border: none; - border-radius: 2px; - height: 4px; - text-align: center; - color: transparent; -} - -QProgressBar::chunk { - background-color: #0078D4; - border-radius: 2px; -} - -QProgressBar:disabled { - background-color: #E1DFDD; -} - -/* === QScrollBar === */ -QScrollBar:horizontal { - background-color: transparent; - height: 12px; - margin: 0; -} - -QScrollBar::handle:horizontal { - background-color: #C8C6C4; - min-width: 40px; - border-radius: 6px; - margin: 2px; -} - -QScrollBar::handle:horizontal:hover { - background-color: #A19F9D; -} - -QScrollBar::handle:horizontal:pressed { - background-color: #8A8886; -} - -QScrollBar::add-line:horizontal, -QScrollBar::sub-line:horizontal { - width: 0px; -} - -QScrollBar::add-page:horizontal, -QScrollBar::sub-page:horizontal { - background: none; -} - -QScrollBar:vertical { - background-color: transparent; - width: 12px; - margin: 0; -} - -QScrollBar::handle:vertical { - background-color: #C8C6C4; - min-height: 40px; - border-radius: 6px; - margin: 2px; -} - -QScrollBar::handle:vertical:hover { - background-color: #A19F9D; -} - -QScrollBar::handle:vertical:pressed { - background-color: #8A8886; -} - -QScrollBar::add-line:vertical, -QScrollBar::sub-line:vertical { - height: 0px; -} - -QScrollBar::add-page:vertical, -QScrollBar::sub-page:vertical { - background: none; -} - -/* === QTabWidget === */ -QTabWidget::pane { - background-color: #FFFFFF; - border: 1px solid #E1DFDD; - border-radius: 4px; - top: -1px; -} - -QTabBar::tab { - background-color: transparent; - color: #605E5C; - border: none; - border-bottom: 2px solid transparent; - padding: 8px 16px; - margin-right: 4px; -} - -QTabBar::tab:hover { - color: #000000; - background-color: #F9F9F9; - border-bottom: 2px solid #C8C6C4; -} - -QTabBar::tab:selected { - color: #000000; - background-color: #FFFFFF; - border-bottom: 2px solid #0078D4; -} - -QTabBar::tab:disabled { - color: #A19F9D; -} - -/* === QGroupBox === */ -QGroupBox { - background-color: #FFFFFF; - border: 1px solid #E1DFDD; - border-radius: 6px; - margin-top: 12px; - padding-top: 12px; - font-weight: 600; -} - -QGroupBox::title { - subcontrol-origin: margin; - subcontrol-position: top left; - padding: 0 8px; - color: #000000; - background-color: #FFFFFF; -} - -/* === QLabel === */ -QLabel { - background-color: transparent; - color: #000000; -} - -QLabel:disabled { - color: #A19F9D; -} - -/* === QToolButton === */ -QToolButton { - background-color: transparent; - color: #000000; - border: none; - border-radius: 4px; - padding: 6px; -} - -QToolButton:hover { - background-color: #F9F9F9; -} - -QToolButton:pressed { - background-color: #F0F0F0; -} - -QToolButton:checked { - background-color: #0078D4; - color: #FFFFFF; -} - -QToolButton:disabled { - color: #A19F9D; -} - -/* === QMenu === */ -QMenu { - background-color: #FFFFFF; - color: #000000; - border: 1px solid #E1DFDD; - padding: 4px; -} - -QMenu::item { - background-color: transparent; - padding: 6px 24px 6px 8px; - border-radius: 4px; -} - -QMenu::item:selected { - background-color: #F9F9F9; -} - -QMenu::item:disabled { - color: #A19F9D; -} - -QMenu::separator { - height: 1px; - background-color: #E1DFDD; - margin: 4px 0; -} - -QMenu::icon { - padding-left: 8px; -} - -/* === QMenuBar === */ -QMenuBar { - background-color: #FFFFFF; - color: #000000; - border-bottom: 1px solid #E1DFDD; -} - -QMenuBar::item { - background-color: transparent; - padding: 6px 12px; - border-radius: 4px; -} - -QMenuBar::item:selected { - background-color: #F9F9F9; -} - -QMenuBar::item:pressed { - background-color: #F0F0F0; -} - -/* === QToolBar === */ -QToolBar { - background-color: #FFFFFF; - border: none; - border-bottom: 1px solid #E1DFDD; - spacing: 4px; - padding: 4px; -} - -QToolBar::handle { - background-color: #E1DFDD; - width: 1px; - height: 1px; - margin: 4px; -} - -QToolBar::separator { - background-color: #E1DFDD; - width: 1px; - height: 1px; - margin: 4px; -} - -/* === QStatusBar === */ -QStatusBar { - background-color: #FFFFFF; - color: #605E5C; - border-top: 1px solid #E1DFDD; -} - -QStatusBar::item { - border: none; -} - -/* === QDockWidget === */ -QDockWidget { - background-color: #FFFFFF; - color: #000000; - titlebar-close-icon: url(:/icons/close-light.png); - titlebar-normal-icon: url(:/icons/float-light.png); -} - -QDockWidget::title { - background-color: #FFFFFF; - border: 1px solid #E1DFDD; - padding: 6px; - text-align: left; -} - -QDockWidget::close-button, -QDockWidget::float-button { - background-color: transparent; - border: none; - padding: 4px; -} - -QDockWidget::close-button:hover, -QDockWidget::float-button:hover { - background-color: #F9F9F9; - border-radius: 4px; -} - -/* === QListView & QListWidget === */ -QListView, QListWidget { - background-color: #FFFFFF; - color: #000000; - border: 1px solid #E1DFDD; - border-radius: 4px; - outline: none; -} - -QListView::item, QListWidget::item { - padding: 6px; - border-radius: 4px; -} - -QListView::item:hover, QListWidget::item:hover { - background-color: #F9F9F9; -} - -QListView::item:selected, QListWidget::item:selected { - background-color: #0078D4; - color: #FFFFFF; -} - -QListView::item:disabled, QListWidget::item:disabled { - color: #A19F9D; -} - -/* === QTreeView & QTreeWidget === */ -QTreeView, QTreeWidget { - background-color: #FFFFFF; - color: #000000; - border: 1px solid #E1DFDD; - border-radius: 4px; - outline: none; - show-decoration-selected: 1; -} - -QTreeView::item, QTreeWidget::item { - padding: 4px; - border-radius: 4px; -} - -QTreeView::item:hover, QTreeWidget::item:hover { - background-color: #F9F9F9; -} - -QTreeView::item:selected, QTreeWidget::item:selected { - background-color: #0078D4; - color: #FFFFFF; -} - -QTreeView::branch, QTreeWidget::branch { - background-color: transparent; -} - -QTreeView::branch:closed:has-children, QTreeWidget::branch:closed:has-children { - image: url(:/icons/branch-closed-light.png); -} - -QTreeView::branch:open:has-children, QTreeWidget::branch:open:has-children { - image: url(:/icons/branch-open-light.png); -} - -/* === QTableView & QTableWidget === */ -QTableView, QTableWidget { - background-color: #FFFFFF; - color: #000000; - gridline-color: #E1DFDD; - border: 1px solid #E1DFDD; - border-radius: 4px; - selection-background-color: #0078D4; -} - -QTableView::item, QTableWidget::item { - padding: 4px; -} - -QTableView::item:hover, QTableWidget::item:hover { - background-color: #F9F9F9; -} - -QTableView::item:selected, QTableWidget::item:selected { - background-color: #0078D4; - color: #FFFFFF; -} - -QHeaderView::section { - background-color: #FFFFFF; - color: #000000; - padding: 6px; - border: none; - border-right: 1px solid #E1DFDD; - border-bottom: 1px solid #E1DFDD; - font-weight: 600; -} - -QHeaderView::section:hover { - background-color: #F9F9F9; -} - -/* === QDialog === */ -QDialog { - background-color: #FFFFFF; -} - -/* === QMessageBox === */ -QMessageBox { - background-color: #FFFFFF; -} - -QMessageBox QLabel { - color: #000000; -} - -/* === QToolTip === */ -QToolTip { - background-color: #F9F9F9; - color: #000000; - border: 1px solid #E1DFDD; - border-radius: 4px; - padding: 4px 8px; -} - -/* === QCalendarWidget === */ -QCalendarWidget { - background-color: #FFFFFF; -} - -QCalendarWidget QToolButton { - color: #000000; - background-color: transparent; - border: none; - border-radius: 4px; - padding: 4px; -} - -QCalendarWidget QToolButton:hover { - background-color: #F9F9F9; -} - -QCalendarWidget QMenu { - background-color: #FFFFFF; -} - -QCalendarWidget QSpinBox { - background-color: #FFFFFF; - color: #000000; - selection-background-color: #0078D4; -} - -QCalendarWidget QAbstractItemView { - background-color: #FFFFFF; - color: #000000; - selection-background-color: #0078D4; - selection-color: #FFFFFF; -} - -/* === QSplitter === */ -QSplitter::handle { - background-color: #E1DFDD; -} - -QSplitter::handle:hover { - background-color: #0078D4; -} - -QSplitter::handle:horizontal { - width: 1px; -} - -QSplitter::handle:vertical { - height: 1px; -} - -/* === Custom Classes === */ -.accent-button { - background-color: #0078D4; - color: #FFFFFF; - border: none; -} - -.accent-button:hover { - background-color: #106EBE; -} - -.accent-button:pressed { - background-color: #005A9E; -} - -.danger-button { - background-color: #C42B1C; - color: #FFFFFF; - border: none; -} - -.danger-button:hover { - background-color: #A52314; -} - -.success-button { - background-color: #107C10; - color: #FFFFFF; - border: none; -} - -.success-button:hover { - background-color: #0E6B0E; -} - -.card { - background-color: #FFFFFF; - border: 1px solid #E1DFDD; - border-radius: 8px; - padding: 16px; -} - -.surface { - background-color: #FFFFFF; - border: 1px solid #E1DFDD; -} - -.divider { - background-color: #E1DFDD; - min-height: 1px; - max-height: 1px; -} - -.secondary-text { - color: #605E5C; -} - -.disabled-text { - color: #A19F9D; -} \ No newline at end of file diff --git a/resources/connect.svg b/resources/connect.svg index a59b35a..aff60e2 100644 --- a/resources/connect.svg +++ b/resources/connect.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/connect_white.svg b/resources/connect_white.svg deleted file mode 100644 index 8272942..0000000 --- a/resources/connect_white.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file