ProjectTree: Support dragging files onto editor splits

Change-Id: I26e4de2818d89c012526116851d67155d3eeaa7e
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
This commit is contained in:
Eike Ziller
2014-09-04 13:37:43 +02:00
parent 0edefc4c2b
commit 2be7fad9a8
3 changed files with 27 additions and 1 deletions

View File

@@ -38,8 +38,9 @@
#include <QDebug> #include <QDebug>
#include <QFileInfo> #include <QFileInfo>
#include <QFont> #include <QFont>
#include <QMimeData>
#include <QUrl>
namespace ProjectExplorer { namespace ProjectExplorer {
@@ -334,6 +335,8 @@ Qt::ItemFlags FlatModel::flags(const QModelIndex &index) const
// either folder or file node // either folder or file node
if (node->supportedActions(node).contains(ProjectExplorer::Rename)) if (node->supportedActions(node).contains(ProjectExplorer::Rename))
f = f | Qt::ItemIsEditable; f = f | Qt::ItemIsEditable;
if (qobject_cast<FileNode *>(node))
f = f | Qt::ItemIsDragEnabled;
} }
} }
return f; return f;
@@ -486,6 +489,24 @@ void FlatModel::reset()
endResetModel(); endResetModel();
} }
QStringList FlatModel::mimeTypes() const
{
return QStringList() << QStringLiteral("text/uri-list");
}
QMimeData *FlatModel::mimeData(const QModelIndexList &indexes) const
{
QList<QUrl> urls;
foreach (const QModelIndex &index, indexes) {
Node *node = nodeForIndex(index);
if (qobject_cast<FileNode *>(node))
urls.append(QUrl::fromLocalFile(node->path()));
}
auto data = new QMimeData;
data->setUrls(urls);
return data;
}
QModelIndex FlatModel::indexForNode(const Node *node_) QModelIndex FlatModel::indexForNode(const Node *node_)
{ {
// We assume that we are only called for nodes that are represented // We assume that we are only called for nodes that are represented

View File

@@ -65,6 +65,9 @@ public:
void reset(); void reset();
QStringList mimeTypes() const;
QMimeData *mimeData(const QModelIndexList &indexes) const;
void setStartupProject(ProjectNode *projectNode); void setStartupProject(ProjectNode *projectNode);
ProjectExplorer::Node *nodeForIndex(const QModelIndex &index) const; ProjectExplorer::Node *nodeForIndex(const QModelIndex &index) const;

View File

@@ -87,6 +87,8 @@ public:
{ {
setEditTriggers(QAbstractItemView::EditKeyPressed); setEditTriggers(QAbstractItemView::EditKeyPressed);
setContextMenuPolicy(Qt::CustomContextMenu); setContextMenuPolicy(Qt::CustomContextMenu);
setDragEnabled(true);
setDragDropMode(QAbstractItemView::DragOnly);
m_context = new IContext(this); m_context = new IContext(this);
m_context->setContext(Context(ProjectExplorer::Constants::C_PROJECT_TREE)); m_context->setContext(Context(ProjectExplorer::Constants::C_PROJECT_TREE));
m_context->setWidget(this); m_context->setWidget(this);