summaryrefslogtreecommitdiff
path: root/src/plugins/projectexplorer/projectmodels.cpp
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2017-03-17 12:26:00 +0100
committerhjk <hjk@qt.io>2017-03-21 12:48:41 +0000
commitebae6426f8246f21ac6354147d67efcde782c624 (patch)
treefb9e9488dc3e8896bc9856edfe152427d20c1ee0 /src/plugins/projectexplorer/projectmodels.cpp
parent312784a930078992c290b330a7e41ea219a6e3b1 (diff)
downloadqt-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.cpp82
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)