source: trunk/src/script/api/qscriptengine.h@ 636

Last change on this file since 636 was 561, checked in by Dmitry A. Kuminov, 15 years ago

trunk: Merged in qt 4.6.1 sources.

  • Property svn:eol-style set to native
File size: 13.7 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation ([email protected])
6**
7** This file is part of the QtScript module of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL-ONLY$
10** GNU Lesser General Public License Usage
11** This file may be used under the terms of the GNU Lesser
12** General Public License version 2.1 as published by the Free Software
13** Foundation and appearing in the file LICENSE.LGPL included in the
14** packaging of this file. Please review the following information to
15** ensure the GNU Lesser General Public License version 2.1 requirements
16** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17**
18** If you have questions regarding the use of this file, please contact
19** Nokia at [email protected].
20** $QT_END_LICENSE$
21**
22****************************************************************************/
23
24#ifndef QSCRIPTENGINE_H
25#define QSCRIPTENGINE_H
26
27#include <QtCore/qmetatype.h>
28
29#include <QtCore/qvariant.h>
30#include <QtCore/qsharedpointer.h>
31
32#ifndef QT_NO_QOBJECT
33#include <QtCore/qobject.h>
34#else
35#include <QtCore/qobjectdefs.h>
36#endif
37
38#include <QtScript/qscriptvalue.h>
39#include <QtScript/qscriptcontext.h>
40#include <QtScript/qscriptstring.h>
41#include <QtScript/qscriptprogram.h>
42
43QT_BEGIN_HEADER
44
45QT_BEGIN_NAMESPACE
46
47QT_MODULE(Script)
48
49class QDateTime;
50class QScriptClass;
51class QScriptEngineAgent;
52class QScriptEnginePrivate;
53
54#ifndef QT_NO_QOBJECT
55
56template <class T>
57inline QScriptValue qscriptQMetaObjectConstructor(QScriptContext *, QScriptEngine *, T *)
58{
59 return QScriptValue();
60}
61
62#endif // QT_NO_QOBJECT
63
64#ifndef QT_NO_REGEXP
65class QRegExp;
66#endif
67
68#ifndef QT_NO_MEMBER_TEMPLATES
69template <typename T>
70inline QScriptValue qScriptValueFromValue(QScriptEngine *, const T &);
71
72template <typename T>
73inline T qScriptValueToValue(const QScriptValue &);
74#endif
75
76class QScriptSyntaxCheckResultPrivate;
77class Q_SCRIPT_EXPORT QScriptSyntaxCheckResult
78{
79public:
80 enum State {
81 Error,
82 Intermediate,
83 Valid
84 };
85
86 QScriptSyntaxCheckResult(const QScriptSyntaxCheckResult &other);
87 ~QScriptSyntaxCheckResult();
88
89 State state() const;
90 int errorLineNumber() const;
91 int errorColumnNumber() const;
92 QString errorMessage() const;
93
94 QScriptSyntaxCheckResult &operator=(const QScriptSyntaxCheckResult &other);
95
96private:
97 QScriptSyntaxCheckResult();
98 QScriptSyntaxCheckResult(QScriptSyntaxCheckResultPrivate *d);
99 QExplicitlySharedDataPointer<QScriptSyntaxCheckResultPrivate> d_ptr;
100
101 Q_DECLARE_PRIVATE(QScriptSyntaxCheckResult)
102 friend class QScriptEngine;
103 friend class QScriptEnginePrivate;
104};
105
106class Q_SCRIPT_EXPORT QScriptEngine
107#ifndef QT_NO_QOBJECT
108 : public QObject
109#endif
110{
111#ifndef QT_NO_QOBJECT
112 Q_OBJECT
113#endif
114public:
115 enum ValueOwnership {
116 QtOwnership,
117 ScriptOwnership,
118 AutoOwnership
119 };
120
121 enum QObjectWrapOption {
122 ExcludeChildObjects = 0x0001,
123 ExcludeSuperClassMethods = 0x0002,
124 ExcludeSuperClassProperties = 0x0004,
125 ExcludeSuperClassContents = 0x0006,
126 SkipMethodsInEnumeration = 0x0008,
127 ExcludeDeleteLater = 0x0010,
128
129 AutoCreateDynamicProperties = 0x0100,
130 PreferExistingWrapperObject = 0x0200
131 };
132 Q_DECLARE_FLAGS(QObjectWrapOptions, QObjectWrapOption)
133
134 QScriptEngine();
135#ifndef QT_NO_QOBJECT
136 explicit QScriptEngine(QObject *parent);
137#endif
138 virtual ~QScriptEngine();
139
140 QScriptValue globalObject() const;
141 void setGlobalObject(const QScriptValue &object);
142
143 QScriptContext *currentContext() const;
144 QScriptContext *pushContext();
145 void popContext();
146
147 bool canEvaluate(const QString &program) const;
148 static QScriptSyntaxCheckResult checkSyntax(const QString &program);
149
150 QScriptValue evaluate(const QString &program, const QString &fileName = QString(), int lineNumber = 1);
151
152 QScriptValue evaluate(const QScriptProgram &program);
153
154 bool isEvaluating() const;
155 void abortEvaluation(const QScriptValue &result = QScriptValue());
156
157 bool hasUncaughtException() const;
158 QScriptValue uncaughtException() const;
159 int uncaughtExceptionLineNumber() const;
160 QStringList uncaughtExceptionBacktrace() const;
161 void clearExceptions();
162
163 QScriptValue nullValue();
164 QScriptValue undefinedValue();
165
166 typedef QScriptValue (*FunctionSignature)(QScriptContext *, QScriptEngine *);
167 typedef QScriptValue (*FunctionWithArgSignature)(QScriptContext *, QScriptEngine *, void *);
168
169 QScriptValue newFunction(FunctionSignature signature, int length = 0);
170 QScriptValue newFunction(FunctionSignature signature, const QScriptValue &prototype, int length = 0);
171
172 QScriptValue newFunction(FunctionWithArgSignature signature, void *arg);
173
174 QScriptValue newVariant(const QVariant &value);
175 QScriptValue newVariant(const QScriptValue &object, const QVariant &value);
176
177#ifndef QT_NO_REGEXP
178 QScriptValue newRegExp(const QRegExp &regexp);
179#endif
180
181 QScriptValue newObject();
182 QScriptValue newObject(QScriptClass *scriptClass, const QScriptValue &data = QScriptValue());
183 QScriptValue newArray(uint length = 0);
184 QScriptValue newRegExp(const QString &pattern, const QString &flags);
185 QScriptValue newDate(qsreal value);
186 QScriptValue newDate(const QDateTime &value);
187 QScriptValue newActivationObject();
188
189#ifndef QT_NO_QOBJECT
190 QScriptValue newQObject(QObject *object, ValueOwnership ownership = QtOwnership,
191 const QObjectWrapOptions &options = 0);
192 QScriptValue newQObject(const QScriptValue &scriptObject, QObject *qtObject,
193 ValueOwnership ownership = QtOwnership,
194 const QObjectWrapOptions &options = 0);
195
196 QScriptValue newQMetaObject(const QMetaObject *metaObject, const QScriptValue &ctor = QScriptValue());
197
198# ifndef QT_NO_MEMBER_TEMPLATES
199 template <class T> QScriptValue scriptValueFromQMetaObject();
200# endif // QT_NO_MEMBER_TEMPLATES
201
202#endif // QT_NO_QOBJECT
203
204
205
206 QScriptValue defaultPrototype(int metaTypeId) const;
207 void setDefaultPrototype(int metaTypeId, const QScriptValue &prototype);
208
209
210 typedef QScriptValue (*MarshalFunction)(QScriptEngine *, const void *);
211 typedef void (*DemarshalFunction)(const QScriptValue &, void *);
212
213
214
215#ifndef QT_NO_MEMBER_TEMPLATES
216 template <typename T>
217 inline QScriptValue toScriptValue(const T &value)
218 {
219 return qScriptValueFromValue(this, value);
220 }
221 template <typename T>
222 inline T fromScriptValue(const QScriptValue &value)
223 {
224 return qScriptValueToValue<T>(value);
225 }
226#endif // QT_NO_MEMBER_TEMPLATES
227
228 void installTranslatorFunctions(const QScriptValue &object = QScriptValue());
229
230 QScriptValue importExtension(const QString &extension);
231 QStringList availableExtensions() const;
232 QStringList importedExtensions() const;
233
234 void collectGarbage();
235
236 void setProcessEventsInterval(int interval);
237 int processEventsInterval() const;
238
239 void setAgent(QScriptEngineAgent *agent);
240 QScriptEngineAgent *agent() const;
241
242 QScriptString toStringHandle(const QString &str);
243 QScriptValue toObject(const QScriptValue &value);
244
245 QScriptValue objectById(qint64 id) const;
246
247#ifndef QT_NO_QOBJECT
248Q_SIGNALS:
249 void signalHandlerException(const QScriptValue &exception);
250#endif
251
252private:
253 QScriptValue create(int type, const void *ptr);
254
255 bool convert(const QScriptValue &value, int type, void *ptr);
256 static bool convertV2(const QScriptValue &value, int type, void *ptr);
257
258 void registerCustomType(int type, MarshalFunction mf, DemarshalFunction df,
259 const QScriptValue &prototype);
260
261 friend inline void qScriptRegisterMetaType_helper(QScriptEngine *,
262 int, MarshalFunction, DemarshalFunction, const QScriptValue &);
263