diff options
Diffstat (limited to 'src/plugins/projectexplorer/projecttreewidget.cpp')
-rw-r--r-- | src/plugins/projectexplorer/projecttreewidget.cpp | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/src/plugins/projectexplorer/projecttreewidget.cpp b/src/plugins/projectexplorer/projecttreewidget.cpp index af4334a21e..5e4b19f8c9 100644 --- a/src/plugins/projectexplorer/projecttreewidget.cpp +++ b/src/plugins/projectexplorer/projecttreewidget.cpp @@ -149,7 +149,9 @@ public: setEditTriggers(QAbstractItemView::EditKeyPressed); setContextMenuPolicy(Qt::CustomContextMenu); setDragEnabled(true); - setDragDropMode(QAbstractItemView::DragOnly); + setDragDropMode(QAbstractItemView::DragDrop); + viewport()->setAcceptDrops(true); + setDropIndicatorShown(true); m_context = new IContext(this); m_context->setContext(Context(ProjectExplorer::Constants::C_PROJECT_TREE)); m_context->setWidget(this); @@ -296,7 +298,7 @@ ProjectTreeWidget::ProjectTreeWidget(QWidget *parent) : QWidget(parent) connect(m_toggleSync, &QAbstractButton::clicked, this, &ProjectTreeWidget::toggleAutoSynchronization); - setCurrentItem(ProjectTree::findCurrentNode()); + setCurrentItem(ProjectTree::currentNode()); setAutoSynchronization(true); m_projectTreeWidgets << this; @@ -348,11 +350,26 @@ void ProjectTreeWidget::rowsInserted(const QModelIndex &parent, int start, int e } } -Node *ProjectTreeWidget::nodeForFile(const FileName &fileName) +Node *ProjectTreeWidget::nodeForFile(const FilePath &fileName) { Node *bestNode = nullptr; int bestNodeExpandCount = INT_MAX; + // FIXME: Check that the values used make sense in the context. + auto priority = [](Node *node) { + if (node->asFileNode()) + return 1; + if (node->isFolderNodeType()) + return 2; + if (node->isVirtualFolderType()) + return 3; + if (node->isProjectNodeType()) + return 4; + QTC_CHECK(false); + return 1; + }; + + // FIXME: Looks like this could be done with less cycles. for (Project *project : SessionManager::projects()) { if (ProjectNode *projectNode = project->rootProjectNode()) { projectNode->forEachGenericNode([&](Node *node) { @@ -360,10 +377,10 @@ Node *ProjectTreeWidget::nodeForFile(const FileName &fileName) if (!bestNode) { bestNode = node; bestNodeExpandCount = ProjectTreeWidget::expandedCount(node); - } else if (node->nodeType() < bestNode->nodeType()) { + } else if (priority(node) < priority(bestNode)) { bestNode = node; bestNodeExpandCount = ProjectTreeWidget::expandedCount(node); - } else if (node->nodeType() == bestNode->nodeType()) { + } else if (priority(node) == priority(bestNode)) { int nodeExpandCount = ProjectTreeWidget::expandedCount(node); if (nodeExpandCount < bestNodeExpandCount) { bestNode = node; @@ -440,7 +457,7 @@ void ProjectTreeWidget::editCurrentItem() editor->setSelection(0, dotIndex); } -void ProjectTreeWidget::renamed(const FileName &oldPath, const FileName &newPath) +void ProjectTreeWidget::renamed(const FilePath &oldPath, const FilePath &newPath) { update(); Q_UNUSED(oldPath); @@ -457,7 +474,7 @@ void ProjectTreeWidget::renamed(const FileName &oldPath, const FileName &newPath void ProjectTreeWidget::syncFromDocumentManager() { // sync from document manager - FileName fileName; + FilePath fileName; if (IDocument *doc = EditorManager::currentDocument()) fileName = doc->filePath(); if (!currentNode() || currentNode()->filePath() != fileName) @@ -522,7 +539,7 @@ void ProjectTreeWidget::showContextMenu(const QPoint &pos) void ProjectTreeWidget::openItem(const QModelIndex &mainIndex) { Node *node = m_model->nodeForIndex(mainIndex); - if (!node || node->nodeType() != NodeType::File) + if (!node || !node->asFileNode()) return; IEditor *editor = EditorManager::openEditor(node->filePath().toString()); if (editor && node->line() >= 0) |