diff options
Diffstat (limited to 'src/plugins/qmldesigner/designercore/model/abstractview.cpp')
-rw-r--r-- | src/plugins/qmldesigner/designercore/model/abstractview.cpp | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp index d7d512334d..6a1a8d4897 100644 --- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp +++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp @@ -35,6 +35,7 @@ #ifndef QMLDESIGNER_TEST #include <qmldesignerplugin.h> #include <viewmanager.h> +#include <nodeabstractproperty.h> #endif #include <coreplugin/helpmanager.h> @@ -397,7 +398,7 @@ QList<ModelNode> AbstractView::toModelNodeList(const QList<Internal::InternalNod QList<ModelNode> toModelNodeList(const QList<Internal::InternalNode::Pointer> &nodeList, AbstractView *view) { QList<ModelNode> newNodeList; - foreach (const Internal::InternalNode::Pointer &node, nodeList) + for (const Internal::InternalNode::Pointer &node : nodeList) newNodeList.append(ModelNode(node, view->model(), view)); return newNodeList; @@ -406,7 +407,7 @@ QList<ModelNode> toModelNodeList(const QList<Internal::InternalNode::Pointer> &n QList<Internal::InternalNode::Pointer> toInternalNodeList(const QList<ModelNode> &nodeList) { QList<Internal::InternalNode::Pointer> newNodeList; - foreach (const ModelNode &node, nodeList) + for (const ModelNode &node : nodeList) newNodeList.append(node.internalNode()); return newNodeList; @@ -414,15 +415,26 @@ QList<Internal::InternalNode::Pointer> toInternalNodeList(const QList<ModelNode> /*! Sets the list of nodes to the actual selected nodes specified by - \a selectedNodeList. + \a selectedNodeList if the node or its ancestors are not locked. */ void AbstractView::setSelectedModelNodes(const QList<ModelNode> &selectedNodeList) { - model()->d->setSelectedNodes(toInternalNodeList(selectedNodeList)); + QList<ModelNode> unlockedNodes; + + for (const auto &modelNode : selectedNodeList) { + if (!ModelNode::isThisOrAncestorLocked(modelNode)) + unlockedNodes.push_back(modelNode); + } + + model()->d->setSelectedNodes(toInternalNodeList(unlockedNodes)); } void AbstractView::setSelectedModelNode(const ModelNode &modelNode) { + if (ModelNode::isThisOrAncestorLocked(modelNode)) { + clearSelectedModelNodes(); + return; + } setSelectedModelNodes({modelNode}); } |