aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2020-03-13 16:50:29 +0200
committerMiikka Heikkinen <miikka.heikkinen@qt.io>2020-03-16 09:01:54 +0000
commit010bbb8ae036504f68b7d4403000a709e0eaa7b5 (patch)
treec09881404c63f3b4e997f9bf6980f4d937398636
parentba195be0a0cd6bfa5ddb16db692f6d12c46538f6 (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.cpp20
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);
}
}