forked from qt-creator/qt-creator
ProjectNodes: Introduce FolderNode::replaceSubtree
Introduce FolderNode::replaceSubtree incl. necessary signalling Change-Id: I57762cd24a2986d3a04d0de6b794c1f6c772dbe6 Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user