summaryrefslogtreecommitdiffstats
path: root/src/declarative/qml
diff options
context:
space:
mode:
authorWarwick Allison <warwick.allison@nokia.com>2009-07-23 01:32:46 (GMT)
committerWarwick Allison <warwick.allison@nokia.com>2009-07-23 01:32:46 (GMT)
commit6f7b1c9270131d2a55218b14f3ec29cc553c8e2f (patch)
tree8161b08aad3e0cad07983707f0e4482cee0a36db /src/declarative/qml
parent8987d9c2946d2cc565cec562393ee3627582699f (diff)
downloadQt-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.h8
-rw-r--r--src/declarative/qml/qmlcomponent.cpp2
-rw-r--r--src/declarative/qml/qmlcustomparser_p.h4
-rw-r--r--src/declarative/qml/qmlengine.cpp2
-rw-r--r--src/declarative/qml/qmlmetatype.cpp61
-rw-r--r--src/declarative/qml/qmlmetatype.h17
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>(),