1
/*****************************************************************
2
* Unipro UGENE - Integrated Bioinformatics Suite
3
* Copyright (C) 2008 Unipro, Russia (http://ugene.unipro.ru)
6
* This source code is distributed under the terms of the
7
* GNU General Public License. See the files COPYING and LICENSE
9
*****************************************************************/
11
#include <QtScript/QScriptEngine>
12
#include <QtScript/QScriptContext>
13
#include <QtScript/QScriptValue>
14
#include <QtCore/QStringList>
15
#include <QtCore/QDebug>
16
#include <qmetaobject.h>
19
#include <QVarLengthArray>
21
#include <qbytearray.h>
22
#include <qcoreevent.h>
26
#include "qtscriptshell_QObject.h"
28
static const char * const qtscript_QObject_function_names[] = {
36
, "dynamicPropertyNames"
40
, "installEventFilter"
55
static const char * const qtscript_QObject_function_signatures[] = {
65
, "QObject arg__1, QEvent arg__2"
75
, "char name, Object value"
82
static QScriptValue qtscript_QObject_throw_ambiguity_error_helper(
83
QScriptContext *context, const char *functionName, const char *signatures)
85
QStringList lines = QString::fromLatin1(signatures).split(QLatin1Char('\n'));
86
QStringList fullSignatures;
87
for (int i = 0; i < lines.size(); ++i)
88
fullSignatures.append(QString::fromLatin1("%0(%1)").arg(functionName).arg(lines.at(i)));
89
return context->throwError(QString::fromLatin1("QFile::%0(): could not find a function match; candidates are:\n%1")
90
.arg(functionName).arg(fullSignatures.join(QLatin1String("\n"))));
93
Q_DECLARE_METATYPE(QtScriptShell_QObject*)
94
Q_DECLARE_METATYPE(QList<QObject*>)
95
Q_DECLARE_METATYPE(QList<QByteArray>)
96
Q_DECLARE_METATYPE(QEvent*)
97
Q_DECLARE_METATYPE(QThread*)
98
Q_DECLARE_METATYPE(QVariant)
104
static QScriptValue qtscript_QObject_prototype_call(QScriptContext *context, QScriptEngine *)
106
#if QT_VERSION > 0x040400
107
Q_ASSERT(context->callee().isFunction());
108
uint _id = context->callee().data().toUInt32();
111
if (context->callee().isFunction())
112
_id = context->callee().data().toUInt32();
114
_id = 0xBABE0000 + 20;
116
Q_ASSERT((_id & 0xFFFF0000) == 0xBABE0000);
118
QObject* _q_self = qscriptvalue_cast<QObject*>(context->thisObject());
120
return context->throwError(QScriptContext::TypeError,
121
QString::fromLatin1("QObject.%0(): this object is not a QObject")
122
.arg(qtscript_QObject_function_names[_id+1]));
127
if (context->argumentCount() == 1) {
128
bool _q_arg0 = context->argument(0).toBoolean();
129
bool _q_result = _q_self->blockSignals(_q_arg0);
130
return QScriptValue(context->engine(), _q_result);
135
if (context->argumentCount() == 0) {
136
QList<QObject*> _q_result = _q_self->children();
137
return qScriptValueFromSequence(context->engine(), _q_result);
142
if (context->argumentCount() == 0) {
143
_q_self->dumpObjectInfo();
144
return context->engine()->undefinedValue();
149
if (context->argumentCount() == 0) {
150
_q_self->dumpObjectTree();
151
return context->engine()->undefinedValue();
156
if (context->argumentCount() == 0) {
157
QList<QByteArray> _q_result = _q_self->dynamicPropertyNames();
158
return qScriptValueFromSequence(context->engine(), _q_result);
163
if (context->argumentCount() == 1) {
164
QEvent* _q_arg0 = qscriptvalue_cast<QEvent*>(context->argument(0));
165
bool _q_result = _q_self->event(_q_arg0);
166
return QScriptValue(context->engine(), _q_result);
171
if (context->argumentCount() == 2) {
172
QObject* _q_arg0 = context->argument(0).toQObject();
173
QEvent* _q_arg1 = qscriptvalue_cast<QEvent*>(context->argument(1));
174
bool _q_result = _q_self->eventFilter(_q_arg0, _q_arg1);
175
return QScriptValue(context->engine(), _q_result);
180
if (context->argumentCount() == 1) {
182
// TEMPLATE - core.convert_string_arg_to_char* - START
183
QByteArray tmp__q_arg0 = context->argument(0).toString().toLatin1();
184
const char * _q_arg0 = tmp__q_arg0.constData();
185
// TEMPLATE - core.convert_string_arg_to_char* - END
186
bool _q_result = _q_self->inherits(_q_arg0);
187
return QScriptValue(context->engine(), _q_result);
192
if (context->argumentCount() == 1) {
193
QObject* _q_arg0 = context->argument(0).toQObject();
194
_q_self->installEventFilter(_q_arg0);
195
return context->engine()->undefinedValue();
200
if (context->argumentCount() == 0) {
201
bool _q_result = _q_self->isWidgetType();
202
return QScriptValue(context->engine(), _q_result);
207
if (context->argumentCount() == 1) {
208
int _q_arg0 = context->argument(0).toInt32();
209
_q_self->killTimer(_q_arg0);
210
return context->engine()->undefinedValue();
215
if (context->argumentCount() == 1) {
216
QThread* _q_arg0 = qscriptvalue_cast<QThread*>(context->argument(0));
217
_q_self->moveToThread(_q_arg0);
218
return context->engine()->undefinedValue();
223
if (context->argumentCount() == 0) {
224
QObject* _q_result = _q_self->parent();
225
return qScriptValueFromValue(context->engine(), _q_result);
230
if (context->argumentCount() == 1) {
232
// TEMPLATE - core.convert_string_arg_to_char* - START
233
QByteArray tmp__q_arg0 = context->argument(0).toString().toLatin1();
234
const char * _q_arg0 = tmp__q_arg0.constData();
235
// TEMPLATE - core.convert_string_arg_to_char* - END
236
QVariant _q_result = _q_self->property(_q_arg0);
237
return qScriptValueFromValue(context->engine(), _q_result);
242
if (context->argumentCount() == 1) {
243
QObject* _q_arg0 = context->argument(0).toQObject();
244
_q_self->removeEventFilter(_q_arg0);
245
return context->engine()->undefinedValue();
250
if (context->argumentCount() == 1) {
251
QObject* _q_arg0 = context->argument(0).toQObject();
252
_q_self->setParent(_q_arg0);
253
return context->engine()->undefinedValue();
258
if (context->argumentCount() == 2) {
260
// TEMPLATE - core.convert_string_arg_to_char* - START
261
QByteArray tmp__q_arg0 = context->argument(0).toString().toLatin1();
262
const char * _q_arg0 = tmp__q_arg0.constData();
263
// TEMPLATE - core.convert_string_arg_to_char* - END
264
QVariant _q_arg1 = context->argument(1).toVariant();
265
bool _q_result = _q_self->setProperty(_q_arg0, _q_arg1);
266
return QScriptValue(context->engine(), _q_result);
271
if (context->argumentCount() == 0) {
272
bool _q_result = _q_self->signalsBlocked();
273
return QScriptValue(context->engine(), _q_result);
278
if (context->argumentCount() == 1) {
279
int _q_arg0 = context->argument(0).toInt32();
280
int _q_result = _q_self->startTimer(_q_arg0);
281
return QScriptValue(context->engine(), _q_result);
286
if (context->argumentCount() == 0) {
287
QThread* _q_result = _q_self->thread();
288
return qScriptValueFromValue(context->engine(), _q_result);
296
return QScriptValue(context->engine(), result);
302
return qtscript_QObject_throw_ambiguity_error_helper(context,
303
qtscript_QObject_function_names[_id+1],
304
qtscript_QObject_function_signatures[_id+1]);
307
static QScriptValue qtscript_QObject_static_call(QScriptContext *context, QScriptEngine *)
309
uint _id = context->callee().data().toUInt32();
310
Q_ASSERT((_id & 0xFFFF0000) == 0xBABE0000);
314
if (context->thisObject().strictlyEquals(context->engine()->globalObject())) {
315
return context->throwError(QString::fromLatin1("QObject(): Did you forget to construct with 'new'?"));
317
if (context->argumentCount() == 0) {
318
QtScriptShell_QObject* _q_cpp_result = new QtScriptShell_QObject();
319
QScriptValue _q_result = context->engine()->newQObject(context->thisObject(), (QObject*)_q_cpp_result, QScriptEngine::AutoOwnership);
320
_q_cpp_result->__qtscript_self = _q_result;
322
} else if (context->argumentCount() == 1) {
323
QObject* _q_arg0 = context->argument(0).toQObject();
324
QtScriptShell_QObject* _q_cpp_result = new QtScriptShell_QObject(_q_arg0);
325
QScriptValue _q_result = context->engine()->newQObject(context->thisObject(), (QObject*)_q_cpp_result, QScriptEngine::AutoOwnership);
326
_q_cpp_result->__qtscript_self = _q_result;
334
return qtscript_QObject_throw_ambiguity_error_helper(context,
335
qtscript_QObject_function_names[_id],
336
qtscript_QObject_function_signatures[_id]);
339
static QScriptValue qtscript_QObject_toScriptValue(QScriptEngine *engine, QObject* const &in)
341
return engine->newQObject(in, QScriptEngine::QtOwnership, QScriptEngine::PreferExistingWrapperObject);
344
static void qtscript_QObject_fromScriptValue(const QScriptValue &value, QObject* &out)
346
out = qobject_cast<QObject*>(value.toQObject());
349
QScriptValue qtscript_create_QObject_class(QScriptEngine *engine)
351
static const int function_lengths[] = {
377
engine->setDefaultPrototype(qMetaTypeId<QObject*>(), QScriptValue());
378
QScriptValue proto = engine->newVariant(qVariantFromValue((QObject*)0));
379
for (int i = 0; i < 21; ++i) {
380
QScriptValue fun = engine->newFunction(qtscript_QObject_prototype_call, function_lengths[i+1]);
381
fun.setData(QScriptValue(engine, uint(0xBABE0000 + i)));
382
proto.setProperty(QString::fromLatin1(qtscript_QObject_function_names[i+1]),
383
fun, QScriptValue::SkipInEnumeration);
386
qScriptRegisterMetaType<QObject*>(engine, qtscript_QObject_toScriptValue,
387
qtscript_QObject_fromScriptValue, proto);
389
QScriptValue ctor = engine->newFunction(qtscript_QObject_static_call, proto, function_lengths[0]);
390
ctor.setData(QScriptValue(engine, uint(0xBABE0000 + 0)));