summaryrefslogtreecommitdiff
path: root/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp')
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp59
1 files changed, 58 insertions, 1 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
index 1f3a662d3e..2b2ec60da8 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
@@ -63,6 +63,7 @@
#include "inputeventcommand.h"
#include "view3dactioncommand.h"
#include "requestmodelnodepreviewimagecommand.h"
+#include "changeauxiliarycommand.h"
#include "dummycontextobject.h"
#include "../editor3d/generalhelper.h"
@@ -288,6 +289,57 @@ void Qt5InformationNodeInstanceServer::resolveImportSupport()
#endif
}
+void Qt5InformationNodeInstanceServer::updateRotationBlocks(const QVector<PropertyValueContainer> &valueChanges)
+{
+#ifdef QUICK3D_MODULE
+ auto helper = qobject_cast<QmlDesigner::Internal::GeneralHelper *>(m_3dHelper);
+ if (helper) {
+ QSet<QQuick3DNode *> blockedNodes;
+ QSet<QQuick3DNode *> unblockedNodes;
+ const PropertyName propName = "rotBlocked@internal";
+ for (const auto &container : valueChanges) {
+ if (container.name() == propName) {
+ ServerNodeInstance instance = instanceForId(container.instanceId());
+ if (instance.isValid()) {
+ auto node = qobject_cast<QQuick3DNode *>(instance.internalObject());
+ if (node) {
+ if (container.value().toBool())
+ blockedNodes.insert(node);
+ else
+ unblockedNodes.insert(node);
+ }
+ }
+ }
+ }
+ helper->addRotationBlocks(blockedNodes);
+ helper->removeRotationBlocks(unblockedNodes);
+ }
+#else
+ Q_UNUSED(valueChanges)
+#endif
+}
+
+void Qt5InformationNodeInstanceServer::removeRotationBlocks(const QVector<qint32> &instanceIds)
+{
+#ifdef QUICK3D_MODULE
+ auto helper = qobject_cast<QmlDesigner::Internal::GeneralHelper *>(m_3dHelper);
+ if (helper) {
+ QSet<QQuick3DNode *> unblockedNodes;
+ for (const auto &id : instanceIds) {
+ ServerNodeInstance instance = instanceForId(id);
+ if (instance.isValid()) {
+ auto node = qobject_cast<QQuick3DNode *>(instance.internalObject());
+ if (node)
+ unblockedNodes.insert(node);
+ }
+ }
+ helper->removeRotationBlocks(unblockedNodes);
+ }
+#else
+ Q_UNUSED(instanceIds)
+#endif
+}
+
void Qt5InformationNodeInstanceServer::createEditView3D()
{
#ifdef QUICK3D_MODULE
@@ -1492,8 +1544,10 @@ void Qt5InformationNodeInstanceServer::createScene(const CreateSceneCommand &com
sendChildrenChangedCommand(instanceList);
nodeInstanceClient()->componentCompleted(createComponentCompletedCommand(instanceList));
- if (isQuick3DMode())
+ if (isQuick3DMode()) {
setup3DEditView(instanceList, command.edit3dToolStates);
+ updateRotationBlocks(command.auxiliaryChanges);
+ }
QObject::connect(&m_renderModelNodeImageViewTimer, &QTimer::timeout,
this, &Qt5InformationNodeInstanceServer::doRenderModelNodeImageView);
@@ -1656,6 +1710,8 @@ void Qt5InformationNodeInstanceServer::removeInstances(const RemoveInstancesComm
{
int nodeCount = m_3DSceneMap.size();
+ removeRotationBlocks(command.instanceIds());
+
Qt5NodeInstanceServer::removeInstances(command);
if (nodeCount != m_3DSceneMap.size()) {
@@ -1741,6 +1797,7 @@ void Qt5InformationNodeInstanceServer::requestModelNodePreviewImage(const Reques
void Qt5InformationNodeInstanceServer::changeAuxiliaryValues(const ChangeAuxiliaryCommand &command)
{
+ updateRotationBlocks(command.auxiliaryChanges);
Qt5NodeInstanceServer::changeAuxiliaryValues(command);
render3DEditView();
}