aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/projectexplorer/project.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/projectexplorer/project.cpp')
-rw-r--r--src/plugins/projectexplorer/project.cpp54
1 files changed, 50 insertions, 4 deletions
diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp
index 7d283d3901..e8b68a4560 100644
--- a/src/plugins/projectexplorer/project.cpp
+++ b/src/plugins/projectexplorer/project.cpp
@@ -39,6 +39,9 @@
#include <coreplugin/idocument.h>
#include <coreplugin/icontext.h>
#include <coreplugin/icore.h>
+#include <coreplugin/iversioncontrol.h>
+#include <coreplugin/vcsmanager.h>
+
#include <projectexplorer/buildmanager.h>
#include <projectexplorer/kitmanager.h>
#include <projectexplorer/projecttree.h>
@@ -80,18 +83,52 @@ const char PLUGIN_SETTINGS_KEY[] = "ProjectExplorer.Project.PluginSettings";
} // namespace
namespace ProjectExplorer {
+
+class ContainerNode : public ProjectNode
+{
+public:
+ ContainerNode(Project *project)
+ : ProjectNode(Utils::FileName()),
+ m_project(project)
+ {}
+
+ QString displayName() const final
+ {
+ 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> supportedActions(Node *) const final
+ {
+ return {};
+ }
+
+private:
+ Project *m_project;
+};
+
// -------------------------------------------------------------------------
// Project
// -------------------------------------------------------------------------
-
class ProjectPrivate
{
public:
+ ProjectPrivate(Project *owner) : m_containerNode(owner) {}
~ProjectPrivate();
Core::Id m_id;
Core::IDocument *m_document = nullptr;
ProjectNode *m_rootProjectNode = nullptr;
+ ContainerNode m_containerNode;
QList<Target *> m_targets;
Target *m_activeTarget = nullptr;
EditorConfiguration m_editorConfiguration;
@@ -117,7 +154,7 @@ ProjectPrivate::~ProjectPrivate()
delete m_accessor;
}
-Project::Project() : d(new ProjectPrivate)
+Project::Project() : d(new ProjectPrivate(this))
{
d->m_macroExpander.setDisplayName(tr("Project"));
d->m_macroExpander.registerVariable("Project:Name", tr("Project Name"),
@@ -426,9 +463,13 @@ void Project::setRootProjectNode(ProjectNode *root)
ProjectTree::applyTreeManager(root);
+ ProjectNode *oldNode = d->m_rootProjectNode;
d->m_rootProjectNode = root;
- emit projectTreeChanged(this, QPrivateSignal());
- // Do not delete oldNode! The ProjectTree owns that!
+ if (root)
+ root->setParentFolderNode(&d->m_containerNode);
+ ProjectTree::emitSubtreeChanged(root);
+
+ delete oldNode;
}
Target *Project::restoreTarget(const QVariantMap &data)
@@ -532,6 +573,11 @@ ProjectNode *Project::rootProjectNode() const
return d->m_rootProjectNode;
}
+ProjectNode *Project::containerNode() const
+{
+ return &d->m_containerNode;
+}
+
Project::RestoreResult Project::fromMap(const QVariantMap &map, QString *errorMessage)
{
Q_UNUSED(errorMessage);