From 9434fa4888c3451c870daa94348c93d64061eaaa Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Thu, 16 Mar 2017 15:02:23 +0100 Subject: [PATCH] ProjectTree: Decouple ProjectTree from Projects Make sure the ProjectTree gets its data exclusively from the Session and the SessionNode it holds. Change-Id: Ic44e1364adf36077018edc972e18815d7f972922 Reviewed-by: Ulf Hermann --- src/plugins/projectexplorer/projectmodels.cpp | 4 ++-- src/plugins/projectexplorer/session.cpp | 9 +++++++++ src/plugins/projectexplorer/session.h | 1 + 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/plugins/projectexplorer/projectmodels.cpp b/src/plugins/projectexplorer/projectmodels.cpp index 5645909cbb5..1a362da0c52 100644 --- a/src/plugins/projectexplorer/projectmodels.cpp +++ b/src/plugins/projectexplorer/projectmodels.cpp @@ -124,7 +124,7 @@ QVariant FlatModel::data(const QModelIndex &index, int role) const case Qt::FontRole: { QFont font; if (Project *project = SessionManager::startupProject()) { - if (node == project->rootProjectNode()) + if (node == SessionManager::nodeForProject(project)) font.setBold(true); } result = font; @@ -227,7 +227,7 @@ ExpandData FlatModel::expandDataForNode(const Node *node) const void FlatModel::handleProjectAdded(Project *project) { - Node *node = project->rootProjectNode(); + Node *node = SessionManager::nodeForProject(project); m_toExpand.insert(expandDataForNode(node)); if (WrapperNode *wrapper = wrapperForNode(node)) { wrapper->forFirstLevelChildren([this](WrapperNode *child) { diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp index 3cc54c2dcc9..6efdea90190 100644 --- a/src/plugins/projectexplorer/session.cpp +++ b/src/plugins/projectexplorer/session.cpp @@ -680,6 +680,15 @@ Project *SessionManager::projectForNode(Node *node) return nullptr; } +Node *SessionManager::nodeForProject(Project *project) +{ + for (const QPair &pair : d->m_projects) { + if (pair.first == project) + return pair.second; + } + return nullptr; +} + Project *SessionManager::projectForFile(const Utils::FileName &fileName) { const QList &projectList = projects(); diff --git a/src/plugins/projectexplorer/session.h b/src/plugins/projectexplorer/session.h index b97f297ff2d..c654efc615e 100644 --- a/src/plugins/projectexplorer/session.h +++ b/src/plugins/projectexplorer/session.h @@ -116,6 +116,7 @@ public: static SessionNode *sessionNode(); static Project *projectForNode(Node *node); + static Node *nodeForProject(Project *project); static Node *nodeForFile(const Utils::FileName &fileName); static Project *projectForFile(const Utils::FileName &fileName);