X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fdeclarative%2Fqml%2Fqdeclarativemetatype.cpp;h=ac9d23184f63d42d1fbaced5636bd2f9d80aea8b;hb=45b14259fc0cf704692df1c00da511527d1fba1d;hp=5577993fc5532a2b65192b818c47074e3da5f4f7;hpb=7fa3aa4d48c3b7d9bf17b6135bc6bdeb62e899d2;p=profile%2Fivi%2Fqtdeclarative.git diff --git a/src/declarative/qml/qdeclarativemetatype.cpp b/src/declarative/qml/qdeclarativemetatype.cpp index 5577993..ac9d231 100644 --- a/src/declarative/qml/qdeclarativemetatype.cpp +++ b/src/declarative/qml/qdeclarativemetatype.cpp @@ -1,8 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ ** ** This file is part of the QtDeclarative module of the Qt Toolkit. ** @@ -35,6 +34,7 @@ ** ** ** +** ** $QT_END_LICENSE$ ** ****************************************************************************/ @@ -56,36 +56,14 @@ #include #include -#include #include #include #include #include #include -#include -#include #include -#ifdef QT_BOOTSTRAPPED -# ifndef QT_NO_GEOM_VARIANT -# define QT_NO_GEOM_VARIANT -# endif -#else -# include -# include -# include -#endif - -#ifndef QT_NO_GEOM_VARIANT -# include -# include -# include -# include -# include -#endif -#define NS(x) QT_PREPEND_NAMESPACE(x) - QT_BEGIN_NAMESPACE struct QDeclarativeMetaTypeData @@ -429,8 +407,10 @@ void QDeclarativeTypePrivate::init() const // XXX - very inefficient const QMetaObject *mo = m_baseMetaObject; if (m_extFunc) { - QMetaObject *mmo = new QMetaObject; - *mmo = *m_extMetaObject; + QMetaObjectBuilder builder; + clone(builder, m_extMetaObject, m_extMetaObject, m_extMetaObject); + builder.setFlags(QMetaObjectBuilder::DynamicMetaObject); + QMetaObject *mmo = builder.toMetaObject(); mmo->d.superdata = mo; QDeclarativeProxyMetaObject::ProxyData data = { mmo, m_extFunc, 0, 0 }; m_metaObjects << data; @@ -443,6 +423,7 @@ void QDeclarativeTypePrivate::init() const if (t->d->m_extFunc) { QMetaObjectBuilder builder; clone(builder, t->d->m_extMetaObject, t->d->m_baseMetaObject, m_baseMetaObject); + builder.setFlags(QMetaObjectBuilder::DynamicMetaObject); QMetaObject *mmo = builder.toMetaObject(); mmo->d.superdata = m_baseMetaObject; if (!m_metaObjects.isEmpty()) @@ -1056,6 +1037,21 @@ QDeclarativeMetaType::moduleApi(const QString &uri, int versionMajor, int versio return ModuleApi(); } +QHash > QDeclarativeMetaType::moduleApis() +{ + QReadLocker lock(metaTypeDataLock()); + QDeclarativeMetaTypeData *data = metaTypeData(); + + QHash > moduleApis; + QHashIterator it(data->moduleApis); + while (it.hasNext()) { + it.next(); + moduleApis[it.key()] = it.value().moduleApis; + } + + return moduleApis; +} + QObject *QDeclarativeMetaType::toQObject(const QVariant &v, bool *ok) { if (!isQObject(v.userType())) { @@ -1338,545 +1334,26 @@ QList QDeclarativeMetaType::qmlTypes() return data->nameToType.values(); } -QT_END_NAMESPACE - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -//#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -Q_DECLARE_METATYPE(QJSValue); -Q_DECLARE_METATYPE(QDeclarativeV8Handle); - -QT_BEGIN_NAMESPACE - -bool QDeclarativeMetaType::canCopy(int type) -{ - switch(type) { - case QMetaType::VoidStar: - case QMetaType::QObjectStar: - case QMetaType::QWidgetStar: - case QMetaType::Long: - case QMetaType::Int: - case QMetaType::Short: - case QMetaType::Char: - case QMetaType::ULong: - case QMetaType::UInt: - case QMetaType::LongLong: - case QMetaType::ULongLong: - case QMetaType::UShort: - case QMetaType::UChar: - case QMetaType::Bool: - case QMetaType::Float: - case QMetaType::Double: - case QMetaType::QChar: - case QMetaType::QVariantMap: - case QMetaType::QVariantHash: - case QMetaType::QVariantList: - case QMetaType::QByteArray: - case QMetaType::QString: - case QMetaType::QStringList: - case QMetaType::QBitArray: - case QMetaType::QDate: - case QMetaType::QTime: - case QMetaType::QDateTime: - case QMetaType::QUrl: - case QMetaType::QLocale: - case QMetaType::QRect: - case QMetaType::QRectF: - case QMetaType::QSize: - case QMetaType::QSizeF: - case QMetaType::QLine: - case QMetaType::QLineF: - case QMetaType::QPoint: - case QMetaType::QPointF: - case QMetaType::QVector3D: -#ifndef QT_NO_REGEXP - case QMetaType::QRegExp: -#endif - case QMetaType::Void: -#ifdef QT3_SUPPORT - case QMetaType::QColorGroup: -#endif - case QMetaType::QFont: - case QMetaType::QPixmap: - case QMetaType::QBrush: - case QMetaType::QColor: - case QMetaType::QPalette: - case QMetaType::QImage: - case QMetaType::QPolygon: - case QMetaType::QRegion: - case QMetaType::QBitmap: -#ifndef QT_NO_CURSOR - case QMetaType::QCursor: -#endif - case QMetaType::QKeySequence: - case QMetaType::QPen: - case QMetaType::QTextLength: - case QMetaType::QTextFormat: - case QMetaType::QMatrix: - case QMetaType::QTransform: - case QMetaType::QMatrix4x4: - case QMetaType::QVector2D: - case QMetaType::QVector4D: - case QMetaType::QQuaternion: - return true; - - default: - if (type == qMetaTypeId() || - type == qMetaTypeId() || - type == qMetaTypeId() || - typeCategory(type) != Unknown) { - return true; - } - break; +int QDeclarativeMetaType::QQuickAnchorLineMetaTypeId() +{ + static int id = 0; + if (!id) { + id = QMetaType::type("QQuickAnchorLine"); } - - return false; + return id; } -/*! - Copies \a copy into \a data, assuming they both are of type \a type. If - \a copy is zero, a default type is copied. Returns true if the copy was - successful and false if not. - - \note This should move into QMetaType once complete - -*/ -bool QDeclarativeMetaType::copy(int type, void *data, const void *copy) -{ - if (copy) { - switch(type) { - case QMetaType::VoidStar: - case QMetaType::QObjectStar: - case QMetaType::QWidgetStar: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::Long: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::Int: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::Short: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::Char: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::ULong: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::UInt: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::LongLong: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::ULongLong: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::UShort: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::UChar: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::Bool: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::Float: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::Double: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QChar: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QVariantMap: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QVariantHash: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QVariantList: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QByteArray: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QString: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QStringList: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QBitArray: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QDate: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QTime: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QDateTime: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QUrl: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QLocale: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QRect: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QRectF: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QSize: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QSizeF: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QLine: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QLineF: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QPoint: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QPointF: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QVector3D: - *static_cast(data) = *static_cast(copy); - return true; -#ifndef QT_NO_REGEXP - case QMetaType::QRegExp: - *static_cast(data) = *static_cast(copy); - return true; -#endif - case QMetaType::Void: - return true; - +QDeclarativeMetaType::CompareFunction QDeclarativeMetaType::anchorLineCompareFunction = 0; -#ifdef QT3_SUPPORT - case QMetaType::QColorGroup: - *static_cast(data) = *static_cast(copy); - return true; -#endif - - case QMetaType::QFont: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QPixmap: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QBrush: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QColor: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QPalette: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QImage: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QPolygon: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QRegion: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QBitmap: - *static_cast(data) = *static_cast(copy); - return true; -#ifndef QT_NO_CURSOR - case QMetaType::QCursor: - *static_cast(data) = *static_cast(copy); - return true; -#endif - case QMetaType::QKeySequence: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QPen: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QTextLength: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QTextFormat: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QMatrix: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QTransform: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QMatrix4x4: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QVector2D: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QVector4D: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QQuaternion: - *static_cast(data) = *static_cast(copy); - return true; - - default: - if (type == qMetaTypeId()) { - *static_cast(data) = *static_cast(copy); - return true; - } else if (type == qMetaTypeId()) { - *static_cast(data) = *static_cast(copy); - return true; - } else if (type == qMetaTypeId()) { - *static_cast(data) = *static_cast(copy); - return true; - } else if (typeCategory(type) != Unknown) { - *static_cast(data) = *static_cast(copy); - return true; - } - break; - } - } else { - switch(type) { - case QMetaType::VoidStar: - case QMetaType::QObjectStar: - case QMetaType::QWidgetStar: - *static_cast(data) = 0; - return true; - case QMetaType::Long: - *static_cast(data) = long(0); - return true; - case QMetaType::Int: - *static_cast(data) = int(0); - return true; - case QMetaType::Short: - *static_cast(data) = short(0); - return true; - case QMetaType::Char: - *static_cast(data) = char(0); - return true; - case QMetaType::ULong: - *static_cast(data) = ulong(0); - return true; - case QMetaType::UInt: - *static_cast(data) = uint(0); - return true; - case QMetaType::LongLong: - *static_cast(data) = qlonglong(0); - return true; - case QMetaType::ULongLong: - *static_cast(data) = qulonglong(0); - return true; - case QMetaType::UShort: - *static_cast(data) = ushort(0); - return true; - case QMetaType::UChar: - *static_cast(data) = uchar(0); - return true; - case QMetaType::Bool: - *static_cast(data) = bool(false); - return true; - case QMetaType::Float: - *static_cast(data) = float(0); - return true; - case QMetaType::Double: - *static_cast(data) = double(0); - return true; - case QMetaType::QChar: - *static_cast(data) = NS(QChar)(); - return true; - case QMetaType::QVariantMap: - *static_cast(data) = NS(QVariantMap)(); - return true; - case QMetaType::QVariantHash: - *static_cast(data) = NS(QVariantHash)(); - return true; - case QMetaType::QVariantList: - *static_cast(data) = NS(QVariantList)(); - return true; - case QMetaType::QByteArray: - *static_cast(data) = NS(QByteArray)(); - return true; - case QMetaType::QString: - *static_cast(data) = NS(QString)(); - return true; - case QMetaType::QStringList: - *static_cast(data) = NS(QStringList)(); - return true; - case QMetaType::QBitArray: - *static_cast(data) = NS(QBitArray)(); - return true; - case QMetaType::QDate: - *static_cast(data) = NS(QDate)(); - return true; - case QMetaType::QTime: - *static_cast(data) = NS(QTime)(); - return true; - case QMetaType::QDateTime: - *static_cast(data) = NS(QDateTime)(); - return true; - case QMetaType::QUrl: - *static_cast(data) = NS(QUrl)(); - return true; - case QMetaType::QLocale: - *static_cast(data) = NS(QLocale)(); - return true; - case QMetaType::QRect: - *static_cast(data) = NS(QRect)(); - return true; - case QMetaType::QRectF: - *static_cast(data) = NS(QRectF)(); - return true; - case QMetaType::QSize: - *static_cast(data) = NS(QSize)(); - return true; - case QMetaType::QSizeF: - *static_cast(data) = NS(QSizeF)(); - return true; - case QMetaType::QLine: - *static_cast(data) = NS(QLine)(); - return true; - case QMetaType::QLineF: - *static_cast(data) = NS(QLineF)(); - return true; - case QMetaType::QPoint: - *static_cast(data) = NS(QPoint)(); - return true; - case QMetaType::QPointF: - *static_cast(data) = NS(QPointF)(); - return true; - case QMetaType::QVector3D: - *static_cast(data) = NS(QVector3D)(); - return true; -#ifndef QT_NO_REGEXP - case QMetaType::QRegExp: - *static_cast(data) = NS(QRegExp)(); - return true; -#endif - case QMetaType::Void: - return true; - -#ifdef QT3_SUPPORT - case QMetaType::QColorGroup: - *static_cast(data) = NS(QColorGroup)(); - return true; -#endif - - case QMetaType::QFont: - *static_cast(data) = NS(QFont)(); - return true; - case QMetaType::QPixmap: - *static_cast(data) = NS(QPixmap)(); - return true; - case QMetaType::QBrush: - *static_cast(data) = NS(QBrush)(); - return true; - case QMetaType::QColor: - *static_cast(data) = NS(QColor)(); - return true; - case QMetaType::QPalette: - *static_cast(data) = NS(QPalette)(); - return true; - case QMetaType::QImage: - *static_cast(data) = NS(QImage)(); - return true; - case QMetaType::QPolygon: - *static_cast(data) = NS(QPolygon)(); - return true; - case QMetaType::QRegion: - *static_cast(data) = NS(QRegion)(); - return true; - case QMetaType::QBitmap: - *static_cast(data) = NS(QBitmap)(); - return true; -#ifndef QT_NO_CURSOR - case QMetaType::QCursor: - *static_cast(data) = NS(QCursor)(); - return true; -#endif - case QMetaType::QKeySequence: - *static_cast(data) = NS(QKeySequence)(); - return true; - case QMetaType::QPen: - *static_cast(data) = NS(QPen)(); - return true; - case QMetaType::QTextLength: - *static_cast(data) = NS(QTextLength)(); - return true; - case QMetaType::QTextFormat: - *static_cast(data) = NS(QTextFormat)(); - return true; - case QMetaType::QMatrix: - *static_cast(data) = NS(QMatrix)(); - return true; - case QMetaType::QTransform: - *static_cast(data) = NS(QTransform)(); - return true; - case QMetaType::QMatrix4x4: - *static_cast(data) = NS(QMatrix4x4)(); - return true; - case QMetaType::QVector2D: - *static_cast(data) = NS(QVector2D)(); - return true; - case QMetaType::QVector4D: - *static_cast(data) = NS(QVector4D)(); - return true; - case QMetaType::QQuaternion: - *static_cast(data) = NS(QQuaternion)(); - return true; - default: - if (type == qMetaTypeId()) { - *static_cast(data) = NS(QVariant)(); - return true; - } else if (type == qMetaTypeId()) { - *static_cast(data) = NS(QJSValue)(); - return true; - } else if (type == qMetaTypeId()) { - *static_cast(data) = NS(QDeclarativeV8Handle)(); - return true; - } else if (typeCategory(type) != Unknown) { - *static_cast(data) = 0; - return true; - } - break; - } - } +void QDeclarativeMetaType::setQQuickAnchorLineCompareFunction(CompareFunction fun) +{ + anchorLineCompareFunction = fun; +} - return false; +bool QDeclarativeMetaType::QQuickAnchorLineCompare(const void *p1, const void *p2) +{ + Q_ASSERT(anchorLineCompareFunction != 0); + return anchorLineCompareFunction(p1, p2); } QT_END_NAMESPACE