From 051263c05d8a084fb01161311767df3db7cf9735 Mon Sep 17 00:00:00 2001 From: David Sansome Date: Tue, 23 Mar 2010 14:24:48 +0000 Subject: [PATCH] Enable playlist sorting on columns other than title, artist, album, track and length. Fixes issue #97 --- src/playlist.cpp | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/playlist.cpp b/src/playlist.cpp index fa8299828..8ab4ffad6 100644 --- a/src/playlist.cpp +++ b/src/playlist.cpp @@ -82,6 +82,7 @@ QVariant Playlist::data(const QModelIndex& index, int role) const { PlaylistItem* item = items_[index.row()]; Song song = item->Metadata(); + // Don't forget to change Playlist::CompareItems when adding new columns switch (index.column()) { case Column_Title: return song.title(); case Column_Artist: return song.artist(); @@ -421,13 +422,33 @@ bool Playlist::CompareItems(int column, Qt::SortOrder order, const PlaylistItem* a = order == Qt::AscendingOrder ? _a : _b; const PlaylistItem* b = order == Qt::AscendingOrder ? _b : _a; +#define cmp(field) return a->Metadata().field() < b->Metadata().field() + switch (column) { - case Column_Title: return a->Metadata().title() < b->Metadata().title(); - case Column_Artist: return a->Metadata().artist() < b->Metadata().artist(); - case Column_Album: return a->Metadata().album() < b->Metadata().album(); - case Column_Length: return a->Metadata().length() < b->Metadata().length(); - case Column_Track: return a->Metadata().track() < b->Metadata().track(); + case Column_Title: cmp(title); + case Column_Artist: cmp(artist); + case Column_Album: cmp(album); + case Column_Length: cmp(length); + case Column_Track: cmp(track); + case Column_Disc: cmp(disc); + case Column_Year: cmp(year); + case Column_Genre: cmp(genre); + case Column_AlbumArtist: cmp(albumartist); + case Column_Composer: cmp(composer); + + case Column_BPM: cmp(bpm); + case Column_Bitrate: cmp(bitrate); + case Column_Samplerate: cmp(samplerate); + case Column_Filename: cmp(filename); + case Column_BaseFilename: cmp(basefilename); + case Column_Filesize: cmp(filesize); + case Column_Filetype: cmp(filetype); + case Column_DateModified: cmp(mtime); + case Column_DateCreated: cmp(ctime); } + +#undef cmp + return false; }