Update EditView3D when selecting a 3D object in the navigator

Task-number: QDS-1124
Change-Id: I8d7bf73612b07592cd9beb85a5249895a400316b
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Mahmoud Badri
2019-10-25 15:25:21 +03:00
parent b6aa4e2370
commit afd22a75c1
3 changed files with 29 additions and 9 deletions

View File

@@ -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);
}
}

View File

@@ -267,17 +267,17 @@ void Qt5InformationNodeInstanceServer::setup3DEditView(const QList<ServerNodeIns
}
if (node) { // If we found a scene we create the edit view
QObject *view = createEditView3D(engine());
m_editView3D = createEditView3D(engine());
if (!view)
if (!m_editView3D)
return;
QQmlProperty sceneProperty(view, "scene", context());
node->setParent(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<qint32> 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

View File

@@ -65,6 +65,7 @@ private:
const PropertyName &propertyName,
const QVariant &variant);
QObject *m_editView3D = nullptr;
QSet<ServerNodeInstance> m_parentChangedSet;
QList<ServerNodeInstance> m_completedComponentList;
QList<TokenCommand> m_tokenList;