From 98d7b5b6e5b8d25ad0e869dbeb97f6d004497537 Mon Sep 17 00:00:00 2001 From: Mahmoud Badri Date: Fri, 23 Oct 2020 22:12:52 +0300 Subject: [PATCH] QmlDesigner: Optimize deleting nodes - remove unnecessary call to directSubModelNodes() - replace foreach with for (avoid unnecessary copies) Change-Id: I42721a4c4e69f320664af8364f8baa0df0d11459 Reviewed-by: Miikka Heikkinen Reviewed-by: Thomas Hartmann --- .../designercore/model/modelnode.cpp | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/plugins/qmldesigner/designercore/model/modelnode.cpp b/src/plugins/qmldesigner/designercore/model/modelnode.cpp index 688dae2d074..d00294b89e0 100644 --- a/src/plugins/qmldesigner/designercore/model/modelnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/modelnode.cpp @@ -693,35 +693,33 @@ void ModelNode::removeProperty(const PropertyName &name) const model()->d->removeProperty(internalNode()->property(name)); } - /*! \brief removes this node from the node tree */ - -static QList descendantNodes(const ModelNode &parent) +static QList descendantNodes(const ModelNode &node) { - QList descendants(parent.directSubModelNodes()); - foreach (const ModelNode &child, parent.directSubModelNodes()) { + const QList children = node.directSubModelNodes(); + QList descendants = children; + for (const ModelNode &child : children) descendants += descendantNodes(child); - } + return descendants; } static void removeModelNodeFromSelection(const ModelNode &node) { - { // remove nodes from the active selection: - QList selectedList = node.view()->selectedModelNodes(); + // remove nodes from the active selection + QList selectedList = node.view()->selectedModelNodes(); - foreach (const ModelNode &childModelNode, descendantNodes(node)) - selectedList.removeAll(childModelNode); - selectedList.removeAll(node); + const QList descendants = descendantNodes(node); + for (const ModelNode &descendantNode : descendants) + selectedList.removeAll(descendantNode); - node.view()->setSelectedModelNodes(selectedList); - } + selectedList.removeAll(node); + + node.view()->setSelectedModelNodes(selectedList); } - /*! \brief complete removes this ModelNode from the Model - */ void ModelNode::destroy() {