Apart Concept 1 Serial Controller Program with modern UI

This commit is contained in:
Tronax 2026-06-13 09:26:58 +02:00
commit c4bde4c18c
103 changed files with 38385 additions and 0 deletions

6
resources/app.qrc Normal file
View file

@ -0,0 +1,6 @@
<RCC>
<qresource prefix="/">
<file>styles/dark.qss</file>
<file>styles/light.qss</file>
</qresource>
</RCC>

183
resources/styles/dark.qss Normal file
View file

@ -0,0 +1,183 @@
/* Apart Concept 1 Controller - Dark theme */
QWidget {
background-color: #1e2127;
color: #e6e6e6;
font-family: "Segoe UI", "Noto Sans", "DejaVu Sans", sans-serif;
font-size: 10.5pt;
}
QMainWindow, QDialog {
background-color: #1a1d23;
}
QToolTip {
background-color: #2b2f38;
color: #e6e6e6;
border: 1px solid #3a3f4b;
padding: 4px;
border-radius: 4px;
}
/* Group boxes / cards */
QGroupBox {
background-color: #242830;
border: 1px solid #323743;
border-radius: 10px;
margin-top: 14px;
padding: 12px;
font-weight: 600;
}
QGroupBox::title {
subcontrol-origin: margin;
subcontrol-position: top left;
left: 12px;
padding: 0 6px;
color: #8ab4f8;
}
/* Tabs */
QTabWidget::pane {
border: 1px solid #323743;
border-radius: 10px;
top: -1px;
background: #20242b;
}
QTabBar::tab {
background: transparent;
color: #9aa0ab;
padding: 9px 18px;
margin-right: 4px;
border-top-left-radius: 8px;
border-top-right-radius: 8px;
font-weight: 600;
}
QTabBar::tab:hover { color: #e6e6e6; }
QTabBar::tab:selected {
background: #2d3340;
color: #8ab4f8;
}
/* Buttons */
QPushButton {
background-color: #2d3340;
color: #e6e6e6;
border: 1px solid #3a4150;
border-radius: 8px;
padding: 7px 16px;
font-weight: 600;
}
QPushButton:hover { background-color: #353c4b; border-color: #4a90e2; }
QPushButton:pressed { background-color: #283046; }
QPushButton:disabled { color: #5a606b; background-color: #23272e; border-color: #2c313a; }
QPushButton#accent {
background-color: #4a90e2;
color: #ffffff;
border: none;
}
QPushButton#accent:hover { background-color: #5a9ff0; }
QPushButton#accent:disabled { background-color: #324a66; color: #93a3b5; }
QPushButton#danger {
background-color: #c0392b; color: #ffffff; border: none;
}
QPushButton#danger:hover { background-color: #d8463a; }
/* Combo boxes */
QComboBox {
background-color: #2a2f3a;
border: 1px solid #3a4150;
border-radius: 8px;
padding: 6px 10px;
min-height: 18px;
}
QComboBox:hover { border-color: #4a90e2; }
QComboBox::drop-down { border: none; width: 22px; }
QComboBox QAbstractItemView {
background-color: #2a2f3a;
border: 1px solid #3a4150;
selection-background-color: #4a90e2;
selection-color: #ffffff;
outline: none;
}
/* Spin boxes / line edits */
QSpinBox, QLineEdit {
background-color: #2a2f3a;
border: 1px solid #3a4150;
border-radius: 8px;
padding: 6px 8px;
selection-background-color: #4a90e2;
}
QSpinBox:hover, QLineEdit:hover { border-color: #4a90e2; }
QSpinBox:focus, QLineEdit:focus { border-color: #5a9ff0; }
/* Sliders */
QSlider::groove:horizontal {
height: 6px;
background: #353b47;
border-radius: 3px;
}
QSlider::sub-page:horizontal {
background: #4a90e2;
border-radius: 3px;
}
QSlider::handle:horizontal {
background: #e6e6e6;
width: 18px;
height: 18px;
margin: -7px 0;
border-radius: 9px;
}
QSlider::handle:horizontal:hover { background: #ffffff; }
/* Check boxes / toggles */
QCheckBox { spacing: 8px; }
QCheckBox::indicator {
width: 18px; height: 18px;
border-radius: 5px;
border: 1px solid #4a5160;
background: #2a2f3a;
}
QCheckBox::indicator:checked {
background: #4a90e2;
border-color: #4a90e2;
image: none;
}
QCheckBox::indicator:hover { border-color: #5a9ff0; }
/* Labels */
QLabel#title { font-size: 16pt; font-weight: 700; color: #ffffff; }
QLabel#subtle { color: #9aa0ab; }
QLabel#statusOk { color: #4caf78; font-weight: 600; }
QLabel#statusBad { color: #e06c5b; font-weight: 600; }
QLabel#valueBadge {
background: #2d3340;
border: 1px solid #3a4150;
border-radius: 6px;
padding: 3px 8px;
font-weight: 600;
color: #8ab4f8;
}
/* Terminal text view */
QPlainTextEdit#terminal {
background-color: #15171c;
color: #c8d0da;
border: 1px solid #2c313a;
border-radius: 8px;
font-family: "JetBrains Mono", "DejaVu Sans Mono", monospace;
font-size: 10pt;
}
/* Scrollbars */
QScrollBar:vertical {
background: transparent; width: 12px; margin: 2px;
}
QScrollBar::handle:vertical {
background: #3a4150; border-radius: 5px; min-height: 24px;
}
QScrollBar::handle:vertical:hover { background: #4a90e2; }
QScrollBar::add-line, QScrollBar::sub-line { height: 0; }
QStatusBar { background: #15171c; color: #9aa0ab; }
QStatusBar::item { border: none; }

157
resources/styles/light.qss Normal file
View file

@ -0,0 +1,157 @@
/* Apart Concept 1 Controller - Light theme */
QWidget {
background-color: #f4f6f9;
color: #1f2430;
font-family: "Segoe UI", "Noto Sans", "DejaVu Sans", sans-serif;
font-size: 10.5pt;
}
QMainWindow, QDialog {
background-color: #eef1f5;
}
QToolTip {
background-color: #ffffff;
color: #1f2430;
border: 1px solid #cdd4de;
padding: 4px;
border-radius: 4px;
}
QGroupBox {
background-color: #ffffff;
border: 1px solid #dce1e8;
border-radius: 10px;
margin-top: 14px;
padding: 12px;
font-weight: 600;
}
QGroupBox::title {
subcontrol-origin: margin;
subcontrol-position: top left;
left: 12px;
padding: 0 6px;
color: #1a73e8;
}
QTabWidget::pane {
border: 1px solid #dce1e8;
border-radius: 10px;
top: -1px;
background: #ffffff;
}
QTabBar::tab {
background: transparent;
color: #6b7280;
padding: 9px 18px;
margin-right: 4px;
border-top-left-radius: 8px;
border-top-right-radius: 8px;
font-weight: 600;
}
QTabBar::tab:hover { color: #1f2430; }
QTabBar::tab:selected {
background: #e8f0fe;
color: #1a73e8;
}
QPushButton {
background-color: #ffffff;
color: #1f2430;
border: 1px solid #cdd4de;
border-radius: 8px;
padding: 7px 16px;
font-weight: 600;
}
QPushButton:hover { background-color: #f0f4fa; border-color: #1a73e8; }
QPushButton:pressed { background-color: #e3ebf7; }
QPushButton:disabled { color: #aab1bd; background-color: #f1f3f6; border-color: #e2e6ec; }
QPushButton#accent {
background-color: #1a73e8; color: #ffffff; border: none;
}
QPushButton#accent:hover { background-color: #1666d4; }
QPushButton#accent:disabled { background-color: #a9c6f3; color: #eef3fc; }
QPushButton#danger {
background-color: #d93b30; color: #ffffff; border: none;
}
QPushButton#danger:hover { background-color: #c5342a; }
QComboBox {
background-color: #ffffff;
border: 1px solid #cdd4de;
border-radius: 8px;
padding: 6px 10px;
min-height: 18px;
}
QComboBox:hover { border-color: #1a73e8; }
QComboBox::drop-down { border: none; width: 22px; }
QComboBox QAbstractItemView {
background-color: #ffffff;
border: 1px solid #cdd4de;
selection-background-color: #1a73e8;
selection-color: #ffffff;
outline: none;
}
QSpinBox, QLineEdit {
background-color: #ffffff;
border: 1px solid #cdd4de;
border-radius: 8px;
padding: 6px 8px;
selection-background-color: #1a73e8;
selection-color: #ffffff;
}
QSpinBox:hover, QLineEdit:hover { border-color: #1a73e8; }
QSpinBox:focus, QLineEdit:focus { border-color: #1666d4; }
QSlider::groove:horizontal {
height: 6px; background: #d7dce4; border-radius: 3px;
}
QSlider::sub-page:horizontal { background: #1a73e8; border-radius: 3px; }
QSlider::handle:horizontal {
background: #ffffff;
border: 1px solid #b7c0cd;
width: 18px; height: 18px; margin: -7px 0; border-radius: 9px;
}
QSlider::handle:horizontal:hover { border-color: #1a73e8; }
QCheckBox { spacing: 8px; }
QCheckBox::indicator {
width: 18px; height: 18px; border-radius: 5px;
border: 1px solid #b7c0cd; background: #ffffff;
}
QCheckBox::indicator:checked {
background: #1a73e8; border-color: #1a73e8; image: none;
}
QCheckBox::indicator:hover { border-color: #1666d4; }
QLabel#title { font-size: 16pt; font-weight: 700; color: #1f2430; }
QLabel#subtle { color: #6b7280; }
QLabel#statusOk { color: #1e8e5a; font-weight: 600; }
QLabel#statusBad { color: #c5342a; font-weight: 600; }
QLabel#valueBadge {
background: #e8f0fe;
border: 1px solid #cdddfb;
border-radius: 6px;
padding: 3px 8px;
font-weight: 600;
color: #1a73e8;
}
QPlainTextEdit#terminal {
background-color: #ffffff;
color: #2b313c;
border: 1px solid #dce1e8;
border-radius: 8px;
font-family: "JetBrains Mono", "DejaVu Sans Mono", monospace;
font-size: 10pt;
}
QScrollBar:vertical { background: transparent; width: 12px; margin: 2px; }
QScrollBar::handle:vertical { background: #c2c9d4; border-radius: 5px; min-height: 24px; }
QScrollBar::handle:vertical:hover { background: #1a73e8; }
QScrollBar::add-line, QScrollBar::sub-line { height: 0; }
QStatusBar { background: #e6eaf0; color: #6b7280; }
QStatusBar::item { border: none; }