diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml index 59d3c662081..a0a9c0e5998 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml @@ -47,6 +47,10 @@ Window { signal objectClicked(var object) signal commitObjectPosition(var object) + function selectObject(object) { + selectedNode = object; + } + Node { id: overlayScene @@ -94,7 +98,7 @@ Window { var pickResult = editView.pick(eventPoint.scenePosition.x, eventPoint.scenePosition.y); viewWindow.objectClicked(pickResult.objectHit); - selectedNode = pickResult.objectHit; // TODO selection needs to come from studio + selectObject(pickResult.objectHit); } } diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index 8dc4ab79099..b1fa8be60d5 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -267,17 +267,17 @@ void Qt5InformationNodeInstanceServer::setup3DEditView(const QListsetParent(view); + QQmlProperty sceneProperty(m_editView3D, "scene", context()); + node->setParent(m_editView3D); sceneProperty.write(objectToVariant(node)); QQmlProperty parentProperty(node, "parent", context()); - parentProperty.write(objectToVariant(view)); - QQmlProperty completeSceneProperty(view, "showLight", context()); + parentProperty.write(objectToVariant(m_editView3D)); + QQmlProperty completeSceneProperty(m_editView3D, "showLight", context()); completeSceneProperty.write(showCustomLight); } } @@ -452,8 +452,23 @@ void QmlDesigner::Qt5InformationNodeInstanceServer::removeSharedMemory(const Qml void Qt5InformationNodeInstanceServer::changeSelection(const ChangeSelectionCommand &command) { - // keep track of selection. - qDebug() << Q_FUNC_INFO << command; + if (!m_editView3D) + return; + + const QVector instanceIds = command.instanceIds(); + for (qint32 id : instanceIds) { + if (hasInstanceForId(id)) { + ServerNodeInstance instance = instanceForId(id); + QObject *object = nullptr; + if (instance.isSubclassOf("QQuick3DModel") || instance.isSubclassOf("QQuick3DCamera") + || instance.isSubclassOf("QQuick3DAbstractLight")) { + object = instance.internalObject(); + } + QMetaObject::invokeMethod(m_editView3D, "selectObject", Q_ARG(QVariant, + objectToVariant(object))); + return; // TODO: support multi-selection + } + } } } // namespace QmlDesigner diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h index 7a9334acc07..c574a6ed11d 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h @@ -65,6 +65,7 @@ private: const PropertyName &propertyName, const QVariant &variant); + QObject *m_editView3D = nullptr; QSet m_parentChangedSet; QList m_completedComponentList; QList m_tokenList;