From 85462598d5adef315e77c88339e469bcb46b97b1 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 3 May 2013 11:11:27 -0700 Subject: Backport qmlRegisterUncreatableType with version template Otherwise it is not possible to extend or add uncreatable types safely. Change-Id: I22e81bb46a69efcec3522454d5ad465099b2555b Reviewed-by: Christopher Adams Reviewed-by: Alan Alpert (Personal) <416365416c@gmail.com> --- src/declarative/qml/qdeclarativeprivate.h | 45 +++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/declarative/qml/qdeclarativeprivate.h b/src/declarative/qml/qdeclarativeprivate.h index 263d9b8..7fc9830 100644 --- a/src/declarative/qml/qdeclarativeprivate.h +++ b/src/declarative/qml/qdeclarativeprivate.h @@ -56,6 +56,10 @@ #include #include #include +#include +#include +#include +#include QT_BEGIN_HEADER @@ -279,6 +283,47 @@ namespace QDeclarativePrivate return qmlregister(QDeclarativePrivate::ComponentRegistration, &type); } + /*! + \internal + \fn int qmlRegisterUncreatableType(const char *url, const char *uri, int versionMajor, int versionMinor, const char *qmlName); + \relates QDeclarativeEngine + + This overload is backported from Qt5, and allows uncreatable types to be versioned. + */ + template + int qmlRegisterUncreatableType(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString& reason) + { + QByteArray name(T::staticMetaObject.className()); + + QByteArray pointerName(name + '*'); + QByteArray listName("QDeclarativeListProperty<" + name + ">"); + + QDeclarativePrivate::RegisterType type = { + 1, + + qRegisterMetaType(pointerName.constData()), + qRegisterMetaType >(listName.constData()), + 0, 0, + reason, + + uri, versionMajor, versionMinor, qmlName, &T::staticMetaObject, + + QDeclarativePrivate::attachedPropertiesFunc(), + QDeclarativePrivate::attachedPropertiesMetaObject(), + + QDeclarativePrivate::StaticCastSelector::cast(), + QDeclarativePrivate::StaticCastSelector::cast(), + QDeclarativePrivate::StaticCastSelector::cast(), + + 0, 0, + + 0, + metaObjectRevision + }; + + return QDeclarativePrivate::qmlregister(QDeclarativePrivate::TypeRegistration, &type); + } + } -- cgit v0.12