1/****************************************************************************
2**
3** Copyright (C) 2015 The Qt Company Ltd.
4** Contact: http://www.qt.io/licensing/
5**
6** This file is part of the QtScript module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or (at your option) the GNU General
28** Public license version 3 or any later version approved by the KDE Free
29** Qt Foundation. The licenses are as published by the Free Software
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31** included in the packaging of this file. Please review the following
32** information to ensure the GNU General Public License requirements will
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34** https://www.gnu.org/licenses/gpl-3.0.html.
35**
36** $QT_END_LICENSE$
37**
38****************************************************************************/
39
40#ifndef QSCRIPTDECLARATIVECLASS_P_H
41#define QSCRIPTDECLARATIVECLASS_P_H
42
43//
44// W A R N I N G
45// -------------
46//
47// This file is not part of the Qt API. It exists purely as an
48// implementation detail. This header file may change from version to
49// version without notice, or even be removed.
50//
51// We mean it.
52//
53
54#include <QtCore/qobjectdefs.h>
55#include <QtScript/qscriptvalue.h>
56#include <QtScript/qscriptclass.h>
57
58QT_BEGIN_NAMESPACE
59
60class QScriptDeclarativeClassPrivate;
61class PersistentIdentifierPrivate;
62class QScriptContext;
63class Q_SCRIPT_EXPORT QScriptDeclarativeClass
64{
65public:
66#define QT_HAVE_QSCRIPTDECLARATIVECLASS_VALUE
67 class Q_SCRIPT_EXPORT Value
68 {
69 public:
70 Value();
71 Value(const Value &);
72
73 Value(QScriptContext *, int);
74 Value(QScriptContext *, uint);
75 Value(QScriptContext *, bool);
76 Value(QScriptContext *, double);
77 Value(QScriptContext *, float);
78 Value(QScriptContext *, const QString &);
79 Value(QScriptContext *, const QScriptValue &);
80 Value(QScriptEngine *, int);
81 Value(QScriptEngine *, uint);
82 Value(QScriptEngine *, bool);
83 Value(QScriptEngine *, double);
84 Value(QScriptEngine *, float);
85 Value(QScriptEngine *, const QString &);
86 Value(QScriptEngine *, const QScriptValue &);
87 ~Value();
88
89 QScriptValue toScriptValue(QScriptEngine *) const;
90 private:
91 char dummy[8];
92 };
93
94 typedef void* Identifier;
95
96 struct Object { virtual ~Object() {} };
97
98 static QScriptValue newObject(QScriptEngine *, QScriptDeclarativeClass *, Object *);
99 static Value newObjectValue(QScriptEngine *, QScriptDeclarativeClass *, Object *);
100 static QScriptDeclarativeClass *scriptClass(const QScriptValue &);
101 static Object *object(const QScriptValue &);
102
103 static QScriptValue function(const QScriptValue &, const Identifier &);
104 static QScriptValue property(const QScriptValue &, const Identifier &);
105 static Value functionValue(const QScriptValue &, const Identifier &);
106 static Value propertyValue(const QScriptValue &, const Identifier &);
107
108 static QScriptValue scopeChainValue(QScriptContext *, int index);
109 static QScriptContext *pushCleanContext(QScriptEngine *);
110
111 static QScriptValue newStaticScopeObject(
112 QScriptEngine *, int propertyCount, const QString *names,
113 const QScriptValue *values, const QScriptValue::PropertyFlags *flags);
114 static QScriptValue newStaticScopeObject(QScriptEngine *);
115
116 class Q_SCRIPT_EXPORT PersistentIdentifier
117 {
118 public:
119 Identifier identifier;
120
121 PersistentIdentifier();
122 ~PersistentIdentifier();
123 PersistentIdentifier(const PersistentIdentifier &other);
124 PersistentIdentifier &operator=(const PersistentIdentifier &other);
125
126 QString toString() const;
127 private:
128 friend class QScriptDeclarativeClass;
129 PersistentIdentifier(QScriptEnginePrivate *e) : identifier(0), engine(e), d(0) {}
130 QScriptEnginePrivate *engine;
131 void *d;
132 };
133
134 QScriptDeclarativeClass(QScriptEngine *engine);
135 virtual ~QScriptDeclarativeClass();
136
137 QScriptEngine *engine() const;
138
139 bool supportsCall() const;
140 void setSupportsCall(bool);
141
142 PersistentIdentifier createPersistentIdentifier(const QString &);
143 PersistentIdentifier createPersistentIdentifier(const Identifier &);
144
145 QString toString(const Identifier &);
146 bool startsWithUpper(const Identifier &);
147 quint32 toArrayIndex(const Identifier &, bool *ok);
148
149 virtual QScriptClass::QueryFlags queryProperty(Object *, const Identifier &,
150 QScriptClass::QueryFlags flags);
151
152 virtual Value property(Object *, const Identifier &);
153 virtual void setProperty(Object *, const Identifier &name, const QScriptValue &);
154 virtual QScriptValue::PropertyFlags propertyFlags(Object *, const Identifier &);
155 virtual Value call(Object *, QScriptContext *);
156 virtual bool compare(Object *, Object *);
157
158 virtual QStringList propertyNames(Object *);
159
160 virtual bool isQObject() const;
161 virtual QObject *toQObject(Object *, bool *ok = 0);
162 virtual QVariant toVariant(Object *, bool *ok = 0);
163
164 QScriptContext *context() const;
165protected:
166 friend class QScriptDeclarativeClassPrivate;
167 QScopedPointer<QScriptDeclarativeClassPrivate> d_ptr;
168};
169
170QT_END_NAMESPACE
171
172#endif
173

source code of qtscript/src/script/bridge/qscriptdeclarativeclass_p.h