From 2ff0d30829547d33f4f00b475a327eeee328cfb5 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Thu, 16 Mar 2017 15:03:45 +0100 Subject: [PATCH] ProjectExplorer: Move code to set up default project structure Move the code used to set up the default project structure from the Project into the sessionmanager. Now that the models are no longer connected to the project this is the safer way as less change to the projects logic is required. Change-Id: Ib6b897f990a24d2dcce96a9821f090551fe45f13 Reviewed-by: hjk --- src/plugins/projectexplorer/project.cpp | 7 ------- src/plugins/projectexplorer/projectnodes.h | 4 ++-- src/plugins/projectexplorer/session.cpp | 13 ++++++++++++- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index 43870201dbd..7d283d39011 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -417,13 +417,6 @@ void Project::setDocument(Core::IDocument *doc) QTC_ASSERT(doc, return); QTC_ASSERT(!d->m_document, return); d->m_document = doc; - - if (!d->m_rootProjectNode) { - auto newRoot = new ProjectNode(projectDirectory()); - newRoot->setDisplayName(displayName()); - newRoot->addNode(new FileNode(projectFilePath(), FileType::Project, false)); - setRootProjectNode(newRoot); - } } void Project::setRootProjectNode(ProjectNode *root) diff --git a/src/plugins/projectexplorer/projectnodes.h b/src/plugins/projectexplorer/projectnodes.h index 03858db5e73..dd0c5d9afb6 100644 --- a/src/plugins/projectexplorer/projectnodes.h +++ b/src/plugins/projectexplorer/projectnodes.h @@ -40,7 +40,7 @@ namespace Utils { class MimeType; } namespace ProjectExplorer { class RunConfiguration; -class Project; +class SessionManager; enum class NodeType : quint16 { File = 1, @@ -302,7 +302,7 @@ protected: // will add the persistent stuff explicit ProjectNode(const Utils::FileName &projectFilePath); - friend class Project; + friend class SessionManager; }; // Documentation inside. diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp index 6efdea90190..2e87aef4ff7 100644 --- a/src/plugins/projectexplorer/session.cpp +++ b/src/plugins/projectexplorer/session.cpp @@ -205,7 +205,14 @@ void SessionManager::updateProjectTree(Project *pro) return; // Project was already de-registered and is shutting down ProjectNode *const oldNode = currentPair->second; - ProjectNode *const newNode = pro->rootProjectNode(); + ProjectNode *newNode = pro->rootProjectNode(); + + if (!newNode) { + // Set up generic project structure if the project does not provide any! + newNode = new ProjectNode(pro->projectDirectory()); + newNode->setDisplayName(pro->displayName()); + newNode->addNode(new FileNode(pro->projectFilePath(), FileType::Project, false)); + } d->m_sessionNode.replaceSubtree(oldNode, newNode); currentPair->second = newNode; @@ -766,6 +773,10 @@ void SessionManager::removeProjects(QList remove) pro->saveSettings(); pro->setRootProjectNode(nullptr); // Deregister project with sessionnode! + // Remove the project node: + Node *projectNode = nodeForProject(pro); + d->m_sessionNode.removeNode(projectNode); + d->m_projects = Utils::filtered(d->m_projects, [pro](const QPair &pair) {