From 2be7fad9a87b5c4eb97d98c0de22be0197b78e30 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 4 Sep 2014 13:37:43 +0200 Subject: [PATCH] ProjectTree: Support dragging files onto editor splits Change-Id: I26e4de2818d89c012526116851d67155d3eeaa7e Reviewed-by: Daniel Teske --- src/plugins/projectexplorer/projectmodels.cpp | 23 ++++++++++++++++++- src/plugins/projectexplorer/projectmodels.h | 3 +++ .../projectexplorer/projecttreewidget.cpp | 2 ++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/plugins/projectexplorer/projectmodels.cpp b/src/plugins/projectexplorer/projectmodels.cpp index 18989538712..c82bededa3c 100644 --- a/src/plugins/projectexplorer/projectmodels.cpp +++ b/src/plugins/projectexplorer/projectmodels.cpp @@ -38,8 +38,9 @@ #include #include - #include +#include +#include namespace ProjectExplorer { @@ -334,6 +335,8 @@ Qt::ItemFlags FlatModel::flags(const QModelIndex &index) const // either folder or file node if (node->supportedActions(node).contains(ProjectExplorer::Rename)) f = f | Qt::ItemIsEditable; + if (qobject_cast(node)) + f = f | Qt::ItemIsDragEnabled; } } return f; @@ -486,6 +489,24 @@ void FlatModel::reset() endResetModel(); } +QStringList FlatModel::mimeTypes() const +{ + return QStringList() << QStringLiteral("text/uri-list"); +} + +QMimeData *FlatModel::mimeData(const QModelIndexList &indexes) const +{ + QList urls; + foreach (const QModelIndex &index, indexes) { + Node *node = nodeForIndex(index); + if (qobject_cast(node)) + urls.append(QUrl::fromLocalFile(node->path())); + } + auto data = new QMimeData; + data->setUrls(urls); + return data; +} + QModelIndex FlatModel::indexForNode(const Node *node_) { // We assume that we are only called for nodes that are represented diff --git a/src/plugins/projectexplorer/projectmodels.h b/src/plugins/projectexplorer/projectmodels.h index 98d83649b91..4152643d03b 100644 --- a/src/plugins/projectexplorer/projectmodels.h +++ b/src/plugins/projectexplorer/projectmodels.h @@ -65,6 +65,9 @@ public: void reset(); + QStringList mimeTypes() const; + QMimeData *mimeData(const QModelIndexList &indexes) const; + void setStartupProject(ProjectNode *projectNode); ProjectExplorer::Node *nodeForIndex(const QModelIndex &index) const; diff --git a/src/plugins/projectexplorer/projecttreewidget.cpp b/src/plugins/projectexplorer/projecttreewidget.cpp index eb238133646..cb28592835e 100644 --- a/src/plugins/projectexplorer/projecttreewidget.cpp +++ b/src/plugins/projectexplorer/projecttreewidget.cpp @@ -87,6 +87,8 @@ public: { setEditTriggers(QAbstractItemView::EditKeyPressed); setContextMenuPolicy(Qt::CustomContextMenu); + setDragEnabled(true); + setDragDropMode(QAbstractItemView::DragOnly); m_context = new IContext(this); m_context->setContext(Context(ProjectExplorer::Constants::C_PROJECT_TREE)); m_context->setWidget(this);