| 352 | } // namespace |
| 353 | |
| 354 | StripFinalOutputPanel::StripFinalOutputPanel(AudioEngine* engine, QWidget* parent) |
| 355 | : QWidget(parent) |
| 356 | , m_audio(engine) |
| 357 | { |
| 358 | const QString title = QString::fromUtf8( |
| 359 | "Aetherial Final Output Stage \xe2\x80\x94 TX"); |
| 360 | setWindowTitle(title); |
| 361 | setStyleSheet(kWindowStyle); |
| 362 | |
| 363 | auto* root = new QVBoxLayout(this); |
| 364 | root->setContentsMargins(8, 0, 8, 0); |
| 365 | root->setSpacing(6); |
| 366 | |
| 367 | auto* titleBar = new EditorFramelessTitleBar; |
| 368 | titleBar->setTitleText(title); |
| 369 | // Embedded inside the strip — drop the heavy fill + trio so the |
| 370 | // panel reads as a clean row of controls instead of carrying a |
| 371 | // duplicate title bar over the strip's own chrome. |
| 372 | titleBar->setControlsVisible(false); |
| 373 | titleBar->setStyleSheet("background: transparent;"); |
| 374 | root->addWidget(titleBar); |
| 375 | // 10 px breathing room between the title and the controls row |
| 376 | // — keeps the chip column tops from kissing the title text. |
| 377 | root->addSpacing(10); |
| 378 | |
| 379 | // Single horizontal row: enable toggle | ceiling knob | meter | LIMIT LED |
| 380 | auto* row = new QHBoxLayout; |
| 381 | row->setSpacing(8); |
| 382 | |
| 383 | // LIM / DC / TONE — three small toggles stacked vertically on |
| 384 | // the left. Sized + styled to match the OVR / LIMIT indicator |
| 385 | // tiles in the right column so the panel reads as two columns |
| 386 | // of identical chip-style controls flanking the meter. |
| 387 | { |
| 388 | const QString amberStyle = |
| 389 | "QPushButton {" |
| 390 | " background: #1a2230; border: 1px solid #2a3744;" |
| 391 | " border-radius: 3px; color: #506070;" |
| 392 | " font-size: 10px; font-weight: bold; padding: 1px;" |
| 393 | "}" |
| 394 | "QPushButton:hover { color: #c8d8e8; }" |
| 395 | "QPushButton:checked {" |
| 396 | " background: #3a2a0e; color: #f2c14e;" |
| 397 | " border: 1px solid #f2c14e;" |
| 398 | "}" |
| 399 | "QPushButton:checked:hover { background: #4a3a18; }"; |
| 400 | const QString redCheckStyle = |
| 401 | "QPushButton {" |
| 402 | " background: #1a2230; border: 1px solid #2a3744;" |
| 403 | " border-radius: 3px; color: #506070;" |
| 404 | " font-size: 10px; font-weight: bold; padding: 1px;" |
| 405 | "}" |
| 406 | "QPushButton:hover { color: #c8d8e8; }" |
| 407 | "QPushButton:checked {" |
| 408 | " background: #4a1818; color: #ff8080;" |
| 409 | " border: 1px solid #ff4040;" |
| 410 | "}" |
| 411 | "QPushButton:checked:hover { background: #5a2828; }"; |
nothing calls this directly
no test coverage detected