diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/qmmpui/groupedcontainer.cpp | 53 | ||||
| -rw-r--r-- | src/qmmpui/groupedcontainer_p.h | 3 | ||||
| -rw-r--r-- | src/qmmpui/normalcontainer.cpp | 31 | ||||
| -rw-r--r-- | src/qmmpui/normalcontainer_p.h | 3 | ||||
| -rw-r--r-- | src/qmmpui/playlistcontainer.cpp | 43 | ||||
| -rw-r--r-- | src/qmmpui/playlistcontainer_p.h | 6 | ||||
| -rw-r--r-- | src/qmmpui/playlistgroup.cpp | 5 | ||||
| -rw-r--r-- | src/qmmpui/playlistgroup.h | 1 |
8 files changed, 102 insertions, 43 deletions
diff --git a/src/qmmpui/groupedcontainer.cpp b/src/qmmpui/groupedcontainer.cpp index 59eba7398..c789a3fd9 100644 --- a/src/qmmpui/groupedcontainer.cpp +++ b/src/qmmpui/groupedcontainer.cpp @@ -18,10 +18,12 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ +#include "playlistmodel.h" #include "groupedcontainer_p.h" GroupedContainer::GroupedContainer() { + m_reverted = false; } GroupedContainer::~GroupedContainer() @@ -295,6 +297,56 @@ void GroupedContainer::randomizeList() addTracks(tracks); } +void GroupedContainer::sort(int mode) +{ + if(mode == PlayListModel::ARTIST || mode == PlayListModel::ALBUM || mode == PlayListModel::DATE) + { + QList<PlayListTrack *> tracks = takeAllTracks(); + doSort(mode, tracks, m_reverted); + addTracks(tracks); + } + else + { + m_items.clear(); + foreach (PlayListGroup *g, m_groups) + { + QList<PlayListTrack *> tracks = g->takeAll(); + doSort(mode, tracks, m_reverted); + g->addTracks(tracks); + m_items.append(g); + foreach (PlayListTrack *t, tracks) + { + m_items.append(t); + } + } + updateIndex(); + } + m_reverted = !m_reverted; +} + +void GroupedContainer::sortSelection(int mode) +{ + QList<PlayListTrack *> tracks = takeAllTracks(); + QList<PlayListTrack *> selected_tracks; + QList<int> selected_indexes; + for(int i = 0; i < tracks.count(); ++i) + { + if(tracks[i]->isSelected()) + { + selected_tracks.append(tracks[i]); + selected_indexes.append(i); + } + } + doSort(mode, selected_tracks, m_reverted); + + for (int i = 0; i < selected_indexes.count(); i++) + tracks.replace(selected_indexes[i], selected_tracks[i]); + + addTracks(tracks); + + m_reverted = !m_reverted; +} + void GroupedContainer::updateIndex() { for(int i = 0; i < m_groups.count(); ++i) @@ -311,4 +363,3 @@ void GroupedContainer::updateIndex() } } } - diff --git a/src/qmmpui/groupedcontainer_p.h b/src/qmmpui/groupedcontainer_p.h index c812c2fc9..51a7bb152 100644 --- a/src/qmmpui/groupedcontainer_p.h +++ b/src/qmmpui/groupedcontainer_p.h @@ -54,12 +54,15 @@ public: void reverseList(); void randomizeList(); + void sort(int mode); + void sortSelection(int mode); private: void addGroup(PlayListGroup *group); void updateIndex(); QList<PlayListGroup *> m_groups; QList<PlayListItem *> m_items; + bool m_reverted; }; #endif // GROUPEDCONTAINER_P_H diff --git a/src/qmmpui/normalcontainer.cpp b/src/qmmpui/normalcontainer.cpp index 7267b09e6..9a939f83b 100644 --- a/src/qmmpui/normalcontainer.cpp +++ b/src/qmmpui/normalcontainer.cpp @@ -22,6 +22,7 @@ NormalContainer::NormalContainer() { + m_reverted = false; } NormalContainer::~NormalContainer() @@ -195,3 +196,33 @@ void NormalContainer::randomizeList() for (int i = 0; i < m_items.size(); i++) m_items.swap(qrand()%m_items.size(), qrand()%m_items.size()); } + +void NormalContainer::sort(int mode) +{ + QList<PlayListTrack *> tracks = takeAllTracks(); + doSort(mode, tracks, m_reverted); + addTracks(tracks); + m_reverted = !m_reverted; +} + +void NormalContainer::sortSelection(int mode) +{ + QList<PlayListTrack *> tracks = takeAllTracks(); + QList<PlayListTrack *> selected_tracks; + QList<int> selected_indexes; + for(int i = 0; i < tracks.count(); ++i) + { + if(tracks[i]->isSelected()) + { + selected_tracks.append(tracks[i]); + selected_indexes.append(i); + } + } + doSort(mode, selected_tracks, m_reverted); + + for (int i = 0; i < selected_indexes.count(); i++) + tracks.replace(selected_indexes[i], selected_tracks[i]); + + addTracks(tracks); + m_reverted = !m_reverted; +} diff --git a/src/qmmpui/normalcontainer_p.h b/src/qmmpui/normalcontainer_p.h index b83762c27..370756ba1 100644 --- a/src/qmmpui/normalcontainer_p.h +++ b/src/qmmpui/normalcontainer_p.h @@ -53,9 +53,12 @@ public: void reverseList(); void randomizeList(); + void sort(int mode); + void sortSelection(int mode); private: QList<PlayListItem *> m_items; + bool m_reverted; }; #endif // NORMALCONTAINER_P_H diff --git a/src/qmmpui/playlistcontainer.cpp b/src/qmmpui/playlistcontainer.cpp index 0952b2e9c..cb774726c 100644 --- a/src/qmmpui/playlistcontainer.cpp +++ b/src/qmmpui/playlistcontainer.cpp @@ -30,34 +30,6 @@ void PlayListContainer::addTracks(QList<PlayListTrack *> tracks) addTrack(t); } -void PlayListContainer::sort(int mode) -{ - QList<PlayListTrack *> tracks = takeAllTracks(); - doSort(mode, tracks); - addTracks(tracks); -} - -void PlayListContainer::sortSelection(int mode) -{ - QList<PlayListTrack *> tracks = takeAllTracks(); - QList<PlayListTrack *> selected_tracks; - QList<int> selected_indexes; - for(int i = 0; i < tracks.count(); ++i) - { - if(tracks[i]->isSelected()) - { - selected_tracks.append(tracks[i]); - selected_indexes.append(i); - } - } - doSort(mode, selected_tracks); - - for (int i = 0; i < selected_indexes.count(); i++) - tracks.replace(selected_indexes[i], selected_tracks[i]); - - addTracks(tracks); -} - ////===============THE BEGINNING OF SORT IMPLEMENTATION =======================//// // First we'll implement bundle of static compare procedures @@ -168,7 +140,7 @@ static bool _fileModificationDateGreaterComparator(PlayListTrack* s1,PlayListTra return QFileInfo(s1->value(Qmmp::URL)).lastModified() > QFileInfo(s2->value(Qmmp::URL)).lastModified(); } -void PlayListContainer::doSort(int sort_mode, QList<PlayListTrack*>& list_to_sort) +void PlayListContainer::doSort(int sort_mode, QList<PlayListTrack*>& list_to_sort, bool reverted) { QList<PlayListTrack*>::iterator begin; QList<PlayListTrack*>::iterator end; @@ -226,17 +198,10 @@ void PlayListContainer::doSort(int sort_mode, QList<PlayListTrack*>& list_to_sor compareGreaterFunc = _titleGreaterComparator; } - static bool sorted_asc = false; - if (!sorted_asc) - { - qStableSort(begin,end,compareLessFunc); - sorted_asc = true; - } - else - { + if(reverted) qStableSort(begin,end,compareGreaterFunc); - sorted_asc = false; - } + else + qStableSort(begin,end,compareLessFunc); } ////=============== THE END OF SORT IMPLEMENTATION =======================//// diff --git a/src/qmmpui/playlistcontainer_p.h b/src/qmmpui/playlistcontainer_p.h index daf271172..0f5782521 100644 --- a/src/qmmpui/playlistcontainer_p.h +++ b/src/qmmpui/playlistcontainer_p.h @@ -57,14 +57,14 @@ public: virtual void reverseList() = 0; virtual void randomizeList() = 0; - virtual void sort(int mode); - virtual void sortSelection(int mode); + virtual void sort(int mode) = 0; + virtual void sortSelection(int mode) = 0; protected: /*! * This internal method performs sorting of \b list_to_sort list of items. */ - void doSort(int sort_mode, QList<PlayListTrack*>& list_to_sort); + void doSort(int sort_mode, QList<PlayListTrack*>& list_to_sort, bool reverted); }; #endif // PLAYLISTCONTAINER_P_H diff --git a/src/qmmpui/playlistgroup.cpp b/src/qmmpui/playlistgroup.cpp index a23dc0efc..a4c7c51a7 100644 --- a/src/qmmpui/playlistgroup.cpp +++ b/src/qmmpui/playlistgroup.cpp @@ -54,6 +54,11 @@ void PlayListGroup::addTrack(PlayListTrack *track) m_tracks.append(track); } +void PlayListGroup::addTracks(QList<PlayListTrack *> tracks) +{ + m_tracks.append(tracks); +} + bool PlayListGroup::contains(PlayListTrack *track) const { return m_tracks.contains(track); diff --git a/src/qmmpui/playlistgroup.h b/src/qmmpui/playlistgroup.h index bd63b4cc7..a766919b1 100644 --- a/src/qmmpui/playlistgroup.h +++ b/src/qmmpui/playlistgroup.h @@ -36,6 +36,7 @@ public: const QString formattedTitle(); void addTrack(PlayListTrack *track); + void addTracks(QList<PlayListTrack *> tracks); bool contains(PlayListTrack *track) const; bool isEmpty() const; void remove(PlayListTrack *track); |
