diff options
author | Warwick Allison <warwick.allison@nokia.com> | 2009-07-23 01:32:46 (GMT) |
---|---|---|
committer | Warwick Allison <warwick.allison@nokia.com> | 2009-07-23 01:32:46 (GMT) |
commit | 6f7b1c9270131d2a55218b14f3ec29cc553c8e2f (patch) | |
tree | 8161b08aad3e0cad07983707f0e4482cee0a36db /src/declarative/qml | |
parent | 8987d9c2946d2cc565cec562393ee3627582699f (diff) | |
download | Qt-6f7b1c9270131d2a55218b14f3ec29cc553c8e2f.zip Qt-6f7b1c9270131d2a55218b14f3ec29cc553c8e2f.tar.gz Qt-6f7b1c9270131d2a55218b14f3ec29cc553c8e2f.tar.bz2 |
Allow span of versions to be defined, not just one.
Span is from version where introduced (all 4.6) to current QT_VERSION.
Diffstat (limited to 'src/declarative/qml')
-rw-r--r-- | src/declarative/qml/qml.h | 8 | ||||
-rw-r--r-- | src/declarative/qml/qmlcomponent.cpp | 2 | ||||
-rw-r--r-- | src/declarative/qml/qmlcustomparser_p.h | 4 | ||||
-rw-r--r-- | src/declarative/qml/qmlengine.cpp | 2 | ||||
-rw-r--r-- | src/declarative/qml/qmlmetatype.cpp | 61 | ||||
-rw-r--r-- | src/declarative/qml/qmlmetatype.h | 17 |
6 files changed, 64 insertions, 30 deletions
diff --git a/src/declarative/qml/qml.h b/src/declarative/qml/qml.h index 5dd57bc..e7fbff3 100644 --- a/src/declarative/qml/qml.h +++ b/src/declarative/qml/qml.h @@ -76,11 +76,11 @@ QT_BEGIN_NAMESPACE #define QML_DEFINE_INTERFACE(INTERFACE) \ template<> QmlPrivate::InstanceType QmlPrivate::Define<INTERFACE *>::instance(qmlRegisterInterface<INTERFACE>(#INTERFACE)); -#define QML_DEFINE_EXTENDED_TYPE(URI, VERSION, NAME, TYPE, EXTENSION) \ - template<> QmlPrivate::InstanceType QmlPrivate::Define<TYPE *>::instance(qmlRegisterExtendedType<TYPE,EXTENSION>(#URI, #VERSION, #NAME, #TYPE)); +#define QML_DEFINE_EXTENDED_TYPE(URI, VERSION_MAJ, VERSION_MIN_FROM, VERSION_MIN_TO, NAME, TYPE, EXTENSION) \ + template<> QmlPrivate::InstanceType QmlPrivate::Define<TYPE *>::instance(qmlRegisterExtendedType<TYPE,EXTENSION>(#URI, VERSION_MAJ, VERSION_MIN_FROM, VERSION_MIN_TO, #NAME, #TYPE)); -#define QML_DEFINE_TYPE(URI, VERSION, NAME, TYPE) \ - template<> QmlPrivate::InstanceType QmlPrivate::Define<TYPE *>::instance(qmlRegisterType<TYPE>(#URI, #VERSION, #NAME, #TYPE)); +#define QML_DEFINE_TYPE(URI, VERSION_MAJ, VERSION_MIN_FROM, VERSION_MIN_TO, NAME, TYPE) \ + template<> QmlPrivate::InstanceType QmlPrivate::Define<TYPE *>::instance(qmlRegisterType<TYPE>(#URI, VERSION_MAJ, VERSION_MIN_FROM, VERSION_MIN_TO, #NAME, #TYPE)); #define QML_DEFINE_EXTENDED_NOCREATE_TYPE(TYPE, EXTENSION) \ template<> QmlPrivate::InstanceType QmlPrivate::Define<TYPE *>::instance(qmlRegisterExtendedType<TYPE,EXTENSION>(#TYPE)); diff --git a/src/declarative/qml/qmlcomponent.cpp b/src/declarative/qml/qmlcomponent.cpp index 4de114d..d5afaeb 100644 --- a/src/declarative/qml/qmlcomponent.cpp +++ b/src/declarative/qml/qmlcomponent.cpp @@ -95,7 +95,7 @@ Item { } \endqml */ -QML_DEFINE_TYPE(Qt,4.6,Component,QmlComponent); +QML_DEFINE_TYPE(Qt,4,6,(QT_VERSION&0x00ff00)>>8,Component,QmlComponent); /*! \enum QmlComponent::Status diff --git a/src/declarative/qml/qmlcustomparser_p.h b/src/declarative/qml/qmlcustomparser_p.h index 63144d6..3d55d3e 100644 --- a/src/declarative/qml/qmlcustomparser_p.h +++ b/src/declarative/qml/qmlcustomparser_p.h @@ -112,8 +112,8 @@ public: virtual QByteArray compile(const QList<QmlCustomParserProperty> &, bool *ok); virtual void setCustomData(QObject *, const QByteArray &); }; -#define QML_DEFINE_CUSTOM_TYPE(URI, VERSION, NAME, TYPE, CUSTOMTYPE) \ - template<> QmlPrivate::InstanceType QmlPrivate::Define<TYPE *>::instance(qmlRegisterCustomType<TYPE>(#URI, #VERSION, #NAME, #TYPE, new CUSTOMTYPE)); +#define QML_DEFINE_CUSTOM_TYPE(URI, VERSION_MAJ, VERSION_MIN_FROM, VERSION_MAJ_TO, NAME, TYPE, CUSTOMTYPE) \ + template<> QmlPrivate::InstanceType QmlPrivate::Define<TYPE *>::instance(qmlRegisterCustomType<TYPE>(#URI, VERSION_MAJ, VERSION_MIN_FROM, VERSION_MAJ_TO, #NAME, #TYPE, new CUSTOMTYPE)); QT_END_NAMESPACE diff --git a/src/declarative/qml/qmlengine.cpp b/src/declarative/qml/qmlengine.cpp index 492be3b..2589a16 100644 --- a/src/declarative/qml/qmlengine.cpp +++ b/src/declarative/qml/qmlengine.cpp @@ -85,7 +85,7 @@ QT_BEGIN_NAMESPACE DEFINE_BOOL_CONFIG_OPTION(qmlDebugger, QML_DEBUGGER) DEFINE_BOOL_CONFIG_OPTION(qmlImportTrace, QML_IMPORT_TRACE) -QML_DEFINE_TYPE(Qt,4.6,Object,QObject) +QML_DEFINE_TYPE(Qt,4,6,(QT_VERSION&0x00ff00)>>8,Object,QObject) struct StaticQtMetaObject : public QObject { diff --git a/src/declarative/qml/qmlmetatype.cpp b/src/declarative/qml/qmlmetatype.cpp index bb05ebd..f65ead8 100644 --- a/src/declarative/qml/qmlmetatype.cpp +++ b/src/declarative/qml/qmlmetatype.cpp @@ -417,31 +417,62 @@ int QmlMetaType::registerInterface(const QmlPrivate::MetaTypeIds &id, return index; } -int QmlMetaType::registerType(const QmlPrivate::MetaTypeIds &id, QmlPrivate::Func func, const char *uri, const char *version, const char *cname, const QMetaObject *mo, QmlAttachedPropertiesFunc attach, const QMetaObject *attachMo, int pStatus, int object, QmlPrivate::CreateFunc extFunc, const QMetaObject *extmo, QmlCustomParser *parser) +int QmlMetaType::registerType(const QmlPrivate::MetaTypeIds &id, QmlPrivate::Func func, + const char *uri, int version_maj, int version_min_from, int version_min_to, const char *cname, + const QMetaObject *mo, QmlAttachedPropertiesFunc attach, const QMetaObject *attachMo, + int pStatus, int object, QmlPrivate::CreateFunc extFunc, const QMetaObject *extmo, QmlCustomParser *parser) +{ + QByteArray version; + if (uri && (version_maj || version_min_from || version_min_to)) { + if (version_min_from != version_min_to) { + int r=-1; + for (int min=version_min_from; min<=version_min_to; ++min) { + int e = registerType(id,func,uri,version_maj,min,min,cname,mo,attach,attachMo,pStatus,object,extFunc,extmo,parser); + if (e<0) return -1; + if (r<0) r = e; + } + return r; // returns index of FIRST version of type (not currently used anywhere though) + } + version = QByteArray::number(version_maj) + '.' + QByteArray::number(version_min_from); + } else { + // No URI? No version! + Q_ASSERT(!version_maj && !version_min_from && !version_min_to); + } + return registerType(id,func,uri,version,cname,mo,attach,attachMo,pStatus,object,extFunc,extmo,parser); +} + + +int QmlMetaType::registerType(const QmlPrivate::MetaTypeIds &id, QmlPrivate::Func func, + const char *uri, const char *version, const char *cname, + const QMetaObject *mo, QmlAttachedPropertiesFunc attach, const QMetaObject *attachMo, + int pStatus, int object, QmlPrivate::CreateFunc extFunc, const QMetaObject *extmo, QmlCustomParser *parser) { Q_UNUSED(object); - QWriteLocker lock(metaTypeDataLock()); - QmlMetaTypeData *data = metaTypeData(); - QByteArray name = cname; - for (int ii = 0; ii < name.count(); ++ii) { - if (!isalnum(name.at(ii))) { - qWarning("QmlMetaType: Invalid QML name %s", cname); - return -1; - } - } - - // XXX Only adding specified version. Need all relevant versions! if (uri) { - if (version) + if (version) { name = QByteArray(uri) + '/' + version + '/' + name; - else + } else { name = QByteArray(uri) + '/' + name; + } } else { + // No URI? No version! Q_ASSERT(!version); } + if (cname) { + for (int ii = 0; cname[ii]; ++ii) { + if (!isalnum(cname[ii])) { + qWarning("QmlMetaType: Invalid QML name %s", cname); + return -1; + } + } + } + + QWriteLocker lock(metaTypeDataLock()); + QmlMetaTypeData *data = metaTypeData(); + int index = data->types.count(); QmlType *type = new QmlType(id.typeId, id.listId, id.qmlListId, @@ -468,7 +499,7 @@ int QmlMetaType::registerType(const QmlPrivate::MetaTypeIds &id, QmlPrivate::Fun data->qmllists.setBit(id.qmlListId, true); data->lists.setBit(id.listId, true); - return index; + return index; // Note: multi-version call only uses first. } int QmlMetaType::qmlParserStatusCast(int userType) diff --git a/src/declarative/qml/qmlmetatype.h b/src/declarative/qml/qmlmetatype.h index d83b83e..e023e83 100644 --- a/src/declarative/qml/qmlmetatype.h +++ b/src/declarative/qml/qmlmetatype.h @@ -59,7 +59,8 @@ class QmlCustomParser; class Q_DECLARATIVE_EXPORT QmlMetaType { public: - static int registerType(const QmlPrivate::MetaTypeIds &, QmlPrivate::Func, const char *, const char *, const char *, const QMetaObject *, QmlAttachedPropertiesFunc, const QMetaObject *, int pStatus, int object, QmlPrivate::CreateFunc extFunc, const QMetaObject *extmo, QmlCustomParser *); + static int registerType(const QmlPrivate::MetaTypeIds &, QmlPrivate::Func, const char *, const char *version, const char *qmlName, const QMetaObject *, QmlAttachedPropertiesFunc, const QMetaObject *, int pStatus, int object, QmlPrivate::CreateFunc extFunc, const QMetaObject *extmo, QmlCustomParser *); + static int registerType(const QmlPrivate::MetaTypeIds &, QmlPrivate::Func, const char *, int vmaj, int vmin_from, int vmin_to, const char *qmlName, const QMetaObject *, QmlAttachedPropertiesFunc, const QMetaObject *, int pStatus, int object, QmlPrivate::CreateFunc extFunc, const QMetaObject *extmo, QmlCustomParser *); static int registerInterface(const QmlPrivate::MetaTypeIds &, QmlPrivate::Func, const char *); static bool copy(int type, void *data, const void *copy = 0); @@ -173,7 +174,7 @@ int qmlRegisterType(const char *typeName) } template<typename T> -int qmlRegisterType(const char *uri, const char *version, const char *qmlName, const char *typeName) +int qmlRegisterType(const char *uri, int version_maj, int version_min_from, int version_min_to, const char *qmlName, const char *typeName) { QByteArray name(typeName); QmlPrivate::MetaTypeIds ids = { @@ -182,7 +183,8 @@ int qmlRegisterType(const char *uri, const char *version, const char *qmlName, c qRegisterMetaType<T *>(QByteArray("QmlList<" + name + "*>*").constData()) }; - return QmlMetaType::registerType(ids, QmlPrivate::list_op<T>, uri, version, qmlName, + return QmlMetaType::registerType(ids, QmlPrivate::list_op<T>, + uri, version_maj, version_min_from, version_min_to, qmlName, &T::staticMetaObject, QmlPrivate::attachedPropertiesFunc<T>(), QmlPrivate::attachedPropertiesMetaObject<T>(), @@ -218,7 +220,7 @@ int qmlRegisterExtendedType(const char *typeName) } template<typename T, typename E> -int qmlRegisterExtendedType(const char *uri, const char *version, const char *qmlName, const char *typeName) +int qmlRegisterExtendedType(const char *uri, int version_maj, int version_min_from, int version_min_to, const char *qmlName, const char *typeName) { QByteArray name(typeName); QmlPrivate::MetaTypeIds ids = { @@ -237,7 +239,7 @@ int qmlRegisterExtendedType(const char *uri, const char *version, const char *qm } return QmlMetaType::registerType(ids, QmlPrivate::list_op<T>, - uri, version, qmlName, + uri, version_maj, version_min_from, version_min_to, qmlName, &T::staticMetaObject, attached, attachedMo, QmlPrivate::StaticCastSelector<T,QmlParserStatus>::cast(), @@ -262,7 +264,7 @@ int qmlRegisterInterface(const char *typeName) } template<typename T> -int qmlRegisterCustomType(const char *uri, const char *version, const char *qmlName, const char *typeName, QmlCustomParser *parser) +int qmlRegisterCustomType(const char *uri, int version_maj, int version_min_from, int version_min_to, const char *qmlName, const char *typeName, QmlCustomParser *parser) { QByteArray name(typeName); QmlPrivate::MetaTypeIds ids = { @@ -271,7 +273,8 @@ int qmlRegisterCustomType(const char *uri, const char *version, const char *qmlN qRegisterMetaType<T *>(QByteArray("QmlList<" + name + "*>*").constData()) }; - return QmlMetaType::registerType(ids, QmlPrivate::list_op<T>, uri, version, qmlName, + return QmlMetaType::registerType(ids, QmlPrivate::list_op<T>, + uri, version_maj, version_min_from, version_min_to, qmlName, &T::staticMetaObject, QmlPrivate::attachedPropertiesFunc<T>(), QmlPrivate::attachedPropertiesMetaObject<T>(), |