diff --git a/src/plugins/cppeditor/cppincludehierarchy.cpp b/src/plugins/cppeditor/cppincludehierarchy.cpp index ec5ddee0bf4..ce5d145a1b7 100644 --- a/src/plugins/cppeditor/cppincludehierarchy.cpp +++ b/src/plugins/cppeditor/cppincludehierarchy.cpp @@ -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)); diff --git a/src/plugins/cppeditor/cppincludehierarchy.h b/src/plugins/cppeditor/cppincludehierarchy.h index 2a8809614e7..cc2303c790f 100644 --- a/src/plugins/cppeditor/cppincludehierarchy.h +++ b/src/plugins/cppeditor/cppincludehierarchy.h @@ -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; }; diff --git a/src/plugins/cppeditor/cppincludehierarchymodel.cpp b/src/plugins/cppeditor/cppincludehierarchymodel.cpp index 33b1832dafc..3a9b6f7f728 100644 --- a/src/plugins/cppeditor/cppincludehierarchymodel.cpp +++ b/src/plugins/cppeditor/cppincludehierarchymodel.cpp @@ -39,6 +39,7 @@ #include #include +#include #include @@ -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(); + 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(); + if (link.hasValidTarget()) + data->addFile(link.targetFileName, link.targetLine, link.targetColumn); + } + return data; +} + bool CppIncludeHierarchyModel::isEmpty() const { return !m_includesItem->hasChildren() && !m_includedByItem->hasChildren(); diff --git a/src/plugins/cppeditor/cppincludehierarchymodel.h b/src/plugins/cppeditor/cppincludehierarchymodel.h index 5d34ea5487c..70eda484d36 100644 --- a/src/plugins/cppeditor/cppincludehierarchymodel.h +++ b/src/plugins/cppeditor/cppincludehierarchymodel.h @@ -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); diff --git a/src/plugins/cppeditor/cppincludehierarchytreeview.cpp b/src/plugins/cppeditor/cppincludehierarchytreeview.cpp index ca6b076942d..2b608d7dbd5 100644 --- a/src/plugins/cppeditor/cppincludehierarchytreeview.cpp +++ b/src/plugins/cppeditor/cppincludehierarchytreeview.cpp @@ -38,6 +38,8 @@ namespace Internal { CppIncludeHierarchyTreeView::CppIncludeHierarchyTreeView(QWidget *parent/* = 0*/) : NavigationTreeView(parent) { + setDragEnabled(true); + setDragDropMode(QAbstractItemView::DragOnly); } void CppIncludeHierarchyTreeView::keyPressEvent(QKeyEvent *event)