// Copyright (C) 2019 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #pragma once #include #include #include "qmlobjectnode.h" #include "qmlstate.h" #include #include #include #include namespace QmlDesigner { class QmlModelStateGroup; class QmlAnchors; class ItemLibraryEntry; inline constexpr AuxiliaryDataKeyView invisibleProperty{AuxiliaryDataType::Document, "invisible"}; class QMLDESIGNERCORE_EXPORT QmlVisualNode : public QmlObjectNode { friend class QmlAnchors; public: class Position : public QVector3D { friend class QmlVisualNode; public: Position() {} Position(const QPointF &position) : QVector3D(position) {} Position(const QVector3D &position) : QVector3D(position), m_is3D(true) {} bool is3D() const; QList> propertyPairList() const; private: bool m_is3D = false; }; QmlVisualNode() = default; QmlVisualNode(const ModelNode &modelNode) : QmlObjectNode(modelNode) {} bool isValid() const override; explicit operator bool() const { return isValid(); } static bool isValidQmlVisualNode(const ModelNode &modelNode); bool isRootNode() const; QList children() const; QList resources() const; QList allDirectSubNodes() const; bool hasChildren() const; bool hasResources() const; const QList allDirectSubModelNodes() const; const QList allSubModelNodes() const; bool hasAnySubModelNodes() const; void setVisibilityOverride(bool visible); bool visibilityOverride() const; void scatter(const ModelNode &targetNode, const std::optional &offset); void translate(const QVector3D &vector); void setPosition(const Position &position); Position position() const; static bool isItemOr3DNode(const ModelNode &modelNode); static QmlObjectNode createQmlObjectNode(AbstractView *view, const ItemLibraryEntry &itemLibraryEntry, const Position &position, QmlVisualNode parentQmlItemNode); static QmlObjectNode createQmlObjectNode(AbstractView *view, const ItemLibraryEntry &itemLibraryEntry, const Position &position, NodeAbstractProperty parentProperty, bool createInTransaction = true); static QmlVisualNode createQml3DNode(AbstractView *view, const ItemLibraryEntry &itemLibraryEntry, qint32 sceneRootId = -1, const QVector3D &position = {}, bool createInTransaction = true); static NodeListProperty findSceneNodeProperty(AbstractView *view, qint32 sceneRootId); static bool isFlowTransition(const ModelNode &node); static bool isFlowDecision(const ModelNode &node); static bool isFlowWildcard(const ModelNode &node); bool isFlowTransition() const; bool isFlowDecision() const; bool isFlowWildcard() const; private: void setDoubleProperty(const PropertyName &name, double value); }; class QMLDESIGNERCORE_EXPORT QmlModelStateGroup { friend class QmlObjectNode; friend class StatesEditorView; friend class Experimental::StatesEditorView; public: QmlModelStateGroup() = default; explicit operator bool() const { return m_modelNode.isValid(); } ModelNode modelNode() const { return m_modelNode; } QStringList names() const; QList allStates() const; QmlModelState state(const QString &name) const; QmlModelState addState(const QString &name); void removeState(const QString &name); protected: QmlModelStateGroup(const ModelNode &modelNode) : m_modelNode(modelNode) {} private: ModelNode m_modelNode; }; QMLDESIGNERCORE_EXPORT QList toModelNodeList(const QList &fxItemNodeList); QMLDESIGNERCORE_EXPORT QList toQmlVisualNodeList(const QList &modelNodeList); } //QmlDesigner