Commit 80390a67 authored by Eike Ziller's avatar Eike Ziller

Cpp include hierarchy: Add drag & drop onto editor splits

Change-Id: If6d7acb362433814dd73819ec224249f05ab9dcd
Reviewed-by: default avatarDaniel Teske <daniel.teske@digia.com>
parent 4bcf60dc
......@@ -57,34 +57,6 @@ using namespace Utils;
namespace CppEditor {
namespace Internal {
class CppIncludeLabel : public QLabel
{
public:
CppIncludeLabel(QWidget *parent)
: QLabel(parent)
{}
void setup(const QString &fileName, const QString &filePath)
{
setText(fileName);
m_link = CppEditorWidget::Link(filePath);
}
private:
void mousePressEvent(QMouseEvent *)
{
if (!m_link.hasValidTarget())
return;
Core::EditorManager::openEditorAt(m_link.targetFileName,
m_link.targetLine,
m_link.targetColumn,
Constants::CPPEDITOR_ID);
}
CppEditorWidget::Link m_link;
};
// CppIncludeHierarchyWidget
CppIncludeHierarchyWidget::CppIncludeHierarchyWidget() :
QWidget(0),
......@@ -94,7 +66,7 @@ CppIncludeHierarchyWidget::CppIncludeHierarchyWidget() :
m_includeHierarchyInfoLabel(0),
m_editor(0)
{
m_inspectedFile = new CppIncludeLabel(this);
m_inspectedFile = new TextEditorLinkLabel(this);
m_inspectedFile->setMargin(5);
m_model = new CppIncludeHierarchyModel(this);
m_treeView = new CppIncludeHierarchyTreeView(this);
......@@ -150,8 +122,8 @@ void CppIncludeHierarchyWidget::perform()
if (m_model->isEmpty())
return;
m_inspectedFile->setup(widget->textDocument()->displayName(),
widget->textDocument()->filePath());
m_inspectedFile->setText(widget->textDocument()->displayName());
m_inspectedFile->setLink(TextEditorWidget::Link(widget->textDocument()->filePath()));
//expand "Includes"
m_treeView->expand(m_model->index(0, 0));
......
......@@ -45,7 +45,11 @@ class QLabel;
QT_END_NAMESPACE
namespace Core { class IEditor; }
namespace TextEditor { class BaseTextEditor; }
namespace TextEditor {
class BaseTextEditor;
class TextEditorLinkLabel;
}
namespace Utils {
class AnnotatedItemDelegate;
......@@ -58,7 +62,6 @@ namespace Internal {
class CppEditor;
class CppEditorWidget;
class CppInclude;
class CppIncludeLabel;
class CppIncludeHierarchyModel;
class CppIncludeHierarchyTreeView;
......@@ -84,7 +87,7 @@ private:
CppIncludeHierarchyTreeView *m_treeView;
CppIncludeHierarchyModel *m_model;
Utils::AnnotatedItemDelegate *m_delegate;
CppIncludeLabel *m_inspectedFile;
TextEditor::TextEditorLinkLabel *m_inspectedFile;
QLabel *m_includeHierarchyInfoLabel;
TextEditor::BaseTextEditor *m_editor;
};
......
......@@ -39,6 +39,7 @@
#include <texteditor/texteditor.h>
#include <cplusplus/CppDocument.h>
#include <utils/fileutils.h>
#include <QSet>
......@@ -241,6 +242,37 @@ bool CppIncludeHierarchyModel::hasChildren(const QModelIndex &parent) const
return parentItem->hasChildren();
}
Qt::ItemFlags CppIncludeHierarchyModel::flags(const QModelIndex &index) const
{
const TextEditor::TextEditorWidget::Link link
= index.data(LinkRole).value<TextEditor::TextEditorWidget::Link>();
if (link.hasValidTarget())
return Qt::ItemIsDragEnabled | Qt::ItemIsEnabled | Qt::ItemIsSelectable;
return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}
Qt::DropActions CppIncludeHierarchyModel::supportedDragActions() const
{
return Qt::MoveAction;
}
QStringList CppIncludeHierarchyModel::mimeTypes() const
{
return Utils::FileDropSupport::mimeTypesForFilePaths();
}
QMimeData *CppIncludeHierarchyModel::mimeData(const QModelIndexList &indexes) const
{
auto data = new Utils::FileDropMimeData;
foreach (const QModelIndex &index, indexes) {
const TextEditor::TextEditorWidget::Link link
= index.data(LinkRole).value<TextEditor::TextEditorWidget::Link>();
if (link.hasValidTarget())
data->addFile(link.targetFileName, link.targetLine, link.targetColumn);
}
return data;
}
bool CppIncludeHierarchyModel::isEmpty() const
{
return !m_includesItem->hasChildren() && !m_includedByItem->hasChildren();
......
......@@ -66,6 +66,11 @@ public:
void fetchMore(const QModelIndex &parent);
bool canFetchMore(const QModelIndex &parent) const;
bool hasChildren(const QModelIndex &parent) const;
Qt::ItemFlags flags(const QModelIndex &index) const;
Qt::DropActions supportedDragActions() const;
QStringList mimeTypes() const;
QMimeData *mimeData(const QModelIndexList &indexes) const;
void clear();
void buildHierarchy(TextEditor::BaseTextEditor *editor, const QString &filePath);
......
......@@ -38,6 +38,8 @@ namespace Internal {
CppIncludeHierarchyTreeView::CppIncludeHierarchyTreeView(QWidget *parent/* = 0*/)
: NavigationTreeView(parent)
{
setDragEnabled(true);
setDragDropMode(QAbstractItemView::DragOnly);
}
void CppIncludeHierarchyTreeView::keyPressEvent(QKeyEvent *event)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment