QmlDesigner: Show selection and gizmo for scene root light/camera

Change-Id: Ib650a5e331cf2936ef20a47abec5086bb08f06d2
Fixes: QDS-1857
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
Miikka Heikkinen
2020-03-30 15:00:14 +03:00
parent df1152dd95
commit 9a2eedf196

View File

@@ -1045,24 +1045,26 @@ void Qt5InformationNodeInstanceServer::changeSelection(const ChangeSelectionComm
if (firstSceneRoot && sceneRoot == firstSceneRoot && instance.isSubclassOf("QQuick3DNode")) if (firstSceneRoot && sceneRoot == firstSceneRoot && instance.isSubclassOf("QQuick3DNode"))
object = instance.internalObject(); object = instance.internalObject();
auto instanceIsModelOrComponent = [&]() -> bool { auto isSelectableAsRoot = [&]() -> bool {
bool retval = instance.isSubclassOf("QQuick3DModel");
#ifdef QUICK3D_MODULE #ifdef QUICK3D_MODULE
if (!retval) { if (qobject_cast<QQuick3DModel *>(object)
// Node is a component if it has node children that have no instances || qobject_cast<QQuick3DCamera *>(object)
auto node = qobject_cast<QQuick3DNode *>(object); || qobject_cast<QQuick3DAbstractLight *>(object)) {
if (node) { return true;
const auto childItems = node->childItems(); }
for (const auto &childItem : childItems) { // Node is a component if it has node children that have no instances
if (qobject_cast<QQuick3DNode *>(childItem) && !hasInstanceForObject(childItem)) auto node = qobject_cast<QQuick3DNode *>(object);
return true; if (node) {
} const auto childItems = node->childItems();
for (const auto &childItem : childItems) {
if (qobject_cast<QQuick3DNode *>(childItem) && !hasInstanceForObject(childItem))
return true;
} }
} }
#endif #endif
return retval; return false;
}; };
if (object && (firstSceneRoot != object || instanceIsModelOrComponent())) if (object && (firstSceneRoot != object || isSelectableAsRoot()))
selectedObjs << objectToVariant(object); selectedObjs << objectToVariant(object);
} }
} }