forked from qt-creator/qt-creator
ProjectExplorer: Make the FlatModel a Utils::TreeModel
The FlatModel is essentially a proxy model keeping expansion and
filter state per ProjectTree(View). Using a Utils::TreeModel makes
it fast enough to allow recreation of the proxy structure on
structural changes simplifying the parent/child logic significantly.
The {Session,Project,Folder,File}Node hierarchy still is still primary
information and shared by all views.
Change-Id: Ic08180a19bda37908280ff30e0737d188ed93e92
Reviewed-by: Robert Loehning <robert.loehning@qt.io>
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
@@ -93,7 +93,7 @@ public:
|
||||
static QString windowTitleAddition(const QString &filePath);
|
||||
static QString sessionTitle(const QString &filePath);
|
||||
|
||||
std::unique_ptr<SessionNode> m_sessionNode;
|
||||
SessionNode m_sessionNode;
|
||||
QString m_sessionName = QLatin1String("default");
|
||||
bool m_virginSession = true;
|
||||
bool m_loadingSession = false;
|
||||
@@ -124,8 +124,6 @@ SessionManager::SessionManager(QObject *parent) : QObject(parent)
|
||||
m_instance = this;
|
||||
d = new SessionManagerPrivate;
|
||||
|
||||
d->m_sessionNode.reset(new SessionNode);
|
||||
|
||||
connect(ModeManager::instance(), &ModeManager::currentModeChanged,
|
||||
this, &SessionManager::saveActiveMode);
|
||||
|
||||
@@ -383,13 +381,13 @@ void SessionManager::addProject(Project *pro)
|
||||
QTC_ASSERT(!d->m_projects.contains(pro), return);
|
||||
|
||||
d->m_projects.append(pro);
|
||||
d->m_sessionNode->addProjectNodes(QList<ProjectNode *>() << pro->rootProjectNode());
|
||||
d->m_sessionNode.addProjectNodes({ pro->rootProjectNode() });
|
||||
|
||||
connect(pro, &Project::fileListChanged,
|
||||
m_instance, &SessionManager::clearProjectFileCache);
|
||||
|
||||
connect(pro, &Project::displayNameChanged, m_instance, [pro] {
|
||||
d->m_sessionNode->projectDisplayNameChanged(pro->rootProjectNode());
|
||||
d->m_sessionNode.emitNodeUpdated();
|
||||
emit m_instance->projectDisplayNameChanged(pro);
|
||||
});
|
||||
|
||||
@@ -650,11 +648,9 @@ Project *SessionManager::projectForNode(Node *node)
|
||||
if (!rootProjectNode)
|
||||
rootProjectNode = node->parentFolderNode();
|
||||
|
||||
while (rootProjectNode && rootProjectNode->parentFolderNode() != d->m_sessionNode.get())
|
||||
while (rootProjectNode && rootProjectNode->parentFolderNode() != &d->m_sessionNode)
|
||||
rootProjectNode = rootProjectNode->parentFolderNode();
|
||||
|
||||
Q_ASSERT(rootProjectNode);
|
||||
|
||||
return Utils::findOrDefault(d->m_projects, Utils::equal(&Project::rootProjectNode, rootProjectNode));
|
||||
}
|
||||
|
||||
@@ -742,7 +738,7 @@ void SessionManager::removeProjects(QList<Project *> remove)
|
||||
m_instance, &SessionManager::clearProjectFileCache);
|
||||
d->m_projectFileCache.remove(pro);
|
||||
|
||||
d->m_sessionNode->removeProjectNodes(QList<ProjectNode *>() << pro->rootProjectNode());
|
||||
d->m_sessionNode.removeProjectNodes({ pro->rootProjectNode() });
|
||||
emit m_instance->projectRemoved(pro);
|
||||
delete pro;
|
||||
}
|
||||
@@ -1095,7 +1091,7 @@ QString SessionManager::lastSession()
|
||||
|
||||
SessionNode *SessionManager::sessionNode()
|
||||
{
|
||||
return d->m_sessionNode.get();
|
||||
return &d->m_sessionNode;
|
||||
}
|
||||
|
||||
void SessionManager::reportProjectLoadingProgress()
|
||||
|
||||
Reference in New Issue
Block a user