summaryrefslogtreecommitdiff
path: root/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2019-10-23 16:02:56 +0300
committerMiikka Heikkinen <miikka.heikkinen@qt.io>2019-10-25 07:51:09 +0000
commit1fe204565a681d8882475327647f127f70509523 (patch)
tree3154fbd3cace708e068c2d48d3f6febf9523fa81 /share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
parent44ddca544caa61f290d502fdf62f5bdbaf2b4f34 (diff)
downloadqt-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.cpp32
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) :