diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2019-10-23 16:02:56 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2019-10-25 07:51:09 +0000 |
commit | 1fe204565a681d8882475327647f127f70509523 (patch) | |
tree | 3154fbd3cace708e068c2d48d3f6febf9523fa81 /share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp | |
parent | 44ddca544caa61f290d502fdf62f5bdbaf2b4f34 (diff) | |
download | qt-creator-1fe204565a681d8882475327647f127f70509523.tar.gz |
QmlDesigner: Add support for move gadget to 3D edit view
This proof-of-concept move gadget is based on the move gadget
in studio example of QtQuick3D.
Change-Id: I1b596443a3e99c16ed214bc464c5367a0f7aa503
Fixes: QDS-1125
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Reviewed-by: Pasi Keränen <pasi.keranen@qt.io>
Diffstat (limited to 'share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp')
-rw-r--r-- | share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index 685136cb2d..0cb95c98d9 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -59,6 +59,7 @@ #include "dummycontextobject.h" #include "../editor3d/cameracontrolhelper.h" +#include "../editor3d/mousearea3d.h" #include <designersupportdelegate.h> @@ -77,9 +78,13 @@ static QVariant objectToVariant(QObject *object) QObject *Qt5InformationNodeInstanceServer::createEditView3D(QQmlEngine *engine) { - QmlDesigner::Internal::CameraControlHelper *helper = new QmlDesigner::Internal::CameraControlHelper(); + auto helper = new QmlDesigner::Internal::CameraControlHelper(); engine->rootContext()->setContextProperty("designStudioNativeCameraControlHelper", helper); +#ifdef QUICK3D_MODULE + qmlRegisterType<QmlDesigner::Internal::MouseArea3D>("MouseArea3D", 1, 0, "MouseArea3D"); +#endif + QQmlComponent component(engine, QUrl("qrc:/qtquickplugin/mockfiles/EditView3D.qml")); QWindow *window = qobject_cast<QWindow *>(component.create()); @@ -90,6 +95,8 @@ QObject *Qt5InformationNodeInstanceServer::createEditView3D(QQmlEngine *engine) } QObject::connect(window, SIGNAL(objectClicked(QVariant)), this, SLOT(objectClicked(QVariant))); + QObject::connect(window, SIGNAL(commitObjectPosition(QVariant)), + this, SLOT(handleObjectPositionCommit(QVariant))); //For macOS we have to use the 4.1 core profile QSurfaceFormat surfaceFormat = window->requestedFormat(); @@ -101,10 +108,29 @@ QObject *Qt5InformationNodeInstanceServer::createEditView3D(QQmlEngine *engine) return window; } -// an object is clicked in the 3D edit view +// an object is clicked in the 3D edit view. Null object indicates selection clearing. void Qt5InformationNodeInstanceServer::objectClicked(const QVariant &object) { - selectInstance(instanceForObject(object.value<QObject *>())); + auto obj = object.value<QObject *>(); + ServerNodeInstance instance; + if (obj) + instance = instanceForObject(obj); + selectInstance(instance); +} + +void Qt5InformationNodeInstanceServer::handleObjectPositionCommit(const QVariant &object) +{ + QObject *obj = object.value<QObject *>(); + if (obj) { + ServerNodeInstance instance = instanceForObject(obj); + QVector<InstancePropertyValueTriple> modifiedpropertyList; + InstancePropertyValueTriple propTriple; + propTriple.instance = instance; + propTriple.propertyName = "position"; + propTriple.propertyValue = obj->property(propTriple.propertyName.constData()); + modifiedpropertyList.append(propTriple); + nodeInstanceClient()->valuesModified(createValuesModifiedCommand(modifiedpropertyList)); + } } Qt5InformationNodeInstanceServer::Qt5InformationNodeInstanceServer(NodeInstanceClientInterface *nodeInstanceClient) : |