ProjectExplorer: Fix enabling state of main project nodes

Since the rootProjectNode() containing the parsed files is now nested
under a new project node the main node needs to delegate enable/disable
decisions.

Task-number: QTCREATORBUG-17922
Change-Id: Ie7bb6d6802072a2127b32c0fe51fb25fc1c9c6cc
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
hjk
2017-03-27 17:51:19 +02:00
parent 7f5b37ed14
commit 2ee7967750
7 changed files with 79 additions and 43 deletions

View File

@@ -25,6 +25,7 @@
#include "projectnodes.h"
#include "project.h"
#include "projectexplorerconstants.h"
#include "projecttree.h"
@@ -171,8 +172,9 @@ FolderNode *Node::parentFolderNode() const
ProjectNode *Node::managingProject()
{
if (!m_parentFolderNode)
return nullptr;
if (asContainerNode())
return asContainerNode()->rootProjectNode();
QTC_ASSERT(m_parentFolderNode, return nullptr);
ProjectNode *pn = parentProjectNode();
return pn ? pn : asProjectNode(); // projects manage themselves...
}
@@ -790,4 +792,35 @@ bool FolderNode::isEmpty() const
return m_nodes.isEmpty();
}
ContainerNode::ContainerNode(Project *project)
: FolderNode(Utils::FileName(), NodeType::Project), m_project(project)
{}
QString ContainerNode::displayName() const
{
QString name = m_project->displayName();
const QFileInfo fi = m_project->projectFilePath().toFileInfo();
const QString dir = fi.isDir() ? fi.absoluteFilePath() : fi.absolutePath();
if (Core::IVersionControl *vc = Core::VcsManager::findVersionControlForDirectory(dir)) {
QString vcsTopic = vc->vcsTopic(dir);
if (!vcsTopic.isEmpty())
name += " [" + vcsTopic + ']';
}
return name;
}
QList<ProjectAction> ContainerNode::supportedActions(Node *node) const
{
if (Node *rootNode = m_project->rootProjectNode())
return rootNode->supportedActions(node);
return {};
}
ProjectNode *ContainerNode::rootProjectNode() const
{
return m_project->rootProjectNode();
}
} // namespace ProjectExplorer