1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2016 The Qt Company Ltd. 4 ** Contact: https://www.qt.io/licensing/ 5 ** 6 ** This file is part of Qt Creator. 7 ** 8 ** Commercial License Usage 9 ** Licensees holding valid commercial Qt licenses may use this file in 10 ** accordance with the commercial license agreement provided with the 11 ** Software or, alternatively, in accordance with the terms contained in 12 ** a written agreement between you and The Qt Company. For licensing terms 13 ** and conditions see https://www.qt.io/terms-conditions. For further 14 ** information use the contact form at https://www.qt.io/contact-us. 15 ** 16 ** GNU General Public License Usage 17 ** Alternatively, this file may be used under the terms of the GNU 18 ** General Public License version 3 as published by the Free Software 19 ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT 20 ** included in the packaging of this file. Please review the following 21 ** information to ensure the GNU General Public License requirements will 22 ** be met: https://www.gnu.org/licenses/gpl-3.0.html. 23 ** 24 ****************************************************************************/ 25 26 #pragma once 27 28 #include <qmldesignercorelib_global.h> 29 #include <modelnode.h> 30 #include "qmlobjectnode.h" 31 #include "qmlstate.h" 32 #include "qmlvisualnode.h" 33 #include "qmlconnections.h" 34 35 #include <QStringList> 36 #include <QRectF> 37 #include <QTransform> 38 39 namespace QmlDesigner { 40 41 class QmlModelStateGroup; 42 class QmlAnchors; 43 class ItemLibraryEntry; 44 45 class QMLDESIGNERCORE_EXPORT QmlItemNode : public QmlVisualNode 46 { 47 friend QmlAnchors; 48 49 public: QmlItemNode()50 QmlItemNode() : QmlVisualNode() {} QmlItemNode(const ModelNode & modelNode)51 QmlItemNode(const ModelNode &modelNode) : QmlVisualNode(modelNode) {} 52 bool isValid() const override; 53 static bool isValidQmlItemNode(const ModelNode &modelNode); 54 55 static bool isItemOrWindow(const ModelNode &modelNode); 56 57 static QmlItemNode createQmlItemNode(AbstractView *view, 58 const ItemLibraryEntry &itemLibraryEntry, 59 const QPointF &position, 60 QmlItemNode parentQmlItemNode); 61 62 63 static QmlItemNode createQmlItemNodeFromImage(AbstractView *view, 64 const QString &imageName, 65 const QPointF &position, 66 QmlItemNode parentQmlItemNode, 67 bool executeInTransaction = true); 68 static QmlItemNode createQmlItemNodeFromImage(AbstractView *view, 69 const QString &imageName, 70 const QPointF &position, 71 NodeAbstractProperty parentproperty, 72 bool executeInTransaction = true); 73 74 static QmlItemNode createQmlItemNodeFromFont(AbstractView *view, 75 const QString &fontFamily, 76 const QPointF &position, 77 QmlItemNode parentQmlItemNode, 78 bool executeInTransaction = true); 79 static QmlItemNode createQmlItemNodeFromFont(AbstractView *view, 80 const QString &fontFamily, 81 const QPointF &position, 82 NodeAbstractProperty parentproperty, 83 bool executeInTransaction = true); 84 85 QList<QmlItemNode> children() const; 86 QList<QmlObjectNode> resources() const; 87 QList<QmlObjectNode> allDirectSubNodes() const; 88 QmlAnchors anchors() const; 89 90 bool hasChildren() const; 91 bool hasResources() const; 92 bool instanceHasAnchor(AnchorLineType sourceAnchorLineType) const; 93 bool instanceHasAnchors() const; 94 bool instanceHasShowContent() const; 95 96 bool instanceCanReparent() const override; 97 bool instanceIsAnchoredBySibling() const; 98 bool instanceIsAnchoredByChildren() const; 99 bool instanceIsMovable() const; 100 bool instanceIsResizable() const; 101 bool instanceIsInLayoutable() const; 102 bool instanceHasRotationTransform() const; 103 104 bool modelIsMovable() const; 105 bool modelIsResizable() const; 106 bool modelIsRotatable() const; 107 bool modelIsInLayout() const; 108 109 QRectF instanceBoundingRect() const; 110 QRectF instanceSceneBoundingRect() const; 111 QRectF instancePaintedBoundingRect() const; 112 QRectF instanceContentItemBoundingRect() const; 113 QTransform instanceTransform() const; 114 QTransform instanceTransformWithContentTransform() const; 115 QTransform instanceTransformWithContentItemTransform() const; 116 QTransform instanceSceneTransform() const; 117 QTransform instanceSceneContentItemTransform() const; 118 QPointF instanceScenePosition() const; 119 QPointF instancePosition() const; 120 QSizeF instanceSize() const; 121 int instancePenWidth() const; 122 bool instanceIsRenderPixmapNull() const; 123 124 QPixmap instanceRenderPixmap() const; 125 QPixmap instanceBlurredRenderPixmap() const; 126 127 const QList<QmlItemNode> allDirectSubModelNodes() const; 128 const QList<QmlItemNode> allSubModelNodes() const; 129 bool hasAnySubModelNodes() const; 130 131 void setPosition(const QPointF &position); 132 void setPostionInBaseState(const QPointF &position); 133 void setFlowItemPosition(const QPointF &position); 134 QPointF flowPosition() const; 135 136 void setSize(const QSizeF &size); 137 bool isInLayout() const; 138 bool canBereparentedTo(const ModelNode &potentialParent) const; 139 140 void setRotation(const qreal &angle); 141 qreal rotation() const; 142 QVariant transformOrigin(); 143 144 bool isInStackedContainer() const; 145 146 bool isFlowView() const; 147 bool isFlowItem() const; 148 bool isFlowActionArea() const; 149 ModelNode rootModelNode() const; 150 }; 151 152 class QmlFlowItemNode; 153 class QmlFlowViewNode; 154 155 class QMLDESIGNERCORE_EXPORT QmlFlowTargetNode : public QmlItemNode 156 { 157 public: QmlFlowTargetNode(const ModelNode & modelNode)158 QmlFlowTargetNode(const ModelNode &modelNode) : QmlItemNode(modelNode) {} 159 bool isValid() const override; 160 161 void assignTargetItem(const QmlFlowTargetNode &node); 162 void destroyTargets(); 163 ModelNode targetTransition() const; 164 QmlFlowViewNode flowView() const; 165 ModelNode findSourceForDecisionNode() const; 166 static bool isFlowEditorTarget(const ModelNode &modelNode); 167 void removeTransitions(); 168 }; 169 170 class QMLDESIGNERCORE_EXPORT QmlFlowActionAreaNode : public QmlItemNode 171 { 172 public: QmlFlowActionAreaNode(const ModelNode & modelNode)173 QmlFlowActionAreaNode(const ModelNode &modelNode) : QmlItemNode(modelNode) {} 174 bool isValid() const override; 175 static bool isValidQmlFlowActionAreaNode(const ModelNode &modelNode); 176 ModelNode targetTransition() const; 177 void assignTargetFlowItem(const QmlFlowTargetNode &flowItem); 178 QmlFlowItemNode flowItemParent() const; 179 void destroyTarget(); 180 }; 181 182 class QMLDESIGNERCORE_EXPORT QmlFlowItemNode : public QmlItemNode 183 { 184 public: QmlFlowItemNode(const ModelNode & modelNode)185 QmlFlowItemNode(const ModelNode &modelNode) : QmlItemNode(modelNode) {} 186 bool isValid() const override; 187 static bool isValidQmlFlowItemNode(const ModelNode &modelNode); 188 QList<QmlFlowActionAreaNode> flowActionAreas() const; 189 QmlFlowViewNode flowView() const; 190 191 static ModelNode decisionNodeForTransition(const ModelNode &transition); 192 }; 193 194 class QMLDESIGNERCORE_EXPORT QmlFlowViewNode : public QmlItemNode 195 { 196 public: QmlFlowViewNode(const ModelNode & modelNode)197 QmlFlowViewNode(const ModelNode &modelNode) : QmlItemNode(modelNode) {} 198 bool isValid() const override; 199 static bool isValidQmlFlowViewNode(const ModelNode &modelNode); 200 QList<QmlFlowItemNode> flowItems() const; 201 ModelNode addTransition(const QmlFlowTargetNode &from, const QmlFlowTargetNode &to); 202 QList<ModelNode> transitions() const; 203 QList<ModelNode> wildcards() const; 204 QList<ModelNode> decicions() const; 205 QList<ModelNode> transitionsForTarget(const ModelNode &modelNode); 206 QList<ModelNode> transitionsForSource(const ModelNode &modelNode); 207 void removeDanglingTransitions(); 208 void removeAllTransitions(); 209 void setStartFlowItem(const QmlFlowItemNode &flowItem); 210 ModelNode createTransition(); 211 212 static PropertyNameList st_mouseSignals; 213 static QList<QmlConnections> getAssociatedConnections(const ModelNode &node); 214 215 216 protected: 217 QList<ModelNode> transitionsForProperty(const PropertyName &propertyName, const ModelNode &modelNode); 218 }; 219 220 221 QMLDESIGNERCORE_EXPORT uint qHash(const QmlItemNode &node); 222 223 QMLDESIGNERCORE_EXPORT QList<ModelNode> toModelNodeList(const QList<QmlItemNode> &fxItemNodeList); 224 QMLDESIGNERCORE_EXPORT QList<QmlItemNode> toQmlItemNodeList(const QList<ModelNode> &modelNodeList); 225 QMLDESIGNERCORE_EXPORT QList<QmlItemNode> toQmlItemNodeListKeppInvalid(const QList<ModelNode> &modelNodeList); 226 227 } //QmlDesigner 228