forked from qt-creator/qt-creator
QmlDesigner: Simplify hidden and locked handling for gizmos
There is no need to have an event filter to listen to changes to _edit3dLocked and _edit3dHidden properties, as they are only changed in one place. We can simply emit the change notification there. Fixes: QDS-6403 Change-Id: I8136f38fd8e435e3a4dbd69d70169496e1675dfa Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Samuel Ghinet <samuel.ghinet@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This commit is contained in:
@@ -385,14 +385,12 @@ Item {
|
|||||||
lightIconGizmos[slotFound].targetNode = obj;
|
lightIconGizmos[slotFound].targetNode = obj;
|
||||||
lightIconGizmos[slotFound].locked = _generalHelper.isLocked(obj);
|
lightIconGizmos[slotFound].locked = _generalHelper.isLocked(obj);
|
||||||
lightIconGizmos[slotFound].hidden = _generalHelper.isHidden(obj);
|
lightIconGizmos[slotFound].hidden = _generalHelper.isHidden(obj);
|
||||||
_generalHelper.registerGizmoTarget(obj);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// No free gizmos available, create a new one
|
// No free gizmos available, create a new one
|
||||||
var gizmoComponent = Qt.createComponent("LightIconGizmo.qml");
|
var gizmoComponent = Qt.createComponent("LightIconGizmo.qml");
|
||||||
if (gizmoComponent.status === Component.Ready) {
|
if (gizmoComponent.status === Component.Ready) {
|
||||||
_generalHelper.registerGizmoTarget(obj);
|
|
||||||
var gizmo = gizmoComponent.createObject(overlayView,
|
var gizmo = gizmoComponent.createObject(overlayView,
|
||||||
{"view3D": overlayView, "targetNode": obj,
|
{"view3D": overlayView, "targetNode": obj,
|
||||||
"selectedNodes": selectedNodes, "scene": scene,
|
"selectedNodes": selectedNodes, "scene": scene,
|
||||||
@@ -426,7 +424,6 @@ Item {
|
|||||||
cameraGizmos[slotFound].targetNode = obj;
|
cameraGizmos[slotFound].targetNode = obj;
|
||||||
cameraGizmos[slotFound].locked = _generalHelper.isLocked(obj);
|
cameraGizmos[slotFound].locked = _generalHelper.isLocked(obj);
|
||||||
cameraGizmos[slotFound].hidden = _generalHelper.isHidden(obj);
|
cameraGizmos[slotFound].hidden = _generalHelper.isHidden(obj);
|
||||||
_generalHelper.registerGizmoTarget(obj);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -434,7 +431,6 @@ Item {
|
|||||||
var gizmoComponent = Qt.createComponent("CameraGizmo.qml");
|
var gizmoComponent = Qt.createComponent("CameraGizmo.qml");
|
||||||
var frustumComponent = Qt.createComponent("CameraFrustum.qml");
|
var frustumComponent = Qt.createComponent("CameraFrustum.qml");
|
||||||
if (gizmoComponent.status === Component.Ready && frustumComponent.status === Component.Ready) {
|
if (gizmoComponent.status === Component.Ready && frustumComponent.status === Component.Ready) {
|
||||||
_generalHelper.registerGizmoTarget(obj);
|
|
||||||
var geometryName = _generalHelper.generateUniqueName("CameraGeometry");
|
var geometryName = _generalHelper.generateUniqueName("CameraGeometry");
|
||||||
var frustum = frustumComponent.createObject(
|
var frustum = frustumComponent.createObject(
|
||||||
overlayScene,
|
overlayScene,
|
||||||
@@ -463,7 +459,6 @@ Item {
|
|||||||
if (lightIconGizmos[i].targetNode === obj) {
|
if (lightIconGizmos[i].targetNode === obj) {
|
||||||
lightIconGizmos[i].scene = null;
|
lightIconGizmos[i].scene = null;
|
||||||
lightIconGizmos[i].targetNode = null;
|
lightIconGizmos[i].targetNode = null;
|
||||||
_generalHelper.unregisterGizmoTarget(obj);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -475,7 +470,6 @@ Item {
|
|||||||
if (cameraGizmos[i].targetNode === obj) {
|
if (cameraGizmos[i].targetNode === obj) {
|
||||||
cameraGizmos[i].scene = null;
|
cameraGizmos[i].scene = null;
|
||||||
cameraGizmos[i].targetNode = null;
|
cameraGizmos[i].targetNode = null;
|
||||||
_generalHelper.unregisterGizmoTarget(obj);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -385,14 +385,12 @@ Item {
|
|||||||
lightIconGizmos[slotFound].targetNode = obj;
|
lightIconGizmos[slotFound].targetNode = obj;
|
||||||
lightIconGizmos[slotFound].locked = _generalHelper.isLocked(obj);
|
lightIconGizmos[slotFound].locked = _generalHelper.isLocked(obj);
|
||||||
lightIconGizmos[slotFound].hidden = _generalHelper.isHidden(obj);
|
lightIconGizmos[slotFound].hidden = _generalHelper.isHidden(obj);
|
||||||
_generalHelper.registerGizmoTarget(obj);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// No free gizmos available, create a new one
|
// No free gizmos available, create a new one
|
||||||
var gizmoComponent = Qt.createComponent("LightIconGizmo.qml");
|
var gizmoComponent = Qt.createComponent("LightIconGizmo.qml");
|
||||||
if (gizmoComponent.status === Component.Ready) {
|
if (gizmoComponent.status === Component.Ready) {
|
||||||
_generalHelper.registerGizmoTarget(obj);
|
|
||||||
var gizmo = gizmoComponent.createObject(overlayView,
|
var gizmo = gizmoComponent.createObject(overlayView,
|
||||||
{"view3D": overlayView, "targetNode": obj,
|
{"view3D": overlayView, "targetNode": obj,
|
||||||
"selectedNodes": selectedNodes, "scene": scene,
|
"selectedNodes": selectedNodes, "scene": scene,
|
||||||
@@ -426,7 +424,6 @@ Item {
|
|||||||
cameraGizmos[slotFound].targetNode = obj;
|
cameraGizmos[slotFound].targetNode = obj;
|
||||||
cameraGizmos[slotFound].locked = _generalHelper.isLocked(obj);
|
cameraGizmos[slotFound].locked = _generalHelper.isLocked(obj);
|
||||||
cameraGizmos[slotFound].hidden = _generalHelper.isHidden(obj);
|
cameraGizmos[slotFound].hidden = _generalHelper.isHidden(obj);
|
||||||
_generalHelper.registerGizmoTarget(obj);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -434,7 +431,6 @@ Item {
|
|||||||
var gizmoComponent = Qt.createComponent("CameraGizmo.qml");
|
var gizmoComponent = Qt.createComponent("CameraGizmo.qml");
|
||||||
var frustumComponent = Qt.createComponent("CameraFrustum.qml");
|
var frustumComponent = Qt.createComponent("CameraFrustum.qml");
|
||||||
if (gizmoComponent.status === Component.Ready && frustumComponent.status === Component.Ready) {
|
if (gizmoComponent.status === Component.Ready && frustumComponent.status === Component.Ready) {
|
||||||
_generalHelper.registerGizmoTarget(obj);
|
|
||||||
var geometryName = _generalHelper.generateUniqueName("CameraGeometry");
|
var geometryName = _generalHelper.generateUniqueName("CameraGeometry");
|
||||||
var frustum = frustumComponent.createObject(
|
var frustum = frustumComponent.createObject(
|
||||||
overlayScene,
|
overlayScene,
|
||||||
@@ -475,14 +471,12 @@ Item {
|
|||||||
particleSystemIconGizmos[slotFound].targetNode = obj;
|
particleSystemIconGizmos[slotFound].targetNode = obj;
|
||||||
particleSystemIconGizmos[slotFound].locked = _generalHelper.isLocked(obj);
|
particleSystemIconGizmos[slotFound].locked = _generalHelper.isLocked(obj);
|
||||||
particleSystemIconGizmos[slotFound].hidden = _generalHelper.isHidden(obj);
|
particleSystemIconGizmos[slotFound].hidden = _generalHelper.isHidden(obj);
|
||||||
_generalHelper.registerGizmoTarget(obj);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// No free gizmos available, create a new one
|
// No free gizmos available, create a new one
|
||||||
var gizmoComponent = Qt.createComponent("ParticleSystemGizmo.qml");
|
var gizmoComponent = Qt.createComponent("ParticleSystemGizmo.qml");
|
||||||
if (gizmoComponent.status === Component.Ready) {
|
if (gizmoComponent.status === Component.Ready) {
|
||||||
_generalHelper.registerGizmoTarget(obj);
|
|
||||||
var gizmo = gizmoComponent.createObject(overlayView,
|
var gizmo = gizmoComponent.createObject(overlayView,
|
||||||
{"view3D": overlayView, "targetNode": obj,
|
{"view3D": overlayView, "targetNode": obj,
|
||||||
"selectedNodes": selectedNodes, "scene": scene,
|
"selectedNodes": selectedNodes, "scene": scene,
|
||||||
@@ -518,14 +512,12 @@ Item {
|
|||||||
particleEmitterGizmos[slotFound].targetNode = obj;
|
particleEmitterGizmos[slotFound].targetNode = obj;
|
||||||
particleEmitterGizmos[slotFound].hidden = _generalHelper.isHidden(obj);
|
particleEmitterGizmos[slotFound].hidden = _generalHelper.isHidden(obj);
|
||||||
particleEmitterGizmos[slotFound].systemHidden = _generalHelper.isHidden(obj.system);
|
particleEmitterGizmos[slotFound].systemHidden = _generalHelper.isHidden(obj.system);
|
||||||
_generalHelper.registerGizmoTarget(obj);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// No free gizmos available, create a new one
|
// No free gizmos available, create a new one
|
||||||
var gizmoComponent = Qt.createComponent("ParticleEmitterGizmo.qml");
|
var gizmoComponent = Qt.createComponent("ParticleEmitterGizmo.qml");
|
||||||
if (gizmoComponent.status === Component.Ready) {
|
if (gizmoComponent.status === Component.Ready) {
|
||||||
_generalHelper.registerGizmoTarget(obj);
|
|
||||||
var gizmo = gizmoComponent.createObject(
|
var gizmo = gizmoComponent.createObject(
|
||||||
overlayScene,
|
overlayScene,
|
||||||
{"targetNode": obj, "selectedNodes": selectedNodes,
|
{"targetNode": obj, "selectedNodes": selectedNodes,
|
||||||
@@ -548,7 +540,6 @@ Item {
|
|||||||
if (lightIconGizmos[i].targetNode === obj) {
|
if (lightIconGizmos[i].targetNode === obj) {
|
||||||
lightIconGizmos[i].scene = null;
|
lightIconGizmos[i].scene = null;
|
||||||
lightIconGizmos[i].targetNode = null;
|
lightIconGizmos[i].targetNode = null;
|
||||||
_generalHelper.unregisterGizmoTarget(obj);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -560,7 +551,6 @@ Item {
|
|||||||
if (cameraGizmos[i].targetNode === obj) {
|
if (cameraGizmos[i].targetNode === obj) {
|
||||||
cameraGizmos[i].scene = null;
|
cameraGizmos[i].scene = null;
|
||||||
cameraGizmos[i].targetNode = null;
|
cameraGizmos[i].targetNode = null;
|
||||||
_generalHelper.unregisterGizmoTarget(obj);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -572,7 +562,6 @@ Item {
|
|||||||
if (particleSystemIconGizmos[i].targetNode === obj) {
|
if (particleSystemIconGizmos[i].targetNode === obj) {
|
||||||
particleSystemIconGizmos[i].scene = null;
|
particleSystemIconGizmos[i].scene = null;
|
||||||
particleSystemIconGizmos[i].targetNode = null;
|
particleSystemIconGizmos[i].targetNode = null;
|
||||||
_generalHelper.unregisterGizmoTarget(obj);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -584,7 +573,6 @@ Item {
|
|||||||
if (particleEmitterGizmos[i].targetNode === obj) {
|
if (particleEmitterGizmos[i].targetNode === obj) {
|
||||||
particleEmitterGizmos[i].scene = null;
|
particleEmitterGizmos[i].scene = null;
|
||||||
particleEmitterGizmos[i].targetNode = null;
|
particleEmitterGizmos[i].targetNode = null;
|
||||||
_generalHelper.unregisterGizmoTarget(obj);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -410,22 +410,6 @@ QQuick3DNode *GeneralHelper::resolvePick(QQuick3DNode *pickNode)
|
|||||||
return pickNode;
|
return pickNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GeneralHelper::registerGizmoTarget(QQuick3DNode *node)
|
|
||||||
{
|
|
||||||
if (!m_gizmoTargets.contains(node)) {
|
|
||||||
m_gizmoTargets.insert(node);
|
|
||||||
node->installEventFilter(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void GeneralHelper::unregisterGizmoTarget(QQuick3DNode *node)
|
|
||||||
{
|
|
||||||
if (m_gizmoTargets.contains(node)) {
|
|
||||||
m_gizmoTargets.remove(node);
|
|
||||||
node->removeEventFilter(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool GeneralHelper::isLocked(QQuick3DNode *node) const
|
bool GeneralHelper::isLocked(QQuick3DNode *node) const
|
||||||
{
|
{
|
||||||
if (node) {
|
if (node) {
|
||||||
@@ -744,21 +728,6 @@ bool GeneralHelper::isRotationBlocked(QQuick3DNode *node) const
|
|||||||
return m_rotationBlockedNodes.contains(node);
|
return m_rotationBlockedNodes.contains(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GeneralHelper::eventFilter(QObject *obj, QEvent *event)
|
|
||||||
{
|
|
||||||
if (event->type() == QEvent::DynamicPropertyChange) {
|
|
||||||
auto node = qobject_cast<QQuick3DNode *>(obj);
|
|
||||||
if (m_gizmoTargets.contains(node)) {
|
|
||||||
auto de = static_cast<QDynamicPropertyChangeEvent *>(event);
|
|
||||||
if (de->propertyName() == "_edit3dLocked")
|
|
||||||
emit lockedStateChanged(node);
|
|
||||||
else if (de->propertyName() == "_edit3dHidden")
|
|
||||||
emit hiddenStateChanged(node);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return QObject::eventFilter(obj, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
void GeneralHelper::handlePendingToolStateUpdate()
|
void GeneralHelper::handlePendingToolStateUpdate()
|
||||||
{
|
{
|
||||||
m_toolStateUpdateTimer.stop();
|
m_toolStateUpdateTimer.stop();
|
||||||
|
@@ -84,8 +84,6 @@ public:
|
|||||||
Q_INVOKABLE QQuick3DPickResult pickViewAt(QQuick3DViewport *view, float posX, float posY);
|
Q_INVOKABLE QQuick3DPickResult pickViewAt(QQuick3DViewport *view, float posX, float posY);
|
||||||
Q_INVOKABLE QQuick3DNode *resolvePick(QQuick3DNode *pickNode);
|
Q_INVOKABLE QQuick3DNode *resolvePick(QQuick3DNode *pickNode);
|
||||||
|
|
||||||
Q_INVOKABLE void registerGizmoTarget(QQuick3DNode *node);
|
|
||||||
Q_INVOKABLE void unregisterGizmoTarget(QQuick3DNode *node);
|
|
||||||
Q_INVOKABLE bool isLocked(QQuick3DNode *node) const;
|
Q_INVOKABLE bool isLocked(QQuick3DNode *node) const;
|
||||||
Q_INVOKABLE bool isHidden(QQuick3DNode *node) const;
|
Q_INVOKABLE bool isHidden(QQuick3DNode *node) const;
|
||||||
Q_INVOKABLE bool isPickable(QQuick3DNode *node) const;
|
Q_INVOKABLE bool isPickable(QQuick3DNode *node) const;
|
||||||
@@ -125,9 +123,6 @@ signals:
|
|||||||
void lockedStateChanged(QQuick3DNode *node);
|
void lockedStateChanged(QQuick3DNode *node);
|
||||||
void rotationBlocksChanged();
|
void rotationBlocksChanged();
|
||||||
|
|
||||||
protected:
|
|
||||||
bool eventFilter(QObject *obj, QEvent *event) final;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void handlePendingToolStateUpdate();
|
void handlePendingToolStateUpdate();
|
||||||
QVector3D pivotScenePosition(QQuick3DNode *node) const;
|
QVector3D pivotScenePosition(QQuick3DNode *node) const;
|
||||||
@@ -138,7 +133,6 @@ private:
|
|||||||
QTimer m_toolStateUpdateTimer;
|
QTimer m_toolStateUpdateTimer;
|
||||||
QHash<QString, QVariantMap> m_toolStates;
|
QHash<QString, QVariantMap> m_toolStates;
|
||||||
QHash<QString, QVariantMap> m_toolStatesPending;
|
QHash<QString, QVariantMap> m_toolStatesPending;
|
||||||
QSet<QQuick3DNode *> m_gizmoTargets;
|
|
||||||
QSet<QQuick3DNode *> m_rotationBlockedNodes;
|
QSet<QQuick3DNode *> m_rotationBlockedNodes;
|
||||||
|
|
||||||
struct MultiSelData {
|
struct MultiSelData {
|
||||||
|
@@ -2278,8 +2278,12 @@ void Qt5InformationNodeInstanceServer::handleInstanceLocked(const ServerNodeInst
|
|||||||
|
|
||||||
QObject *obj = instance.internalObject();
|
QObject *obj = instance.internalObject();
|
||||||
auto node = qobject_cast<QQuick3DNode *>(obj);
|
auto node = qobject_cast<QQuick3DNode *>(obj);
|
||||||
if (node)
|
if (node) {
|
||||||
node->setProperty("_edit3dLocked", edit3dLocked);
|
node->setProperty("_edit3dLocked", edit3dLocked);
|
||||||
|
auto helper = qobject_cast<QmlDesigner::Internal::GeneralHelper *>(m_3dHelper);
|
||||||
|
if (helper)
|
||||||
|
emit helper->lockedStateChanged(node);
|
||||||
|
}
|
||||||
const auto children = obj->children();
|
const auto children = obj->children();
|
||||||
for (auto child : children) {
|
for (auto child : children) {
|
||||||
if (hasInstanceForObject(child)) {
|
if (hasInstanceForObject(child)) {
|
||||||
@@ -2334,6 +2338,9 @@ void Qt5InformationNodeInstanceServer::handleInstanceHidden(const ServerNodeInst
|
|||||||
// as changes in the node tree (reparenting, adding new nodes) can make the previously set
|
// as changes in the node tree (reparenting, adding new nodes) can make the previously set
|
||||||
// hide status based on ancestor unreliable.
|
// hide status based on ancestor unreliable.
|
||||||
node->setProperty("_edit3dHidden", edit3dHidden);
|
node->setProperty("_edit3dHidden", edit3dHidden);
|
||||||
|
auto helper = qobject_cast<QmlDesigner::Internal::GeneralHelper *>(m_3dHelper);
|
||||||
|
if (helper)
|
||||||
|
emit helper->hiddenStateChanged(node);
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(6, 2, 1)
|
#if QT_VERSION < QT_VERSION_CHECK(6, 2, 1)
|
||||||
if (auto model = qobject_cast<QQuick3DModel *>(node))
|
if (auto model = qobject_cast<QQuick3DModel *>(node))
|
||||||
model->setPickable(!edit3dHidden); // allow 3D objects to receive mouse clicks
|
model->setPickable(!edit3dHidden); // allow 3D objects to receive mouse clicks
|
||||||
|
Reference in New Issue
Block a user