forked from qt-creator/qt-creator
QmlDesigner: Add lock feature support to 3D editor
Added lock feature support for 3D editor. Also refactored the hide support, since the two use largely similar logic. Task-number: QDS-2915 Change-Id: I627848f3a3a73881427a03aeec6793fd26a1885a Reviewed-by: Henning Gründl <henning.gruendl@qt.io> Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
committed by
Miikka Heikkinen
parent
3d78fef4ef
commit
f2883c19b1
@@ -244,6 +244,40 @@ QQuick3DNode *GeneralHelper::resolvePick(QQuick3DNode *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)
|
||||
{
|
||||
if (node) {
|
||||
QVariant lockValue = node->property("_edit3dLocked");
|
||||
return lockValue.isValid() && lockValue.toBool();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool GeneralHelper::isHidden(QQuick3DNode *node)
|
||||
{
|
||||
if (node) {
|
||||
QVariant hideValue = node->property("_edit3dHidden");
|
||||
return hideValue.isValid() && hideValue.toBool();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void GeneralHelper::storeToolState(const QString &sceneId, const QString &tool, const QVariant &state,
|
||||
int delay)
|
||||
{
|
||||
@@ -322,6 +356,21 @@ bool GeneralHelper::isMacOS() const
|
||||
#endif
|
||||
}
|
||||
|
||||
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()
|
||||
{
|
||||
m_toolStateUpdateTimer.stop();
|
||||
|
||||
@@ -74,6 +74,12 @@ public:
|
||||
Q_INVOKABLE void delayedPropertySet(QObject *obj, int delay, const QString &property,
|
||||
const QVariant& value);
|
||||
Q_INVOKABLE QQuick3DNode *resolvePick(QQuick3DNode *pickNode);
|
||||
|
||||
Q_INVOKABLE void registerGizmoTarget(QQuick3DNode *node);
|
||||
Q_INVOKABLE void unregisterGizmoTarget(QQuick3DNode *node);
|
||||
Q_INVOKABLE bool isLocked(QQuick3DNode *node);
|
||||
Q_INVOKABLE bool isHidden(QQuick3DNode *node);
|
||||
|
||||
Q_INVOKABLE void storeToolState(const QString &sceneId, const QString &tool,
|
||||
const QVariant &state, int delayEmit = 0);
|
||||
void initToolStates(const QString &sceneId, const QVariantMap &toolStates);
|
||||
@@ -90,6 +96,11 @@ public:
|
||||
signals:
|
||||
void overlayUpdateNeeded();
|
||||
void toolStateChanged(const QString &sceneId, const QString &tool, const QVariant &toolState);
|
||||
void hiddenStateChanged(QQuick3DNode *node);
|
||||
void lockedStateChanged(QQuick3DNode *node);
|
||||
|
||||
protected:
|
||||
bool eventFilter(QObject *obj, QEvent *event);
|
||||
|
||||
private:
|
||||
void handlePendingToolStateUpdate();
|
||||
@@ -98,6 +109,7 @@ private:
|
||||
QTimer m_toolStateUpdateTimer;
|
||||
QHash<QString, QVariantMap> m_toolStates;
|
||||
QHash<QString, QVariantMap> m_toolStatesPending;
|
||||
QSet<QQuick3DNode *> m_gizmoTargets;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user