Add an option to show cover art in the library view. Thanks markwatkinson. Fixes issue #785

This commit is contained in:
David Sansome 2011-01-02 14:51:01 +00:00
parent a466cff48a
commit 43940de195
50 changed files with 212 additions and 3 deletions

View File

@ -17,6 +17,7 @@
#include "libraryconfig.h"
#include "librarydirectorymodel.h"
#include "librarymodel.h"
#include "libraryview.h"
#include "librarywatcher.h"
#include "ui_libraryconfig.h"
@ -93,6 +94,7 @@ void LibraryConfig::Save() {
s.beginGroup(LibraryView::kSettingsGroup);
s.setValue("auto_open", ui_->auto_open->isChecked());
s.setValue("autoclear_playlist", ui_->auto_load->isChecked());
s.setValue("pretty_covers", ui_->pretty_covers->isChecked());
s.endGroup();
s.beginGroup(LibraryWatcher::kSettingsGroup);
@ -115,6 +117,7 @@ void LibraryConfig::Load() {
s.beginGroup(LibraryView::kSettingsGroup);
ui_->auto_open->setChecked(s.value("auto_open", true).toBool());
ui_->auto_load->setChecked(s.value("autoclear_playlist", false).toBool());
ui_->pretty_covers->setChecked(s.value("pretty_covers", true).toBool());
s.endGroup();
s.beginGroup(LibraryWatcher::kSettingsGroup);

View File

@ -127,6 +127,13 @@ If there are no matches then it will use the largest image in the directory.</st
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="pretty_covers">
<property name="text">
<string>Show cover art in library</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>

View File

@ -20,6 +20,7 @@
#include "libraryitem.h"
#include "librarydirectorymodel.h"
#include "sqlrow.h"
#include "core/albumcoverloader.h"
#include "core/database.h"
#include "playlist/songmimedata.h"
#include "smartplaylists/generator.h"
@ -60,7 +61,8 @@ LibraryModel::LibraryModel(LibraryBackend* backend, QObject* parent)
album_icon_(":/icons/22x22/x-clementine-album.png"),
no_cover_icon_(":nocover.png"),
playlists_dir_icon_(IconLoader::Load("folder-sound")),
playlist_icon_(":/icons/22x22/x-clementine-albums.png")
playlist_icon_(":/icons/22x22/x-clementine-albums.png"),
use_pretty_covers_(false)
{
root_->lazy_loaded = true;
@ -73,6 +75,13 @@ LibraryModel::~LibraryModel() {
delete root_;
}
void LibraryModel::set_pretty_covers(bool use_pretty_covers) {
if (use_pretty_covers != use_pretty_covers_) {
use_pretty_covers_ = use_pretty_covers;
Reset();
}
}
void LibraryModel::Init() {
connect(backend_, SIGNAL(SongsDiscovered(SongList)), SLOT(SongsDiscovered(SongList)));
connect(backend_, SIGNAL(SongsDeleted(SongList)), SLOT(SongsDeleted(SongList)));
@ -334,8 +343,53 @@ void LibraryModel::SongsDeleted(const SongList& songs) {
}
}
QVariant LibraryModel::AlbumIcon(const QModelIndex& index, int role) const {
// the easiest way to get from *here* to working out what album art an index
// represents seems to be to get the node's child songs and look at their metadata.
// if none is found, return the generic CD icon
// Cache the art in the item's metadata field
LibraryItem* item = IndexToItem(index);
if (!item)
return album_icon_;
if (!item->metadata.image().isNull())
return item->metadata.image();
SongList songs = GetChildSongs(index);
if (!songs.isEmpty()) {
const Song& s = songs.first();
QPixmap pixmap = AlbumCoverLoader::TryLoadPixmap(
s.art_automatic(), s.art_manual(), s.filename());
if (!pixmap.isNull()) {
QImage image = pixmap.toImage().scaled(
32, 32, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
item->metadata.set_image(image);
return image;
}
}
return album_icon_;
}
QVariant LibraryModel::data(const QModelIndex& index, int role) const {
const LibraryItem* item = IndexToItem(index);
// Handle a special case for returning album artwork instead of a generic CD icon.
// this is here instead of in the other data() function to let us use the
// QModelIndex& version of GetChildSongs, which satisfies const-ness, instead
// of the LibraryItem* version, which doesn't.
if (use_pretty_covers_) {
bool album_node = false;
if (role == Qt::DecorationRole && item->type == LibraryItem::Type_Container) {
GroupBy container_type = group_by_[item->container_level];
album_node = container_type == GroupBy_Album
|| container_type == GroupBy_YearAlbum
|| container_type == GroupBy_AlbumArtist;
}
if (album_node)
return AlbumIcon(index, role);
}
return data(item, role);
}

View File

@ -128,6 +128,9 @@ class LibraryModel : public SimpleTreeModel<LibraryItem> {
QMimeData* mimeData(const QModelIndexList& indexes) const;
bool canFetchMore(const QModelIndex &parent) const;
// Whether or not to use album cover art, if it exists, in the library view
void set_pretty_covers(bool use_pretty_covers);
signals:
void TotalSongCountUpdated(int count);
void GroupingChanged(const LibraryModel::Grouping& g);
@ -155,8 +158,6 @@ class LibraryModel : public SimpleTreeModel<LibraryItem> {
void ResetAsyncQueryFinished();
private:
void Initialise();
// Provides some optimisations for loading the list of items in the root.
// This gets called a lot when filtering the playlist, so it's nice to be
// able to do it in a background thread.
@ -209,6 +210,7 @@ class LibraryModel : public SimpleTreeModel<LibraryItem> {
QString DividerDisplayText(GroupBy type, const QString& key) const;
// Helpers
QVariant AlbumIcon(const QModelIndex& index, int role) const;
QVariant data(const LibraryItem* item, int role) const;
bool CompareItems(const LibraryItem* a, const LibraryItem* b) const;
@ -244,6 +246,8 @@ class LibraryModel : public SimpleTreeModel<LibraryItem> {
QIcon no_cover_icon_;
QIcon playlists_dir_icon_;
QIcon playlist_icon_;
bool use_pretty_covers_;
};
Q_DECLARE_METATYPE(LibraryModel::Grouping);

View File

@ -94,6 +94,7 @@ LibraryView::LibraryView(QWidget* parent)
setSelectionMode(QAbstractItemView::ExtendedSelection);
ReloadSettings();
setStyleSheet("QTreeView::item{padding-top:1px;}");
}
LibraryView::~LibraryView() {
@ -104,6 +105,8 @@ void LibraryView::ReloadSettings() {
s.beginGroup(kSettingsGroup);
SetAutoOpen(s.value("auto_open", true).toBool());
if (library_ != NULL)
library_->set_pretty_covers(s.value("pretty_covers", true).toBool());
}
void LibraryView::SetTaskManager(TaskManager *task_manager) {
@ -112,6 +115,9 @@ void LibraryView::SetTaskManager(TaskManager *task_manager) {
void LibraryView::SetLibrary(LibraryModel *library) {
library_ = library;
QSettings s;
s.beginGroup(kSettingsGroup);
library_->set_pretty_covers(s.value("pretty_covers", true).toBool());
}
void LibraryView::SetDeviceManager(DeviceManager *device_manager) {

View File

@ -2017,6 +2017,9 @@ msgstr ""
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr ""

View File

@ -2031,6 +2031,9 @@ msgstr ""
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr ""

View File

@ -2021,6 +2021,9 @@ msgstr ""
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr ""

View File

@ -2017,6 +2017,9 @@ msgstr ""
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr ""

View File

@ -2055,6 +2055,9 @@ msgstr "Mostra sota la barra d'estat"
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr "Mostra a mida completa..."

View File

@ -2056,6 +2056,9 @@ msgstr "Ukázat nad stavovým řádkem"
msgid "Show all the songs"
msgstr "Ukázat všechny písničky"
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr "Ukázat plnou velikost..."

View File

@ -2017,6 +2017,9 @@ msgstr ""
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr ""

View File

@ -2024,6 +2024,9 @@ msgstr ""
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr "Vis i fuld størrelse..."

View File

@ -2059,6 +2059,9 @@ msgstr "Über der Statusleiste zeigen"
msgid "Show all the songs"
msgstr "Alle Titel anzeigen"
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr "Vollbild..."

View File

@ -2066,6 +2066,9 @@ msgstr "Εμφάνιση πάνω από την μπάρα κατάστασης"
msgid "Show all the songs"
msgstr "Εμφάνιση όλλων των τραγουδιών"
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr "Εμφάνισε σε πλήρες μέγεθος..."

View File

@ -2006,6 +2006,9 @@ msgstr ""
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr ""

View File

@ -2022,6 +2022,9 @@ msgstr ""
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr "Show fullsize..."

View File

@ -2019,6 +2019,9 @@ msgstr ""
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr "Show fullsize..."

View File

@ -2017,6 +2017,9 @@ msgstr ""
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr ""

View File

@ -2067,6 +2067,9 @@ msgstr "Mostrar la barra de estado superior"
msgid "Show all the songs"
msgstr "Mostrar todas las canciones"
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr "Mostrar carátula..."

View File

@ -2019,6 +2019,9 @@ msgstr ""
msgid "Show all the songs"
msgstr "Näita kõiki laule"
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr ""

View File

@ -2017,6 +2017,9 @@ msgstr ""
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr ""

View File

@ -2019,6 +2019,9 @@ msgstr ""
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr ""

View File

@ -2072,6 +2072,9 @@ msgstr "Afficher au dessus de la barre d'état"
msgid "Show all the songs"
msgstr "Afficher tous les morceaux"
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr "Afficher en taille réelle..."

View File

@ -2023,6 +2023,9 @@ msgstr ""
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr ""

View File

@ -2025,6 +2025,9 @@ msgstr ""
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr ""

View File

@ -2017,6 +2017,9 @@ msgstr ""
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr ""

View File

@ -2023,6 +2023,9 @@ msgstr ""
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr ""

View File

@ -2056,6 +2056,9 @@ msgstr "Jelenítse meg az állapotsáv fölött"
msgid "Show all the songs"
msgstr "Minden számot mutasson"
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr "Jelenítse meg teljes méretben..."

View File

@ -2063,6 +2063,9 @@ msgstr "Mostra la barra di stato superiore"
msgid "Show all the songs"
msgstr "Mostra tutti i brani"
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr "Mostra a dimensioni originali..."

View File

@ -2045,6 +2045,9 @@ msgstr "ステータス バーの上に表示"
msgid "Show all the songs"
msgstr "すべての曲を表示"
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr "原寸表示"

View File

@ -2019,6 +2019,9 @@ msgstr ""
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr ""

View File

@ -2017,6 +2017,9 @@ msgstr ""
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr ""

View File

@ -2031,6 +2031,9 @@ msgstr ""
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr "Vis i fullskjerm..."

View File

@ -2050,6 +2050,9 @@ msgstr "Boven statusbalk weergeven"
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr "Volledig weergeven..."

View File

@ -2017,6 +2017,9 @@ msgstr ""
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr ""

View File

@ -2050,6 +2050,9 @@ msgstr "Pokaż ponad paskiem stanu"
msgid "Show all the songs"
msgstr "Pokaż wszystkie ścieżki"
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr "Pokaż w pełnej wielkości..."

View File

@ -2060,6 +2060,9 @@ msgstr "Mostrar acima da barra de estado"
msgid "Show all the songs"
msgstr "Mostrar todas as músicas"
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr "Mostrar tamanho total..."

View File

@ -2056,6 +2056,9 @@ msgstr "Mostrar barra de status em baixo"
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr "Exibir tamanho real..."

View File

@ -2018,6 +2018,9 @@ msgstr ""
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr ""

View File

@ -2050,6 +2050,9 @@ msgstr "Показать над строкой состояния"
msgid "Show all the songs"
msgstr "Показать все песни"
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr "Показать полный размер..."

View File

@ -2046,6 +2046,9 @@ msgstr "Zobraziť nad stavovou lištou"
msgid "Show all the songs"
msgstr "Ukázať všetky piesne"
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr "Ukázať celú veľkosť..."

View File

@ -2049,6 +2049,9 @@ msgstr "Pokaži nad vrstico stanja"
msgid "Show all the songs"
msgstr "Pokaži vse skladbe"
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr "Pokaži v polni velikosti ..."

View File

@ -2022,6 +2022,9 @@ msgstr ""
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr ""

View File

@ -2051,6 +2051,9 @@ msgstr "Visa ovanför statusraden"
msgid "Show all the songs"
msgstr "Visa alla låtarna"
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr "Visa full storlek..."

View File

@ -2049,6 +2049,9 @@ msgstr "Durum çubuğunun üzerinde göster"
msgid "Show all the songs"
msgstr "Tüm şarkıları göster"
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr "Tam boyutta göster"

View File

@ -2007,6 +2007,9 @@ msgstr ""
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr ""

View File

@ -2051,6 +2051,9 @@ msgstr "Показати вище, в рядку стану"
msgid "Show all the songs"
msgstr "Показати всі композиції"
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr "Показати на повний розмір..."

View File

@ -2021,6 +2021,9 @@ msgstr ""
msgid "Show all the songs"
msgstr ""
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr ""

View File

@ -2022,6 +2022,9 @@ msgstr "顯示在狀態欄上方"
msgid "Show all the songs"
msgstr "顯示所有的歌曲"
msgid "Show cover art in library"
msgstr ""
msgid "Show fullsize..."
msgstr "全螢幕..."