~ubuntu-branches/debian/jessie/ugene/jessie

« back to all changes in this revision

Viewing changes to src/libs_3rdparty/qtbindings_core/src/qtscript_QObject.cpp

  • Committer: Package Import Robot
  • Author(s): Steffen Moeller
  • Date: 2011-11-02 13:29:07 UTC
  • mfrom: (1.2.1) (3.1.11 natty)
  • Revision ID: package-import@ubuntu.com-20111102132907-o34gwnt0uj5g6hen
Tags: 1.9.8+repack-1
* First release to Debian
  - added README.Debian
  - increased policy version to 3.9.2
  - added URLs for version control system
* Added debug package.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*****************************************************************
2
 
* Unipro UGENE - Integrated Bioinformatics Suite
3
 
* Copyright (C) 2008 Unipro, Russia (http://ugene.unipro.ru)
4
 
* All Rights Reserved
5
 
6
 
*     This source code is distributed under the terms of the
7
 
*     GNU General Public License. See the files COPYING and LICENSE
8
 
*     for details.
9
 
*****************************************************************/
10
 
 
11
 
#include <QtScript/QScriptEngine>
12
 
#include <QtScript/QScriptContext>
13
 
#include <QtScript/QScriptValue>
14
 
#include <QtCore/QStringList>
15
 
#include <QtCore/QDebug>
16
 
#include <qmetaobject.h>
17
 
 
18
 
#include <qobject.h>
19
 
#include <QVarLengthArray>
20
 
#include <QVariant>
21
 
#include <qbytearray.h>
22
 
#include <qcoreevent.h>
23
 
#include <qlist.h>
24
 
#include <qobject.h>
25
 
 
26
 
#include "qtscriptshell_QObject.h"
27
 
 
28
 
static const char * const qtscript_QObject_function_names[] = {
29
 
    "QObject"
30
 
    // static
31
 
    // prototype
32
 
    , "blockSignals"
33
 
    , "children"
34
 
    , "dumpObjectInfo"
35
 
    , "dumpObjectTree"
36
 
    , "dynamicPropertyNames"
37
 
    , "event"
38
 
    , "eventFilter"
39
 
    , "inherits"
40
 
    , "installEventFilter"
41
 
    , "isWidgetType"
42
 
    , "killTimer"
43
 
    , "moveToThread"
44
 
    , "parent"
45
 
    , "property"
46
 
    , "removeEventFilter"
47
 
    , "setParent"
48
 
    , "setProperty"
49
 
    , "signalsBlocked"
50
 
    , "startTimer"
51
 
    , "thread"
52
 
    , "toString"
53
 
};
54
 
 
55
 
static const char * const qtscript_QObject_function_signatures[] = {
56
 
    "QObject parent"
57
 
    // static
58
 
    // prototype
59
 
    , "bool b"
60
 
    , ""
61
 
    , ""
62
 
    , ""
63
 
    , ""
64
 
    , "QEvent arg__1"
65
 
    , "QObject arg__1, QEvent arg__2"
66
 
    , "char classname"
67
 
    , "QObject arg__1"
68
 
    , ""
69
 
    , "int id"
70
 
    , "Thread thread"
71
 
    , ""
72
 
    , "char name"
73
 
    , "QObject arg__1"
74
 
    , "QObject arg__1"
75
 
    , "char name, Object value"
76
 
    , ""
77
 
    , "int interval"
78
 
    , ""
79
 
""
80
 
};
81
 
 
82
 
static QScriptValue qtscript_QObject_throw_ambiguity_error_helper(
83
 
    QScriptContext *context, const char *functionName, const char *signatures)
84
 
{
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"))));
91
 
}
92
 
 
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)
99
 
 
100
 
//
101
 
// QObject
102
 
//
103
 
 
104
 
static QScriptValue qtscript_QObject_prototype_call(QScriptContext *context, QScriptEngine *)
105
 
{
106
 
#if QT_VERSION > 0x040400
107
 
    Q_ASSERT(context->callee().isFunction());
108
 
    uint _id = context->callee().data().toUInt32();
109
 
#else
110
 
    uint _id;
111
 
    if (context->callee().isFunction())
112
 
        _id = context->callee().data().toUInt32();
113
 
    else
114
 
        _id = 0xBABE0000 + 20;
115
 
#endif
116
 
    Q_ASSERT((_id & 0xFFFF0000) == 0xBABE0000);
117
 
    _id &= 0x0000FFFF;
118
 
    QObject* _q_self = qscriptvalue_cast<QObject*>(context->thisObject());
119
 
    if (!_q_self) {
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]));
123
 
    }
124
 
 
125
 
    switch (_id) {
126
 
    case 0:
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);
131
 
    }
132
 
    break;
133
 
 
134
 
    case 1:
135
 
    if (context->argumentCount() == 0) {
136
 
        QList<QObject*> _q_result = _q_self->children();
137
 
        return qScriptValueFromSequence(context->engine(), _q_result);
138
 
    }
139
 
    break;
140
 
 
141
 
    case 2:
142
 
    if (context->argumentCount() == 0) {
143
 
        _q_self->dumpObjectInfo();
144
 
        return context->engine()->undefinedValue();
145
 
    }
146
 
    break;
147
 
 
148
 
    case 3:
149
 
    if (context->argumentCount() == 0) {
150
 
        _q_self->dumpObjectTree();
151
 
        return context->engine()->undefinedValue();
152
 
    }
153
 
    break;
154
 
 
155
 
    case 4:
156
 
    if (context->argumentCount() == 0) {
157
 
        QList<QByteArray> _q_result = _q_self->dynamicPropertyNames();
158
 
        return qScriptValueFromSequence(context->engine(), _q_result);
159
 
    }
160
 
    break;
161
 
 
162
 
    case 5:
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);
167
 
    }
168
 
    break;
169
 
 
170
 
    case 6:
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);
176
 
    }
177
 
    break;
178
 
 
179
 
    case 7:
180
 
    if (context->argumentCount() == 1) {
181
 
 
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);
188
 
    }
189
 
    break;
190
 
 
191
 
    case 8:
192
 
    if (context->argumentCount() == 1) {
193
 
        QObject* _q_arg0 = context->argument(0).toQObject();
194
 
        _q_self->installEventFilter(_q_arg0);
195
 
        return context->engine()->undefinedValue();
196
 
    }
197
 
    break;
198
 
 
199
 
    case 9:
200
 
    if (context->argumentCount() == 0) {
201
 
        bool _q_result = _q_self->isWidgetType();
202
 
        return QScriptValue(context->engine(), _q_result);
203
 
    }
204
 
    break;
205
 
 
206
 
    case 10:
207
 
    if (context->argumentCount() == 1) {
208
 
        int _q_arg0 = context->argument(0).toInt32();
209
 
        _q_self->killTimer(_q_arg0);
210
 
        return context->engine()->undefinedValue();
211
 
    }
212
 
    break;
213
 
 
214
 
    case 11:
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();
219
 
    }
220
 
    break;
221
 
 
222
 
    case 12:
223
 
    if (context->argumentCount() == 0) {
224
 
        QObject* _q_result = _q_self->parent();
225
 
        return qScriptValueFromValue(context->engine(), _q_result);
226
 
    }
227
 
    break;
228
 
 
229
 
    case 13:
230
 
    if (context->argumentCount() == 1) {
231
 
 
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);
238
 
    }
239
 
    break;
240
 
 
241
 
    case 14:
242
 
    if (context->argumentCount() == 1) {
243
 
        QObject* _q_arg0 = context->argument(0).toQObject();
244
 
        _q_self->removeEventFilter(_q_arg0);
245
 
        return context->engine()->undefinedValue();
246
 
    }
247
 
    break;
248
 
 
249
 
    case 15:
250
 
    if (context->argumentCount() == 1) {
251
 
        QObject* _q_arg0 = context->argument(0).toQObject();
252
 
        _q_self->setParent(_q_arg0);
253
 
        return context->engine()->undefinedValue();
254
 
    }
255
 
    break;
256
 
 
257
 
    case 16:
258
 
    if (context->argumentCount() == 2) {
259
 
 
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);
267
 
    }
268
 
    break;
269
 
 
270
 
    case 17:
271
 
    if (context->argumentCount() == 0) {
272
 
        bool _q_result = _q_self->signalsBlocked();
273
 
        return QScriptValue(context->engine(), _q_result);
274
 
    }
275
 
    break;
276
 
 
277
 
    case 18:
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);
282
 
    }
283
 
    break;
284
 
 
285
 
    case 19:
286
 
    if (context->argumentCount() == 0) {
287
 
        QThread* _q_result = _q_self->thread();
288
 
        return qScriptValueFromValue(context->engine(), _q_result);
289
 
    }
290
 
    break;
291
 
 
292
 
    case 20: {
293
 
    QString result;
294
 
    QDebug d(&result);
295
 
    d << _q_self;
296
 
    return QScriptValue(context->engine(), result);
297
 
    }
298
 
 
299
 
    default:
300
 
    Q_ASSERT(false);
301
 
    }
302
 
    return qtscript_QObject_throw_ambiguity_error_helper(context,
303
 
        qtscript_QObject_function_names[_id+1],
304
 
        qtscript_QObject_function_signatures[_id+1]);
305
 
}
306
 
 
307
 
static QScriptValue qtscript_QObject_static_call(QScriptContext *context, QScriptEngine *)
308
 
{
309
 
    uint _id = context->callee().data().toUInt32();
310
 
    Q_ASSERT((_id & 0xFFFF0000) == 0xBABE0000);
311
 
    _id &= 0x0000FFFF;
312
 
    switch (_id) {
313
 
    case 0:
314
 
    if (context->thisObject().strictlyEquals(context->engine()->globalObject())) {
315
 
        return context->throwError(QString::fromLatin1("QObject(): Did you forget to construct with 'new'?"));
316
 
    }
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;
321
 
        return _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;
327
 
        return _q_result;
328
 
    }
329
 
    break;
330
 
 
331
 
    default:
332
 
    Q_ASSERT(false);
333
 
    }
334
 
    return qtscript_QObject_throw_ambiguity_error_helper(context,
335
 
        qtscript_QObject_function_names[_id],
336
 
        qtscript_QObject_function_signatures[_id]);
337
 
}
338
 
 
339
 
static QScriptValue qtscript_QObject_toScriptValue(QScriptEngine *engine, QObject* const &in)
340
 
{
341
 
    return engine->newQObject(in, QScriptEngine::QtOwnership, QScriptEngine::PreferExistingWrapperObject);
342
 
}
343
 
 
344
 
static void qtscript_QObject_fromScriptValue(const QScriptValue &value, QObject* &out)
345
 
{
346
 
    out = qobject_cast<QObject*>(value.toQObject());
347
 
}
348
 
 
349
 
QScriptValue qtscript_create_QObject_class(QScriptEngine *engine)
350
 
{
351
 
    static const int function_lengths[] = {
352
 
        1
353
 
        // static
354
 
        // prototype
355
 
        , 1
356
 
        , 0
357
 
        , 0
358
 
        , 0
359
 
        , 0
360
 
        , 1
361
 
        , 2
362
 
        , 1
363
 
        , 1
364
 
        , 0
365
 
        , 1
366
 
        , 1
367
 
        , 0
368
 
        , 1
369
 
        , 1
370
 
        , 1
371
 
        , 2
372
 
        , 0
373
 
        , 1
374
 
        , 0
375
 
        , 0
376
 
    };
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);
384
 
    }
385
 
 
386
 
    qScriptRegisterMetaType<QObject*>(engine, qtscript_QObject_toScriptValue, 
387
 
        qtscript_QObject_fromScriptValue, proto);
388
 
 
389
 
    QScriptValue ctor = engine->newFunction(qtscript_QObject_static_call, proto, function_lengths[0]);
390
 
    ctor.setData(QScriptValue(engine, uint(0xBABE0000 + 0)));
391
 
 
392
 
    return ctor;
393
 
}