diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2017-03-09 14:41:01 +0100 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2017-03-10 15:17:25 +0000 |
commit | 5a5a464dfa2cadcd8d769936a5ee8e05383b1975 (patch) | |
tree | 65b6d303879d3293078ce8931408ab3e53118176 /src/plugins/projectexplorer/projectnodes.cpp | |
parent | 4b539cf56070044e1c4539b4ef6d6e3f7e76d260 (diff) | |
download | qt-creator-5a5a464dfa2cadcd8d769936a5ee8e05383b1975.tar.gz |
ProjectNodes: Introduce FolderNode::replaceSubtree
Introduce FolderNode::replaceSubtree incl. necessary signalling
Change-Id: I57762cd24a2986d3a04d0de6b794c1f6c772dbe6
Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'src/plugins/projectexplorer/projectnodes.cpp')
-rw-r--r-- | src/plugins/projectexplorer/projectnodes.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/plugins/projectexplorer/projectnodes.cpp b/src/plugins/projectexplorer/projectnodes.cpp index 16282da09e..72dc63a08e 100644 --- a/src/plugins/projectexplorer/projectnodes.cpp +++ b/src/plugins/projectexplorer/projectnodes.cpp @@ -43,6 +43,8 @@ #include <QIcon> #include <QStyle> +#include <memory> + namespace ProjectExplorer { static FolderNode *folderNode(const FolderNode *folder, const Utils::FileName &directory) @@ -494,6 +496,29 @@ void FolderNode::compress() } } +bool FolderNode::replaceSubtree(Node *oldNode, Node *newNode) +{ + std::unique_ptr<Node> nn(newNode); + + if (!oldNode) { + addNode(nn.release()); // Happens e.g. when a project is registered + } else { + auto it = std::find_if(m_nodes.begin(), m_nodes.end(), + [oldNode](const Node *n) { return oldNode == n; }); + QTC_ASSERT(it != m_nodes.end(), return false); + if (nn) { + nn->setParentFolderNode(this); + *it = nn.release(); + } else { + removeNode(oldNode); // Happens e.g. when project is shutting down + } + delete oldNode; + } + + ProjectTree::emitSubtreeChanged(this); + return true; +} + void FolderNode::setDisplayName(const QString &name) { if (m_displayName == name) |