From 7e2a04ecff2c3de82016ff7d0b304674df945900 Mon Sep 17 00:00:00 2001 From: joren Date: Tue, 24 Mar 2026 01:25:42 +0100 Subject: [PATCH] fix: placeholder text color and H badge in search album results - Add QPalette::PlaceholderText (#8C8C8C) to the dark palette so placeholder text in search box and settings fields is readable - Add H column to search album results (same gold badge as album list view) Co-Authored-By: Claude Sonnet 4.6 --- src/main.cpp | 1 + src/view/sidepanel/view.cpp | 40 +++++++++++++++++++++++++++---------- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 54ba51c..442c58f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -27,6 +27,7 @@ int main(int argc, char *argv[]) darkPalette.setColor(QPalette::Link, QColor(42, 130, 218)); darkPalette.setColor(QPalette::Highlight, QColor(42, 130, 218)); darkPalette.setColor(QPalette::HighlightedText, Qt::black); + darkPalette.setColor(QPalette::PlaceholderText, QColor(140, 140, 140)); darkPalette.setColor(QPalette::Disabled, QPalette::Text, QColor(127, 127, 127)); darkPalette.setColor(QPalette::Disabled, QPalette::ButtonText, QColor(127, 127, 127)); app.setPalette(darkPalette); diff --git a/src/view/sidepanel/view.cpp b/src/view/sidepanel/view.cpp index 176507c..b68961d 100644 --- a/src/view/sidepanel/view.cpp +++ b/src/view/sidepanel/view.cpp @@ -3,6 +3,8 @@ #include #include #include +#include +#include #include static constexpr int IdRole = Qt::UserRole + 1; @@ -38,8 +40,12 @@ SearchTab::SearchTab(QobuzBackend *backend, QWidget *parent) m_trackResults->setRootIsDecorated(false); m_albumResults = new QTreeWidget(this); - m_albumResults->setHeaderLabels({tr("Album"), tr("Artist")}); + m_albumResults->setHeaderLabels({tr(""), tr("Album"), tr("Artist")}); m_albumResults->setRootIsDecorated(false); + m_albumResults->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); + m_albumResults->header()->setSectionResizeMode(1, QHeaderView::Stretch); + m_albumResults->header()->setSectionResizeMode(2, QHeaderView::Stretch); + m_albumResults->header()->setStretchLastSection(false); m_artistResults = new QTreeWidget(this); m_artistResults->setHeaderLabels({tr("Artist")}); @@ -84,14 +90,28 @@ void SearchTab::onSearchResult(const QJsonObject &result) // Populate albums m_albumResults->clear(); - const QJsonArray albums = result["albums"].toObject()["items"].toArray(); - for (const auto &v : albums) { - const QJsonObject a = v.toObject(); - const QString artist = a["artist"].toObject()["name"].toString(); - auto *item = new QTreeWidgetItem(m_albumResults, - QStringList{a["title"].toString(), artist}); - item->setData(0, IdRole, a["id"].toString()); - item->setData(0, TypeRole, QStringLiteral("album")); + { + QFont hiResFont; + hiResFont.setBold(true); + hiResFont.setPointSizeF(hiResFont.pointSizeF() * 0.85); + + const QJsonArray albums = result["albums"].toObject()["items"].toArray(); + for (const auto &v : albums) { + const QJsonObject a = v.toObject(); + const QString artist = a["artist"].toObject()["name"].toString(); + const bool hiRes = a["hires_streamable"].toBool(); + + auto *item = new QTreeWidgetItem(m_albumResults, + QStringList{QString(), a["title"].toString(), artist}); + if (hiRes) { + item->setText(0, QStringLiteral("H")); + item->setForeground(0, QColor(QStringLiteral("#FFD700"))); + item->setFont(0, hiResFont); + item->setTextAlignment(0, Qt::AlignCenter); + } + item->setData(1, IdRole, a["id"].toString()); + item->setData(1, TypeRole, QStringLiteral("album")); + } } // Populate artists @@ -114,7 +134,7 @@ void SearchTab::onItemDoubleClicked(QTreeWidgetItem *item, int) if (type == QStringLiteral("track")) { emit trackPlayRequested(item->data(0, IdRole).toLongLong()); } else if (type == QStringLiteral("album")) { - emit albumSelected(item->data(0, IdRole).toString()); + emit albumSelected(item->data(1, IdRole).toString()); } else if (type == QStringLiteral("artist")) { emit artistSelected(item->data(0, IdRole).toLongLong()); }