1 /**************************************************************************
3 ** This file is part of Qt Creator
5 ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
7 ** Contact: Nokia Corporation (info@qt.nokia.com)
10 ** GNU Lesser General Public License Usage
12 ** This file may be used under the terms of the GNU Lesser General Public
13 ** License version 2.1 as published by the Free Software Foundation and
14 ** appearing in the file LICENSE.LGPL included in the packaging of this file.
15 ** Please review the following information to ensure the GNU Lesser General
16 ** Public License version 2.1 requirements will be met:
17 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
19 ** In addition, as a special exception, Nokia gives you certain additional
20 ** rights. These rights are described in the Nokia Qt LGPL Exception
21 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
25 ** Alternatively, this file may be used in accordance with the terms and
26 ** conditions contained in a signed written agreement between you and Nokia.
28 ** If you have questions regarding the use of this file, please contact
29 ** Nokia at info@qt.nokia.com.
31 **************************************************************************/
33 #ifndef ABSTRACTNODEINSTANCE_H
34 #define ABSTRACTNODEINSTANCE_H
37 #include <QStyleOptionGraphicsItem>
38 #include <QSharedPointer>
39 #include <QScopedPointer>
40 #include <QWeakPointer>
41 #include "nodeinstanceserver.h"
42 #include "nodeinstancemetaobject.h"
43 #include "nodeinstancesignalspy.h"
47 class QDeclarativeContext;
48 class QDeclarativeEngine;
49 class QDeclarativeProperty;
50 class QDeclarativeContext;
51 class QDeclarativeBinding;
52 class QDeclarativeAbstractBinding;
55 namespace QmlDesigner {
57 class NodeInstanceServer;
62 class QmlGraphicsItemNodeInstance;
63 class GraphicsWidgetNodeInstance;
64 class GraphicsViewNodeInstance;
65 class GraphicsSceneNodeInstance;
66 class ProxyWidgetNodeInstance;
67 class WidgetNodeInstance;
69 class ObjectNodeInstance
72 typedef QSharedPointer<ObjectNodeInstance> Pointer;
73 typedef QWeakPointer<ObjectNodeInstance> WeakPointer;
74 ObjectNodeInstance(QObject *object);
76 virtual ~ObjectNodeInstance();
78 //void setModelNode(const ModelNode &node);
80 static Pointer create(QObject *objectToBeWrapped);
81 static QObject *createPrimitive(const QString &typeName, int majorNumber, int minorNumber, QDeclarativeContext *context);
82 static QObject *createCustomParserObject(const QString &nodeSource, const QStringList &imports, QDeclarativeContext *context);
83 static QObject *createComponent(const QString &componentPath, QDeclarativeContext *context);
84 static QObject *createComponentWrap(const QString &nodeSource, const QStringList &imports, QDeclarativeContext *context);
86 void setInstanceId(qint32 id);
87 qint32 instanceId() const;
89 NodeInstanceServer *nodeInstanceServer() const;
90 void setNodeInstanceServer(NodeInstanceServer *server);
91 virtual void initializePropertyWatcher(const Pointer &objectNodeInstance);
92 virtual void initialize(const Pointer &objectNodeInstance);
93 virtual void paint(QPainter *painter);
94 virtual QImage renderImage() const;
96 virtual QObject *parent() const;
98 Pointer parentInstance() const;
100 virtual void reparent(const ObjectNodeInstance::Pointer &oldParentInstance, const QString &oldParentProperty, const ObjectNodeInstance::Pointer &newParentInstance, const QString &newParentProperty);
102 virtual void setId(const QString &id);
103 virtual QString id() const;
105 virtual bool isQmlGraphicsItem() const;
106 virtual bool isGraphicsObject() const;
107 virtual bool isTransition() const;
108 virtual bool isPositioner() const;
109 virtual bool isSGItem() const;
111 virtual bool equalGraphicsItem(QGraphicsItem *item) const;
113 virtual QRectF boundingRect() const;
115 virtual QPointF position() const;
116 virtual QSizeF size() const;
117 virtual QTransform transform() const;
118 virtual QTransform customTransform() const;
119 virtual QTransform sceneTransform() const;
120 virtual double opacity() const;
122 virtual int penWidth() const;
124 virtual bool hasAnchor(const QString &name) const;
125 virtual QPair<QString, ServerNodeInstance> anchor(const QString &name) const;
126 virtual bool isAnchoredBySibling() const;
127 virtual bool isAnchoredByChildren() const;
129 virtual double rotation() const;
130 virtual double scale() const;
131 virtual QList<QGraphicsTransform *> transformations() const;
132 virtual QPointF transformOriginPoint() const;
133 virtual double zValue() const;
135 virtual void setPropertyVariant(const QString &name, const QVariant &value);
136 virtual void setPropertyBinding(const QString &name, const QString &expression);
137 virtual QVariant property(const QString &name) const;
138 virtual void resetProperty(const QString &name);
139 virtual void refreshProperty(const QString &name);
140 virtual QString instanceType(const QString &name) const;
141 QStringList propertyNames() const;
143 virtual QList<ServerNodeInstance> childItems() const;
145 void createDynamicProperty(const QString &name, const QString &typeName);
146 void setDeleteHeldInstance(bool deleteInstance);
147 bool deleteHeldInstance() const;
149 virtual void updateAnchors();
150 virtual void paintUpdate();
152 virtual void activateState();
153 virtual void deactivateState();
155 void populateResetHashes();
156 bool hasValidResetBinding(const QString &propertyName) const;
157 QDeclarativeAbstractBinding *resetBinding(const QString &propertyName) const;
158 QVariant resetValue(const QString &propertyName) const;
159 void setResetValue(const QString &propertyName, const QVariant &value);
161 QObject *object() const;
163 virtual bool hasContent() const;
164 virtual bool isResizable() const;
165 virtual bool isMovable() const;
166 bool isInPositioner() const;
167 void setInPositioner(bool isInPositioner);
168 virtual void refreshPositioner();
170 bool hasBindingForProperty(const QString &name, bool *hasChanged = 0) const;
172 QDeclarativeContext *context() const;
173 QDeclarativeEngine *engine() const;
175 virtual bool updateStateVariant(const ObjectNodeInstance::Pointer &target, const QString &propertyName, const QVariant &value);
176 virtual bool updateStateBinding(const ObjectNodeInstance::Pointer &target, const QString &propertyName, const QString &expression);
177 virtual bool resetStateProperty(const ObjectNodeInstance::Pointer &target, const QString &propertyName, const QVariant &resetValue);
180 bool isValid() const;
181 bool isRootNodeInstance() const;
183 virtual void doComponentComplete();
185 virtual QList<ServerNodeInstance> stateInstances() const;
187 virtual void setNodeSource(const QString &source);
190 void doResetProperty(const QString &propertyName);
191 void removeFromOldProperty(QObject *object, QObject *oldParent, const QString &oldParentProperty);
192 void addToNewProperty(QObject *object, QObject *newParent, const QString &newParentProperty);
193 void deleteObjectsInList(const QDeclarativeProperty &metaProperty);
196 QHash<QString, QVariant> m_resetValueHash;
197 QHash<QString, QWeakPointer<QDeclarativeAbstractBinding> > m_resetBindingHash;
198 QHash<QString, ServerNodeInstance> m_modelAbstractPropertyHash;
199 mutable QHash<QString, bool> m_hasBindingHash;
203 QWeakPointer<NodeInstanceServer> m_nodeInstanceServer;
204 QString m_parentProperty;
205 bool m_deleteHeldInstance;
206 QWeakPointer<QObject> m_object;
207 NodeInstanceMetaObject *m_metaObject;
208 NodeInstanceSignalSpy m_signalSpy;
209 bool m_isInPositioner;
213 } // namespace Internal
214 } // namespace QmlDesigner
216 #endif // ABSTRACTNODEINSTANCE_H