forked from qt-creator/qt-creator
ProjectTree: Support dragging files onto editor splits
Change-Id: I26e4de2818d89c012526116851d67155d3eeaa7e Reviewed-by: Daniel Teske <daniel.teske@digia.com>
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user