forked from qt-creator/qt-creator
ProjectExplorer: Make FolderNode::replaceSubtree take a unique_ptr
Change-Id: I8e853c00ec24838bdca342e3f1a1b1213f32ef93 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
This commit is contained in:
@@ -604,20 +604,19 @@ bool FolderNode::isAncesterOf(Node *n)
|
|||||||
return p == this;
|
return p == this;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FolderNode::replaceSubtree(Node *oldNode, Node *newNode)
|
bool FolderNode::replaceSubtree(Node *oldNode, std::unique_ptr<Node> &&newNode)
|
||||||
{
|
{
|
||||||
std::unique_ptr<Node> nn(newNode);
|
|
||||||
if (!oldNode) {
|
if (!oldNode) {
|
||||||
addNode(nn.release()); // Happens e.g. when a project is registered
|
addNode(std::move(newNode)); // Happens e.g. when a project is registered
|
||||||
} else {
|
} else {
|
||||||
auto it = std::find_if(m_nodes.begin(), m_nodes.end(),
|
auto it = std::find_if(m_nodes.begin(), m_nodes.end(),
|
||||||
[oldNode](const std::unique_ptr<Node> &n) {
|
[oldNode](const std::unique_ptr<Node> &n) {
|
||||||
return oldNode == n.get();
|
return oldNode == n.get();
|
||||||
});
|
});
|
||||||
QTC_ASSERT(it != m_nodes.end(), return false);
|
QTC_ASSERT(it != m_nodes.end(), return false);
|
||||||
if (nn) {
|
if (newNode) {
|
||||||
nn->setParentFolderNode(this);
|
newNode->setParentFolderNode(this);
|
||||||
*it = std::move(nn);
|
*it = std::move(newNode);
|
||||||
} else {
|
} else {
|
||||||
takeNode(oldNode); // Happens e.g. when project is shutting down
|
takeNode(oldNode); // Happens e.g. when project is shutting down
|
||||||
}
|
}
|
||||||
|
@@ -237,7 +237,7 @@ public:
|
|||||||
|
|
||||||
// takes ownership of newNode.
|
// takes ownership of newNode.
|
||||||
// Will delete newNode if oldNode is not a child of this node.
|
// Will delete newNode if oldNode is not a child of this node.
|
||||||
bool replaceSubtree(Node *oldNode, Node *newNode);
|
bool replaceSubtree(Node *oldNode, std::unique_ptr<Node> &&newNode);
|
||||||
|
|
||||||
void setDisplayName(const QString &name);
|
void setDisplayName(const QString &name);
|
||||||
void setIcon(const QIcon &icon);
|
void setIcon(const QIcon &icon);
|
||||||
|
@@ -221,7 +221,7 @@ void ResourceEditorPlugin::extensionsInitialized()
|
|||||||
FolderNode *const pn = file->parentFolderNode();
|
FolderNode *const pn = file->parentFolderNode();
|
||||||
QTC_ASSERT(pn, continue);
|
QTC_ASSERT(pn, continue);
|
||||||
const Utils::FileName path = file->filePath();
|
const Utils::FileName path = file->filePath();
|
||||||
pn->replaceSubtree(file, new ResourceTopLevelNode(path, file->isGenerated(),
|
pn->replaceSubtree(file, std::make_unique<ResourceTopLevelNode>(path, file->isGenerated(),
|
||||||
QString(), pn));
|
QString(), pn));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@@ -72,8 +72,8 @@ public:
|
|||||||
return true;
|
return true;
|
||||||
FolderNode *parent = m_node->parentFolderNode();
|
FolderNode *parent = m_node->parentFolderNode();
|
||||||
QTC_ASSERT(parent, return false);
|
QTC_ASSERT(parent, return false);
|
||||||
auto newNode = new ResourceTopLevelNode(m_node->filePath(), false, m_node->contents(), parent);
|
parent->replaceSubtree(m_node, std::make_unique<ResourceTopLevelNode>(
|
||||||
m_node->parentFolderNode()->replaceSubtree(m_node, newNode);
|
m_node->filePath(), false, m_node->contents(), parent));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user