OSDN Git Service

c316954fb4be04fbf3872038149877f960282b46
[qt-creator-jp/qt-creator-jp.git] / src / plugins / qmldesigner / designercore / instances / objectnodeinstance.h
1 /**************************************************************************
2 **
3 ** This file is part of Qt Creator
4 **
5 ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
6 **
7 ** Contact: Nokia Corporation (qt-info@nokia.com)
8 **
9 ** No Commercial Usage
10 **
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
14 ** this package.
15 **
16 ** GNU Lesser General Public License Usage
17 **
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.
24 **
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.
28 **
29 ** If you have questions regarding the use of this file, please contact
30 ** Nokia at qt-info@nokia.com.
31 **
32 **************************************************************************/
33
34 #ifndef ABSTRACTNODEINSTANCE_H
35 #define ABSTRACTNODEINSTANCE_H
36
37 #include <QPainter>
38 #include <QStyleOptionGraphicsItem>
39 #include <QSharedPointer>
40 #include <QScopedPointer>
41 #include <QWeakPointer>
42 #include "nodeinstanceserver.h"
43 #include "nodeinstancemetaobject.h"
44 #include "nodeinstancesignalspy.h"
45
46 QT_BEGIN_NAMESPACE
47 class QGraphicsItem;
48 class QDeclarativeContext;
49 class QDeclarativeEngine;
50 class QDeclarativeProperty;
51 class QDeclarativeContext;
52 class QDeclarativeBinding;
53 QT_END_NAMESPACE
54
55 namespace QmlDesigner {
56
57 class NodeInstanceServer;
58
59
60 namespace Internal {
61
62 class QmlGraphicsItemNodeInstance;
63 class GraphicsWidgetNodeInstance;
64 class GraphicsViewNodeInstance;
65 class GraphicsSceneNodeInstance;
66 class ProxyWidgetNodeInstance;
67 class WidgetNodeInstance;
68
69 class ObjectNodeInstance
70 {
71 public:
72     typedef QSharedPointer<ObjectNodeInstance> Pointer;
73     typedef QWeakPointer<ObjectNodeInstance> WeakPointer;
74     ObjectNodeInstance(QObject *object);
75
76     virtual ~ObjectNodeInstance();
77     void destroy();
78     //void setModelNode(const ModelNode &node);
79
80     static Pointer create(QObject *objectToBeWrapped);
81     static QObject* createObject(const QString &typeName, int majorNumber, int minorNumber, const QString &componentPath, QDeclarativeContext *context);
82
83     void setInstanceId(qint32 id);
84     qint32 instanceId() const;
85
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;
91
92     virtual QObject *parent() const;
93
94     Pointer parentInstance() const;
95
96     virtual void reparent(const ObjectNodeInstance::Pointer &oldParentInstance, const QString &oldParentProperty, const ObjectNodeInstance::Pointer &newParentInstance, const QString &newParentProperty);
97
98     virtual void setId(const QString &id);
99     virtual QString id() const;
100
101     virtual bool isQmlGraphicsItem() const;
102     virtual bool isGraphicsObject() const;
103     virtual bool isTransition() const;
104     virtual bool isPositioner() const;
105
106
107     virtual bool equalGraphicsItem(QGraphicsItem *item) const;
108
109     virtual QRectF boundingRect() const;
110
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;
117
118     virtual int penWidth() const;
119
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;
124
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;
130
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;
138
139     virtual QList<ServerNodeInstance> childItems() const;
140
141     void createDynamicProperty(const QString &name, const QString &typeName);
142     void setDeleteHeldInstance(bool deleteInstance);
143     bool deleteHeldInstance() const;
144
145     virtual void updateAnchors();
146     virtual void paintUpdate();
147
148     virtual void activateState();
149     virtual void deactivateState();
150
151     void populateResetValueHash();
152     QVariant resetValue(const QString &propertyName) const;
153
154     QObject *object() const;
155
156     virtual bool hasContent() const;
157     virtual bool isResizable() const;
158     virtual bool isMovable() const;
159     bool isInPositioner() const;
160     void setInPositioner(bool isInPositioner);
161
162     bool hasBindingForProperty(const QString &name, bool *hasChanged = 0) const;
163
164     QDeclarativeContext *context() const;
165     QDeclarativeEngine *engine() const;
166
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);
170
171
172     bool isValid() const;
173     bool isRootNodeInstance() const;
174
175     virtual void doComponentComplete();
176
177     virtual QList<ServerNodeInstance> stateInstances() const;
178
179 protected:
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);
184
185 private:
186     QHash<QString, QVariant> m_resetValueHash;
187     QHash<QString, ServerNodeInstance> m_modelAbstractPropertyHash;
188     mutable QHash<QString, bool> m_hasBindingHash;
189     qint32 m_instanceId;
190     QString m_id;
191
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;
199 };
200
201
202 } // namespace Internal
203 } // namespace QmlDesigner
204
205 #endif // ABSTRACTNODEINSTANCE_H