diff options
author | hjk <hjk@qt.io> | 2017-03-17 12:26:00 +0100 |
---|---|---|
committer | hjk <hjk@qt.io> | 2017-03-21 12:48:41 +0000 |
commit | ebae6426f8246f21ac6354147d67efcde782c624 (patch) | |
tree | fb9e9488dc3e8896bc9856edfe152427d20c1ee0 /src/plugins/projectexplorer/projectmodels.cpp | |
parent | 312784a930078992c290b330a7e41ea219a6e3b1 (diff) | |
download | qt-creator-ebae6426f8246f21ac6354147d67efcde782c624.tar.gz |
ProjectManager: Remove SessionNode
Instead, get root project nodes directly from the project.
Change-Id: I5cf95a7dce1fa29c1adc26013ad03cc017f38a6d
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Diffstat (limited to 'src/plugins/projectexplorer/projectmodels.cpp')
-rw-r--r-- | src/plugins/projectexplorer/projectmodels.cpp | 82 |
1 files changed, 34 insertions, 48 deletions
diff --git a/src/plugins/projectexplorer/projectmodels.cpp b/src/plugins/projectexplorer/projectmodels.cpp index 1a362da0c5..53be442b19 100644 --- a/src/plugins/projectexplorer/projectmodels.cpp +++ b/src/plugins/projectexplorer/projectmodels.cpp @@ -71,7 +71,7 @@ static bool sortWrapperNodes(const WrapperNode *w1, const WrapperNode *w2) } FlatModel::FlatModel(QObject *parent) - : TreeModel<WrapperNode, WrapperNode>(new WrapperNode(SessionManager::sessionNode()), parent) + : TreeModel<WrapperNode, WrapperNode>(new WrapperNode(nullptr), parent) { ProjectTree *tree = ProjectTree::instance(); connect(tree, &ProjectTree::subtreeChanged, this, &FlatModel::update); @@ -93,17 +93,7 @@ QVariant FlatModel::data(const QModelIndex &index, int role) const FolderNode *folderNode = node->asFolderNode(); switch (role) { case Qt::DisplayRole: { - QString name = node->displayName(); - if (node->nodeType() == NodeType::Project - && node->parentFolderNode() - && node->parentFolderNode()->nodeType() == NodeType::Session) { - const QString vcsTopic = static_cast<ProjectNode *>(node)->vcsTopic(); - - if (!vcsTopic.isEmpty()) - name += QLatin1String(" [") + vcsTopic + QLatin1Char(']'); - } - - result = name; + result = node->displayName(); break; } case Qt::EditRole: { @@ -124,7 +114,7 @@ QVariant FlatModel::data(const QModelIndex &index, int role) const case Qt::FontRole: { QFont font; if (Project *project = SessionManager::startupProject()) { - if (node == SessionManager::nodeForProject(project)) + if (node == project->containerNode()) font.setBold(true); } result = font; @@ -187,23 +177,44 @@ void FlatModel::update() void FlatModel::rebuildModel() { + QList<Project *> projects = SessionManager::projects(); + + Utils::sort(projects, [](Project *p1, Project *p2) { + const int displayNameResult = caseFriendlyCompare(p1->displayName(), p2->displayName()); + if (displayNameResult != 0) + return displayNameResult < 0; + return p1 < p2; // sort by pointer value + }); + QSet<Node *> seen; rootItem()->removeChildren(); - for (Node *node : SessionManager::sessionNode()->nodes()) { - if (ProjectNode *projectNode = node->asProjectNode()) { - if (!seen.contains(projectNode)) - addProjectNode(rootItem(), projectNode, &seen); + for (Project *project : projects) { + WrapperNode *container = new WrapperNode(project->containerNode()); + + ProjectNode *projectNode = project->rootProjectNode(); + if (projectNode) { + addFolderNode(container, projectNode, &seen); + } else { + FileNode *projectFileNode = new FileNode(project->projectFilePath(), FileType::Project, false); + seen.insert(projectFileNode); + container->appendChild(new WrapperNode(projectFileNode)); } + + container->sortChildren(&sortWrapperNodes); + rootItem()->appendChild(container); } - rootItem()->sortChildren(&sortWrapperNodes); forAllItems([this](WrapperNode *node) { - const QString path = node->m_node->filePath().toString(); - const QString displayName = node->m_node->displayName(); - ExpandData ed(path, displayName); - if (m_toExpand.contains(ed)) + if (node->m_node) { + const QString path = node->m_node->filePath().toString(); + const QString displayName = node->m_node->displayName(); + ExpandData ed(path, displayName); + if (m_toExpand.contains(ed)) + emit requestExpansion(node->index()); + } else { emit requestExpansion(node->index()); + } }); } @@ -227,7 +238,7 @@ ExpandData FlatModel::expandDataForNode(const Node *node) const void FlatModel::handleProjectAdded(Project *project) { - Node *node = SessionManager::nodeForProject(project); + Node *node = project->rootProjectNode(); m_toExpand.insert(expandDataForNode(node)); if (WrapperNode *wrapper = wrapperForNode(node)) { wrapper->forFirstLevelChildren([this](WrapperNode *child) { @@ -251,21 +262,6 @@ void FlatModel::saveExpandData() SessionManager::setValue(QLatin1String("ProjectTree.ExpandData"), data); } -void FlatModel::addProjectNode(WrapperNode *parent, ProjectNode *projectNode, QSet<Node *> *seen) -{ - seen->insert(projectNode); - auto node = new WrapperNode(projectNode); - parent->appendChild(node); - addFolderNode(node, projectNode, seen); - for (Node *subNode : projectNode->nodes()) { - if (ProjectNode *subProjectNode = subNode->asProjectNode()) { - if (!seen->contains(subProjectNode)) - addProjectNode(node, subProjectNode, seen); - } - } - node->sortChildren(&sortWrapperNodes); -} - void FlatModel::addFolderNode(WrapperNode *parent, FolderNode *folderNode, QSet<Node *> *seen) { const QList<FolderNode *> subFolderNodes = folderNode->folderNodes(); @@ -374,16 +370,6 @@ const QLoggingCategory &FlatModel::logger() return logger; } -bool isSorted(const QList<Node *> &nodes) -{ - int size = nodes.size(); - for (int i = 0; i < size -1; ++i) { - if (!sortNodes(nodes.at(i), nodes.at(i+1))) - return false; - } - return true; -} - namespace Internal { int caseFriendlyCompare(const QString &a, const QString &b) |