diff options
Diffstat (limited to 'src/script/qscriptengine.h')
-rw-r--r-- | src/script/qscriptengine.h | 481 |
1 files changed, 0 insertions, 481 deletions
diff --git a/src/script/qscriptengine.h b/src/script/qscriptengine.h deleted file mode 100644 index 02ebea7..0000000 --- a/src/script/qscriptengine.h +++ /dev/null @@ -1,481 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtScript module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QSCRIPTENGINE_H -#define QSCRIPTENGINE_H - -#include <QtCore/qmetatype.h> - -#ifndef QT_NO_SCRIPT - -#include <QtCore/qvariant.h> - -#ifndef QT_NO_QOBJECT -#include <QtCore/qobject.h> -#else -#include <QtCore/qobjectdefs.h> -#endif - -#include <QtScript/qscriptvalue.h> -#include <QtScript/qscriptcontext.h> -#include <QtScript/qscriptstring.h> - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -QT_MODULE(Script) - -class QDateTime; -class QScriptClass; -class QScriptEngineAgent; -class QScriptEnginePrivate; - -#ifndef QT_NO_QOBJECT - -template <class T> -inline QScriptValue qscriptQMetaObjectConstructor(QScriptContext *, QScriptEngine *, T *) -{ - return QScriptValue(); -} - -#endif // QT_NO_QOBJECT - -#ifndef QT_NO_REGEXP -class QRegExp; -#endif - -#ifndef QT_NO_MEMBER_TEMPLATES -template <typename T> -inline QScriptValue qScriptValueFromValue(QScriptEngine *, const T &); - -template <typename T> -inline T qScriptValueToValue(const QScriptValue &); -#endif - -class QScriptSyntaxCheckResultPrivate; -class Q_SCRIPT_EXPORT QScriptSyntaxCheckResult -{ -public: - enum State { - Error, - Intermediate, - Valid - }; - - QScriptSyntaxCheckResult(const QScriptSyntaxCheckResult &other); - ~QScriptSyntaxCheckResult(); - - State state() const; - int errorLineNumber() const; - int errorColumnNumber() const; - QString errorMessage() const; - - QScriptSyntaxCheckResult &operator=(const QScriptSyntaxCheckResult &other); - -private: - QScriptSyntaxCheckResult(); - QScriptSyntaxCheckResult(QScriptSyntaxCheckResultPrivate *d); - QScriptSyntaxCheckResultPrivate *d_ptr; - - Q_DECLARE_PRIVATE(QScriptSyntaxCheckResult) - friend class QScriptEnginePrivate; -}; - -class Q_SCRIPT_EXPORT QScriptEngine -#ifndef QT_NO_QOBJECT - : public QObject -#endif -{ -#ifndef QT_NO_QOBJECT - Q_OBJECT -#endif -public: - enum ValueOwnership { - QtOwnership, - ScriptOwnership, - AutoOwnership - }; - - enum QObjectWrapOption { - ExcludeChildObjects = 0x0001, - ExcludeSuperClassMethods = 0x0002, - ExcludeSuperClassProperties = 0x0004, - ExcludeSuperClassContents = 0x0006, - SkipMethodsInEnumeration = 0x0008, - ExcludeDeleteLater = 0x0010, - - AutoCreateDynamicProperties = 0x0100, - PreferExistingWrapperObject = 0x0200 - }; - Q_DECLARE_FLAGS(QObjectWrapOptions, QObjectWrapOption) - - QScriptEngine(); -#ifndef QT_NO_QOBJECT - explicit QScriptEngine(QObject *parent); -#endif - virtual ~QScriptEngine(); - - QScriptValue globalObject() const; - void setGlobalObject(const QScriptValue &object); - - QScriptContext *currentContext() const; - QScriptContext *pushContext(); - void popContext(); - - bool canEvaluate(const QString &program) const; - static QScriptSyntaxCheckResult checkSyntax(const QString &program); - - QScriptValue evaluate(const QString &program, const QString &fileName = QString(), int lineNumber = 1); - - bool isEvaluating() const; - void abortEvaluation(const QScriptValue &result = QScriptValue()); - - bool hasUncaughtException() const; - QScriptValue uncaughtException() const; - int uncaughtExceptionLineNumber() const; - QStringList uncaughtExceptionBacktrace() const; - void clearExceptions(); - - QScriptValue nullValue(); - QScriptValue undefinedValue(); - - typedef QScriptValue (*FunctionSignature)(QScriptContext *, QScriptEngine *); - typedef QScriptValue (*FunctionWithArgSignature)(QScriptContext *, QScriptEngine *, void *); - - QScriptValue newFunction(FunctionSignature signature, int length = 0); - QScriptValue newFunction(FunctionSignature signature, const QScriptValue &prototype, int length = 0); - - QScriptValue newFunction(FunctionWithArgSignature signature, void *arg); - - QScriptValue newVariant(const QVariant &value); - QScriptValue newVariant(const QScriptValue &object, const QVariant &value); - -#ifndef QT_NO_REGEXP - QScriptValue newRegExp(const QRegExp ®exp); -#endif - - QScriptValue newObject(); - QScriptValue newObject(QScriptClass *scriptClass, const QScriptValue &data = QScriptValue()); - QScriptValue newArray(uint length = 0); - QScriptValue newRegExp(const QString &pattern, const QString &flags); - QScriptValue newDate(qsreal value); - QScriptValue newDate(const QDateTime &value); - QScriptValue newActivationObject(); - -#ifndef QT_NO_QOBJECT - QScriptValue newQObject(QObject *object, ValueOwnership ownership = QtOwnership, - const QObjectWrapOptions &options = 0); - QScriptValue newQObject(const QScriptValue &scriptObject, QObject *qtObject, - ValueOwnership ownership = QtOwnership, - const QObjectWrapOptions &options = 0); - - QScriptValue newQMetaObject(const QMetaObject *metaObject, const QScriptValue &ctor = QScriptValue()); - -# ifndef QT_NO_MEMBER_TEMPLATES - template <class T> QScriptValue scriptValueFromQMetaObject(); -# endif // QT_NO_MEMBER_TEMPLATES - -#endif // QT_NO_QOBJECT - - - - QScriptValue defaultPrototype(int metaTypeId) const; - void setDefaultPrototype(int metaTypeId, const QScriptValue &prototype); - - - typedef QScriptValue (*MarshalFunction)(QScriptEngine *, const void *); - typedef void (*DemarshalFunction)(const QScriptValue &, void *); - - - -#ifndef QT_NO_MEMBER_TEMPLATES - template <typename T> - inline QScriptValue toScriptValue(const T &value) - { - return qScriptValueFromValue(this, value); - } - template <typename T> - inline T fromScriptValue(const QScriptValue &value) - { - return qScriptValueToValue<T>(value); - } -#endif // QT_NO_MEMBER_TEMPLATES - - void installTranslatorFunctions(const QScriptValue &object = QScriptValue()); - - QScriptValue importExtension(const QString &extension); - QStringList availableExtensions() const; - QStringList importedExtensions() const; - - void collectGarbage(); - - void setProcessEventsInterval(int interval); - int processEventsInterval() const; - - void setAgent(QScriptEngineAgent *agent); - QScriptEngineAgent *agent() const; - - QScriptString toStringHandle(const QString &str); - QScriptValue toObject(const QScriptValue &value); - - QScriptValue objectById(qint64 id) const; - -#ifndef QT_NO_QOBJECT -Q_SIGNALS: - void signalHandlerException(const QScriptValue &exception); -#endif - -private: - QScriptValue create(int type, const void *ptr); - - bool convert(const QScriptValue &value, int type, void *ptr); - static bool convertV2(const QScriptValue &value, int type, void *ptr); - - void registerCustomType(int type, MarshalFunction mf, DemarshalFunction df, - const QScriptValue &prototype); - - friend inline void qScriptRegisterMetaType_helper(QScriptEngine *, - int, MarshalFunction, DemarshalFunction, const QScriptValue &); - - friend inline QScriptValue qScriptValueFromValue_helper(QScriptEngine *, int, const void *); - - friend inline bool qscriptvalue_cast_helper(const QScriptValue &, int, void *); - -protected: -#ifdef QT_NO_QOBJECT - QScriptEnginePrivate *d_ptr; - - QScriptEngine(QScriptEnginePrivate &dd); -#else - QScriptEngine(QScriptEnginePrivate &dd, QObject *parent = 0); -#endif - -private: - Q_DECLARE_PRIVATE(QScriptEngine) - Q_DISABLE_COPY(QScriptEngine) -#ifndef QT_NO_QOBJECT - Q_PRIVATE_SLOT(d_func(), void _q_objectDestroyed(QObject *)) -#endif -}; - -#ifndef QT_NO_QOBJECT -template <class T> -inline QScriptValue qScriptValueFromQMetaObject( - QScriptEngine *engine -#ifndef qdoc - , T * /* dummy */ = 0 -#endif - ) -{ - typedef QScriptValue(*ConstructPtr)(QScriptContext *, QScriptEngine *, T *); - ConstructPtr cptr = qscriptQMetaObjectConstructor<T>; - return engine->newQMetaObject(&T::staticMetaObject, - engine->newFunction(reinterpret_cast<QScriptEngine::FunctionWithArgSignature>(cptr), 0)); -} - -#define Q_SCRIPT_DECLARE_QMETAOBJECT(T, _Arg1) \ -template<> inline QScriptValue qscriptQMetaObjectConstructor<T>(QScriptContext *ctx, QScriptEngine *eng, T *) \ -{ \ - _Arg1 arg1 = qscriptvalue_cast<_Arg1> (ctx->argument(0)); \ - T* t = new T(arg1); \ - if (ctx->isCalledAsConstructor()) \ - return eng->newQObject(ctx->thisObject(), t, QScriptEngine::AutoOwnership); \ - QScriptValue o = eng->newQObject(t, QScriptEngine::AutoOwnership); \ - o.setPrototype(ctx->callee().property(QString::fromLatin1("prototype"))); \ - return o; \ -} - -# ifndef QT_NO_MEMBER_TEMPLATES - template <class T> QScriptValue QScriptEngine::scriptValueFromQMetaObject() - { - return qScriptValueFromQMetaObject<T>(this); - } -# endif // QT_NO_MEMBER_TEMPLATES - -#endif // QT_NO_QOBJECT - -inline QScriptValue qScriptValueFromValue_helper(QScriptEngine *engine, int type, const void *ptr) -{ - if (!engine) - return QScriptValue(); - - return engine->create(type, ptr); -} - -template <typename T> -inline QScriptValue qScriptValueFromValue(QScriptEngine *engine, const T &t) -{ - return qScriptValueFromValue_helper(engine, qMetaTypeId<T>(), &t); -} - -template <> -inline QScriptValue qScriptValueFromValue<QVariant>(QScriptEngine *engine, const QVariant &v) -{ - QScriptValue result = qScriptValueFromValue_helper(engine, v.userType(), v.data()); - if (!result.isValid()) - result = engine->newVariant(v); - return result; -} - -inline bool qscriptvalue_cast_helper(const QScriptValue &value, int type, void *ptr) -{ - return QScriptEngine::convertV2(value, type, ptr); -} - -template<typename T> -T qscriptvalue_cast(const QScriptValue &value -#if !defined qdoc && defined Q_CC_MSVC && _MSC_VER < 1300 -, T * = 0 -#endif - ) -{ - T t; - const int id = qMetaTypeId<T>(); - - if (qscriptvalue_cast_helper(value, id, &t)) - return t; - else if (value.isVariant()) - return qvariant_cast<T>(value.toVariant()); - - return T(); -} - -#if !defined Q_CC_MSVC || _MSC_VER >= 1300 -template <> -inline QVariant qscriptvalue_cast<QVariant>(const QScriptValue &value) -{ - return value.toVariant(); -} -#endif - -template <typename T> -inline T qScriptValueToValue(const QScriptValue &value) -{ - return qscriptvalue_cast<T>(value); -} - -inline void qScriptRegisterMetaType_helper(QScriptEngine *eng, int type, - QScriptEngine::MarshalFunction mf, - QScriptEngine::DemarshalFunction df, - const QScriptValue &prototype) -{ - eng->registerCustomType(type, mf, df, prototype); -} - -template<typename T> -int qScriptRegisterMetaType( - QScriptEngine *eng, - QScriptValue (*toScriptValue)(QScriptEngine *, const T &t), - void (*fromScriptValue)(const QScriptValue &, T &t), - const QScriptValue &prototype = QScriptValue() -#ifndef qdoc - , T * /* dummy */ = 0 -#endif -) -{ - const int id = qRegisterMetaType<T>(); // make sure it's registered - - qScriptRegisterMetaType_helper( - eng, id, reinterpret_cast<QScriptEngine::MarshalFunction>(toScriptValue), - reinterpret_cast<QScriptEngine::DemarshalFunction>(fromScriptValue), - prototype); - - return id; -} - -template <class Container> -QScriptValue qScriptValueFromSequence(QScriptEngine *eng, const Container &cont) -{ - QScriptValue a = eng->newArray(); - typename Container::const_iterator begin = cont.begin(); - typename Container::const_iterator end = cont.end(); - typename Container::const_iterator it; - quint32 i; - for (it = begin, i = 0; it != end; ++it, ++i) - a.setProperty(i, qScriptValueFromValue(eng, *it)); - return a; -} - -template <class Container> -void qScriptValueToSequence(const QScriptValue &value, Container &cont) -{ - quint32 len = value.property(QLatin1String("length")).toUInt32(); - for (quint32 i = 0; i < len; ++i) { - QScriptValue item = value.property(i); -#if defined Q_CC_MSVC && !defined Q_CC_MSVC_NET - cont.push_back(qscriptvalue_cast<Container::value_type>(item)); -#else - cont.push_back(qscriptvalue_cast<typename Container::value_type>(item)); -#endif - } -} - -template<typename T> -int qScriptRegisterSequenceMetaType( - QScriptEngine *engine, - const QScriptValue &prototype = QScriptValue() -#ifndef qdoc - , T * /* dummy */ = 0 -#endif -) -{ - return qScriptRegisterMetaType<T>(engine, qScriptValueFromSequence, - qScriptValueToSequence, prototype); -} - -#ifndef QT_NO_QOBJECT -Q_SCRIPT_EXPORT bool qScriptConnect(QObject *sender, const char *signal, - const QScriptValue &receiver, - const QScriptValue &function); -Q_SCRIPT_EXPORT bool qScriptDisconnect(QObject *sender, const char *signal, - const QScriptValue &receiver, - const QScriptValue &function); -#endif // QT_NO_QOBJECT - -Q_DECLARE_OPERATORS_FOR_FLAGS(QScriptEngine::QObjectWrapOptions) - -QT_END_NAMESPACE - -QT_END_HEADER - -#endif // QT_NO_SCRIPT -#endif // QSCRIPTENGINE_H |