diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2013-08-23 08:12:25 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2013-08-23 08:12:25 +0000 |
| commit | 73b5f5312a00236f264403e995d268641212b61f (patch) | |
| tree | ba26fdf486ac4e8797d81c50f7c8c2dea592c42e /src/qmmpui/groupedcontainer.cpp | |
| parent | b0c1e410bc00722617659647f2a05a0084228444 (diff) | |
| download | qmmp-73b5f5312a00236f264403e995d268641212b61f.tar.gz qmmp-73b5f5312a00236f264403e995d268641212b61f.tar.bz2 qmmp-73b5f5312a00236f264403e995d268641212b61f.zip | |
improved sorting implementation
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@3648 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/qmmpui/groupedcontainer.cpp')
| -rw-r--r-- | src/qmmpui/groupedcontainer.cpp | 53 |
1 files changed, 52 insertions, 1 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() } } } - |
