summaryrefslogtreecommitdiffstats
path: root/src/declarative/qml/qmlvmemetaobject.cpp
diff options
context:
space:
mode:
authorWarwick Allison <warwick.allison@nokia.com>2010-02-24 02:42:00 (GMT)
committerWarwick Allison <warwick.allison@nokia.com>2010-02-24 02:42:00 (GMT)
commit7c76abb0dc4204043bec9b6fa315f9753a7986ae (patch)
treecee303672cfd138790645e731f2d69472564d4b7 /src/declarative/qml/qmlvmemetaobject.cpp
parent4066e60e859853cfe3240245ba05271e79839506 (diff)
downloadQt-7c76abb0dc4204043bec9b6fa315f9753a7986ae.zip
Qt-7c76abb0dc4204043bec9b6fa315f9753a7986ae.tar.gz
Qt-7c76abb0dc4204043bec9b6fa315f9753a7986ae.tar.bz2
Change class prefix to from QmlXXX to QDeclarativeXXX, QmlGraphicsXXX to QDeclarativeXXX.
Diffstat (limited to 'src/declarative/qml/qmlvmemetaobject.cpp')
-rw-r--r--src/declarative/qml/qmlvmemetaobject.cpp366
1 files changed, 0 insertions, 366 deletions
diff --git a/src/declarative/qml/qmlvmemetaobject.cpp b/src/declarative/qml/qmlvmemetaobject.cpp
deleted file mode 100644
index 4886680..0000000
--- a/src/declarative/qml/qmlvmemetaobject.cpp
+++ /dev/null
@@ -1,366 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtDeclarative 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 Technology Preview License Agreement accompanying
-** this package.
-**
-** 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.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qmlvmemetaobject_p.h"
-
-#include "qml.h"
-#include "qmlrefcount_p.h"
-#include "qmlexpression.h"
-#include "qmlexpression_p.h"
-#include "qmlcontext_p.h"
-
-#include <QColor>
-#include <QDate>
-#include <QtCore/qlist.h>
-#include <QtCore/qdebug.h>
-
-QT_BEGIN_NAMESPACE
-
-QmlVMEMetaObject::QmlVMEMetaObject(QObject *obj,
- const QMetaObject *other,
- const QmlVMEMetaData *meta,
- QmlCompiledData *cdata)
-: object(obj), compiledData(cdata), ctxt(qmlContext(obj)), metaData(meta), methods(0),
- parent(0)
-{
- compiledData->addref();
-
- *static_cast<QMetaObject *>(this) = *other;
- this->d.superdata = obj->metaObject();
-
- QObjectPrivate *op = QObjectPrivate::get(obj);
- if (op->metaObject)
- parent = static_cast<QAbstractDynamicMetaObject*>(op->metaObject);
- op->metaObject = this;
-
- propOffset = QAbstractDynamicMetaObject::propertyOffset();
- methodOffset = QAbstractDynamicMetaObject::methodOffset();
-
- data = new QVariant[metaData->propertyCount];
- aConnected.resize(metaData->aliasCount);
-
- int list_type = qMetaTypeId<QmlListProperty<QObject> >();
- // ### Optimize
- for (int ii = 0; ii < metaData->propertyCount; ++ii) {
- int t = (metaData->propertyData() + ii)->propertyType;
- if (t == list_type) {
- listProperties.append(new List(methodOffset + ii));
- data[ii] = QVariant::fromValue(QmlListProperty<QObject>(obj, listProperties.last(), list_append,
- list_count, list_at, list_clear));
- } else if (t != -1) {
- data[ii] = QVariant((QVariant::Type)t);
- }
- }
-}
-
-QmlVMEMetaObject::~QmlVMEMetaObject()
-{
- compiledData->release();
- delete parent;
- qDeleteAll(listProperties);
- delete [] data;
- delete [] methods;
-}
-
-int QmlVMEMetaObject::metaCall(QMetaObject::Call c, int _id, void **a)
-{
- int id = _id;
- if(c == QMetaObject::WriteProperty) {
- int flags = *reinterpret_cast<int*>(a[3]);
- if (!(flags & QmlMetaProperty::BypassInterceptor)
- && !aInterceptors.isEmpty()
- && aInterceptors.testBit(id)) {
- QPair<int, QmlPropertyValueInterceptor*> pair = interceptors.value(id);
- int valueIndex = pair.first;
- QmlPropertyValueInterceptor *vi = pair.second;
- int type = property(id).userType();
-
- if (type != QVariant::Invalid) {
- if (valueIndex != -1) {
- QmlEnginePrivate *ep = ctxt?QmlEnginePrivate::get(ctxt->engine()):0;
- QmlValueType *valueType = 0;
- if (ep) valueType = ep->valueTypes[type];
- else valueType = QmlValueTypeFactory::valueType(type);
- Q_ASSERT(valueType);
-
- valueType->setValue(QVariant(type, a[0]));
- QMetaProperty valueProp = valueType->metaObject()->property(valueIndex);
- vi->write(valueProp.read(valueType));
-
- if (!ep) delete valueType;
- return -1;
- } else {
- vi->write(QVariant(type, a[0]));
- return -1;
- }
- }
- }
- }
- if(c == QMetaObject::ReadProperty || c == QMetaObject::WriteProperty) {
- if (id >= propOffset) {
- id -= propOffset;
-
- if (id < metaData->propertyCount) {
- int t = (metaData->propertyData() + id)->propertyType;
- bool needActivate = false;
-
- if (t == -1) {
-
- if (c == QMetaObject::ReadProperty) {
- *reinterpret_cast<QVariant *>(a[0]) = data[id];
- } else if (c == QMetaObject::WriteProperty) {
- needActivate =
- (data[id] != *reinterpret_cast<QVariant *>(a[0]));
- data[id] = *reinterpret_cast<QVariant *>(a[0]);
- }
-
- } else {
-
- if (c == QMetaObject::ReadProperty) {
- switch(t) {
- case QVariant::Int:
- *reinterpret_cast<int *>(a[0]) = data[id].toInt();
- break;
- case QVariant::Bool:
- *reinterpret_cast<bool *>(a[0]) = data[id].toBool();
- break;
- case QVariant::Double:
- *reinterpret_cast<double *>(a[0]) = data[id].toDouble();
- break;
- case QVariant::String:
- *reinterpret_cast<QString *>(a[0]) = data[id].toString();
- break;
- case QVariant::Url:
- *reinterpret_cast<QUrl *>(a[0]) = data[id].toUrl();
- break;
- case QVariant::Color:
- *reinterpret_cast<QColor *>(a[0]) = data[id].value<QColor>();
- break;
- case QVariant::Date:
- *reinterpret_cast<QDate *>(a[0]) = data[id].toDate();
- break;
- case QMetaType::QObjectStar:
- *reinterpret_cast<QObject **>(a[0]) = data[id].value<QObject*>();
- break;
- default:
- break;
- }
- if (t == qMetaTypeId<QmlListProperty<QObject> >()) {
- *reinterpret_cast<QmlListProperty<QObject> *>(a[0]) =
- data[id].value<QmlListProperty<QObject> >();
- }
-
- } else if (c == QMetaObject::WriteProperty) {
-
- QVariant value = QVariant((QVariant::Type)data[id].type(), a[0]);
- needActivate = (data[id] != value);
- data[id] = value;
- }
-
- }
-
- if (c == QMetaObject::WriteProperty && needActivate) {
- activate(object, methodOffset + id, 0);
- }
-
- return -1;
- }
-
- id -= metaData->propertyCount;
-
- if (id < metaData->aliasCount) {
-
- QmlVMEMetaData::AliasData *d = metaData->aliasData() + id;
-
- if (d->flags & QML_ALIAS_FLAG_PTR && c == QMetaObject::ReadProperty)
- *reinterpret_cast<void **>(a[0]) = 0;
-
- if (!ctxt) return -1;
- QmlContextPrivate *ctxtPriv =
- (QmlContextPrivate *)QObjectPrivate::get(ctxt);
-
- QObject *target = ctxtPriv->idValues[d->contextIdx].data();
- if (!target)
- return -1;
-
- if (c == QMetaObject::ReadProperty && !aConnected.testBit(id)) {
- int sigIdx = methodOffset + id + metaData->propertyCount;
- QMetaObject::connect(ctxt, d->contextIdx + ctxtPriv->notifyIndex, object, sigIdx);
-
- if (d->propertyIdx != -1) {
- QMetaProperty prop =
- target->metaObject()->property(d->propertyIdx);
- if (prop.hasNotifySignal())
- QMetaObject::connect(target, prop.notifySignalIndex(),
- object, sigIdx);
- }
- aConnected.setBit(id);
- }
-
- if (d->propertyIdx == -1) {
- *reinterpret_cast<QObject **>(a[0]) = target;
- return -1;
- } else {
- return QMetaObject::metacall(target, c, d->propertyIdx, a);
- }
-
- }
- return -1;
-
- }
-
- } else if(c == QMetaObject::InvokeMetaMethod) {
-
- if (id >= methodOffset) {
-
- id -= methodOffset;
- int plainSignals = metaData->signalCount + metaData->propertyCount +
- metaData->aliasCount;
- if (id < plainSignals) {
- QMetaObject::activate(object, _id, a);
- return -1;
- }
-
- id -= plainSignals;
-
- if (id < metaData->methodCount) {
- if (!ctxt->engine())
- return -1; // We can't run the method
-
- QmlEnginePrivate *ep = QmlEnginePrivate::get(ctxt->engine());
-
- QScriptValue function = method(id);
-
- QScriptValueList args;
- QmlVMEMetaData::MethodData *data = metaData->methodData() + id;
- if (data->parameterCount) {
- for (int ii = 0; ii < data->parameterCount; ++ii) {
- args << ep->scriptValueFromVariant(*(QVariant *)a[ii + 1]);
- }
- }
- QScriptValue rv = function.call(ep->objectClass->newQObject(object), args);
-
- if (a[0]) *reinterpret_cast<QVariant *>(a[0]) = ep->scriptValueToVariant(rv);
-
- return -1;
- }
- return -1;
- }
- }
-
- if (parent)
- return parent->metaCall(c, _id, a);
- else
- return object->qt_metacall(c, _id, a);
-}
-
-QScriptValue QmlVMEMetaObject::method(int index)
-{
- if (!methods)
- methods = new QScriptValue[metaData->methodCount];
-
- if (!methods[index].isValid()) {
- QmlVMEMetaData::MethodData *data = metaData->methodData() + index;
-
- const QChar *body =
- (const QChar *)(((const char*)metaData) + data->bodyOffset);
-
- QString code = QString::fromRawData(body, data->bodyLength);
-
- // XXX Use QScriptProgram
- // XXX We should evaluate all methods in a single big script block to
- // improve the call time between dynamic methods defined on the same
- // object
- methods[index] = QmlExpressionPrivate::evalInObjectScope(ctxt, object, code);
- }
-
- return methods[index];
-}
-
-void QmlVMEMetaObject::listChanged(int id)
-{
- activate(object, methodOffset + id, 0);
-}
-
-void QmlVMEMetaObject::list_append(QmlListProperty<QObject> *prop, QObject *o)
-{
- List *list = static_cast<List *>(prop->data);
- list->append(o);
- QMetaObject::activate(prop->object, list->notifyIndex, 0);
-}
-
-int QmlVMEMetaObject::list_count(QmlListProperty<QObject> *prop)
-{
- return static_cast<List *>(prop->data)->count();
-}
-
-QObject *QmlVMEMetaObject::list_at(QmlListProperty<QObject> *prop, int index)
-{
- return static_cast<List *>(prop->data)->at(index);
-}
-
-void QmlVMEMetaObject::list_clear(QmlListProperty<QObject> *prop)
-{
- List *list = static_cast<List *>(prop->data);
- list->clear();
- QMetaObject::activate(prop->object, list->notifyIndex, 0);
-}
-
-void QmlVMEMetaObject::registerInterceptor(int index, int valueIndex, QmlPropertyValueInterceptor *interceptor)
-{
- if (aInterceptors.isEmpty())
- aInterceptors.resize(propertyCount() + metaData->propertyCount);
- aInterceptors.setBit(index);
- interceptors.insert(index, qMakePair(valueIndex, interceptor));
-}
-
-QScriptValue QmlVMEMetaObject::vmeMethod(int index)
-{
- if (index < methodOffset) {
- Q_ASSERT(parent);
- return static_cast<QmlVMEMetaObject *>(parent)->vmeMethod(index);
- }
- int plainSignals = metaData->signalCount + metaData->propertyCount + metaData->aliasCount;
- Q_ASSERT(index >= (methodOffset + plainSignals) && index < (methodOffset + plainSignals + metaData->methodCount));
- return method(index - methodOffset - plainSignals);
-}
-
-QT_END_NAMESPACE