Rename QDeclarativeV4 -> QV4
[profile/ivi/qtdeclarative.git] / src / declarative / qml / v4 / qv4bindings_p.h
1 /****************************************************************************
2 **
3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
6 **
7 ** This file is part of the QtDeclarative module of the Qt Toolkit.
8 **
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** GNU Lesser General Public License Usage
11 ** This file may be used under the terms of the GNU Lesser General Public
12 ** License version 2.1 as published by the Free Software Foundation and
13 ** appearing in the file LICENSE.LGPL included in the packaging of this
14 ** file. Please review the following information to ensure the GNU Lesser
15 ** General Public License version 2.1 requirements will be met:
16 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17 **
18 ** In addition, as a special exception, Nokia gives you certain additional
19 ** rights. These rights are described in the Nokia Qt LGPL Exception
20 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21 **
22 ** GNU General Public License Usage
23 ** Alternatively, this file may be used under the terms of the GNU General
24 ** Public License version 3.0 as published by the Free Software Foundation
25 ** and appearing in the file LICENSE.GPL included in the packaging of this
26 ** file. Please review the following information to ensure the GNU General
27 ** Public License version 3.0 requirements will be met:
28 ** http://www.gnu.org/copyleft/gpl.html.
29 **
30 ** Other Usage
31 ** Alternatively, this file may be used in accordance with the terms and
32 ** conditions contained in a signed written agreement between you and Nokia.
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #ifndef QV4BINDINGS_P_H
43 #define QV4BINDINGS_P_H
44
45 //
46 //  W A R N I N G
47 //  -------------
48 //
49 // This file is not part of the Qt API.  It exists purely as an
50 // implementation detail.  This header file may change from version to
51 // version without notice, or even be removed.
52 //
53 // We mean it.
54 //
55
56 #include "private/qdeclarativeexpression_p.h"
57 #include "private/qdeclarativebinding_p.h"
58 #include "private/qv4instruction_p.h"
59
60 QT_BEGIN_HEADER
61
62 QT_BEGIN_NAMESPACE
63
64 class QV4Program;
65 class QV4Bindings : public QDeclarativeAbstractExpression, 
66                                public QDeclarativeRefCount
67 {
68     Q_DECLARE_TR_FUNCTIONS(QV4Bindings)
69 public:
70     QV4Bindings(const char *program, QDeclarativeContextData *context,
71                            QDeclarativeRefCount *);
72     virtual ~QV4Bindings();
73
74     QDeclarativeAbstractBinding *configBinding(int index, QObject *target, 
75                                                QObject *scope, int property);
76
77 #ifdef QML_THREADED_INTERPRETER
78     static void **getDecodeInstrTable();
79 #endif
80
81 private:
82     Q_DISABLE_COPY(QV4Bindings)
83
84     struct Binding : public QDeclarativeAbstractBinding, public QDeclarativeDelayedError {
85         Binding() : enabled(false), updating(0), property(0),
86                     scope(0), target(0), executedBlocks(0), parent(0) {}
87
88         // Inherited from QDeclarativeAbstractBinding
89         virtual void setEnabled(bool, QDeclarativePropertyPrivate::WriteFlags flags);
90         virtual void update(QDeclarativePropertyPrivate::WriteFlags flags);
91         virtual void destroy();
92
93         int index:30;
94         bool enabled:1;
95         bool updating:1;
96         int property;
97         QObject *scope;
98         QObject *target;
99         quint32 executedBlocks;
100
101         QV4Bindings *parent;
102     };
103
104     struct Subscription : public QDeclarativeNotifierEndpoint
105     {
106         Subscription() : bindings(0), method(-1) { callback = &subscriptionCallback; }
107         static void subscriptionCallback(QDeclarativeNotifierEndpoint *e);
108         QV4Bindings *bindings;
109         int method;
110     };
111     friend class Subscription;
112
113     Subscription *subscriptions;
114
115     void subscriptionNotify(int);
116     void run(Binding *, QDeclarativePropertyPrivate::WriteFlags flags);
117
118     QV4Program *program;
119     QDeclarativeRefCount *dataRef;
120     Binding *bindings;
121
122     void init();
123     void run(int instr, quint32 &executedBlocks, QDeclarativeContextData *context,
124              QDeclarativeDelayedError *error, QObject *scope, QObject *output, 
125              QDeclarativePropertyPrivate::WriteFlags storeFlags
126 #ifdef QML_THREADED_INTERPRETER
127              , void ***decode_instr = 0
128 #endif
129              );
130
131
132     inline void unsubscribe(int subIndex);
133     inline void subscribeId(QDeclarativeContextData *p, int idIndex, int subIndex);
134     inline void subscribe(QObject *o, int notifyIndex, int subIndex);
135
136     inline static qint32 toInt32(qreal n);
137     static const qreal D32;
138     static quint32 toUint32(qreal n);
139
140 };
141
142 QT_END_NAMESPACE
143
144 QT_END_HEADER
145
146 #endif // QV4BINDINGS_P_H
147