From 7e1b54a77964ca5f970d0e8f58e3b967a05b3da8 Mon Sep 17 00:00:00 2001 From: David Sansome Date: Fri, 11 Jun 2010 22:35:41 +0000 Subject: [PATCH] Fix the height of items in the album cover manager, don't show artists with no albums, and add a status bar (currently unused) --- src/library/librarybackend.cpp | 16 ++ src/library/librarybackend.h | 1 + src/library/libraryquery.cpp | 6 +- src/library/libraryquery.h | 2 +- src/ui/albumcovermanager.cpp | 10 +- src/ui/albumcovermanager.h | 4 +- src/ui/albumcovermanager.ui | 300 ++++++++++++++++----------------- 7 files changed, 172 insertions(+), 167 deletions(-) diff --git a/src/library/librarybackend.cpp b/src/library/librarybackend.cpp index d31a10f89..dd4a00d8b 100644 --- a/src/library/librarybackend.cpp +++ b/src/library/librarybackend.cpp @@ -334,6 +334,22 @@ QStringList LibraryBackend::GetAllArtists(const QueryOptions& opt) { return ret; } +QStringList LibraryBackend::GetAllArtistsWithAlbums(const QueryOptions& opt) { + LibraryQuery query(opt); + query.SetColumnSpec("DISTINCT artist"); + query.AddCompilationRequirement(false); + query.AddWhere("album", "", "!="); + + QMutexLocker l(db_->Mutex()); + if (!ExecQuery(&query)) return QStringList(); + + QStringList ret; + while (query.Next()) { + ret << query.Value(0).toString(); + } + return ret; +} + LibraryBackend::AlbumList LibraryBackend::GetAllAlbums(const QueryOptions &opt) { return GetAlbums(QString(), false, opt); } diff --git a/src/library/librarybackend.h b/src/library/librarybackend.h index 8cae4052d..fd9ed3a8f 100644 --- a/src/library/librarybackend.h +++ b/src/library/librarybackend.h @@ -67,6 +67,7 @@ class LibraryBackend : public QObject { SubdirectoryList SubdirsInDirectory(int id); QStringList GetAllArtists(const QueryOptions& opt = QueryOptions()); + QStringList GetAllArtistsWithAlbums(const QueryOptions& opt = QueryOptions()); SongList GetSongs(const QString& artist, const QString& album, const QueryOptions& opt = QueryOptions()); bool HasCompilations(const QueryOptions& opt = QueryOptions()); diff --git a/src/library/libraryquery.cpp b/src/library/libraryquery.cpp index 22ebbdf0e..273e0b48f 100644 --- a/src/library/libraryquery.cpp +++ b/src/library/libraryquery.cpp @@ -48,14 +48,14 @@ LibraryQuery::LibraryQuery(const QueryOptions& options) { } } -void LibraryQuery::AddWhere(const QString& column, const QVariant& value) { +void LibraryQuery::AddWhere(const QString& column, const QVariant& value, const QString& op) { // Do integers inline - sqlite seems to get confused when you pass integers // to bound parameters if (value.type() == QVariant::Int) - where_clauses_ << QString("%1 = %2").arg(column, value.toString()); + where_clauses_ << QString("%1 %2 %3").arg(column, op, value.toString()); else { - where_clauses_ << QString("%1 = ?").arg(column); + where_clauses_ << QString("%1 %2 ?").arg(column, op); bound_values_ << value; } } diff --git a/src/library/libraryquery.h b/src/library/libraryquery.h index 8dfcea786..37ce7226d 100644 --- a/src/library/libraryquery.h +++ b/src/library/libraryquery.h @@ -41,7 +41,7 @@ class LibraryQuery { void SetColumnSpec(const QString& spec) { column_spec_ = spec; } void SetOrderBy(const QString& order_by) { order_by_ = order_by; } - void AddWhere(const QString& column, const QVariant& value); + void AddWhere(const QString& column, const QVariant& value, const QString& op = "="); void AddWhereLike(const QString& column, const QVariant& value); void AddCompilationRequirement(bool compilation); diff --git a/src/ui/albumcovermanager.cpp b/src/ui/albumcovermanager.cpp index 24037756b..e5aa1a9bc 100644 --- a/src/ui/albumcovermanager.cpp +++ b/src/ui/albumcovermanager.cpp @@ -39,7 +39,7 @@ const char* AlbumCoverManager::kSettingsGroup = "CoverManager"; AlbumCoverManager::AlbumCoverManager(NetworkAccessManager* network, LibraryBackend* backend, QWidget *parent) - : QDialog(parent), + : QMainWindow(parent), constructed_(false), ui_(new Ui_CoverManager), backend_(backend), @@ -173,7 +173,7 @@ void AlbumCoverManager::Reset() { new QListWidgetItem(all_artists_icon_, tr("All artists"), ui_->artists, All_Artists); new QListWidgetItem(artist_icon_, tr("Various artists"), ui_->artists, Various_Artists); - foreach (const QString& artist, backend_->GetAllArtists()) { + foreach (const QString& artist, backend_->GetAllArtistsWithAlbums()) { if (artist.isEmpty()) continue; @@ -336,7 +336,7 @@ void AlbumCoverManager::AlbumCoverFetched(quint64 id, const QImage &image) { bool AlbumCoverManager::event(QEvent* e) { if (constructed_) { - // I think KDE styles override these, and ScrollPerItem really confusing + // I think KDE styles override these, and ScrollPerItem is really confusing // when you have huge items. // We seem to have to reset them to sensible values each time the contents // of ui_->albums changes. @@ -344,7 +344,7 @@ bool AlbumCoverManager::event(QEvent* e) { ui_->albums->verticalScrollBar()->setSingleStep(20); } - QDialog::event(e); + QMainWindow::event(e); return false; } @@ -369,7 +369,7 @@ bool AlbumCoverManager::eventFilter(QObject *obj, QEvent *event) { context_menu_->popup(e->globalPos()); return true; } - return false; + return QMainWindow::eventFilter(obj, event); } void AlbumCoverManager::ShowFullsize() { diff --git a/src/ui/albumcovermanager.h b/src/ui/albumcovermanager.h index 7ff33d898..ac0549cd7 100644 --- a/src/ui/albumcovermanager.h +++ b/src/ui/albumcovermanager.h @@ -17,7 +17,7 @@ #ifndef ALBUMCOVERMANAGER_H #define ALBUMCOVERMANAGER_H -#include +#include #include #include "gtest/gtest_prod.h" @@ -33,7 +33,7 @@ class Ui_CoverManager; class QListWidgetItem; class QMenu; -class AlbumCoverManager : public QDialog { +class AlbumCoverManager : public QMainWindow { Q_OBJECT public: AlbumCoverManager(NetworkAccessManager* network, LibraryBackend* backend, diff --git a/src/ui/albumcovermanager.ui b/src/ui/albumcovermanager.ui index 71d046b64..75d3bc1b9 100644 --- a/src/ui/albumcovermanager.ui +++ b/src/ui/albumcovermanager.ui @@ -1,7 +1,7 @@ CoverManager - + 0 @@ -17,129 +17,150 @@ :/icon.png:/icon.png - - - 0 - - - - - Qt::Horizontal - - - - true + + + + 0 + + + + + Qt::Horizontal + + + true + + + QAbstractItemView::SelectRows + + + + 24 + 24 + + + + true + + + + + + 0 + + + 0 + + + + + 0 + + + + + + 16 + 16 + + + + true + + + + + + + Enter search terms here + + + + + + + View + + + + 16 + 16 + + + + QToolButton::MenuButtonPopup + + + Qt::ToolButtonTextBesideIcon + + + true + + + + + + + Fetch Missing Covers + + + + 16 + 16 + + + + + + + + + + false + + + QAbstractItemView::ExtendedSelection + + + + 120 + 120 + + + + QListView::Static + + + QListView::LeftToRight + + + true + + + QListView::Adjust + + + 2 + + + QListView::IconMode + + + true + + + true + + + + + - - - - - - 0 - - - - - - 16 - 16 - - - - true - - - - - - - Enter search terms here - - - - - - - View - - - - 16 - 16 - - - - QToolButton::MenuButtonPopup - - - Qt::ToolButtonTextBesideIcon - - - true - - - - - - - Fetch Missing Covers - - - - 16 - 16 - - - - - - - - - - false - - - QAbstractItemView::ExtendedSelection - - - - 120 - 120 - - - - QListView::Static - - - QListView::LeftToRight - - - true - - - QListView::Adjust - - - 2 - - - QListView::IconMode - - - true - - - true - - - - - - - - + + + + Show fullsize... @@ -179,38 +200,5 @@ - - - clear - clicked() - filter - clear() - - - 329 - 13 - - - 367 - 14 - - - - - clear - clicked() - filter - setFocus() - - - 334 - 20 - - - 401 - 13 - - - - +