diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2020-03-13 16:50:29 +0200 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2020-03-16 09:01:54 +0000 |
commit | 010bbb8ae036504f68b7d4403000a709e0eaa7b5 (patch) | |
tree | c09881404c63f3b4e997f9bf6980f4d937398636 | |
parent | ba195be0a0cd6bfa5ddb16db692f6d12c46538f6 (diff) |
QmlDesigner: Show selection box for component scene roots in edit 3D
Components typically have Node as their root item, so having a
component as a scene root detects as having a plain Node as scene
root, which normally doesn't get a selection box.
Change-Id: I66ae1dc3ade4b6f822d768cf71e8feceb0ffa06d
Fixes: QDS-1636
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
-rw-r--r-- | share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index 91e0ec18d9..b76a54bb63 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -1043,7 +1043,25 @@ void Qt5InformationNodeInstanceServer::changeSelection(const ChangeSelectionComm QObject *object = nullptr; if (firstSceneRoot && sceneRoot == firstSceneRoot && instance.isSubclassOf("QQuick3DNode")) object = instance.internalObject(); - if (object && (firstSceneRoot != object || instance.isSubclassOf("QQuick3DModel"))) + + auto instanceIsModelOrComponent = [&]() -> bool { + bool retval = instance.isSubclassOf("QQuick3DModel"); +#ifdef QUICK3D_MODULE + if (!retval) { + // Node is a component if it has node children that have no instances + auto node = qobject_cast<QQuick3DNode *>(object); + if (node) { + const auto childItems = node->childItems(); + for (const auto &childItem : childItems) { + if (qobject_cast<QQuick3DNode *>(childItem) && !hasInstanceForObject(childItem)) + return true; + } + } + } +#endif + return retval; + }; + if (object && (firstSceneRoot != object || instanceIsModelOrComponent())) selectedObjs << objectToVariant(object); } } |