From 83080b71cdccf19e602d6b9ec7a21998c7e3c7d6 Mon Sep 17 00:00:00 2001 From: Herwig Birke Date: Thu, 8 Mar 2018 17:15:56 +0100 Subject: [PATCH] . --- calbum.cpp | 12 +++++++++- calbum.h | 2 ++ cmainwindow.cpp | 13 +++++++---- common.h | 12 ++++++++++ ctrack.cpp | 58 +++++++++++++++++++++++++++++++++++++++++++++++++ ctrack.h | 1 + 6 files changed, 93 insertions(+), 5 deletions(-) diff --git a/calbum.cpp b/calbum.cpp index cb531be..a99466c 100644 --- a/calbum.cpp +++ b/calbum.cpp @@ -124,6 +124,11 @@ cTrackList cAlbum::trackList() return(m_trackList); } +void cAlbum::sortTracks(qint32 sort) +{ + m_trackList.sort(sort); +} + cAlbum* cAlbumList::add(const QString& szAlbum, const QString& szBand) { QString szAlbum1 = szAlbum; @@ -147,6 +152,11 @@ cAlbum* cAlbumList::add(const QString& szAlbum, const QString& szBand) void cAlbumList::sort(qint32 sort) { -// std::sort(begin(), end(), compare); std::sort(begin(), end(), cAlbumCompare(sort)); + + if(sort & SORT_TRACK_ASC || sort & SORT_TRACK_DESC) + { + for(int x = 0;x < count();x++) + at(x)->sortTracks(sort); + } } diff --git a/calbum.h b/calbum.h index 54243ec..eeaa638 100644 --- a/calbum.h +++ b/calbum.h @@ -25,6 +25,8 @@ public: cTrack* addTrack(const QString& szTitle, const QString& szTrackNumber, const QString& szPartOfSet, const QString& szBand, const QString& szComposer, const QDate& recordingTime); cTrackList trackList(); + + void sortTracks(qint32 sort); private: QString m_szAlbum; QString m_szBand; diff --git a/cmainwindow.cpp b/cmainwindow.cpp index 263f7f2..0df5336 100644 --- a/cmainwindow.cpp +++ b/cmainwindow.cpp @@ -219,7 +219,7 @@ void cMainWindow::displayDB() { m_lpMusicListModel->clear(); - m_albumList.sort(SORT_ALBUM_ASC | SORT_BAND_ASC); + m_albumList.sort(SORT_ALBUM_ASC | SORT_BAND_ASC | SORT_TRACK_ASC); QStringList header; header << "Original"; @@ -243,6 +243,8 @@ void cMainWindow::displayDB() lpBandItem.clear(); lpBandItem.append(new QStandardItem(szOldBand)); + lpBandItem[0]->setData(USERROLE_TYPE_BAND, USERROLE_TYPE); + lpBandItem[0]->setData(QVariant::fromValue(lpAlbum), USERROLE_VALUE); m_lpMusicListModel->appendRow(lpBandItem); } @@ -253,10 +255,11 @@ void cMainWindow::displayDB() lpAlbumItem.clear(); lpAlbumItem.append(new QStandardItem(szOldAlbum)); - lpAlbumItem.at(0)->setData(QVariant::fromValue(lpAlbum), Qt::UserRole+MUSICLIST_ORI_ALBUM); + lpAlbumItem[0]->setData(USERROLE_TYPE_ALBUM, USERROLE_TYPE); + lpAlbumItem[0]->setData(QVariant::fromValue(lpAlbum), USERROLE_VALUE); lpAlbumItem.append(new QStandardItem(szOldAlbum)); - lpBandItem.at(0)->appendRow(lpAlbumItem); + lpBandItem[0]->appendRow(lpAlbumItem); } cTrackList trackList = lpAlbum->trackList(); @@ -266,7 +269,9 @@ void cMainWindow::displayDB() QList lpTrackItem; lpTrackItem.append(new QStandardItem(lpTrack->title())); - lpAlbumItem.at(0)->appendRow(lpTrackItem); + lpTrackItem[0]->setData(USERROLE_TYPE_TRACK, USERROLE_TYPE); + lpTrackItem[0]->setData(QVariant::fromValue(lpTrack), USERROLE_VALUE); + lpAlbumItem[0]->appendRow(lpTrackItem); } } } diff --git a/common.h b/common.h index a8e828f..1d49e78 100644 --- a/common.h +++ b/common.h @@ -17,6 +17,18 @@ #define SORT_BAND_ASC 0x0004 #define SORT_BAND_DESC 0x0008 +#define SORT_TRACK_ASC 0x0010 +#define SORT_TRACK_DESC 0x0020 + + +#define USERROLE_TYPE (Qt::UserRole+1) +#define USERROLE_VALUE (Qt::UserRole+2) + +#define USERROLE_TYPE_BAND 1 +#define USERROLE_TYPE_ALBUM 2 +#define USERROLE_TYPE_TRACK 3 + + #define myDebug qDebug() << __FILE__ << "(" << __LINE__ << ") - " << __PRETTY_FUNCTION__ << ":" diff --git a/ctrack.cpp b/ctrack.cpp index b726b89..e0450f3 100644 --- a/ctrack.cpp +++ b/ctrack.cpp @@ -1,6 +1,59 @@ +#include "common.h" + #include "ctrack.h" +class cTrackCompare +{ +public: + cTrackCompare(qint32 sort) : m_sort(sort) {} + + bool operator()(cTrack* lpFirst, cTrack* lpSecond) + { + qint16 t1 = 0; + qint16 t2 = 0; + if(!lpFirst->trackNumber().isEmpty()) + { + if(lpFirst->trackNumber().contains("/")) + t1 = lpFirst->trackNumber().left(lpFirst->trackNumber().indexOf("/")).toInt(); + else + t1 = lpFirst->trackNumber().toInt(); + } + + if(!lpSecond->trackNumber().isEmpty()) + { + if(lpSecond->trackNumber().contains("/")) + t2 = lpSecond->trackNumber().left(lpSecond->trackNumber().indexOf("/")).toInt(); + else + t2 = lpSecond->trackNumber().toInt(); + } + + if(m_sort & SORT_TRACK_ASC) + { + if(t1 < t2) + return(true); + else if(t1 > t2) + return(false); + else + return(false); + } + else if(m_sort & SORT_TRACK_DESC) + { + if(t1 > t2) + return(true); + else if(t1 < t2) + return(false); + else + return(false); + } + else + return(false); + } + +private: + qint32 m_sort; +}; + cTrack::cTrack(cAlbum* lpAlbum, const QString& szTitle, const QString &szTrackNumber, const QString& szPartOfSet, const QString& szBand, const QString& szComposer, const QDate& recordingTime) : m_lpAlbum(lpAlbum), m_szTitle(szTitle), @@ -99,3 +152,8 @@ cTrack* cTrackList::add(cAlbum* lpAlbum, const QString& szTitle, const QString append(lpTrackNew); return(lpTrackNew); } + +void cTrackList::sort(qint32 sort) +{ + std::sort(begin(), end(), cTrackCompare(sort)); +} diff --git a/ctrack.h b/ctrack.h index 21d1aa5..a49ac60 100644 --- a/ctrack.h +++ b/ctrack.h @@ -52,6 +52,7 @@ class cTrackList : public QList { public: cTrack* add(cAlbum* lpAlbum, const QString& szTitle, const QString& szTrackNumber, const QString& szPartOfSet, const QString& szBand, const QString& szComposer, const QDate& recordingTime); + void sort(qint32 sort); }; #endif // CTRACK_H