refactor: UI polish — lock sidebar, remove nav buttons, uniform artist tables, deep shuffle
- Lock sidebar width (setFixedWidth) so it doesn't jump between views - Remove back/forward navigation buttons and all NavPage history code - Uniform column layout on artist page: hide Artist column from both Popular Tracks and release sections, set matching fixed column widths so columns align vertically across all sections - Deep shuffle: new Rust FFI endpoint fetches tracks from all albums in parallel, combines them, and returns via EV_DEEP_SHUFFLE_OK - Auto-paginate artist releases in Rust (loop until has_more=false) so all releases load at once sorted newest-first Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -40,7 +40,8 @@ MainWindow::MainWindow(QobuzBackend *backend, QWidget *parent)
|
||||
m_libraryDock->setObjectName(QStringLiteral("libraryDock"));
|
||||
m_libraryDock->setFeatures(QDockWidget::DockWidgetMovable);
|
||||
m_libraryDock->setWidget(m_library);
|
||||
m_libraryDock->setMinimumWidth(200);
|
||||
m_libraryDock->setMinimumWidth(180);
|
||||
m_library->setFixedWidth(220);
|
||||
addDockWidget(Qt::LeftDockWidgetArea, m_libraryDock);
|
||||
|
||||
// ---- Now-playing context dock (left, below library) ----
|
||||
@@ -86,6 +87,8 @@ MainWindow::MainWindow(QobuzBackend *backend, QWidget *parent)
|
||||
connect(m_backend, &QobuzBackend::artistLoaded, this, &MainWindow::onArtistLoaded);
|
||||
connect(m_backend, &QobuzBackend::artistReleasesLoaded,
|
||||
m_content, &MainContent::updateArtistReleases);
|
||||
connect(m_backend, &QobuzBackend::deepShuffleTracksLoaded,
|
||||
m_content, &MainContent::onDeepShuffleTracks);
|
||||
connect(m_backend, &QobuzBackend::playlistLoaded, this, &MainWindow::onPlaylistLoaded);
|
||||
connect(m_backend, &QobuzBackend::playlistCreated, this, &MainWindow::onPlaylistCreated);
|
||||
connect(m_backend, &QobuzBackend::playlistDeleted, this, [this](const QJsonObject &) {
|
||||
@@ -170,22 +173,6 @@ MainWindow::MainWindow(QobuzBackend *backend, QWidget *parent)
|
||||
connect(m_toolBar, &MainToolBar::queueToggled,
|
||||
this, [this](bool v) { m_queuePanel->setVisible(v); });
|
||||
|
||||
connect(m_toolBar->backAction(), &QAction::triggered, this, [this] {
|
||||
if (m_navIndex <= 0) return;
|
||||
--m_navIndex;
|
||||
m_navFromHistory = true;
|
||||
navigateTo(m_navHistory[m_navIndex]);
|
||||
m_navFromHistory = false;
|
||||
updateNavButtons();
|
||||
});
|
||||
connect(m_toolBar->forwardAction(), &QAction::triggered, this, [this] {
|
||||
if (m_navIndex >= m_navHistory.size() - 1) return;
|
||||
++m_navIndex;
|
||||
m_navFromHistory = true;
|
||||
navigateTo(m_navHistory[m_navIndex]);
|
||||
m_navFromHistory = false;
|
||||
updateNavButtons();
|
||||
});
|
||||
connect(m_toolBar, &MainToolBar::albumRequested, this, &MainWindow::onSearchAlbumSelected);
|
||||
connect(m_toolBar, &MainToolBar::artistRequested, this, &MainWindow::onSearchArtistSelected);
|
||||
|
||||
@@ -394,16 +381,12 @@ void MainWindow::onPlayTrackRequested(qint64 trackId)
|
||||
|
||||
void MainWindow::onSearchAlbumSelected(const QString &albumId)
|
||||
{
|
||||
NavPage p; p.type = NavPage::Album; p.albumId = albumId;
|
||||
pushNav(p.type, p.albumId);
|
||||
m_backend->getAlbum(albumId);
|
||||
statusBar()->showMessage(tr("Loading album…"));
|
||||
}
|
||||
|
||||
void MainWindow::onSearchArtistSelected(qint64 artistId)
|
||||
{
|
||||
NavPage p; p.type = NavPage::Artist; p.artistId = artistId;
|
||||
pushNav(p.type, {}, p.artistId);
|
||||
m_backend->getArtist(artistId);
|
||||
statusBar()->showMessage(tr("Loading artist…"));
|
||||
}
|
||||
@@ -429,38 +412,3 @@ void MainWindow::onUserPlaylistsChanged(const QVector<QPair<qint64, QString>> &p
|
||||
m_content->tracksList()->setUserPlaylists(playlists);
|
||||
}
|
||||
|
||||
void MainWindow::pushNav(NavPage::Type type, const QString &albumId, qint64 artistId)
|
||||
{
|
||||
if (m_navFromHistory) return;
|
||||
// Truncate any forward history
|
||||
while (m_navHistory.size() > m_navIndex + 1)
|
||||
m_navHistory.removeLast();
|
||||
NavPage p;
|
||||
p.type = type;
|
||||
p.albumId = albumId;
|
||||
p.artistId = artistId;
|
||||
m_navHistory.push_back(p);
|
||||
m_navIndex = m_navHistory.size() - 1;
|
||||
updateNavButtons();
|
||||
}
|
||||
|
||||
void MainWindow::navigateTo(const NavPage &page)
|
||||
{
|
||||
switch (page.type) {
|
||||
case NavPage::Album:
|
||||
m_backend->getAlbum(page.albumId);
|
||||
statusBar()->showMessage(tr("Loading album…"));
|
||||
break;
|
||||
case NavPage::Artist:
|
||||
m_backend->getArtist(page.artistId);
|
||||
statusBar()->showMessage(tr("Loading artist…"));
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::updateNavButtons()
|
||||
{
|
||||
m_toolBar->backAction()->setEnabled(m_navIndex > 0);
|
||||
m_toolBar->forwardAction()->setEnabled(m_navIndex < m_navHistory.size() - 1);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user