ProjectNodes: Introduce FolderNode::replaceSubtree

Introduce FolderNode::replaceSubtree incl. necessary signalling

Change-Id: I57762cd24a2986d3a04d0de6b794c1f6c772dbe6
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Tobias Hunger
2017-03-09 14:41:01 +01:00
parent 4b539cf560
commit 5a5a464dfa
6 changed files with 40 additions and 8 deletions

View File

@@ -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)