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