ProjectExplorer: Select the current node with more magic

If there are multiple file nodes for the same file, check in how many
project views they are expanded and select the one that is expanded
in most.

Task-number: QTCREATORBUG-12595
Change-Id: Ic4a640a80b8244b30b8dec62248aebeeaf9216cf
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
Daniel Teske
2014-07-03 15:46:54 +02:00
parent 4ee38b2925
commit 6de3389397
5 changed files with 80 additions and 9 deletions

View File

@@ -45,6 +45,7 @@
#include <texteditor/itexteditor.h>
#include <utils/stylehelper.h>
#include <utils/algorithm.h>
#include <QDebug>
#include <QDir>
@@ -518,23 +519,30 @@ Project *SessionManager::projectForNode(Node *node)
return 0;
}
Node *SessionManager::nodeForFile(const QString &fileName, Project *project)
QList<Node *> SessionManager::nodesForFile(const QString &fileName, Project *project)
{
Node *node = 0;
if (!project)
project = projectForFile(fileName);
if (project) {
FindNodesForFileVisitor findNodes(fileName);
project->rootProjectNode()->accept(&findNodes);
foreach (Node *n, findNodes.nodes()) {
// prefer file nodes
if (!node || (node->nodeType() != FileNodeType && n->nodeType() == FileNodeType))
node = n;
}
return findNodes.nodes();
}
return QList<Node *>();
}
// node for file returns a randomly selected node if there are multiple
// prefer to use nodesForFile and figure out which node you want
Node *SessionManager::nodeForFile(const QString &fileName, Project *project)
{
Node *node = 0;
foreach (Node *n, nodesForFile(fileName, project)) {
// prefer file nodes
if (!node || (node->nodeType() != FileNodeType && n->nodeType() == FileNodeType))
node = n;
}
return node;
}