diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2015-04-10 11:28:01 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2015-04-10 11:28:01 +0000 |
| commit | 90f13f20aa9bf0e076065125e8edfdbcdaf785a4 (patch) | |
| tree | beeb445cb175408613bdbe72a4560bef6b0df2f1 | |
| parent | 76f1c92734c5a4b9432b07eb182c6e96908a29b0 (diff) | |
| download | qmmp-90f13f20aa9bf0e076065125e8edfdbcdaf785a4.tar.gz qmmp-90f13f20aa9bf0e076065125e8edfdbcdaf785a4.tar.bz2 qmmp-90f13f20aa9bf0e076065125e8edfdbcdaf785a4.zip | |
added estra sorting function
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@4843 90c681e8-e032-0410-971d-27865f9a5e38
| -rw-r--r-- | src/plugins/Ui/skinned/listwidget.cpp | 2 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/listwidgetdrawer.cpp | 10 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/playlistheader.cpp | 2 | ||||
| -rw-r--r-- | src/qmmpui/playlistmodel.cpp | 15 | ||||
| -rw-r--r-- | src/qmmpui/playlistmodel.h | 2 | ||||
| -rw-r--r-- | src/qmmpui/playlisttask.cpp | 24 | ||||
| -rw-r--r-- | src/qmmpui/playlisttask_p.h | 4 | ||||
| -rw-r--r-- | src/qmmpui/playlisttrack.cpp | 14 | ||||
| -rw-r--r-- | src/qmmpui/qmmpuisettings.cpp | 8 | ||||
| -rw-r--r-- | src/qmmpui/qmmpuisettings.h | 4 |
10 files changed, 61 insertions, 24 deletions
diff --git a/src/plugins/Ui/skinned/listwidget.cpp b/src/plugins/Ui/skinned/listwidget.cpp index 7eeb572e8..ea9cfa50e 100644 --- a/src/plugins/Ui/skinned/listwidget.cpp +++ b/src/plugins/Ui/skinned/listwidget.cpp @@ -45,7 +45,7 @@ ListWidget::ListWidget(QWidget *parent) { m_skin = Skin::instance(); m_ui_settings = QmmpUiSettings::instance(); - PlayListHeaderModel *headerModel = m_ui_settings->columnManager(); + PlayListHeaderModel *headerModel = m_ui_settings->headerModel(); m_menu = new QMenu(this); m_timer = new QTimer(this); m_timer->setInterval(50); diff --git a/src/plugins/Ui/skinned/listwidgetdrawer.cpp b/src/plugins/Ui/skinned/listwidgetdrawer.cpp index a35807177..03de46836 100644 --- a/src/plugins/Ui/skinned/listwidgetdrawer.cpp +++ b/src/plugins/Ui/skinned/listwidgetdrawer.cpp @@ -31,7 +31,7 @@ ListWidgetDrawer::ListWidgetDrawer() { m_skin = Skin::instance(); - m_column_manager = QmmpUiSettings::instance()->columnManager(); + m_column_manager = QmmpUiSettings::instance()->headerModel(); m_update = false; m_show_anchor = false; m_show_number = false; @@ -144,11 +144,11 @@ void ListWidgetDrawer::prepareRow(ListWidgetRow *row) for(int i = 0; i < row->titles.count() && visible_width > 0; ++i) { - int width = qMin(QmmpUiSettings::instance()->columnManager()->size(i) - 2 * m_padding, + int width = qMin(QmmpUiSettings::instance()->headerModel()->size(i) - 2 * m_padding, visible_width - 2 * m_padding); row->titles[i] = m_metrics->elidedText (row->titles[i], Qt::ElideRight, width); - visible_width -= QmmpUiSettings::instance()->columnManager()->size(i); + visible_width -= QmmpUiSettings::instance()->headerModel()->size(i); } } @@ -232,14 +232,14 @@ void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row) painter->drawLine(sx, row->rect.top(), sx, row->rect.bottom() + 1); } - for(int i = 0; i < QmmpUiSettings::instance()->columnManager()->count(); i++) + for(int i = 0; i < QmmpUiSettings::instance()->headerModel()->count(); i++) { if(sx + m_padding >= row->rect.right() - row->lengthColumnWidth) break; painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal); painter->drawText(sx + m_padding, sy, row->titles[i]); - sx += QmmpUiSettings::instance()->columnManager()->size(i); + sx += QmmpUiSettings::instance()->headerModel()->size(i); if(m_column_manager->count() > 1 && sx < row->rect.right() - row->lengthColumnWidth) { diff --git a/src/plugins/Ui/skinned/playlistheader.cpp b/src/plugins/Ui/skinned/playlistheader.cpp index 212e7028a..0ed151e0b 100644 --- a/src/plugins/Ui/skinned/playlistheader.cpp +++ b/src/plugins/Ui/skinned/playlistheader.cpp @@ -45,7 +45,7 @@ PlayListHeader::PlayListHeader(QWidget *parent) : m_align_numbres = false; m_number_width = 0; m_task = NO_TASK; - m_model = QmmpUiSettings::instance()->columnManager(); + m_model = QmmpUiSettings::instance()->headerModel(); m_skin = Skin::instance(); m_menu = new QMenu(this); m_menu->addAction(QIcon::fromTheme("list-add"), tr("Add column"), this, SLOT(addColumn())); diff --git a/src/qmmpui/playlistmodel.cpp b/src/qmmpui/playlistmodel.cpp index 660924175..bd75a57ca 100644 --- a/src/qmmpui/playlistmodel.cpp +++ b/src/qmmpui/playlistmodel.cpp @@ -806,7 +806,7 @@ void PlayListModel::sortSelection(int mode) if(m_container->isEmpty()) return; - m_task->sortSelection(m_container->tracks(), (PlayListModel::SortMode) mode); + m_task->sortSelection(m_container->tracks(), mode); } void PlayListModel::sort(int mode) @@ -814,7 +814,18 @@ void PlayListModel::sort(int mode) if(m_container->isEmpty()) return; - m_task->sort(m_container->tracks(), (PlayListModel::SortMode) mode); + m_task->sort(m_container->tracks(), mode); +} + +void PlayListModel::sortByColumn(int column) +{ + if(m_container->isEmpty()) + return; + + if(column < 0 || column >= m_ui_settings->headerModel()->count()) + return; + + m_task->sortByColumn(m_container->tracks(), column); } void PlayListModel::prepareForShufflePlaying(bool val) diff --git a/src/qmmpui/playlistmodel.h b/src/qmmpui/playlistmodel.h index 71debbe93..34bb9f745 100644 --- a/src/qmmpui/playlistmodel.h +++ b/src/qmmpui/playlistmodel.h @@ -442,6 +442,8 @@ public slots: * Sorts items in \b mode sort mode. */ void sort(int mode); + + void sortByColumn(int column); /*! * Adds/removes selected items to/from playback queue. */ diff --git a/src/qmmpui/playlisttask.cpp b/src/qmmpui/playlisttask.cpp index f1859135e..4b6d4b4e4 100644 --- a/src/qmmpui/playlisttask.cpp +++ b/src/qmmpui/playlisttask.cpp @@ -121,7 +121,9 @@ PlayListTask::PlayListTask(QObject *parent) : QThread(parent) } PlayListTask::~PlayListTask() -{} +{ + clear(); +} void PlayListTask::sort(QList<PlayListTrack *> tracks, int mode) { @@ -176,6 +178,26 @@ void PlayListTask::sortSelection(QList<PlayListTrack *> tracks, int mode) start(); } +void PlayListTask::sortByColumn(QList<PlayListTrack *> tracks, int column) +{ + if(isRunning()) + return; + clear(); + m_task = SORT_BY_COLUMN; + m_input_tracks = tracks; + m_tracks = tracks; + + for(int i = 0; i < tracks.count(); ++i) + { + TrackField *f = new TrackField; + f->track = tracks[i]; + f->value = f->track->formattedTitle(column); + m_fields.append(f); + } + MetaDataManager::instance()->prepareForAnotherThread(); + start(); +} + void PlayListTask::removeInvalidTracks(QList<PlayListTrack *> tracks, PlayListTrack *current_track) { if(isRunning()) diff --git a/src/qmmpui/playlisttask_p.h b/src/qmmpui/playlisttask_p.h index 14442b06b..c1359bbb7 100644 --- a/src/qmmpui/playlisttask_p.h +++ b/src/qmmpui/playlisttask_p.h @@ -43,7 +43,8 @@ public: SORT = 0, SORT_SELECTION, REMOVE_INVALID, - REMOVE_DUPLICATES + REMOVE_DUPLICATES, + SORT_BY_COLUMN }; explicit PlayListTask(QObject *parent); @@ -51,6 +52,7 @@ public: void sort(QList<PlayListTrack *> tracks, int mode); void sortSelection(QList<PlayListTrack *> tracks, int mode); + void sortByColumn(QList <PlayListTrack *> tracks, int column); void removeInvalidTracks(QList<PlayListTrack *> tracks, PlayListTrack *current_track); void removeDuplicates(QList<PlayListTrack *> tracks, PlayListTrack *current_track); diff --git a/src/qmmpui/playlisttrack.cpp b/src/qmmpui/playlisttrack.cpp index f961db803..aaac75d28 100644 --- a/src/qmmpui/playlisttrack.cpp +++ b/src/qmmpui/playlisttrack.cpp @@ -26,7 +26,7 @@ PlayListTrack::PlayListTrack() : QMap<Qmmp::MetaData, QString>(), PlayListItem() { m_settings = QmmpUiSettings::instance(); - m_columnManager = m_settings->columnManager(); + m_columnManager = m_settings->headerModel(); m_length = 0; m_refCount = 0; m_sheduledForDeletion = false; @@ -36,7 +36,7 @@ PlayListTrack::PlayListTrack(const PlayListTrack &other) : QMap<Qmmp::MetaData, PlayListItem() { m_settings = QmmpUiSettings::instance(); - m_columnManager = m_settings->columnManager(); + m_columnManager = m_settings->headerModel(); m_refCount = 0; m_sheduledForDeletion = false; @@ -54,7 +54,7 @@ PlayListTrack::PlayListTrack(FileInfo *info) : QMap<Qmmp::MetaData, QString>(in PlayListItem() { m_settings = QmmpUiSettings::instance(); - m_columnManager = m_settings->columnManager(); + m_columnManager = m_settings->headerModel(); setLength(m_length = info->length()); insert(Qmmp::URL, info->path()); m_refCount = 0; @@ -131,7 +131,7 @@ bool PlayListTrack::isUsed() const const QString PlayListTrack::formattedTitle(int column) { - if(m_formattedTitles.count() != m_settings->columnManager()->count()) + if(m_formattedTitles.count() != m_settings->headerModel()->count()) { while(m_formattedTitles.count() > m_columnManager->count()) m_formattedTitles.takeLast(); @@ -154,7 +154,7 @@ const QString PlayListTrack::formattedTitle(int column) if(m_formattedTitles[column].isEmpty() || m_titleFormats[column] != m_columnManager->pattern(column)) { - m_titleFormats[column] = m_settings->columnManager()->pattern(column); + m_titleFormats[column] = m_settings->headerModel()->pattern(column); formatTitle(column); } return m_formattedTitles[column]; @@ -162,7 +162,7 @@ const QString PlayListTrack::formattedTitle(int column) const QStringList PlayListTrack::formattedTitles() { - if(m_formattedTitles.count() != m_settings->columnManager()->count()) + if(m_formattedTitles.count() != m_settings->headerModel()->count()) { while(m_formattedTitles.count() > m_columnManager->count()) m_formattedTitles.takeLast(); @@ -181,7 +181,7 @@ const QStringList PlayListTrack::formattedTitles() { if(m_formattedTitles[column].isEmpty() || m_titleFormats[column] != m_columnManager->pattern(column)) { - m_titleFormats[column] = m_settings->columnManager()->pattern(column); + m_titleFormats[column] = m_settings->headerModel()->pattern(column); formatTitle(column); } } diff --git a/src/qmmpui/qmmpuisettings.cpp b/src/qmmpui/qmmpuisettings.cpp index f28fefd19..abdcf8b7b 100644 --- a/src/qmmpui/qmmpuisettings.cpp +++ b/src/qmmpui/qmmpuisettings.cpp @@ -32,7 +32,7 @@ QmmpUiSettings::QmmpUiSettings(QObject *parent) : QObject(parent) if(m_instance) qFatal("QmmpUiSettings: only one instance is allowed"); m_instance = this; - m_colum_manager = new PlayListHeaderModel(this); + m_header = new PlayListHeaderModel(this); QSettings s (Qmmp::configFile(), QSettings::IniFormat); s.beginGroup("PlayList"); m_group_format = s.value("group_format", "%p%if(%p&%a, - %if(%y,[%y] ,),)%a").toString(); @@ -312,14 +312,14 @@ bool QmmpUiSettings::clearPreviousPlayList() const return m_clear_prev_playlist; } -PlayListHeaderModel *QmmpUiSettings::columnManager() +PlayListHeaderModel *QmmpUiSettings::headerModel() { - return m_colum_manager; + return m_header; } const MetaDataFormatter *QmmpUiSettings::titleFormatter(int column) const { - return m_colum_manager->titleFormatter(column); + return m_header->titleFormatter(column); } const MetaDataFormatter *QmmpUiSettings::groupFormatter() const diff --git a/src/qmmpui/qmmpuisettings.h b/src/qmmpui/qmmpuisettings.h index 4c6b40b2f..7fcb81f3f 100644 --- a/src/qmmpui/qmmpuisettings.h +++ b/src/qmmpui/qmmpuisettings.h @@ -179,7 +179,7 @@ public: */ bool clearPreviousPlayList() const; - PlayListHeaderModel *columnManager(); + PlayListHeaderModel *headerModel(); const MetaDataFormatter* titleFormatter(int column) const; const MetaDataFormatter* groupFormatter() const; @@ -277,7 +277,7 @@ private: //formatters MetaDataFormatter m_group_formatter; //column settings - PlayListHeaderModel *m_colum_manager; + PlayListHeaderModel *m_header; }; #endif // QMMPUISETTINGS_H |
