From 3be88d8c0b32bfb77d3d5acc787dd100087453d5 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Mon, 25 Nov 2013 06:55:03 +0000 Subject: implemented drag&drop to a specific place git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@3924 90c681e8-e032-0410-971d-27865f9a5e38 --- src/qmmpui/fileloader.cpp | 55 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 42 insertions(+), 13 deletions(-) (limited to 'src/qmmpui/fileloader.cpp') diff --git a/src/qmmpui/fileloader.cpp b/src/qmmpui/fileloader.cpp index 8205a129a..d86e4a3f4 100644 --- a/src/qmmpui/fileloader.cpp +++ b/src/qmmpui/fileloader.cpp @@ -22,6 +22,7 @@ #include #include "fileloader_p.h" #include "qmmpuisettings.h" +#include "playlistitem.h" #include "playlisttrack.h" FileLoader::FileLoader(QObject *parent) : QThread(parent) @@ -33,16 +34,24 @@ FileLoader::FileLoader(QObject *parent) : QThread(parent) FileLoader::~FileLoader() {} -void FileLoader::addFile(const QString &path) +void FileLoader::addFile(const QString &path, PlayListItem *before) { bool use_meta = m_settings->useMetadata(); QList playList = MetaDataManager::instance()->createPlayList(path, use_meta); - foreach(FileInfo *info, playList) - emit newTrackToAdd(new PlayListTrack(info)); + if(before) + { + foreach(FileInfo *info, playList) + emit newTrackToInsert(before, new PlayListTrack(info)); + } + else + { + foreach(FileInfo *info, playList) + emit newTrackToAdd(new PlayListTrack(info)); + } qDeleteAll(playList); } -void FileLoader::addDirectory(const QString& s) +void FileLoader::addDirectory(const QString& s, PlayListItem *before) { QDir dir(s); dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks); @@ -51,7 +60,7 @@ void FileLoader::addDirectory(const QString& s) foreach(QFileInfo info, l) { if(checkRestrictFilters(info) && checkExcludeFilters(info)) - addFile(info.absoluteFilePath ()); + addFile(info.absoluteFilePath (), before); if (m_finished) return; } dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot); @@ -62,7 +71,7 @@ void FileLoader::addDirectory(const QString& s) for (int i = 0; i < l.size(); ++i) { QFileInfo fileInfo = l.at(i); - addDirectory(fileInfo.absoluteFilePath ()); + addDirectory(fileInfo.absoluteFilePath (), before); if (m_finished) return; } } @@ -70,20 +79,29 @@ void FileLoader::addDirectory(const QString& s) void FileLoader::run() { m_finished = false; - while(!m_paths.isEmpty() && !m_finished) + while((!m_paths.isEmpty() || !m_insertItems.isEmpty()) && !m_finished) { - QString path = m_paths.dequeue(); + PlayListItem *before = 0; + QString path; + if(!m_insertItems.isEmpty()) + { + InsertItem i = m_insertItems.dequeue(); + before = i.before; + path = i.path; + } + else if(!m_paths.isEmpty()) + path = m_paths.dequeue(); QFileInfo info(path); if(info.isDir()) { - addDirectory(path); + addDirectory(path, before); continue; } else if(info.isFile()) { - addFile(path); + addFile(path, before); continue; } } @@ -102,13 +120,24 @@ void FileLoader::add(const QStringList &paths) start(QThread::IdlePriority); } -void FileLoader::insert(int index, const QString &path) +void FileLoader::insert(PlayListItem *before, const QString &path) { - insert(index, QStringList() << path); + insert(before, QStringList() << path); } -void FileLoader::insert(int index, const QStringList &paths) +void FileLoader::insert(PlayListItem *before, const QStringList &paths) { + foreach (QString path, paths) + { + InsertItem item; + item.before = before; + item.path = path; + m_insertItems.append(item); + } + + MetaDataManager::instance()->prepareForAnotherThread(); + m_filters = MetaDataManager::instance()->nameFilters(); + start(QThread::IdlePriority); } void FileLoader::finish() -- cgit v1.2.3-13-gbd6f