74a86dc0721496aafe7305aac81e4ee1c115eb0a
[profile/ivi/qtdeclarative.git] / src / declarative / qml / v4 / qv4bindings_p.h
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: http://www.qt-project.org/
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 struct 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                                                int line, int column);
77
78 #ifdef QML_THREADED_INTERPRETER
79     static void **getDecodeInstrTable();
80 #endif
81
82 private:
83     Q_DISABLE_COPY(QV4Bindings)
84
85     struct Binding : public QDeclarativeAbstractBinding, public QDeclarativeDelayedError {
86         Binding() : enabled(false), updating(0), property(0),
87                     scope(0), target(0), executedBlocks(0), parent(0) {}
88
89         // Inherited from QDeclarativeAbstractBinding
90         virtual void setEnabled(bool, QDeclarativePropertyPrivate::WriteFlags flags);
91         virtual void update(QDeclarativePropertyPrivate::WriteFlags flags);
92         virtual void destroy();
93
94         int index:30;
95         bool enabled:1;
96         bool updating:1;
97         int property;
98         QObject *scope;
99         int line;
100         int column;
101         QObject *target;
102         quint32 executedBlocks;
103
104         QV4Bindings *parent;
105     };
106
107     class Subscription : public QDeclarativeNotifierEndpoint
108     {
109     public:
110         Subscription() : bindings(0), method(-1) { callback = &subscriptionCallback; }
111         static void subscriptionCallback(QDeclarativeNotifierEndpoint *e);
112         QV4Bindings *bindings;
113         int method;
114     };
115     friend class Subscription;
116
117     Subscription *subscriptions;
118
119     void subscriptionNotify(int);
120     void run(Binding *, QDeclarativePropertyPrivate::WriteFlags flags);
121
122     QV4Program *program;
123     QDeclarativeRefCount *dataRef;
124     Binding *bindings;
125
126     void init();
127     void run(int instr, quint32 &executedBlocks, QDeclarativeContextData *context,
128              QDeclarativeDelayedError *error, QObject *scope, QObject *output, 
129              QDeclarativePropertyPrivate::WriteFlags storeFlags
130 #ifdef QML_THREADED_INTERPRETER
131              , void ***decode_instr = 0
132 #endif
133              );
134
135
136     inline void unsubscribe(int subIndex);
137     inline void subscribeId(QDeclarativeContextData *p, int idIndex, int subIndex);
138     inline void subscribe(QObject *o, int notifyIndex, int subIndex);
139
140     inline static qint32 toInt32(qreal n);
141     static const qreal D32;
142     static quint32 toUint32(qreal n);
143
144 };
145
146 QT_END_NAMESPACE
147
148 QT_END_HEADER
149
150 #endif // QV4BINDINGS_P_H
151