summaryrefslogtreecommitdiff
path: root/src/plugins/projectexplorer/projectnodes.cpp
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@qt.io>2017-03-09 14:41:01 +0100
committerTobias Hunger <tobias.hunger@qt.io>2017-03-10 15:17:25 +0000
commit5a5a464dfa2cadcd8d769936a5ee8e05383b1975 (patch)
tree65b6d303879d3293078ce8931408ab3e53118176 /src/plugins/projectexplorer/projectnodes.cpp
parent4b539cf56070044e1c4539b4ef6d6e3f7e76d260 (diff)
downloadqt-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.cpp25
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)