diff options
Diffstat (limited to 'share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp')
-rw-r--r-- | share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp | 59 |
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(); } |