fix: toolbar layout — controls inline with track info, progress bar centered
Left: [art] [title/artist] [⏮] [⏯] [⏭] Center: [0:00] [━━━━━━━━━━] [3:45] Right: [vol] [shuffle] [queue] [search] Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -29,7 +29,7 @@ MainToolBar::MainToolBar(QobuzBackend *backend, PlayQueue *queue, QWidget *paren
|
||||
rootLo->setContentsMargins(6, 2, 6, 2);
|
||||
rootLo->setSpacing(0);
|
||||
|
||||
// ---- LEFT: album art + track info + controls + progress ----
|
||||
// ---- LEFT: album art | track info | prev/play/next ----
|
||||
auto *leftWidget = new QWidget(root);
|
||||
auto *leftLo = new QHBoxLayout(leftWidget);
|
||||
leftLo->setContentsMargins(0, 0, 0, 0);
|
||||
@@ -43,22 +43,12 @@ MainToolBar::MainToolBar(QobuzBackend *backend, PlayQueue *queue, QWidget *paren
|
||||
|
||||
m_trackLabel = new QLabel(tr("Not playing"), leftWidget);
|
||||
m_trackLabel->setMinimumWidth(100);
|
||||
m_trackLabel->setMaximumWidth(200);
|
||||
m_trackLabel->setMaximumWidth(220);
|
||||
m_trackLabel->setAlignment(Qt::AlignVCenter | Qt::AlignLeft);
|
||||
m_trackLabel->setWordWrap(false);
|
||||
|
||||
// Controls + progress stacked vertically
|
||||
auto *ctrlWidget = new QWidget(leftWidget);
|
||||
auto *ctrlVLo = new QVBoxLayout(ctrlWidget);
|
||||
ctrlVLo->setContentsMargins(0, 0, 0, 0);
|
||||
ctrlVLo->setSpacing(2);
|
||||
|
||||
auto *ctrlRow = new QHBoxLayout;
|
||||
ctrlRow->setSpacing(4);
|
||||
ctrlRow->setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
auto makeBtn = [&](const QIcon &icon, const QString &tip) -> QToolButton * {
|
||||
auto *btn = new QToolButton(ctrlWidget);
|
||||
auto *btn = new QToolButton(leftWidget);
|
||||
btn->setIcon(icon);
|
||||
btn->setToolTip(tip);
|
||||
btn->setAutoRaise(true);
|
||||
@@ -75,41 +65,37 @@ MainToolBar::MainToolBar(QobuzBackend *backend, PlayQueue *queue, QWidget *paren
|
||||
connect(m_playBtn, &QToolButton::clicked, this, &MainToolBar::onPlayPause);
|
||||
connect(m_nextBtn, &QToolButton::clicked, this, &MainToolBar::onNext);
|
||||
|
||||
ctrlRow->addWidget(m_prevBtn);
|
||||
ctrlRow->addWidget(m_playBtn);
|
||||
ctrlRow->addWidget(m_nextBtn);
|
||||
ctrlRow->addSpacing(4);
|
||||
leftLo->addWidget(m_artLabel);
|
||||
leftLo->addWidget(m_trackLabel);
|
||||
leftLo->addWidget(m_prevBtn);
|
||||
leftLo->addWidget(m_playBtn);
|
||||
leftLo->addWidget(m_nextBtn);
|
||||
|
||||
auto *progRow = new QHBoxLayout;
|
||||
progRow->setSpacing(6);
|
||||
progRow->setContentsMargins(0, 0, 0, 0);
|
||||
// ---- CENTER: elapsed | progress slider | total ----
|
||||
auto *centerWidget = new QWidget(root);
|
||||
auto *centerLo = new QHBoxLayout(centerWidget);
|
||||
centerLo->setContentsMargins(0, 0, 0, 0);
|
||||
centerLo->setSpacing(6);
|
||||
|
||||
m_elapsedLabel = new QLabel(QStringLiteral("0:00"), ctrlWidget);
|
||||
m_elapsedLabel = new QLabel(QStringLiteral("0:00"), centerWidget);
|
||||
m_elapsedLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
|
||||
m_elapsedLabel->setMinimumWidth(36);
|
||||
|
||||
m_progress = new ClickableSlider(Qt::Horizontal, ctrlWidget);
|
||||
m_progress = new ClickableSlider(Qt::Horizontal, centerWidget);
|
||||
m_progress->setRange(0, 1000);
|
||||
m_progress->setValue(0);
|
||||
m_progress->setMinimumWidth(120);
|
||||
m_progress->setMinimumWidth(160);
|
||||
|
||||
m_totalLabel = new QLabel(QStringLiteral("0:00"), ctrlWidget);
|
||||
m_totalLabel = new QLabel(QStringLiteral("0:00"), centerWidget);
|
||||
m_totalLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
|
||||
m_totalLabel->setMinimumWidth(36);
|
||||
|
||||
connect(m_progress, &QSlider::sliderPressed, this, [this] { m_seeking = true; });
|
||||
connect(m_progress, &QSlider::sliderReleased, this, &MainToolBar::onProgressReleased);
|
||||
|
||||
progRow->addWidget(m_elapsedLabel);
|
||||
progRow->addWidget(m_progress, 1);
|
||||
progRow->addWidget(m_totalLabel);
|
||||
|
||||
ctrlVLo->addLayout(ctrlRow);
|
||||
ctrlVLo->addLayout(progRow);
|
||||
|
||||
leftLo->addWidget(m_artLabel);
|
||||
leftLo->addWidget(m_trackLabel);
|
||||
leftLo->addWidget(ctrlWidget, 1);
|
||||
centerLo->addWidget(m_elapsedLabel);
|
||||
centerLo->addWidget(m_progress, 1);
|
||||
centerLo->addWidget(m_totalLabel);
|
||||
|
||||
// ---- RIGHT: volume + shuffle + queue + search ----
|
||||
auto *rightWidget = new QWidget(root);
|
||||
@@ -145,9 +131,10 @@ MainToolBar::MainToolBar(QobuzBackend *backend, PlayQueue *queue, QWidget *paren
|
||||
rightLo->addWidget(m_queueBtn);
|
||||
rightLo->addWidget(m_searchBtn);
|
||||
|
||||
// ---- Assemble root ----
|
||||
rootLo->addWidget(leftWidget, 1);
|
||||
rootLo->addWidget(rightWidget, 0);
|
||||
// ---- Assemble root: equal stretch keeps center bar centred ----
|
||||
rootLo->addWidget(leftWidget, 1);
|
||||
rootLo->addWidget(centerWidget, 2);
|
||||
rootLo->addWidget(rightWidget, 1);
|
||||
|
||||
root->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
|
||||
addWidget(root);
|
||||
|
||||
Reference in New Issue
Block a user