aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/projectexplorer/projecttreewidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/projectexplorer/projecttreewidget.cpp')
-rw-r--r--src/plugins/projectexplorer/projecttreewidget.cpp33
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)