diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp index 146a03dc64a..4ea20d86762 100644 --- a/src/libs/utils/fileutils.cpp +++ b/src/libs/utils/fileutils.cpp @@ -30,6 +30,7 @@ #include "fileutils.h" #include "savefile.h" +#include "algorithm.h" #include "hostosinfo.h" #include "qtcassert.h" @@ -718,6 +719,26 @@ FileDropSupport::FileDropSupport(QWidget *parentWidget) parentWidget->installEventFilter(this); } +QStringList FileDropSupport::mimeTypesForFilePaths() +{ + return QStringList() << QStringLiteral("text/uri-list"); +} + +QMimeData *FileDropSupport::mimeDataForFilePaths(const QStringList &filePaths) +{ + QList localUrls = Utils::transform(filePaths, [filePaths](const QString &path) { + return QUrl::fromLocalFile(path); + }); + auto data = new QMimeData; + data->setUrls(localUrls); + return data; +} + +QMimeData *FileDropSupport::mimeDataForFilePath(const QString &filePath) +{ + return mimeDataForFilePaths(QStringList() << filePath); +} + bool FileDropSupport::eventFilter(QObject *obj, QEvent *event) { Q_UNUSED(obj) diff --git a/src/libs/utils/fileutils.h b/src/libs/utils/fileutils.h index 8a7edeef383..69457b32bdc 100644 --- a/src/libs/utils/fileutils.h +++ b/src/libs/utils/fileutils.h @@ -41,6 +41,7 @@ namespace Utils {class FileName; } QT_BEGIN_NAMESPACE class QFile; +class QMimeData; class QTemporaryFile; class QWidget; class QTextStream; @@ -199,6 +200,10 @@ class QTCREATOR_UTILS_EXPORT FileDropSupport : public QObject public: FileDropSupport(QWidget *parentWidget); + static QStringList mimeTypesForFilePaths(); + static QMimeData *mimeDataForFilePaths(const QStringList &filePaths); + static QMimeData *mimeDataForFilePath(const QString &filePath); + signals: void filesDropped(const QStringList &files); diff --git a/src/plugins/projectexplorer/projectmodels.cpp b/src/plugins/projectexplorer/projectmodels.cpp index c82bededa3c..dfd9d08fddb 100644 --- a/src/plugins/projectexplorer/projectmodels.cpp +++ b/src/plugins/projectexplorer/projectmodels.cpp @@ -40,7 +40,6 @@ #include #include #include -#include namespace ProjectExplorer { @@ -491,20 +490,18 @@ void FlatModel::reset() QStringList FlatModel::mimeTypes() const { - return QStringList() << QStringLiteral("text/uri-list"); + return Utils::FileDropSupport::mimeTypesForFilePaths(); } QMimeData *FlatModel::mimeData(const QModelIndexList &indexes) const { - QList urls; + QStringList filePaths; foreach (const QModelIndex &index, indexes) { Node *node = nodeForIndex(index); if (qobject_cast(node)) - urls.append(QUrl::fromLocalFile(node->path())); + filePaths.append(node->path()); } - auto data = new QMimeData; - data->setUrls(urls); - return data; + return Utils::FileDropSupport::mimeDataForFilePaths(filePaths); } QModelIndex FlatModel::indexForNode(const Node *node_)