1 /**************************************************************************
3 ** This file is part of Qt Creator
5 ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
7 ** Contact: Nokia Corporation (qt-info@nokia.com)
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
16 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
25 ** In addition, as a special exception, Nokia gives you certain additional
26 ** rights. These rights are described in the Nokia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
29 ** If you have questions regarding the use of this file, please contact
30 ** Nokia at qt-info@nokia.com.
32 **************************************************************************/
34 #ifndef ABSTRACTNODEINSTANCE_H
35 #define ABSTRACTNODEINSTANCE_H
38 #include <QStyleOptionGraphicsItem>
39 #include <QSharedPointer>
40 #include <QScopedPointer>
41 #include <QWeakPointer>
42 #include "nodeinstanceserver.h"
43 #include "nodeinstancemetaobject.h"
44 #include "nodeinstancesignalspy.h"
48 class QDeclarativeContext;
49 class QDeclarativeEngine;
50 class QDeclarativeProperty;
51 class QDeclarativeContext;
52 class QDeclarativeBinding;
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* createObject(const QString &typeName, int majorNumber, int minorNumber, const QString &componentPath, QDeclarativeContext *context);
83 void setInstanceId(qint32 id);
84 qint32 instanceId() const;
86 NodeInstanceServer *nodeInstanceServer() const;
87 void setNodeInstanceServer(NodeInstanceServer *server);
88 virtual void initializePropertyWatcher(const Pointer &objectNodeInstance);
89 virtual void paint(QPainter *painter);
90 virtual QImage renderImage() const;
92 virtual QObject *parent() const;
94 Pointer parentInstance() const;
96 virtual void reparent(const ObjectNodeInstance::Pointer &oldParentInstance, const QString &oldParentProperty, const ObjectNodeInstance::Pointer &newParentInstance, const QString &newParentProperty);
98 virtual void setId(const QString &id);
99 virtual QString id() const;
101 virtual bool isQmlGraphicsItem() const;
102 virtual bool isGraphicsObject() const;
103 virtual bool isTransition() const;
104 virtual bool isPositioner() const;
107 virtual bool equalGraphicsItem(QGraphicsItem *item) const;
109 virtual QRectF boundingRect() const;
111 virtual QPointF position() const;
112 virtual QSizeF size() const;
113 virtual QTransform transform() const;
114 virtual QTransform customTransform() const;
115 virtual QTransform sceneTransform() const;
116 virtual double opacity() const;
118 virtual int penWidth() const;
120 virtual bool hasAnchor(const QString &name) const;
121 virtual QPair<QString, ServerNodeInstance> anchor(const QString &name) const;
122 virtual bool isAnchoredBySibling() const;
123 virtual bool isAnchoredByChildren() const;
125 virtual double rotation() const;
126 virtual double scale() const;
127 virtual QList<QGraphicsTransform *> transformations() const;
128 virtual QPointF transformOriginPoint() const;
129 virtual double zValue() const;
131 virtual void setPropertyVariant(const QString &name, const QVariant &value);
132 virtual void setPropertyBinding(const QString &name, const QString &expression);
133 virtual QVariant property(const QString &name) const;
134 virtual void resetProperty(const QString &name);
135 virtual void refreshProperty(const QString &name);
136 virtual QString instanceType(const QString &name) const;
137 QStringList propertyNames() const;
139 virtual QList<ServerNodeInstance> childItems() const;
141 void createDynamicProperty(const QString &name, const QString &typeName);
142 void setDeleteHeldInstance(bool deleteInstance);
143 bool deleteHeldInstance() const;
145 virtual void updateAnchors();
146 virtual void paintUpdate();
148 virtual void activateState();
149 virtual void deactivateState();
151 void populateResetValueHash();
152 QVariant resetValue(const QString &propertyName) const;
154 QObject *object() const;
156 virtual bool hasContent() const;
157 virtual bool isResizable() const;
158 virtual bool isMovable() const;
159 bool isInPositioner() const;
160 void setInPositioner(bool isInPositioner);
162 bool hasBindingForProperty(const QString &name, bool *hasChanged = 0) const;
164 QDeclarativeContext *context() const;
165 QDeclarativeEngine *engine() const;
167 virtual bool updateStateVariant(const ObjectNodeInstance::Pointer &target, const QString &propertyName, const QVariant &value);
168 virtual bool updateStateBinding(const ObjectNodeInstance::Pointer &target, const QString &propertyName, const QString &expression);
169 virtual bool resetStateProperty(const ObjectNodeInstance::Pointer &target, const QString &propertyName, const QVariant &resetValue);
172 bool isValid() const;
173 bool isRootNodeInstance() const;
175 virtual void doComponentComplete();
177 virtual QList<ServerNodeInstance> stateInstances() const;
180 void doResetProperty(const QString &propertyName);
181 void removeFromOldProperty(QObject *object, QObject *oldParent, const QString &oldParentProperty);
182 void addToNewProperty(QObject *object, QObject *newParent, const QString &newParentProperty);
183 void deleteObjectsInList(const QDeclarativeProperty &metaProperty);
186 QHash<QString, QVariant> m_resetValueHash;
187 QHash<QString, ServerNodeInstance> m_modelAbstractPropertyHash;
188 mutable QHash<QString, bool> m_hasBindingHash;
192 QWeakPointer<NodeInstanceServer> m_nodeInstanceServer;
193 QString m_parentProperty;
194 bool m_deleteHeldInstance;
195 QWeakPointer<QObject> m_object;
196 NodeInstanceMetaObject *m_metaObject;
197 NodeInstanceSignalSpy m_signalSpy;
198 bool m_isInPositioner;
202 } // namespace Internal
203 } // namespace QmlDesigner
205 #endif // ABSTRACTNODEINSTANCE_H