From 7eb5fc91a30a360507a65c19b6a3b96f757c2c4e Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Wed, 24 Feb 2010 17:03:42 +1000 Subject: Simplify QML element registration headers --- src/declarative/qml/qdeclarative.h | 212 +++++++++++++++++++-- src/declarative/qml/qdeclarativebinding_p.h | 1 + src/declarative/qml/qdeclarativeengine.cpp | 12 ++ src/declarative/qml/qdeclarativeengine_p.h | 1 + src/declarative/qml/qdeclarativeguard_p.h | 1 + src/declarative/qml/qdeclarativelist.h | 6 +- src/declarative/qml/qdeclarativemetatype.cpp | 127 ++++++------ src/declarative/qml/qdeclarativemetatype.h | 147 +------------- src/declarative/qml/qdeclarativeparser_p.h | 6 +- src/declarative/qml/qdeclarativeprivate.cpp | 48 ----- src/declarative/qml/qdeclarativeprivate.h | 68 +++---- src/declarative/qml/qml.pri | 1 - src/declarative/util/qdeclarativeanimation.cpp | 1 + src/declarative/util/qdeclarativebind.cpp | 1 + src/declarative/util/qdeclarativeconnection.cpp | 1 + src/declarative/util/qdeclarativefontloader.cpp | 1 + src/declarative/util/qdeclarativefontloader_p.h | 1 + src/declarative/util/qdeclarativestate_p.h | 2 +- src/declarative/util/qdeclarativexmllistmodel.cpp | 1 + src/declarative/util/qdeclarativexmllistmodel_p.h | 2 + src/declarative/util/qnumberformat.cpp | 1 + .../declarative/qdeclarativelanguage/testtypes.h | 1 + .../tst_qdeclarativelanguage.cpp | 1 + .../tst_qdeclarativelistreference.cpp | 1 + .../qdeclarativemoduleplugin/plugin/plugin.cpp | 1 + .../declarative/qdeclarativevaluetypes/testtypes.h | 1 + tools/qml/qdeclarativefolderlistmodel.h | 2 + tools/qml/qfxtester.h | 2 + 28 files changed, 335 insertions(+), 315 deletions(-) delete mode 100644 src/declarative/qml/qdeclarativeprivate.cpp diff --git a/src/declarative/qml/qdeclarative.h b/src/declarative/qml/qdeclarative.h index ee5a27a..3133d27 100644 --- a/src/declarative/qml/qdeclarative.h +++ b/src/declarative/qml/qdeclarative.h @@ -39,18 +39,16 @@ ** ****************************************************************************/ -#ifndef QML_H -#define QML_H +#ifndef QDECLARATIVE_H +#define QDECLARATIVE_H -#include "qdeclarativemetatype.h" -#include "qdeclarativemetaproperty.h" +#include "qdeclarativeprivate.h" #include "qdeclarativeparserstatus.h" #include "qdeclarativepropertyvaluesource.h" +#include "qdeclarativepropertyvalueinterceptor.h" #include "qdeclarativelist.h" #include -#include -#include #include QT_BEGIN_HEADER @@ -88,6 +86,195 @@ QT_BEGIN_NAMESPACE QT_MODULE(Declarative) +template +int qmlRegisterType(const char *typeName) +{ + QByteArray name(typeName); + + QByteArray pointerName(name + '*'); + QByteArray listName("QDeclarativeListProperty<" + name + ">"); + + QDeclarativePrivate::RegisterType type = { + 0, + + qRegisterMetaType(pointerName.constData()), + qRegisterMetaType >(listName.constData()), + 0, + + 0, 0, 0, 0, &T::staticMetaObject, + + QDeclarativePrivate::attachedPropertiesFunc(), + QDeclarativePrivate::attachedPropertiesMetaObject(), + + QDeclarativePrivate::StaticCastSelector::cast(), + QDeclarativePrivate::StaticCastSelector::cast(), + QDeclarativePrivate::StaticCastSelector::cast(), + + 0, 0, + + 0 + }; + + return QDeclarativePrivate::registerType(type); +} + +template +int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const char *typeName) +{ + QByteArray name(typeName); + + QByteArray pointerName(name + '*'); + QByteArray listName("QDeclarativeListProperty<" + name + ">"); + + QDeclarativePrivate::RegisterType type = { + 0, + + qRegisterMetaType(pointerName.constData()), + qRegisterMetaType >(listName.constData()), + QDeclarativePrivate::create, + + uri, versionMajor, versionMinor, qmlName, &T::staticMetaObject, + + QDeclarativePrivate::attachedPropertiesFunc(), + QDeclarativePrivate::attachedPropertiesMetaObject(), + + QDeclarativePrivate::StaticCastSelector::cast(), + QDeclarativePrivate::StaticCastSelector::cast(), + QDeclarativePrivate::StaticCastSelector::cast(), + + 0, 0, + + 0 + }; + + return QDeclarativePrivate::registerType(type); +} + +template +int qmlRegisterExtendedType(const char *typeName) +{ + QByteArray name(typeName); + + QByteArray pointerName(name + '*'); + QByteArray listName("QDeclarativeListProperty<" + name + ">"); + + QDeclarativePrivate::RegisterType type = { + 0, + + qRegisterMetaType(pointerName.constData()), + qRegisterMetaType >(listName.constData()), + 0, + + 0, 0, 0, 0, &T::staticMetaObject, + + QDeclarativePrivate::attachedPropertiesFunc(), + QDeclarativePrivate::attachedPropertiesMetaObject(), + + QDeclarativePrivate::StaticCastSelector::cast(), + QDeclarativePrivate::StaticCastSelector::cast(), + QDeclarativePrivate::StaticCastSelector::cast(), + + QDeclarativePrivate::createParent, &E::staticMetaObject, + + 0 + }; + + return QDeclarativePrivate::registerType(type); +} + +template +int qmlRegisterExtendedType(const char *uri, int versionMajor, int versionMinor, + const char *qmlName, const char *typeName) +{ + QByteArray name(typeName); + + QByteArray pointerName(name + '*'); + QByteArray listName("QDeclarativeListProperty<" + name + ">"); + + QDeclarativeAttachedPropertiesFunc attached = QDeclarativePrivate::attachedPropertiesFunc(); + const QMetaObject * attachedMetaObject = QDeclarativePrivate::attachedPropertiesMetaObject(); + if (!attached) { + attached = QDeclarativePrivate::attachedPropertiesFunc(); + attachedMetaObject = QDeclarativePrivate::attachedPropertiesMetaObject(); + } + + QDeclarativePrivate::RegisterType type = { + 0, + + qRegisterMetaType(pointerName.constData()), + qRegisterMetaType >(listName.constData()), + QDeclarativePrivate::create, + + uri, versionMajor, versionMinor, qmlName, &T::staticMetaObject, + + attached, + attachedMetaObject, + + QDeclarativePrivate::StaticCastSelector::cast(), + QDeclarativePrivate::StaticCastSelector::cast(), + QDeclarativePrivate::StaticCastSelector::cast(), + + QDeclarativePrivate::createParent, &E::staticMetaObject, + + 0 + }; + + return QDeclarativePrivate::registerType(type); +} + +template +int qmlRegisterInterface(const char *typeName) +{ + QByteArray name(typeName); + + QByteArray pointerName(name + '*'); + QByteArray listName("QDeclarativeListProperty<" + name + ">"); + + QDeclarativePrivate::RegisterInterface interface = { + 0, + + qRegisterMetaType(pointerName.constData()), + qRegisterMetaType >(listName.constData()), + + qobject_interface_iid() + }; + + return QDeclarativePrivate::registerType(interface); +} + +template +int qmlRegisterCustomType(const char *uri, int versionMajor, int versionMinor, + const char *qmlName, const char *typeName, QDeclarativeCustomParser *parser) +{ + QByteArray name(typeName); + + QByteArray pointerName(name + '*'); + QByteArray listName("QDeclarativeListProperty<" + name + ">"); + + QDeclarativePrivate::RegisterType type = { + 0, + + qRegisterMetaType(pointerName.constData()), + qRegisterMetaType >(listName.constData()), + QDeclarativePrivate::create, + + uri, versionMajor, versionMinor, qmlName, &T::staticMetaObject, + + QDeclarativePrivate::attachedPropertiesFunc(), + QDeclarativePrivate::attachedPropertiesMetaObject(), + + QDeclarativePrivate::StaticCastSelector::cast(), + QDeclarativePrivate::StaticCastSelector::cast(), + QDeclarativePrivate::StaticCastSelector::cast(), + + 0, 0, + + parser + }; + + return QDeclarativePrivate::registerType(type); +} + #define QML_REGISTER_INTERFACE(INTERFACE) \ qmlRegisterInterface(#INTERFACE) @@ -106,20 +293,13 @@ Q_DECLARATIVE_EXPORT void qmlExecuteDeferred(QObject *); Q_DECLARATIVE_EXPORT QDeclarativeContext *qmlContext(const QObject *); Q_DECLARATIVE_EXPORT QDeclarativeEngine *qmlEngine(const QObject *); Q_DECLARATIVE_EXPORT QObject *qmlAttachedPropertiesObjectById(int, const QObject *, bool create = true); +Q_DECLARATIVE_EXPORT QObject *qmlAttachedPropertiesObject(int *, const QObject *, const QMetaObject *, bool create); template QObject *qmlAttachedPropertiesObject(const QObject *obj, bool create = true) { - // ### is this threadsafe? static int idx = -1; - - if (idx == -1) - idx = QDeclarativeMetaType::attachedPropertiesFuncId(&T::staticMetaObject); - - if (idx == -1 || !obj) - return 0; - - return qmlAttachedPropertiesObjectById(idx, obj, create); + return qmlAttachedPropertiesObject(&idx, obj, &T::staticMetaObject, create); } QT_END_NAMESPACE @@ -129,4 +309,4 @@ Q_DECLARE_METATYPE(QVariant) QT_END_HEADER -#endif // QML_H +#endif // QDECLARATIVE_H diff --git a/src/declarative/qml/qdeclarativebinding_p.h b/src/declarative/qml/qdeclarativebinding_p.h index 432bf22..7c79b8c 100644 --- a/src/declarative/qml/qdeclarativebinding_p.h +++ b/src/declarative/qml/qdeclarativebinding_p.h @@ -56,6 +56,7 @@ #include "qdeclarative.h" #include "qdeclarativepropertyvaluesource.h" #include "qdeclarativeexpression.h" +#include "qdeclarativemetaproperty.h" #include #include diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index 4575536..39b8a22 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -721,6 +721,18 @@ QObject *qmlAttachedPropertiesObjectById(int id, const QObject *object, bool cre return rv; } +QObject *qmlAttachedPropertiesObject(int *idCache, const QObject *object, + const QMetaObject *attachedMetaObject, bool create) +{ + if (*idCache == -1) + *idCache = QDeclarativeMetaType::attachedPropertiesFuncId(attachedMetaObject); + + if (*idCache == -1 || !object) + return 0; + + return qmlAttachedPropertiesObjectById(*idCache, object, create); +} + void QDeclarativeDeclarativeData::destroyed(QObject *object) { if (deferredComponent) diff --git a/src/declarative/qml/qdeclarativeengine_p.h b/src/declarative/qml/qdeclarativeengine_p.h index 7c9d833..1a858d4 100644 --- a/src/declarative/qml/qdeclarativeengine_p.h +++ b/src/declarative/qml/qdeclarativeengine_p.h @@ -67,6 +67,7 @@ #include "qdeclarativeobjectscriptclass_p.h" #include "qdeclarativecontextscriptclass_p.h" #include "qdeclarativevaluetypescriptclass_p.h" +#include "qdeclarativemetatype.h" #include #include diff --git a/src/declarative/qml/qdeclarativeguard_p.h b/src/declarative/qml/qdeclarativeguard_p.h index 9d82d01..0861e9a 100644 --- a/src/declarative/qml/qdeclarativeguard_p.h +++ b/src/declarative/qml/qdeclarativeguard_p.h @@ -54,6 +54,7 @@ // #include +#include QT_BEGIN_NAMESPACE diff --git a/src/declarative/qml/qdeclarativelist.h b/src/declarative/qml/qdeclarativelist.h index fb877b4..8d59384 100644 --- a/src/declarative/qml/qdeclarativelist.h +++ b/src/declarative/qml/qdeclarativelist.h @@ -42,7 +42,9 @@ #ifndef QDECLARATIVELIST_H #define QDECLARATIVELIST_H -#include "qdeclarativeprivate.h" +#include +#include +#include QT_BEGIN_HEADER @@ -50,6 +52,8 @@ QT_BEGIN_NAMESPACE QT_MODULE(Declarative) +class QObject; +class QMetaObject; template struct QDeclarativeListProperty { typedef void (*AppendFunction)(QDeclarativeListProperty *, T*); diff --git a/src/declarative/qml/qdeclarativemetatype.cpp b/src/declarative/qml/qdeclarativemetatype.cpp index 8f78843..7ae5a83 100644 --- a/src/declarative/qml/qdeclarativemetatype.cpp +++ b/src/declarative/qml/qdeclarativemetatype.cpp @@ -131,7 +131,7 @@ public: int m_parserStatusCast; int m_propertyValueSourceCast; int m_propertyValueInterceptorCast; - QDeclarativePrivate::CreateFunc m_extFunc; + QObject *(*m_extFunc)(QObject *); const QMetaObject *m_extMetaObject; int m_index; QDeclarativeCustomParser *m_customParser; @@ -148,13 +148,13 @@ QDeclarativeTypePrivate::QDeclarativeTypePrivate() } -QDeclarativeType::QDeclarativeType(int type, int listType, const char *iid, int index) +QDeclarativeType::QDeclarativeType(int index, const QDeclarativePrivate::RegisterInterface &interface) : d(new QDeclarativeTypePrivate) { d->m_isInterface = true; - d->m_iid = iid; - d->m_typeId = type; - d->m_listId = listType; + d->m_iid = interface.iid; + d->m_typeId = interface.typeId; + d->m_listId = interface.listId; d->m_newFunc = 0; d->m_index = index; d->m_isSetup = true; @@ -162,36 +162,31 @@ QDeclarativeType::QDeclarativeType(int type, int listType, const char *iid, int d->m_version_min = 0; } -QDeclarativeType::QDeclarativeType(int type, int listType, - QObject *(*newFunc)(), const char *qmlName, - int version_maj, int version_min, - const QMetaObject *metaObject, - QDeclarativeAttachedPropertiesFunc attachedPropertiesFunc, - const QMetaObject *attachedType, - int parserStatusCast, int propertyValueSourceCast, int propertyValueInterceptorCast, - QDeclarativePrivate::CreateFunc extFunc, - const QMetaObject *extMetaObject, int index, - QDeclarativeCustomParser *customParser) +QDeclarativeType::QDeclarativeType(int index, const QDeclarativePrivate::RegisterType &type) : d(new QDeclarativeTypePrivate) { - d->m_name = qmlName; - d->m_version_maj = version_maj; - d->m_version_min = version_min; - d->m_typeId = type; - d->m_listId = listType; - d->m_newFunc = newFunc; - d->m_baseMetaObject = metaObject; - d->m_attachedPropertiesFunc = attachedPropertiesFunc; - d->m_attachedPropertiesType = attachedType; - d->m_parserStatusCast = parserStatusCast; - d->m_propertyValueSourceCast = propertyValueSourceCast; - d->m_propertyValueInterceptorCast = propertyValueInterceptorCast; - d->m_extFunc = extFunc; + QByteArray name = type.uri; + if (type.uri) name += '/'; + name += type.elementName; + + d->m_name = name; + d->m_version_maj = type.versionMajor; + d->m_version_min = type.versionMinor; + d->m_typeId = type.typeId; + d->m_listId = type.listId; + d->m_newFunc = type.create; + d->m_baseMetaObject = type.metaObject; + d->m_attachedPropertiesFunc = type.attachedPropertiesFunction; + d->m_attachedPropertiesType = type.attachedPropertiesMetaObject; + d->m_parserStatusCast = type.parserStatusCast; + d->m_propertyValueSourceCast = type.valueSourceCast; + d->m_propertyValueInterceptorCast = type.valueInterceptorCast; + d->m_extFunc = type.extensionObjectCreate; d->m_index = index; - d->m_customParser = customParser; + d->m_customParser = type.customParser; - if (extMetaObject) - d->m_extMetaObject = extMetaObject; + if (type.extensionMetaObject) + d->m_extMetaObject = type.extensionMetaObject; } QDeclarativeType::~QDeclarativeType() @@ -357,15 +352,19 @@ int QDeclarativeType::index() const return d->m_index; } -int QDeclarativeMetaType::registerInterface(const QDeclarativePrivate::MetaTypeIds &id, - const char *iid) +int QDeclarativePrivate::registerType(const QDeclarativePrivate::RegisterInterface &interface) { + if (interface.version > 0) { + qWarning("Cannot mix incompatible QML versions."); + return -1; + } + QWriteLocker lock(metaTypeDataLock()); QDeclarativeMetaTypeData *data = metaTypeData(); int index = data->types.count(); - QDeclarativeType *type = new QDeclarativeType(id.typeId, id.listId, iid, index); + QDeclarativeType *type = new QDeclarativeType(index, interface); data->types.append(type); data->idToType.insert(type->typeId(), type); @@ -374,27 +373,22 @@ int QDeclarativeMetaType::registerInterface(const QDeclarativePrivate::MetaTypeI if (!type->qmlTypeName().isEmpty()) data->nameToType.insert(type->qmlTypeName(), type); - if (data->interfaces.size() <= id.typeId) - data->interfaces.resize(id.typeId + 16); - if (data->lists.size() <= id.listId) - data->lists.resize(id.listId + 16); - data->interfaces.setBit(id.typeId, true); - data->lists.setBit(id.listId, true); + if (data->interfaces.size() <= interface.typeId) + data->interfaces.resize(interface.typeId + 16); + if (data->lists.size() <= interface.listId) + data->lists.resize(interface.listId + 16); + data->interfaces.setBit(interface.typeId, true); + data->lists.setBit(interface.listId, true); return index; } -int QDeclarativeMetaType::registerType(const QDeclarativePrivate::MetaTypeIds &id, QObject *(*func)(), - const char *uri, int version_maj, int version_min, const char *cname, - const QMetaObject *mo, QDeclarativeAttachedPropertiesFunc attach, const QMetaObject *attachMo, - int pStatus, int object, int valueSource, int valueInterceptor, QDeclarativePrivate::CreateFunc extFunc, const QMetaObject *extmo, QDeclarativeCustomParser *parser) +int QDeclarativePrivate::registerType(const QDeclarativePrivate::RegisterType &type) { - Q_UNUSED(object); - - if (cname) { - for (int ii = 0; cname[ii]; ++ii) { - if (!isalnum(cname[ii])) { - qWarning("QDeclarativeMetaType: Invalid QML name %s", cname); + if (type.elementName) { + for (int ii = 0; type.elementName[ii]; ++ii) { + if (!isalnum(type.elementName[ii])) { + qWarning("QDeclarativeMetaType: Invalid QML element name %s", type.elementName); return -1; } } @@ -404,30 +398,23 @@ int QDeclarativeMetaType::registerType(const QDeclarativePrivate::MetaTypeIds &i QDeclarativeMetaTypeData *data = metaTypeData(); int index = data->types.count(); - QByteArray name = uri; - if (uri) - name += '/'; - name += cname; + QDeclarativeType *dtype = new QDeclarativeType(index, type); - QDeclarativeType *type = new QDeclarativeType(id.typeId, id.listId, - func, name, version_maj, version_min, mo, attach, attachMo, pStatus, - valueSource, valueInterceptor, extFunc, extmo, index, parser); + data->types.append(dtype); + data->idToType.insert(dtype->typeId(), dtype); + data->idToType.insert(dtype->qListTypeId(), dtype); - data->types.append(type); - data->idToType.insert(type->typeId(), type); - data->idToType.insert(type->qListTypeId(), type); - - if (!type->qmlTypeName().isEmpty()) - data->nameToType.insertMulti(type->qmlTypeName(), type); + if (!dtype->qmlTypeName().isEmpty()) + data->nameToType.insertMulti(dtype->qmlTypeName(), dtype); - data->metaObjectToType.insert(type->baseMetaObject(), type); + data->metaObjectToType.insert(dtype->baseMetaObject(), dtype); - if (data->objects.size() <= id.typeId) - data->objects.resize(id.typeId + 16); - if (data->lists.size() <= id.listId) - data->lists.resize(id.listId + 16); - data->objects.setBit(id.typeId, true); - data->lists.setBit(id.listId, true); + if (data->objects.size() <= type.typeId) + data->objects.resize(type.typeId + 16); + if (data->lists.size() <= type.listId) + data->lists.resize(type.listId + 16); + data->objects.setBit(type.typeId, true); + data->lists.setBit(type.listId, true); return index; } diff --git a/src/declarative/qml/qdeclarativemetatype.h b/src/declarative/qml/qdeclarativemetatype.h index 0634939..4cddf1c 100644 --- a/src/declarative/qml/qdeclarativemetatype.h +++ b/src/declarative/qml/qdeclarativemetatype.h @@ -43,10 +43,6 @@ #define QDECLARATIVEMETATYPE_H #include "qdeclarativeprivate.h" -#include "qdeclarativeparserstatus.h" -#include "qdeclarativepropertyvaluesource.h" -#include "qdeclarativepropertyvalueinterceptor.h" -#include "qdeclarativelist.h" #include #include @@ -63,9 +59,6 @@ class QDeclarativeCustomParser; class Q_DECLARATIVE_EXPORT QDeclarativeMetaType { public: - static int registerType(const QDeclarativePrivate::MetaTypeIds &, QObject *(*)(), const char *, int vmaj, int vmin, const char *qmlName, const QMetaObject *, QDeclarativeAttachedPropertiesFunc, const QMetaObject *, int pStatus, int object, int valueSource, int valueInterceptor, QDeclarativePrivate::CreateFunc extFunc, const QMetaObject *extmo, QDeclarativeCustomParser *); - static int registerInterface(const QDeclarativePrivate::MetaTypeIds &, const char *); - static bool copy(int type, void *data, const void *copy = 0); static QList qmlTypeNames(); @@ -132,147 +125,17 @@ public: int index() const; private: - friend class QDeclarativeMetaType; friend class QDeclarativeTypePrivate; - friend struct QDeclarativeMetaTypeData; - QDeclarativeType(int, int, const char *, int); - QDeclarativeType(int, int, QObject *(*)(), const char *, int, int, const QMetaObject *, QDeclarativeAttachedPropertiesFunc, const QMetaObject *, int, int, int, QDeclarativePrivate::CreateFunc, const QMetaObject *, int, QDeclarativeCustomParser *); + friend class QDeclarativeMetaTypeData; + friend int QDeclarativePrivate::registerType(const QDeclarativePrivate::RegisterInterface &); + friend int QDeclarativePrivate::registerType(const QDeclarativePrivate::RegisterType &); + QDeclarativeType(int, const QDeclarativePrivate::RegisterInterface &); + QDeclarativeType(int, const QDeclarativePrivate::RegisterType &); ~QDeclarativeType(); QDeclarativeTypePrivate *d; }; -template -int qmlRegisterType(const char *typeName) -{ - QByteArray name(typeName); - QDeclarativePrivate::MetaTypeIds ids = { - qRegisterMetaType(QByteArray(name + '*').constData()), - qRegisterMetaType >(QByteArray("QDeclarativeListProperty<" + name + ">").constData()), - }; - - return QDeclarativeMetaType::registerType(ids, 0, 0, 0, 0, 0, - &T::staticMetaObject, - QDeclarativePrivate::attachedPropertiesFunc(), - QDeclarativePrivate::attachedPropertiesMetaObject(), - QDeclarativePrivate::StaticCastSelector::cast(), - QDeclarativePrivate::StaticCastSelector::cast(), - QDeclarativePrivate::StaticCastSelector::cast(), - QDeclarativePrivate::StaticCastSelector::cast(), - 0, 0, 0); -} - -template -int qmlRegisterType(const char *uri, int version_maj, int version_min, const char *qmlName, const char *typeName) -{ - QByteArray name(typeName); - QDeclarativePrivate::MetaTypeIds ids = { - qRegisterMetaType(QByteArray(name + '*').constData()), - qRegisterMetaType >(QByteArray("QDeclarativeListProperty<" + name + ">").constData()), - }; - - return QDeclarativeMetaType::registerType(ids, QDeclarativePrivate::create, - uri, version_maj, version_min, qmlName, - &T::staticMetaObject, - QDeclarativePrivate::attachedPropertiesFunc(), - QDeclarativePrivate::attachedPropertiesMetaObject(), - QDeclarativePrivate::StaticCastSelector::cast(), - QDeclarativePrivate::StaticCastSelector::cast(), - QDeclarativePrivate::StaticCastSelector::cast(), - QDeclarativePrivate::StaticCastSelector::cast(), - 0, 0, 0); -} - -template -int qmlRegisterExtendedType(const char *typeName) -{ - QByteArray name(typeName); - QDeclarativePrivate::MetaTypeIds ids = { - qRegisterMetaType(QByteArray(name + '*').constData()), - qRegisterMetaType >(QByteArray("QDeclarativeListProperty<" + name + ">").constData()), - }; - - QDeclarativeAttachedPropertiesFunc attached = - QDeclarativePrivate::attachedPropertiesFunc(); - const QMetaObject * attachedMo = - QDeclarativePrivate::attachedPropertiesMetaObject(); - if (!attached) { - attached = QDeclarativePrivate::attachedPropertiesFunc(); - attachedMo = QDeclarativePrivate::attachedPropertiesMetaObject(); - } - - return QDeclarativeMetaType::registerType(ids, 0, 0, 0, 0, 0, - &T::staticMetaObject, attached, attachedMo, - QDeclarativePrivate::StaticCastSelector::cast(), - QDeclarativePrivate::StaticCastSelector::cast(), - QDeclarativePrivate::StaticCastSelector::cast(), - QDeclarativePrivate::StaticCastSelector::cast(), - &QDeclarativePrivate::CreateParent::create, &E::staticMetaObject, 0); -} - -template -int qmlRegisterExtendedType(const char *uri, int version_maj, int version_min, const char *qmlName, const char *typeName) -{ - QByteArray name(typeName); - QDeclarativePrivate::MetaTypeIds ids = { - qRegisterMetaType(QByteArray(name + '*').constData()), - qRegisterMetaType >(QByteArray("QDeclarativeListProperty<" + name + ">").constData()), - }; - - QDeclarativeAttachedPropertiesFunc attached = - QDeclarativePrivate::attachedPropertiesFunc(); - const QMetaObject * attachedMo = - QDeclarativePrivate::attachedPropertiesMetaObject(); - if (!attached) { - attached = QDeclarativePrivate::attachedPropertiesFunc(); - attachedMo = QDeclarativePrivate::attachedPropertiesMetaObject(); - } - - return QDeclarativeMetaType::registerType(ids, QDeclarativePrivate::create, - uri, version_maj, version_min, qmlName, - &T::staticMetaObject, - attached, attachedMo, - QDeclarativePrivate::StaticCastSelector::cast(), - QDeclarativePrivate::StaticCastSelector::cast(), - QDeclarativePrivate::StaticCastSelector::cast(), - QDeclarativePrivate::StaticCastSelector::cast(), - &QDeclarativePrivate::CreateParent::create, - &E::staticMetaObject, 0); -} - -template -int qmlRegisterInterface(const char *typeName) -{ - QByteArray name(typeName); - QDeclarativePrivate::MetaTypeIds ids = { - qRegisterMetaType(QByteArray(name + '*').constData()), - qRegisterMetaType >(QByteArray("QDeclarativeListProperty<" + name + ">").constData()), - }; - - return QDeclarativeMetaType::registerInterface(ids, qobject_interface_iid()); -} - -template -int qmlRegisterCustomType(const char *uri, int version_maj, int version_min, const char *qmlName, const char *typeName, QDeclarativeCustomParser *parser) -{ - QByteArray name(typeName); - QDeclarativePrivate::MetaTypeIds ids = { - qRegisterMetaType(QByteArray(name + '*').constData()), - qRegisterMetaType >(QByteArray("QDeclarativeListProperty<" + name + ">").constData()), - }; - - return QDeclarativeMetaType::registerType(ids, QDeclarativePrivate::create, - uri, version_maj, version_min, qmlName, - &T::staticMetaObject, - QDeclarativePrivate::attachedPropertiesFunc(), - QDeclarativePrivate::attachedPropertiesMetaObject(), - QDeclarativePrivate::StaticCastSelector::cast(), - QDeclarativePrivate::StaticCastSelector::cast(), - QDeclarativePrivate::StaticCastSelector::cast(), - QDeclarativePrivate::StaticCastSelector::cast(), - 0, 0, parser); -} - QT_END_NAMESPACE QT_END_HEADER diff --git a/src/declarative/qml/qdeclarativeparser_p.h b/src/declarative/qml/qdeclarativeparser_p.h index cfd0b87..aae507e 100644 --- a/src/declarative/qml/qdeclarativeparser_p.h +++ b/src/declarative/qml/qdeclarativeparser_p.h @@ -56,9 +56,11 @@ #include "qdeclarative.h" #include "qdeclarativerefcount_p.h" -#include -#include +#include +#include +#include #include +#include #include diff --git a/src/declarative/qml/qdeclarativeprivate.cpp b/src/declarative/qml/qdeclarativeprivate.cpp deleted file mode 100644 index 444fe56..0000000 --- a/src/declarative/qml/qdeclarativeprivate.cpp +++ /dev/null @@ -1,48 +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 "qdeclarativeprivate.h" - -QT_BEGIN_NAMESPACE - -QDeclarativePrivate::InstanceType::InstanceType(int) {} - -QT_END_NAMESPACE diff --git a/src/declarative/qml/qdeclarativeprivate.h b/src/declarative/qml/qdeclarativeprivate.h index c8a8c74..e8bbff4 100644 --- a/src/declarative/qml/qdeclarativeprivate.h +++ b/src/declarative/qml/qdeclarativeprivate.h @@ -43,10 +43,6 @@ #define QDECLARATIVEPRIVATE_H #include - -#ifndef Q_OS_WIN -#include -#endif #include QT_BEGIN_HEADER @@ -57,9 +53,6 @@ QT_MODULE(Declarative) typedef QObject *(*QDeclarativeAttachedPropertiesFunc)(QObject *); -//template -//struct qml_hasAttached { static bool const value = false; }; - template class QDeclarativeTypeInfo { @@ -70,11 +63,15 @@ public: }; +class QDeclarativeCustomParser; namespace QDeclarativePrivate { template QObject *create() { return new T; } + template + QObject *createParent(QObject *p) { return new T(p); } + template struct StaticCastSelectorClass { @@ -167,41 +164,44 @@ namespace QDeclarativePrivate return AttachedPropertySelector::value>::value>::metaObject(); } - struct MetaTypeIds { + struct RegisterType { + int version; + int typeId; int listId; - }; - typedef QObject *(*CreateFunc)(QObject *); + QObject *(*create)(); - template - struct CreateParent { - static QObject *create(QObject *other) { - return new T(other); - } - }; + const char *uri; + int versionMajor; + int versionMinor; + const char *elementName; + const QMetaObject *metaObject; - template - struct CreateNoParent { - static QObject *create() { - return new T; - } - }; + QDeclarativeAttachedPropertiesFunc attachedPropertiesFunction; + const QMetaObject *attachedPropertiesMetaObject; - struct Q_DECLARATIVE_EXPORT InstanceType { - InstanceType(int); - }; + int parserStatusCast; + int valueSourceCast; + int valueInterceptorCast; + + QObject *(*extensionObjectCreate)(QObject *); + const QMetaObject *extensionMetaObject; - template - struct Define { - static InstanceType instance; + QDeclarativeCustomParser *customParser; }; - - template - struct ExtCreate { - static QObject *create(QObject *other) { - return new T(other); - } + + struct RegisterInterface { + int version; + + int typeId; + int listId; + + const char *iid; }; + + int Q_DECLARATIVE_EXPORT registerType(const RegisterType &); + int Q_DECLARATIVE_EXPORT registerType(const RegisterInterface &); + } QT_END_NAMESPACE diff --git a/src/declarative/qml/qml.pri b/src/declarative/qml/qml.pri index 0d5fcb0..8285bb9 100644 --- a/src/declarative/qml/qml.pri +++ b/src/declarative/qml/qml.pri @@ -19,7 +19,6 @@ SOURCES += \ $$PWD/qdeclarativeboundsignal.cpp \ $$PWD/qdeclarativedom.cpp \ $$PWD/qdeclarativerefcount.cpp \ - $$PWD/qdeclarativeprivate.cpp \ $$PWD/qdeclarativemetatype.cpp \ $$PWD/qdeclarativestringconverters.cpp \ $$PWD/qdeclarativeclassfactory.cpp \ diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp index 82e0d02..88b64fd 100644 --- a/src/declarative/util/qdeclarativeanimation.cpp +++ b/src/declarative/util/qdeclarativeanimation.cpp @@ -51,6 +51,7 @@ #include #include #include +#include #include #include diff --git a/src/declarative/util/qdeclarativebind.cpp b/src/declarative/util/qdeclarativebind.cpp index 934030c..d75e98d 100644 --- a/src/declarative/util/qdeclarativebind.cpp +++ b/src/declarative/util/qdeclarativebind.cpp @@ -45,6 +45,7 @@ #include #include +#include #include #include diff --git a/src/declarative/util/qdeclarativeconnection.cpp b/src/declarative/util/qdeclarativeconnection.cpp index 89f8a77..a7cfc79 100644 --- a/src/declarative/util/qdeclarativeconnection.cpp +++ b/src/declarative/util/qdeclarativeconnection.cpp @@ -46,6 +46,7 @@ #include #include +#include #include diff --git a/src/declarative/util/qdeclarativefontloader.cpp b/src/declarative/util/qdeclarativefontloader.cpp index 391eadab..ac30384 100644 --- a/src/declarative/util/qdeclarativefontloader.cpp +++ b/src/declarative/util/qdeclarativefontloader.cpp @@ -44,6 +44,7 @@ #include #include +#include #include #include #include diff --git a/src/declarative/util/qdeclarativefontloader_p.h b/src/declarative/util/qdeclarativefontloader_p.h index 8a9131c..14335ab 100644 --- a/src/declarative/util/qdeclarativefontloader_p.h +++ b/src/declarative/util/qdeclarativefontloader_p.h @@ -45,6 +45,7 @@ #include #include +#include QT_BEGIN_HEADER diff --git a/src/declarative/util/qdeclarativestate_p.h b/src/declarative/util/qdeclarativestate_p.h index a370f18..4a62481 100644 --- a/src/declarative/util/qdeclarativestate_p.h +++ b/src/declarative/util/qdeclarativestate_p.h @@ -43,7 +43,7 @@ #define QDECLARATIVESTATE_H #include - +#include #include QT_BEGIN_HEADER diff --git a/src/declarative/util/qdeclarativexmllistmodel.cpp b/src/declarative/util/qdeclarativexmllistmodel.cpp index 63bf02b..386df46 100644 --- a/src/declarative/util/qdeclarativexmllistmodel.cpp +++ b/src/declarative/util/qdeclarativexmllistmodel.cpp @@ -45,6 +45,7 @@ #include #include +#include #include #include #include diff --git a/src/declarative/util/qdeclarativexmllistmodel_p.h b/src/declarative/util/qdeclarativexmllistmodel_p.h index f23a85b..132a53c 100644 --- a/src/declarative/util/qdeclarativexmllistmodel_p.h +++ b/src/declarative/util/qdeclarativexmllistmodel_p.h @@ -45,6 +45,8 @@ #include #include +#include + #include "../3rdparty/qlistmodelinterface_p.h" QT_BEGIN_HEADER diff --git a/src/declarative/util/qnumberformat.cpp b/src/declarative/util/qnumberformat.cpp index 2e83874..81d0b90 100644 --- a/src/declarative/util/qnumberformat.cpp +++ b/src/declarative/util/qnumberformat.cpp @@ -40,6 +40,7 @@ ****************************************************************************/ #include "qnumberformat_p.h" +#include QT_BEGIN_NAMESPACE diff --git a/tests/auto/declarative/qdeclarativelanguage/testtypes.h b/tests/auto/declarative/qdeclarativelanguage/testtypes.h index 1a8bd11..fc1ede7 100644 --- a/tests/auto/declarative/qdeclarativelanguage/testtypes.h +++ b/tests/auto/declarative/qdeclarativelanguage/testtypes.h @@ -52,6 +52,7 @@ #include #include #include +#include QVariant myCustomVariantTypeConverter(const QString &data); diff --git a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp index 9d68ba9..16af0d9 100644 --- a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp +++ b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include diff --git a/tests/auto/declarative/qdeclarativelistreference/tst_qdeclarativelistreference.cpp b/tests/auto/declarative/qdeclarativelistreference/tst_qdeclarativelistreference.cpp index 03d641d..5c6ceef 100644 --- a/tests/auto/declarative/qdeclarativelistreference/tst_qdeclarativelistreference.cpp +++ b/tests/auto/declarative/qdeclarativelistreference/tst_qdeclarativelistreference.cpp @@ -47,6 +47,7 @@ #include #include #include +#include #include inline QUrl TEST_FILE(const QString &filename) diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/plugin/plugin.cpp b/tests/auto/declarative/qdeclarativemoduleplugin/plugin/plugin.cpp index 6433791..154693c 100644 --- a/tests/auto/declarative/qdeclarativemoduleplugin/plugin/plugin.cpp +++ b/tests/auto/declarative/qdeclarativemoduleplugin/plugin/plugin.cpp @@ -38,6 +38,7 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ +#include #include #include #include diff --git a/tests/auto/declarative/qdeclarativevaluetypes/testtypes.h b/tests/auto/declarative/qdeclarativevaluetypes/testtypes.h index c4a9187..8b80e16 100644 --- a/tests/auto/declarative/qdeclarativevaluetypes/testtypes.h +++ b/tests/auto/declarative/qdeclarativevaluetypes/testtypes.h @@ -52,6 +52,7 @@ #include #include #include +#include class MyTypeObject : public QObject { diff --git a/tools/qml/qdeclarativefolderlistmodel.h b/tools/qml/qdeclarativefolderlistmodel.h index c16b44c..57b7fe5 100644 --- a/tools/qml/qdeclarativefolderlistmodel.h +++ b/tools/qml/qdeclarativefolderlistmodel.h @@ -43,6 +43,8 @@ #define QDECLARATIVEFOLDERLISTMODEL_H #include +#include +#include #include "../../src/declarative/3rdparty/qlistmodelinterface_p.h" QT_BEGIN_NAMESPACE diff --git a/tools/qml/qfxtester.h b/tools/qml/qfxtester.h index 3b935d8..1a9f077 100644 --- a/tools/qml/qfxtester.h +++ b/tools/qml/qfxtester.h @@ -45,6 +45,8 @@ #include #include #include +#include +#include #include QT_BEGIN_NAMESPACE -- cgit v0.12 From d38fdecaccd9d53127c26b8dc1a30b3aa4bdb9a0 Mon Sep 17 00:00:00 2001 From: Leonardo Sobral Cunha Date: Wed, 24 Feb 2010 17:29:26 +1000 Subject: Fix wrong property name in qdeclarativeitem docs --- src/declarative/graphicsitems/qdeclarativeitem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index 3db60ee..d492dbd 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -1321,7 +1321,7 @@ QDeclarativeItem::~QDeclarativeItem() Image { source: "myimage.png" transformOrigin: Item.BottomRight - rotate: 45 + rotation: 45 } \endqml -- cgit v0.12 From 93353ce0cf416c53238eb908a8e4ccb3e68df73d Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Wed, 24 Feb 2010 17:37:48 +1000 Subject: Fixup tests after QDeclarative class renames --- src/declarative/qml/qdeclarativescriptparser.cpp | 2 +- .../auto/declarative/qdeclarativeinfo/data/qdeclarativeObject.qml | 8 -------- tests/auto/declarative/qdeclarativeinfo/data/qmlObject.qml | 8 ++++++++ .../data/qdeclarativeAttachedPropertiesObjectMethod.1.qml | 5 ----- .../data/qdeclarativeAttachedPropertiesObjectMethod.2.qml | 6 ------ .../data/qmlAttachedPropertiesObjectMethod.1.qml | 5 +++++ .../data/qmlAttachedPropertiesObjectMethod.2.qml | 6 ++++++ .../declarative/qdeclarativelanguage/data/script.12.errors.txt | 2 +- 8 files changed, 21 insertions(+), 21 deletions(-) delete mode 100644 tests/auto/declarative/qdeclarativeinfo/data/qdeclarativeObject.qml create mode 100644 tests/auto/declarative/qdeclarativeinfo/data/qmlObject.qml delete mode 100644 tests/auto/declarative/qdeclarativelanguage/data/qdeclarativeAttachedPropertiesObjectMethod.1.qml delete mode 100644 tests/auto/declarative/qdeclarativelanguage/data/qdeclarativeAttachedPropertiesObjectMethod.2.qml create mode 100644 tests/auto/declarative/qdeclarativelanguage/data/qmlAttachedPropertiesObjectMethod.1.qml create mode 100644 tests/auto/declarative/qdeclarativelanguage/data/qmlAttachedPropertiesObjectMethod.2.qml diff --git a/src/declarative/qml/qdeclarativescriptparser.cpp b/src/declarative/qml/qdeclarativescriptparser.cpp index 9636350..f4c9cdd 100644 --- a/src/declarative/qml/qdeclarativescriptparser.cpp +++ b/src/declarative/qml/qdeclarativescriptparser.cpp @@ -771,7 +771,7 @@ bool ProcessAST::visit(AST::UiSourceElement *node) } else { QDeclarativeError error; - error.setDescription(QCoreApplication::translate("QDeclarativeParser","QDeclarativeJS declaration outside Script element")); + error.setDescription(QCoreApplication::translate("QDeclarativeParser","JavaScript declaration outside Script element")); error.setLine(node->firstSourceLocation().startLine); error.setColumn(node->firstSourceLocation().startColumn); _parser->_errors << error; diff --git a/tests/auto/declarative/qdeclarativeinfo/data/qdeclarativeObject.qml b/tests/auto/declarative/qdeclarativeinfo/data/qdeclarativeObject.qml deleted file mode 100644 index ce05f89..0000000 --- a/tests/auto/declarative/qdeclarativeinfo/data/qdeclarativeObject.qml +++ /dev/null @@ -1,8 +0,0 @@ -import Qt 4.6 - -QtObject { - property var nested - - nested: QtObject { - } -} diff --git a/tests/auto/declarative/qdeclarativeinfo/data/qmlObject.qml b/tests/auto/declarative/qdeclarativeinfo/data/qmlObject.qml new file mode 100644 index 0000000..ce05f89 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeinfo/data/qmlObject.qml @@ -0,0 +1,8 @@ +import Qt 4.6 + +QtObject { + property var nested + + nested: QtObject { + } +} diff --git a/tests/auto/declarative/qdeclarativelanguage/data/qdeclarativeAttachedPropertiesObjectMethod.1.qml b/tests/auto/declarative/qdeclarativelanguage/data/qdeclarativeAttachedPropertiesObjectMethod.1.qml deleted file mode 100644 index 429c327..0000000 --- a/tests/auto/declarative/qdeclarativelanguage/data/qdeclarativeAttachedPropertiesObjectMethod.1.qml +++ /dev/null @@ -1,5 +0,0 @@ -import Test 1.0 -import Qt 4.6 -QtObject { -} - diff --git a/tests/auto/declarative/qdeclarativelanguage/data/qdeclarativeAttachedPropertiesObjectMethod.2.qml b/tests/auto/declarative/qdeclarativelanguage/data/qdeclarativeAttachedPropertiesObjectMethod.2.qml deleted file mode 100644 index 0f57b61..0000000 --- a/tests/auto/declarative/qdeclarativelanguage/data/qdeclarativeAttachedPropertiesObjectMethod.2.qml +++ /dev/null @@ -1,6 +0,0 @@ -import Test 1.0 -import Qt 4.6 -QtObject { - MyQmlObject.value: 10 -} - diff --git a/tests/auto/declarative/qdeclarativelanguage/data/qmlAttachedPropertiesObjectMethod.1.qml b/tests/auto/declarative/qdeclarativelanguage/data/qmlAttachedPropertiesObjectMethod.1.qml new file mode 100644 index 0000000..429c327 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/qmlAttachedPropertiesObjectMethod.1.qml @@ -0,0 +1,5 @@ +import Test 1.0 +import Qt 4.6 +QtObject { +} + diff --git a/tests/auto/declarative/qdeclarativelanguage/data/qmlAttachedPropertiesObjectMethod.2.qml b/tests/auto/declarative/qdeclarativelanguage/data/qmlAttachedPropertiesObjectMethod.2.qml new file mode 100644 index 0000000..0f57b61 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/qmlAttachedPropertiesObjectMethod.2.qml @@ -0,0 +1,6 @@ +import Test 1.0 +import Qt 4.6 +QtObject { + MyQmlObject.value: 10 +} + diff --git a/tests/auto/declarative/qdeclarativelanguage/data/script.12.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/script.12.errors.txt index 85c8396..f8297f5 100644 --- a/tests/auto/declarative/qdeclarativelanguage/data/script.12.errors.txt +++ b/tests/auto/declarative/qdeclarativelanguage/data/script.12.errors.txt @@ -1 +1 @@ -4:5:QmlJS declaration outside Script element +4:5:JavaScript declaration outside Script element -- cgit v0.12 From d3a0bd57c7c3cecdeeb4ad9af3cf6bb4ee39964b Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Wed, 24 Feb 2010 17:48:20 +1000 Subject: Don't crash if the currentIndex is set while creating a delegate. Task-number: QTBUG-8456 --- .../graphicsitems/qdeclarativegridview.cpp | 4 ++- .../graphicsitems/qdeclarativelistview.cpp | 2 ++ .../qdeclarativegridview/data/setindex.qml | 33 ++++++++++++++++++++++ .../tst_qdeclarativegridview.cpp | 15 ++++++++++ 4 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 tests/auto/declarative/qdeclarativegridview/data/setindex.qml diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index aae5571..2ef6305 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -321,7 +321,7 @@ FxGridItem *QDeclarativeGridViewPrivate::createItem(int modelIndex) listItem->item->setParent(q->viewport()); unrequestedItems.remove(listItem->item); } - requestedIndex = 0; + requestedIndex = -1; return listItem; } @@ -888,6 +888,8 @@ int QDeclarativeGridView::currentIndex() const void QDeclarativeGridView::setCurrentIndex(int index) { Q_D(QDeclarativeGridView); + if (d->requestedIndex >= 0) // currently creating item + return; if (isComponentComplete() && d->isValid() && index != d->currentIndex && index < d->model->count() && index >= 0) { d->moveReason = QDeclarativeGridViewPrivate::SetIndex; cancelFlick(); diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index d471749..77e3a15 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -1580,6 +1580,8 @@ int QDeclarativeListView::currentIndex() const void QDeclarativeListView::setCurrentIndex(int index) { Q_D(QDeclarativeListView); + if (d->requestedIndex >= 0) // currently creating item + return; if (isComponentComplete() && d->isValid() && index != d->currentIndex && index < d->model->count() && index >= 0) { d->moveReason = QDeclarativeListViewPrivate::SetIndex; cancelFlick(); diff --git a/tests/auto/declarative/qdeclarativegridview/data/setindex.qml b/tests/auto/declarative/qdeclarativegridview/data/setindex.qml new file mode 100644 index 0000000..908b365 --- /dev/null +++ b/tests/auto/declarative/qdeclarativegridview/data/setindex.qml @@ -0,0 +1,33 @@ +import Qt 4.6 + +Rectangle { + width: 200 + height: 200 + Component { + id: appDelegate + + Item { + id : wrapper + Script { + function startupFunction() + { + if (index == 5) view.currentIndex = index; + + } + } + Component.onCompleted: startupFunction(); + width: 30; height: 30 + Text { text: index } + } + } + + GridView { + id: view + objectName: "grid" + anchors.fill: parent + cellWidth: 30; cellHeight: 30 + model: 35 + delegate: appDelegate + focus: true + } +} diff --git a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp index 9a7f517..9c7468d 100644 --- a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp +++ b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp @@ -66,6 +66,7 @@ private slots: void defaultValues(); void properties(); void positionViewAtIndex(); + void QTBUG_8456(); private: QDeclarativeView *createView(); @@ -657,6 +658,7 @@ void tst_QDeclarativeGridView::currentIndex() gridview->setFlow(QDeclarativeGridView::TopToBottom); + QEXPECT_FAIL("", "QTBUG-8475", Abort); QTest::keyClick(canvas, Qt::Key_Right); QCOMPARE(gridview->currentIndex(), 5); @@ -882,6 +884,19 @@ void tst_QDeclarativeGridView::positionViewAtIndex() delete canvas; } +void tst_QDeclarativeGridView::QTBUG_8456() +{ + QDeclarativeView *canvas = createView(); + + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/setindex.qml")); + qApp->processEvents(); + + QDeclarativeGridView *gridview = findItem(canvas->rootObject(), "grid"); + QVERIFY(gridview != 0); + + QCOMPARE(gridview->currentIndex(), 0); +} + QDeclarativeView *tst_QDeclarativeGridView::createView() { QDeclarativeView *canvas = new QDeclarativeView(0); -- cgit v0.12 From b0005461049e6d69f7e79e7d9311e9beabfe8c39 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Wed, 24 Feb 2010 17:50:08 +1000 Subject: Add subdirs .pro for examples/declarative/extending Also fix up a compile error. --- examples/declarative/extending/extending.pro | 13 +++++++++++++ examples/declarative/extending/valuesource/happybirthday.h | 1 + 2 files changed, 14 insertions(+) create mode 100644 examples/declarative/extending/extending.pro diff --git a/examples/declarative/extending/extending.pro b/examples/declarative/extending/extending.pro new file mode 100644 index 0000000..169c7ab --- /dev/null +++ b/examples/declarative/extending/extending.pro @@ -0,0 +1,13 @@ +TEMPLATE = subdirs + +SUBDIRS += \ + adding \ + attached \ + binding \ + coercion \ + default \ + extended \ + grouped \ + properties \ + signal \ + valuesource diff --git a/examples/declarative/extending/valuesource/happybirthday.h b/examples/declarative/extending/valuesource/happybirthday.h index 44f55e4..3e68c35 100644 --- a/examples/declarative/extending/valuesource/happybirthday.h +++ b/examples/declarative/extending/valuesource/happybirthday.h @@ -42,6 +42,7 @@ #define HAPPYBIRTHDAY_H #include +#include #include #include -- cgit v0.12 From 9872dce1dcb74216cad30301502d1c77de2356ad Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Wed, 24 Feb 2010 18:36:33 +1000 Subject: Make QDeclarativeMetaType and QDeclarativeType private --- src/declarative/qml/qdeclarativeboundsignal.cpp | 2 +- src/declarative/qml/qdeclarativecompiler.cpp | 2 +- src/declarative/qml/qdeclarativecustomparser_p.h | 2 +- src/declarative/qml/qdeclarativeengine.cpp | 5 +- src/declarative/qml/qdeclarativeengine_p.h | 2 +- src/declarative/qml/qdeclarativeenginedebug.cpp | 2 +- src/declarative/qml/qdeclarativeinfo.cpp | 2 +- src/declarative/qml/qdeclarativeintegercache.cpp | 2 +- src/declarative/qml/qdeclarativemetatype.cpp | 2 +- src/declarative/qml/qdeclarativemetatype.h | 144 -------------------- src/declarative/qml/qdeclarativemetatype_p.h | 149 +++++++++++++++++++++ src/declarative/qml/qml.pri | 2 +- src/declarative/util/qdeclarativeanimation.cpp | 2 +- src/declarative/util/qdeclarativelistaccessor.cpp | 4 +- .../qdeclarativedebug/tst_qdeclarativedebug.cpp | 2 +- .../tst_qdeclarativelanguage.cpp | 4 +- .../tst_qdeclarativemetatype.cpp | 3 +- 17 files changed, 169 insertions(+), 162 deletions(-) delete mode 100644 src/declarative/qml/qdeclarativemetatype.h create mode 100644 src/declarative/qml/qdeclarativemetatype_p.h diff --git a/src/declarative/qml/qdeclarativeboundsignal.cpp b/src/declarative/qml/qdeclarativeboundsignal.cpp index c47df32..ce396fd 100644 --- a/src/declarative/qml/qdeclarativeboundsignal.cpp +++ b/src/declarative/qml/qdeclarativeboundsignal.cpp @@ -45,7 +45,7 @@ #include "qdeclarativeengine_p.h" #include "qdeclarativeexpression_p.h" #include "qdeclarativecontext_p.h" -#include "qdeclarativemetatype.h" +#include "qdeclarativemetatype_p.h" #include "qdeclarative.h" #include "qdeclarativecontext.h" #include "qdeclarativeglobal_p.h" diff --git a/src/declarative/qml/qdeclarativecompiler.cpp b/src/declarative/qml/qdeclarativecompiler.cpp index b6ebd60..9ac65f9 100644 --- a/src/declarative/qml/qdeclarativecompiler.cpp +++ b/src/declarative/qml/qdeclarativecompiler.cpp @@ -51,7 +51,7 @@ #include "qdeclarativeengine_p.h" #include "qdeclarativeengine.h" #include "qdeclarativecontext.h" -#include "qdeclarativemetatype.h" +#include "qdeclarativemetatype_p.h" #include "qdeclarativecustomparser_p_p.h" #include "qdeclarativecontext_p.h" #include "qdeclarativecomponent_p.h" diff --git a/src/declarative/qml/qdeclarativecustomparser_p.h b/src/declarative/qml/qdeclarativecustomparser_p.h index cef1f3c..99587a8 100644 --- a/src/declarative/qml/qdeclarativecustomparser_p.h +++ b/src/declarative/qml/qdeclarativecustomparser_p.h @@ -53,7 +53,7 @@ // We mean it. // -#include "qdeclarativemetatype.h" +#include "qdeclarativemetatype_p.h" #include "qdeclarativeerror.h" #include "qdeclarativeparser_p.h" diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index 39b8a22..3229570 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -68,6 +68,7 @@ #include "qdeclarativedirparser_p.h" #include "qdeclarativeextensioninterface.h" #include "qdeclarativelist_p.h" +#include "qdeclarativetypenamecache_p.h" #include @@ -1503,9 +1504,6 @@ QDeclarativeEnginePrivate::Imports::~Imports() delete d; } -#include "qdeclarativemetatype.h" -#include "qdeclarativetypenamecache_p.h" - static QDeclarativeTypeNameCache *cacheForNamespace(QDeclarativeEngine *engine, const QDeclarativeEnginePrivate::ImportedNamespace &set, QDeclarativeTypeNameCache *cache) { if (!cache) @@ -1667,6 +1665,7 @@ QString QDeclarativeEnginePrivate::resolvePlugin(const QDir &dir, const QString const QStringList &suffixes, const QString &prefix) { + qWarning() << baseName; foreach (const QString &suffix, suffixes) { QString pluginFileName = prefix; diff --git a/src/declarative/qml/qdeclarativeengine_p.h b/src/declarative/qml/qdeclarativeengine_p.h index 1a858d4..c4a40c5 100644 --- a/src/declarative/qml/qdeclarativeengine_p.h +++ b/src/declarative/qml/qdeclarativeengine_p.h @@ -67,7 +67,7 @@ #include "qdeclarativeobjectscriptclass_p.h" #include "qdeclarativecontextscriptclass_p.h" #include "qdeclarativevaluetypescriptclass_p.h" -#include "qdeclarativemetatype.h" +#include "qdeclarativemetatype_p.h" #include #include diff --git a/src/declarative/qml/qdeclarativeenginedebug.cpp b/src/declarative/qml/qdeclarativeenginedebug.cpp index e4579a6..6a81e52 100644 --- a/src/declarative/qml/qdeclarativeenginedebug.cpp +++ b/src/declarative/qml/qdeclarativeenginedebug.cpp @@ -43,7 +43,7 @@ #include "qdeclarativeboundsignal_p.h" #include "qdeclarativeengine.h" -#include "qdeclarativemetatype.h" +#include "qdeclarativemetatype_p.h" #include "qdeclarativemetaproperty.h" #include "qdeclarativebinding_p.h" #include "qdeclarativecontext_p.h" diff --git a/src/declarative/qml/qdeclarativeinfo.cpp b/src/declarative/qml/qdeclarativeinfo.cpp index 41d09c4..7dc61fd 100644 --- a/src/declarative/qml/qdeclarativeinfo.cpp +++ b/src/declarative/qml/qdeclarativeinfo.cpp @@ -43,7 +43,7 @@ #include "qdeclarativedeclarativedata_p.h" #include "qdeclarativecontext.h" -#include "qdeclarativemetatype.h" +#include "qdeclarativemetatype_p.h" #include diff --git a/src/declarative/qml/qdeclarativeintegercache.cpp b/src/declarative/qml/qdeclarativeintegercache.cpp index 7fa4b0c..8fa210f 100644 --- a/src/declarative/qml/qdeclarativeintegercache.cpp +++ b/src/declarative/qml/qdeclarativeintegercache.cpp @@ -42,7 +42,7 @@ #include "qdeclarativeintegercache_p.h" #include "qdeclarativeengine_p.h" -#include "qdeclarativemetatype.h" +#include "qdeclarativemetatype_p.h" QT_BEGIN_NAMESPACE diff --git a/src/declarative/qml/qdeclarativemetatype.cpp b/src/declarative/qml/qdeclarativemetatype.cpp index 7ae5a83..e87f8ba 100644 --- a/src/declarative/qml/qdeclarativemetatype.cpp +++ b/src/declarative/qml/qdeclarativemetatype.cpp @@ -39,7 +39,7 @@ ** ****************************************************************************/ -#include "qdeclarativemetatype.h" +#include "qdeclarativemetatype_p.h" #include "qdeclarativeproxymetaobject_p.h" #include "qdeclarativecustomparser_p.h" diff --git a/src/declarative/qml/qdeclarativemetatype.h b/src/declarative/qml/qdeclarativemetatype.h deleted file mode 100644 index 4cddf1c..0000000 --- a/src/declarative/qml/qdeclarativemetatype.h +++ /dev/null @@ -1,144 +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$ -** -****************************************************************************/ - -#ifndef QDECLARATIVEMETATYPE_H -#define QDECLARATIVEMETATYPE_H - -#include "qdeclarativeprivate.h" - -#include -#include -#include - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -QT_MODULE(Declarative) - -class QDeclarativeType; -class QDeclarativeCustomParser; -class Q_DECLARATIVE_EXPORT QDeclarativeMetaType -{ -public: - static bool copy(int type, void *data, const void *copy = 0); - - static QList qmlTypeNames(); - static QList qmlTypes(); - - static QDeclarativeType *qmlType(const QByteArray &, int, int); - static QDeclarativeType *qmlType(const QMetaObject *); - static QDeclarativeType *qmlType(int); - - static QMetaProperty defaultProperty(const QMetaObject *); - static QMetaProperty defaultProperty(QObject *); - static QMetaMethod defaultMethod(const QMetaObject *); - static QMetaMethod defaultMethod(QObject *); - - static bool isQObject(int); - static QObject *toQObject(const QVariant &, bool *ok = 0); - - static int listType(int); - static int attachedPropertiesFuncId(const QMetaObject *); - static QDeclarativeAttachedPropertiesFunc attachedPropertiesFuncById(int); - - enum TypeCategory { Unknown, Object, List }; - static TypeCategory typeCategory(int); - - static bool isInterface(int); - static const char *interfaceIId(int); - static bool isList(int); - - typedef QVariant (*StringConverter)(const QString &); - static void registerCustomStringConverter(int, StringConverter); - static StringConverter customStringConverter(int); -}; - -class QDeclarativeTypePrivate; -class Q_DECLARATIVE_EXPORT QDeclarativeType -{ -public: - QByteArray typeName() const; - QByteArray qmlTypeName() const; - - int majorVersion() const; - int minorVersion() const; - bool availableInVersion(int vmajor, int vminor) const; - - QObject *create() const; - - QDeclarativeCustomParser *customParser() const; - - bool isInterface() const; - int typeId() const; - int qListTypeId() const; - - const QMetaObject *metaObject() const; - const QMetaObject *baseMetaObject() const; - - QDeclarativeAttachedPropertiesFunc attachedPropertiesFunction() const; - const QMetaObject *attachedPropertiesType() const; - - int parserStatusCast() const; - QVariant fromObject(QObject *) const; - const char *interfaceIId() const; - int propertyValueSourceCast() const; - int propertyValueInterceptorCast() const; - - int index() const; -private: - friend class QDeclarativeTypePrivate; - friend class QDeclarativeMetaTypeData; - friend int QDeclarativePrivate::registerType(const QDeclarativePrivate::RegisterInterface &); - friend int QDeclarativePrivate::registerType(const QDeclarativePrivate::RegisterType &); - QDeclarativeType(int, const QDeclarativePrivate::RegisterInterface &); - QDeclarativeType(int, const QDeclarativePrivate::RegisterType &); - ~QDeclarativeType(); - - QDeclarativeTypePrivate *d; -}; - -QT_END_NAMESPACE - -QT_END_HEADER - -#endif // QDECLARATIVEMETATYPE_H - diff --git a/src/declarative/qml/qdeclarativemetatype_p.h b/src/declarative/qml/qdeclarativemetatype_p.h new file mode 100644 index 0000000..ec5c045 --- /dev/null +++ b/src/declarative/qml/qdeclarativemetatype_p.h @@ -0,0 +1,149 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +#ifndef QDECLARATIVEMETATYPE_P_H +#define QDECLARATIVEMETATYPE_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qdeclarative.h" + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class QDeclarativeType; +class QDeclarativeCustomParser; +class Q_DECLARATIVE_EXPORT QDeclarativeMetaType +{ +public: + static bool copy(int type, void *data, const void *copy = 0); + + static QList qmlTypeNames(); + static QList qmlTypes(); + + static QDeclarativeType *qmlType(const QByteArray &, int, int); + static QDeclarativeType *qmlType(const QMetaObject *); + static QDeclarativeType *qmlType(int); + + static QMetaProperty defaultProperty(const QMetaObject *); + static QMetaProperty defaultProperty(QObject *); + static QMetaMethod defaultMethod(const QMetaObject *); + static QMetaMethod defaultMethod(QObject *); + + static bool isQObject(int); + static QObject *toQObject(const QVariant &, bool *ok = 0); + + static int listType(int); + static int attachedPropertiesFuncId(const QMetaObject *); + static QDeclarativeAttachedPropertiesFunc attachedPropertiesFuncById(int); + + enum TypeCategory { Unknown, Object, List }; + static TypeCategory typeCategory(int); + + static bool isInterface(int); + static const char *interfaceIId(int); + static bool isList(int); + + typedef QVariant (*StringConverter)(const QString &); + static void registerCustomStringConverter(int, StringConverter); + static StringConverter customStringConverter(int); +}; + +class QDeclarativeTypePrivate; +class Q_DECLARATIVE_EXPORT QDeclarativeType +{ +public: + QByteArray typeName() const; + QByteArray qmlTypeName() const; + + int majorVersion() const; + int minorVersion() const; + bool availableInVersion(int vmajor, int vminor) const; + + QObject *create() const; + + QDeclarativeCustomParser *customParser() const; + + bool isInterface() const; + int typeId() const; + int qListTypeId() const; + + const QMetaObject *metaObject() const; + const QMetaObject *baseMetaObject() const; + + QDeclarativeAttachedPropertiesFunc attachedPropertiesFunction() const; + const QMetaObject *attachedPropertiesType() const; + + int parserStatusCast() const; + QVariant fromObject(QObject *) const; + const char *interfaceIId() const; + int propertyValueSourceCast() const; + int propertyValueInterceptorCast() const; + + int index() const; +private: + friend class QDeclarativeTypePrivate; + friend class QDeclarativeMetaTypeData; + friend int QDeclarativePrivate::registerType(const QDeclarativePrivate::RegisterInterface &); + friend int QDeclarativePrivate::registerType(const QDeclarativePrivate::RegisterType &); + QDeclarativeType(int, const QDeclarativePrivate::RegisterInterface &); + QDeclarativeType(int, const QDeclarativePrivate::RegisterType &); + ~QDeclarativeType(); + + QDeclarativeTypePrivate *d; +}; + +QT_END_NAMESPACE + +#endif // QDECLARATIVEMETATYPE_P_H + diff --git a/src/declarative/qml/qml.pri b/src/declarative/qml/qml.pri index 8285bb9..8a43cec 100644 --- a/src/declarative/qml/qml.pri +++ b/src/declarative/qml/qml.pri @@ -80,7 +80,7 @@ HEADERS += \ $$PWD/qdeclarativedom_p.h \ $$PWD/qdeclarativedom_p_p.h \ $$PWD/qdeclarativerefcount_p.h \ - $$PWD/qdeclarativemetatype.h \ + $$PWD/qdeclarativemetatype_p.h \ $$PWD/qdeclarativeengine.h \ $$PWD/qdeclarativecontext.h \ $$PWD/qdeclarativeexpression.h \ diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp index 88b64fd..eb3a376 100644 --- a/src/declarative/util/qdeclarativeanimation.cpp +++ b/src/declarative/util/qdeclarativeanimation.cpp @@ -51,7 +51,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/declarative/util/qdeclarativelistaccessor.cpp b/src/declarative/util/qdeclarativelistaccessor.cpp index 346f3e4..4e56909 100644 --- a/src/declarative/util/qdeclarativelistaccessor.cpp +++ b/src/declarative/util/qdeclarativelistaccessor.cpp @@ -41,9 +41,9 @@ #include "qdeclarativelistaccessor_p.h" -#include +#include -#include +#include #include // ### Remove me diff --git a/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp b/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp index 1c8cbbc..40cd737 100644 --- a/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp +++ b/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp @@ -49,7 +49,6 @@ #include #include #include -#include #include #include @@ -58,6 +57,7 @@ #include #include #include +#include #include "../shared/debugutil_p.h" diff --git a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp index 16af0d9..ae07112 100644 --- a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp +++ b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp @@ -41,12 +41,14 @@ #include #include #include -#include #include #include #include #include + #include +#include + #include "testtypes.h" #include "../../../shared/util.h" diff --git a/tests/auto/declarative/qdeclarativemetatype/tst_qdeclarativemetatype.cpp b/tests/auto/declarative/qdeclarativemetatype/tst_qdeclarativemetatype.cpp index ca16214..4333e02 100644 --- a/tests/auto/declarative/qdeclarativemetatype/tst_qdeclarativemetatype.cpp +++ b/tests/auto/declarative/qdeclarativemetatype/tst_qdeclarativemetatype.cpp @@ -40,7 +40,6 @@ ****************************************************************************/ #include -#include #include #include #include @@ -53,6 +52,8 @@ #include #include +#include + class tst_qdeclarativemetatype : public QObject { Q_OBJECT -- cgit v0.12 From ff92c1cd2bf5171637b51d5eb646b165d6f11ec3 Mon Sep 17 00:00:00 2001 From: Alexis Menard Date: Wed, 24 Feb 2010 12:13:51 +0100 Subject: Build fix when using include. --- src/declarative/qml/qdeclarativeprivate.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/declarative/qml/qdeclarativeprivate.h b/src/declarative/qml/qdeclarativeprivate.h index e8bbff4..01369d4 100644 --- a/src/declarative/qml/qdeclarativeprivate.h +++ b/src/declarative/qml/qdeclarativeprivate.h @@ -44,6 +44,9 @@ #include #include +#ifndef Q_OS_WIN +#include +#endif QT_BEGIN_HEADER -- cgit v0.12 From a343544b0fcb245cf0a0edbbce153611a6342374 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Wed, 24 Feb 2010 15:41:59 +0100 Subject: Explain the onPropertyChanged pattern in the docs. --- src/declarative/graphicsitems/qdeclarativeitem.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index d492dbd..c282808 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -1172,6 +1172,17 @@ QDeclarativeKeysAttached *QDeclarativeKeysAttached::qmlAttachedProperties(QObjec See the \l {Keys}{Keys} attached property for detailed documentation. + \section 1 Property Change Signals + + Most properties on Item and Item derivatives have a signal + emitted when they change. By convention, the signals are + named Changed, e.g. xChanged will be emitted when an item's + x property changes. Note that these also have signal handers e.g. + the onXChanged signal handler will be called when an item's x property + changes. For many properties in Item or Item derivatives this can be used + to add a touch of imperative logic to your application (when absolutely + necessary). + \ingroup group_coreitems */ -- cgit v0.12 From 327d212f5cff81f1c21b7be5c54b3e1eab4f0ac5 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Wed, 24 Feb 2010 16:26:09 +0100 Subject: Add QDeclarativeGraphicsWidget, a QGraphicsWidget version of QmlView Could use to be renamed. Possibly to -QDeclarativeViewGraphicsWidget -QGraphicsDeclarativeViewWidget (Or QGraphicsD20, in the spirit of i18n) But those aren't any shorter. Task-number: QTBUG-7067 --- doc/src/declarative/integrating.qdoc | 10 + .../util/qdeclarativegraphicswidget.cpp | 457 +++++++++++++++++++++ src/declarative/util/qdeclarativegraphicswidget.h | 113 +++++ src/declarative/util/util.pri | 6 +- 4 files changed, 584 insertions(+), 2 deletions(-) create mode 100644 src/declarative/util/qdeclarativegraphicswidget.cpp create mode 100644 src/declarative/util/qdeclarativegraphicswidget.h diff --git a/doc/src/declarative/integrating.qdoc b/doc/src/declarative/integrating.qdoc index c685d3d..09ed178 100644 --- a/doc/src/declarative/integrating.qdoc +++ b/doc/src/declarative/integrating.qdoc @@ -86,6 +86,9 @@ QGraphicsObject *object = scene->addItem(object); \endcode +There is a convenience QGraphicsWidget subclass, QDeclarativeGraphicsWidget, which takes care of the engine +and component instantiation for you. + The following QGraphicsView options are recommended for optimal performance of QML UIs: @@ -95,6 +98,13 @@ of QML UIs: \o QGraphicsScene::setItemIndexMethod(QGraphicsScene::NoIndex); \endlist +And the following QGraphicsView options are required for QML key handling to work: + +\list +\o QGraphicsView::viewport()->setFocusPolicy(Qt::NoFocus); +\o QGraphicsScene::setStickyFocus(true); +\endlist + \section1 Using existing QGraphicsWidgets in QML Another way of integrating with a QGraphicsView based UI is to expose your existing QGraphicsWidgets to QML, and constructing your scene in QML. Note that diff --git a/src/declarative/util/qdeclarativegraphicswidget.cpp b/src/declarative/util/qdeclarativegraphicswidget.cpp new file mode 100644 index 0000000..1d0d468 --- /dev/null +++ b/src/declarative/util/qdeclarativegraphicswidget.cpp @@ -0,0 +1,457 @@ +/**************************************************************************** +** +** 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 "qdeclarativegraphicswidget.h" + +#include "qperformancelog_p_p.h" +#include "qfxperf_p_p.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class QDeclarativeGraphicsWidgetSharedQDeclarativeEngine +{ +public: + QDeclarativeGraphicsWidgetSharedQDeclarativeEngine(){} + + static QDeclarativeEngine* sharedEngine(){ + if(!references) + return 0; + return &QDeclarativeGraphicsWidgetSharedQDeclarativeEngine::m_instance->engine; + } + static void attach(){ + if(!references++) + m_instance = new QDeclarativeGraphicsWidgetSharedQDeclarativeEngine(); + } + + static void detach(){ + if(!--references) + delete m_instance; + } + +private: + static QDeclarativeGraphicsWidgetSharedQDeclarativeEngine* m_instance; + static int references; + QDeclarativeEngine engine; +}; + +int QDeclarativeGraphicsWidgetSharedQDeclarativeEngine::references = 0; +QDeclarativeGraphicsWidgetSharedQDeclarativeEngine* QDeclarativeGraphicsWidgetSharedQDeclarativeEngine::m_instance = 0; + +class QDeclarativeGraphicsWidgetPrivate +{ +public: + QDeclarativeGraphicsWidgetPrivate() + : root(0), component(0), + resizeMode(QDeclarativeGraphicsWidget::SizeViewToRootObject) + { + QDeclarativeGraphicsWidgetSharedQDeclarativeEngine::attach(); + engine = QDeclarativeGraphicsWidgetSharedQDeclarativeEngine::sharedEngine(); + } + + ~QDeclarativeGraphicsWidgetPrivate() + { + QDeclarativeGraphicsWidgetSharedQDeclarativeEngine::detach(); + } + + QGuard root; + QGuard declarativeRoot; + + QUrl source; + + QDeclarativeEngine* engine; + QDeclarativeComponent *component; + QBasicTimer resizetimer; + + mutable QSize initialSize; + QDeclarativeGraphicsWidget::ResizeMode resizeMode; + + void init(); + +}; + +/*! + \class QDeclarativeGraphicsWidget + \brief The QDeclarativeGraphicsWidget class provides a QGraphicsWidget for displaying a Qt Declarative user interface. + + Any QGraphicsObject or QDeclarativeGraphicsItem + created via Qt Declarative can be placed on a standard QGraphicsScene and viewed with a standard + QGraphicsView. + + QDeclarativeGraphicsWidget is a convenience class which handles QDeclarativeComponent loading and object creation. + It shares the same QDeclarativeEngine between all QDeclarativeGraphicsWidgets in the application, to minimize overhead. + + QDeclarativeGraphicsWidget is ideal for when you have many small components styled with Qt Declarative, and want to integrate + them into a larger QGraphicsItem based scene. If your interface is primarily Qt Declarative based, consider using QDeclarativeView + instead. + + Note that the following settings on your QGraphicsScene/View are recommended for optimal performance with Qt Declarative: + \list + \o QGraphicsView::setOptimizationFlags(QGraphicsView::DontSavePainterState); + \o QGraphicsView::setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); + \o QGraphicsScene::setItemIndexMethod(QGraphicsScene::NoIndex); + \endlist + Also note that the following settings on your QGraphicsScene/View are required for key handling in Qt Declarative to work: + \list + \o QGraphicsView::viewport()->setFocusPolicy(Qt::NoFocus); + \o QGraphicsScene::setStickyFocus(true); + \endlist + + To receive errors related to loading and executing declarative files with QDeclarativeGraphicsWidget, + you can connect to the statusChanged() signal and monitor for QDeclarativeGraphicsWidget::Error. + The errors are available via QDeclarativeGraphicsWidget::errors(). +*/ + + +/*! \fn void QDeclarativeGraphicsWidget::sceneResized(QSize size) + This signal is emitted when the view is resized to \a size. +*/ + +/*! \fn void QDeclarativeGraphicsWidget::statusChanged(QDeclarativeGraphicsWidget::Status status) + This signal is emitted when the component's current \l{QDeclarativeGraphicsWidget::Status} {status} changes. +*/ + +/*! + \fn QDeclarativeGraphicsWidget::QDeclarativeGraphicsWidget(QGraphicsItem *parent) + + Constructs a QDeclarativeGraphicsWidget with the given \a parent. +*/ +QDeclarativeGraphicsWidget::QDeclarativeGraphicsWidget(QGraphicsItem *parent) +: QGraphicsWidget(parent), d(new QDeclarativeGraphicsWidgetPrivate) +{ + setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred); + d->init(); +} + +void QDeclarativeGraphicsWidgetPrivate::init() +{ +} + +/*! + The destructor clears the view's \l {QGraphicsObject} {items} and + deletes the internal representation. + */ +QDeclarativeGraphicsWidget::~QDeclarativeGraphicsWidget() +{ + delete d->root; + delete d; +} + +/*! + Sets the source to the \a url. + + Will also load the QML file and instantiate the component. + + */ +void QDeclarativeGraphicsWidget::setSource(const QUrl& url) +{ + d->source = url; + + //Execute + if(d->root) + delete d->root; + if(d->component) + delete d->component; + d->component = new QDeclarativeComponent(d->engine, d->source, this); + + if (!d->component->isLoading()) { + continueExecute(); + } else { + connect(d->component, SIGNAL(statusChanged(QDeclarativeComponent::Status)), this, SLOT(continueExecute())); + } +} + +/*! + Returns the source URL, if set. + + \sa setSource() + */ +QUrl QDeclarativeGraphicsWidget::source() const +{ + return d->source; +} + +/*! + Returns a pointer to the QDeclarativeEngine used for instantiating + Qt Declarative Components. + */ +QDeclarativeEngine* QDeclarativeGraphicsWidget::engine() +{ + return d->engine; +} + +/*! + This function returns the root of the context hierarchy. Each declarative + component is instantiated in a QDeclarativeContext. QDeclarativeContext's are + essential for passing data to declarative components. In Qt Declarative, contexts are + arranged hierarchically and this hierarchy is managed by the + QDeclarativeEngine. + */ +QDeclarativeContext* QDeclarativeGraphicsWidget::rootContext() +{ + return d->engine->rootContext(); +} + + +/*! + \enum QDeclarativeGraphicsWidget::Status + + Specifies the loading status of the QDeclarativeGraphicsWidget. + + \value Null This QDeclarativeGraphicsWidget has no source set. + \value Ready This QDeclarativeGraphicsWidget has loaded and created the declarative component. + \value Loading This QDeclarativeGraphicsWidget is loading network data. + \value Error An error has occured. Calling errorDescription() to retrieve a description. +*/ + +/*! + \property QDeclarativeGraphicsWidget::status + The component's current \l{QDeclarativeGraphicsWidget::Status} {status}. +*/ + +QDeclarativeGraphicsWidget::Status QDeclarativeGraphicsWidget::status() const +{ + if (!d->component) + return QDeclarativeGraphicsWidget::Null; + + return QDeclarativeGraphicsWidget::Status(d->component->status()); +} + +/*! + Return the list of errors that occured during the last compile or create + operation. An empty list is returned if isError() is not set. +*/ +QList QDeclarativeGraphicsWidget::errors() const +{ + if (d->component) + return d->component->errors(); + return QList(); +} + + +/*! + \property QDeclarativeGraphicsWidget::resizeMode + \brief whether the view should resize the canvas contents + + If this property is set to SizeViewToRootObject (the default), the view + resizes with the root item in the declarative file. + + If this property is set to SizeRootObjectToView, the view will + automatically resize the root item. + + Regardless of this property, the sizeHint of the view + is the initial size of the root item. Note though that + since declarative files may load dynamically, that size may change. + + \sa initialSize() +*/ + +void QDeclarativeGraphicsWidget::setResizeMode(ResizeMode mode) +{ + if (d->resizeMode == mode) + return; + + d->resizeMode = mode; + if (d->declarativeRoot) { + if (d->resizeMode == SizeRootObjectToView) { + d->declarativeRoot->setWidth(size().width()); + d->declarativeRoot->setHeight(size().height()); + } else { + d->declarativeRoot->setWidth(d->initialSize.width()); + d->declarativeRoot->setHeight(d->initialSize.height()); + } + } +} + +QDeclarativeGraphicsWidget::ResizeMode QDeclarativeGraphicsWidget::resizeMode() const +{ + return d->resizeMode; +} + +/*! + \internal + */ +void QDeclarativeGraphicsWidget::continueExecute() +{ + + disconnect(d->component, SIGNAL(statusChanged(QDeclarativeComponent::Status)), this, SLOT(continueExecute())); + + if (d->component->isError()) { + QList errorList = d->component->errors(); + foreach (const QDeclarativeError &error, errorList) { + qWarning() << error; + } + emit statusChanged(status()); + return; + } + + QObject *obj = d->component->create(); + + if(d->component->isError()) { + QList errorList = d->component->errors(); + foreach (const QDeclarativeError &error, errorList) { + qWarning() << error; + } + emit statusChanged(status()); + return; + } + + if (obj) { + if (QDeclarativeItem *item = qobject_cast(obj)) { + + item->QGraphicsItem::setParentItem(this); + item->QObject::setParent(this); + + d->root = item; + d->declarativeRoot = item; + connect(item, SIGNAL(widthChanged()), this, SLOT(sizeChanged())); + connect(item, SIGNAL(heightChanged()), this, SLOT(sizeChanged())); + if (d->initialSize.height() <= 0 && d->declarativeRoot->width() > 0) + d->initialSize.setWidth(d->declarativeRoot->width()); + if (d->initialSize.height() <= 0 && d->declarativeRoot->height() > 0) + d->initialSize.setHeight(d->declarativeRoot->height()); + resize(d->initialSize); + + if (d->resizeMode == SizeRootObjectToView) { + d->declarativeRoot->setWidth(size().width()); + d->declarativeRoot->setHeight(size().height()); + } else { + QSizeF sz(d->declarativeRoot->width(),d->declarativeRoot->height()); + emit sceneResized(sz); + resize(sz); + } + updateGeometry(); + } else if (QGraphicsObject *item = qobject_cast(obj)) { + item->setParent(this); + qWarning() << "QDeclarativeGraphicsWidget::resizeMode is not honored for components of type QGraphicsObject"; + } else if (qobject_cast(obj)) { + qWarning() << "QDeclarativeGraphicsWidget does not support loading QML files containing QWidgets"; + } + } + emit statusChanged(status()); +} + +/*! + \internal + */ +void QDeclarativeGraphicsWidget::sizeChanged() +{ + // delay, so we catch both width and height changing. + d->resizetimer.start(0,this); +} + +/*! + \internal + If the \l {QTimerEvent} {timer event} \a e is this + view's resize timer, sceneResized() is emitted. + */ +void QDeclarativeGraphicsWidget::timerEvent(QTimerEvent* e) +{ + if (!e || e->timerId() == d->resizetimer.timerId()) { + if (d->declarativeRoot) { + QSize sz(d->declarativeRoot->width(),d->declarativeRoot->height()); + emit sceneResized(sz); + } + d->resizetimer.stop(); + updateGeometry(); + } +} + +/*! + \internal + The size hint is the size of the root item. +*/ +QSizeF QDeclarativeGraphicsWidget::sizeHint() const +{ + if (d->declarativeRoot) { + if (d->initialSize.width() <= 0) + d->initialSize.setWidth(d->declarativeRoot->width()); + if (d->initialSize.height() <= 0) + d->initialSize.setHeight(d->declarativeRoot->height()); + } + return d->initialSize; +} + +/*! + Returns the view's root \l {QGraphicsObject} {item}. + */ +QGraphicsObject *QDeclarativeGraphicsWidget::rootObject() const +{ + return d->root; +} + +/*! + \internal + This function handles the \l {QGraphicsSceneResizeEvent} {resize event} + \a e. + */ +void QDeclarativeGraphicsWidget::resizeEvent(QGraphicsSceneResizeEvent *e) +{ + if (d->resizeMode == SizeRootObjectToView && d->declarativeRoot) { + d->declarativeRoot->setWidth(size().width()); + d->declarativeRoot->setHeight(size().height()); + } + QGraphicsWidget::resizeEvent(e); +} + +QT_END_NAMESPACE diff --git a/src/declarative/util/qdeclarativegraphicswidget.h b/src/declarative/util/qdeclarativegraphicswidget.h new file mode 100644 index 0000000..33ebc7b --- /dev/null +++ b/src/declarative/util/qdeclarativegraphicswidget.h @@ -0,0 +1,113 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +#ifndef QDECLARATIVEGRAPHICSWIDGET_H +#define QDECLARATIVEGRAPHICSWIDGET_H + +#include +#include +#include +#include +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Declarative) + +class QGraphicsObject; +class QDeclarativeEngine; +class QDeclarativeContext; +class QDeclarativeError; + +class QDeclarativeGraphicsWidgetPrivate; + +class Q_DECLARATIVE_EXPORT QDeclarativeGraphicsWidget : public QGraphicsWidget +{ + Q_OBJECT + Q_PROPERTY(ResizeMode resizeMode READ resizeMode WRITE setResizeMode) + Q_PROPERTY(Status status READ status NOTIFY statusChanged) + Q_PROPERTY(QUrl source READ source WRITE setSource) + +public: + explicit QDeclarativeGraphicsWidget(QGraphicsItem *parent = 0); + virtual ~QDeclarativeGraphicsWidget(); + + QUrl source() const; + void setSource(const QUrl&); + + QDeclarativeEngine* engine(); + QDeclarativeContext* rootContext(); + + QGraphicsObject *rootObject() const; + + enum ResizeMode { SizeViewToRootObject, SizeRootObjectToView }; + ResizeMode resizeMode() const; + void setResizeMode(ResizeMode); + QSizeF sizeHint() const; + + enum Status { Null, Ready, Loading, Error }; + Status status() const; + + QList errors() const; + +Q_SIGNALS: + void sceneResized(QSizeF size); + void statusChanged(QDeclarativeGraphicsWidget::Status); + +private Q_SLOTS: + void continueExecute(); + void sizeChanged(); + +protected: + virtual void resizeEvent(QGraphicsSceneResizeEvent *); + void timerEvent(QTimerEvent*); + +private: + QDeclarativeGraphicsWidgetPrivate* d; +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QDECLARATIVEGRAPHICSWIDGET_H diff --git a/src/declarative/util/util.pri b/src/declarative/util/util.pri index 610eb3f..46126e5 100644 --- a/src/declarative/util/util.pri +++ b/src/declarative/util/util.pri @@ -30,7 +30,8 @@ SOURCES += \ $$PWD/qdeclarativedatetimeformatter.cpp \ $$PWD/qdeclarativebehavior.cpp \ $$PWD/qdeclarativefontloader.cpp \ - $$PWD/qdeclarativestyledtext.cpp + $$PWD/qdeclarativestyledtext.cpp \ + $$PWD/qdeclarativegraphicswidget.cpp HEADERS += \ $$PWD/qdeclarativeutilmodule_p.h\ @@ -65,7 +66,8 @@ HEADERS += \ $$PWD/qdeclarativedatetimeformatter_p.h \ $$PWD/qdeclarativebehavior_p.h \ $$PWD/qdeclarativefontloader_p.h \ - $$PWD/qdeclarativestyledtext_p.h + $$PWD/qdeclarativestyledtext_p.h \ + $$PWD/qdeclarativegraphicswidget.h contains(QT_CONFIG, xmlpatterns) { QT+=xmlpatterns -- cgit v0.12 From 5867481c77e960a7d7b4cb3e9a7a4dffb9d68e92 Mon Sep 17 00:00:00 2001 From: mae Date: Wed, 24 Feb 2010 17:03:30 +0100 Subject: Add support for qml imports directory in configure, qmake, and qmlengine --- configure | 22 ++++++++++++++++++++++ qmake/option.h | 3 ++- qmake/property.cpp | 3 +++ src/corelib/global/qlibraryinfo.cpp | 6 ++++++ src/corelib/global/qlibraryinfo.h | 3 ++- src/declarative/qml/qdeclarativeengine.cpp | 19 ++++++++++++------- tools/configure/configureapp.cpp | 16 +++++++++++++++- 7 files changed, 62 insertions(+), 10 deletions(-) diff --git a/configure b/configure index f8a2e95..1c3c99b 100755 --- a/configure +++ b/configure @@ -792,6 +792,7 @@ QT_INSTALL_HEADERS= QT_INSTALL_LIBS= QT_INSTALL_BINS= QT_INSTALL_PLUGINS= +QT_INSTALL_IMPORTS= QT_INSTALL_DATA= QT_INSTALL_TRANSLATIONS= QT_INSTALL_SETTINGS= @@ -1140,6 +1141,9 @@ while [ "$#" -gt 0 ]; do plugindir) QT_INSTALL_PLUGINS="$VAL" ;; + importdir) + QT_INSTALL_IMPORTS="$VAL" + ;; datadir) QT_INSTALL_DATA="$VAL" ;; @@ -3185,6 +3189,17 @@ if [ -z "$QT_INSTALL_PLUGINS" ]; then #default fi QT_INSTALL_PLUGINS=`"$relpath/config.tests/unix/makeabs" "$QT_INSTALL_PLUGINS"` +#imports +if [ -z "$QT_INSTALL_IMPORTS" ]; then #default + if [ "$CFG_PREFIX_INSTALL" = "no" ]; then + if [ "$PLATFORM_MAC" = "yes" ]; then + QT_INSTALL_IMPORTS="/Developer/Applications/Qt/imports" + fi + fi + [ -z "$QT_INSTALL_IMPORTS" ] && QT_INSTALL_IMPORTS="$QT_INSTALL_PREFIX/imports" #fallback +fi +QT_INSTALL_IMPORTS=`"$relpath/config.tests/unix/makeabs" "$QT_INSTALL_IMPORTS"` + #data if [ -z "$QT_INSTALL_DATA" ]; then #default QT_INSTALL_DATA="$QT_INSTALL_PREFIX" @@ -3347,6 +3362,8 @@ cat < ...... Plugins will be installed to (default PREFIX/plugins) + -importdir ...... Imports for QML will be installed to + (default PREFIX/imports) -datadir ........ Data used by Qt programs will be installed to (default PREFIX) -translationdir . Translations of Qt programs will be installed to @@ -4142,6 +4159,7 @@ HEADERS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_hdrspath=$QT_IN LIBRARIES_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_libspath=$QT_INSTALL_LIBS"` BINARIES_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_binspath=$QT_INSTALL_BINS"` PLUGINS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_plugpath=$QT_INSTALL_PLUGINS"` +IMPORTS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_impspath=$QT_INSTALL_IMPORTS"` DATA_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_datapath=$QT_INSTALL_DATA"` TRANSLATIONS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_trnspath=$QT_INSTALL_TRANSLATIONS"` SETTINGS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_stngpath=$QT_INSTALL_SETTINGS"` @@ -4166,6 +4184,7 @@ if [ ! -z "$QT_HOST_PREFIX" ]; then HOSTLIBRARIES_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_libspath=$QT_HOST_PREFIX/lib"` HOSTBINARIES_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_binspath=$QT_HOST_PREFIX/bin"` HOSTPLUGINS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_plugpath=$QT_HOST_PREFIX/plugins"` + HOSTIMPORTS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_impspath=$QT_HOST_PREFIX/IMPORTS"` HOSTDATA_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_datapath=$QT_HOST_PREFIX"` HOSTTRANSLATIONS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_trnspath=$QT_HOST_PREFIX/translations"` HOSTSETTINGS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_stngpath=$QT_INSTALL_SETTINGS"` @@ -4182,6 +4201,7 @@ static const char qt_configure_headers_path_str [256 + 12] = "$HOSTHEADERS_ static const char qt_configure_libraries_path_str [256 + 12] = "$HOSTLIBRARIES_PATH_STR"; static const char qt_configure_binaries_path_str [256 + 12] = "$HOSTBINARIES_PATH_STR"; static const char qt_configure_plugins_path_str [256 + 12] = "$HOSTPLUGINS_PATH_STR"; +static const char qt_configure_imports_path_str [256 + 12] = "$HOSTIMPORTS_PATH_STR"; static const char qt_configure_data_path_str [256 + 12] = "$HOSTDATA_PATH_STR"; static const char qt_configure_translations_path_str [256 + 12] = "$HOSTTRANSLATIONS_PATH_STR"; static const char qt_configure_settings_path_str [256 + 12] = "$HOSTSETTINGS_PATH_STR"; @@ -4199,6 +4219,7 @@ static const char qt_configure_headers_path_str [256 + 12] = "$HEADERS_PATH static const char qt_configure_libraries_path_str [256 + 12] = "$LIBRARIES_PATH_STR"; static const char qt_configure_binaries_path_str [256 + 12] = "$BINARIES_PATH_STR"; static const char qt_configure_plugins_path_str [256 + 12] = "$PLUGINS_PATH_STR"; +static const char qt_configure_imports_path_str [256 + 12] = "$IMPORTS_PATH_STR"; static const char qt_configure_data_path_str [256 + 12] = "$DATA_PATH_STR"; static const char qt_configure_translations_path_str [256 + 12] = "$TRANSLATIONS_PATH_STR"; static const char qt_configure_settings_path_str [256 + 12] = "$SETTINGS_PATH_STR"; @@ -4223,6 +4244,7 @@ cat >> "$outpath/src/corelib/global/qconfig.cpp.new" <environmentImportPath; + QString builtinPath = QLibraryInfo::location(QLibraryInfo::ImportsPath); + if (!builtinPath.isEmpty()) + paths += builtinPath; foreach (const QString &p, paths) { dir = p+QLatin1Char('/')+url; @@ -1592,14 +1594,17 @@ QUrl QDeclarativeEnginePrivate::Imports::baseUrl() const Adds \a path as a directory where installed QML components are defined in a URL-based directory structure. - For example, if you add \c /opt/MyApp/lib/qml and then load QML + For example, if you add \c /opt/MyApp/lib/imports and then load QML that imports \c com.mycompany.Feature, then QDeclarativeEngine will look - in \c /opt/MyApp/lib/qml/com/mycompany/Feature/ for the components - provided by that module (and in the case of versioned imports, - for the \c qmldir file definiting the type version mapping. + in \c /opt/MyApp/lib/imports/com/mycompany/Feature/ for the components + provided by that module. A \c qmldir file is required for definiting the + type version mapping and possibly declarative extensions plugins. + + The engine searches in the base directory of the qml file, then + the paths added via addImportPath(), then the paths specified in the + \c QML_IMPORT_PATH environment variable, then the builtin \c ImportsPath from + QLibraryInfo. - By default, only the "qml" subdirectory of QLibraryInfo::location(QLibraryInfo::DataPath) - is included on the import path. */ void QDeclarativeEngine::addImportPath(const QString& path) { diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index 3b5a10a..1fe4503 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -1065,6 +1065,12 @@ void Configure::parseCmdLine() dictionary[ "QT_INSTALL_PLUGINS" ] = configCmdLine.at(i); } + else if( configCmdLine.at(i) == "-importdir" ) { + ++i; + if(i==argCount) + break; + dictionary[ "QT_INSTALL_IMPORTS" ] = configCmdLine.at(i); + } else if( configCmdLine.at(i) == "-datadir" ) { ++i; if(i==argCount) @@ -1482,6 +1488,7 @@ void Configure::applySpecSpecifics() dictionary[ "QT_HOST_PREFIX" ] = dictionary[ "QT_INSTALL_PREFIX" ]; dictionary[ "QT_INSTALL_PREFIX" ] = ""; dictionary[ "QT_INSTALL_PLUGINS" ] = "\\resource\\qt\\plugins"; + dictionary[ "QT_INSTALL_IMPORTS" ] = "\\resource\\qt\\imports"; dictionary[ "ARM_FPU_TYPE" ] = "softvfp"; dictionary[ "SQL_SQLITE" ] = "yes"; dictionary[ "SQL_SQLITE_LIB" ] = "system"; @@ -1558,7 +1565,7 @@ bool Configure::displayHelp() desc("Usage: configure [-buildkey ]\n" // desc("Usage: configure [-prefix dir] [-bindir ] [-libdir ]\n" // "[-docdir ] [-headerdir ] [-plugindir ]\n" -// "[-datadir ] [-translationdir ]\n" +// "[-importdir ] [-datadir ] [-translationdir ]\n" // "[-examplesdir ] [-demosdir ][-buildkey ]\n" "[-release] [-debug] [-debug-and-release] [-shared] [-static]\n" "[-no-fast] [-fast] [-no-exceptions] [-exceptions]\n" @@ -1598,6 +1605,7 @@ bool Configure::displayHelp() desc( "-docdir ", "Documentation will be installed to dir\n(default PREFIX/doc)"); desc( "-headerdir ", "Headers will be installed to dir\n(default PREFIX/include)"); desc( "-plugindir ", "Plugins will be installed to dir\n(default PREFIX/plugins)"); + desc( "-importdir ", "Imports for QML will be installed to dir\n(default PREFIX/imports)"); desc( "-datadir ", "Data used by Qt programs will be installed to dir\n(default PREFIX)"); desc( "-translationdir ","Translations of Qt programs will be installed to dir\n(default PREFIX/translations)\n"); desc( "-examplesdir ", "Examples will be installed to dir\n(default PREFIX/examples)"); @@ -2646,6 +2654,8 @@ void Configure::generateOutputVars() dictionary[ "QT_INSTALL_BINS" ] = qipempty ? "" : fixSeparators( dictionary[ "QT_INSTALL_PREFIX" ] + "/bin" ); if( !dictionary[ "QT_INSTALL_PLUGINS" ].size() ) dictionary[ "QT_INSTALL_PLUGINS" ] = qipempty ? "" : fixSeparators( dictionary[ "QT_INSTALL_PREFIX" ] + "/plugins" ); + if( !dictionary[ "QT_INSTALL_IMPORTS" ].size() ) + dictionary[ "QT_INSTALL_IMPORTS" ] = qipempty ? "" : fixSeparators( dictionary[ "QT_INSTALL_PREFIX" ] + "/imports" ); if( !dictionary[ "QT_INSTALL_DATA" ].size() ) dictionary[ "QT_INSTALL_DATA" ] = qipempty ? "" : fixSeparators( dictionary[ "QT_INSTALL_PREFIX" ] ); if( !dictionary[ "QT_INSTALL_TRANSLATIONS" ].size() ) @@ -3150,6 +3160,7 @@ void Configure::generateConfigfiles() << "static const char qt_configure_libraries_path_str [512 + 12] = \"qt_libspath=" << QString(dictionary["QT_INSTALL_LIBS"]).replace( "\\", "\\\\" ) << "\";" << endl << "static const char qt_configure_binaries_path_str [512 + 12] = \"qt_binspath=" << QString(dictionary["QT_INSTALL_BINS"]).replace( "\\", "\\\\" ) << "\";" << endl << "static const char qt_configure_plugins_path_str [512 + 12] = \"qt_plugpath=" << QString(dictionary["QT_INSTALL_PLUGINS"]).replace( "\\", "\\\\" ) << "\";" << endl + << "static const char qt_configure_imports_path_str [512 + 12] = \"qt_impspath=" << QString(dictionary["QT_INSTALL_IMPORTS"]).replace( "\\", "\\\\" ) << "\";" << endl << "static const char qt_configure_data_path_str [512 + 12] = \"qt_datapath=" << QString(dictionary["QT_INSTALL_DATA"]).replace( "\\", "\\\\" ) << "\";" << endl << "static const char qt_configure_translations_path_str [512 + 12] = \"qt_trnspath=" << QString(dictionary["QT_INSTALL_TRANSLATIONS"]).replace( "\\", "\\\\" ) << "\";" << endl << "static const char qt_configure_examples_path_str [512 + 12] = \"qt_xmplpath=" << QString(dictionary["QT_INSTALL_EXAMPLES"]).replace( "\\", "\\\\" ) << "\";" << endl @@ -3164,6 +3175,7 @@ void Configure::generateConfigfiles() << "static const char qt_configure_libraries_path_str [512 + 12] = \"qt_libspath=" << fixSeparators(dictionary[ "QT_HOST_PREFIX" ] + "/lib").replace( "\\", "\\\\" ) <<"\";" << endl << "static const char qt_configure_binaries_path_str [512 + 12] = \"qt_binspath=" << fixSeparators(dictionary[ "QT_HOST_PREFIX" ] + "/bin").replace( "\\", "\\\\" ) <<"\";" << endl << "static const char qt_configure_plugins_path_str [512 + 12] = \"qt_plugpath=" << fixSeparators(dictionary[ "QT_HOST_PREFIX" ] + "/plugins").replace( "\\", "\\\\" ) <<"\";" << endl + << "static const char qt_configure_imports_path_str [512 + 12] = \"qt_impspath=" << fixSeparators(dictionary[ "QT_HOST_PREFIX" ] + "/imports").replace( "\\", "\\\\" ) <<"\";" << endl << "static const char qt_configure_data_path_str [512 + 12] = \"qt_datapath=" << fixSeparators(dictionary[ "QT_HOST_PREFIX" ]).replace( "\\", "\\\\" ) <<"\";" << endl << "static const char qt_configure_translations_path_str [512 + 12] = \"qt_trnspath=" << fixSeparators(dictionary[ "QT_HOST_PREFIX" ] + "/translations").replace( "\\", "\\\\" ) <<"\";" << endl << "static const char qt_configure_examples_path_str [512 + 12] = \"qt_xmplpath=" << fixSeparators(dictionary[ "QT_HOST_PREFIX" ] + "/example").replace( "\\", "\\\\" ) <<"\";" << endl @@ -3179,6 +3191,7 @@ void Configure::generateConfigfiles() << "#define QT_CONFIGURE_LIBRARIES_PATH qt_configure_libraries_path_str + 12;" << endl << "#define QT_CONFIGURE_BINARIES_PATH qt_configure_binaries_path_str + 12;" << endl << "#define QT_CONFIGURE_PLUGINS_PATH qt_configure_plugins_path_str + 12;" << endl + << "#define QT_CONFIGURE_IMPORTS_PATH qt_configure_imports_path_str + 12;" << endl << "#define QT_CONFIGURE_DATA_PATH qt_configure_data_path_str + 12;" << endl << "#define QT_CONFIGURE_TRANSLATIONS_PATH qt_configure_translations_path_str + 12;" << endl << "#define QT_CONFIGURE_EXAMPLES_PATH qt_configure_examples_path_str + 12;" << endl @@ -3325,6 +3338,7 @@ void Configure::displayConfig() cout << "Headers installed to........" << dictionary[ "QT_INSTALL_HEADERS" ] << endl; cout << "Libraries installed to......" << dictionary[ "QT_INSTALL_LIBS" ] << endl; cout << "Plugins installed to........" << dictionary[ "QT_INSTALL_PLUGINS" ] << endl; + cout << "Imports installed to........" << dictionary[ "QT_INSTALL_IMPORTS" ] << endl; cout << "Binaries installed to......." << dictionary[ "QT_INSTALL_BINS" ] << endl; cout << "Docs installed to..........." << dictionary[ "QT_INSTALL_DOCS" ] << endl; cout << "Data installed to..........." << dictionary[ "QT_INSTALL_DATA" ] << endl; -- cgit v0.12 From 6ba32ca47e9f08d4d82befb3cc6632897b3b0f6a Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Wed, 24 Feb 2010 17:34:18 +0100 Subject: Fix building without the XmlPatterns Module --- src/declarative/util/qdeclarativeutilmodule.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/declarative/util/qdeclarativeutilmodule.cpp b/src/declarative/util/qdeclarativeutilmodule.cpp index 1e4b963..ecaa607c 100644 --- a/src/declarative/util/qdeclarativeutilmodule.cpp +++ b/src/declarative/util/qdeclarativeutilmodule.cpp @@ -105,8 +105,10 @@ void QDeclarativeUtilModule::defineModule() QML_REGISTER_TYPE(Qt,4,6,Timer,QDeclarativeTimer); QML_REGISTER_TYPE(Qt,4,6,Transition,QDeclarativeTransition); QML_REGISTER_TYPE(Qt,4,6,Vector3dAnimation,QDeclarativeVector3dAnimation); +#ifndef QT_NO_XMLPATTERNS QML_REGISTER_TYPE(Qt,4,6,XmlListModel,QDeclarativeXmlListModel); QML_REGISTER_TYPE(Qt,4,6,XmlRole,QDeclarativeXmlListModelRole); +#endif QML_REGISTER_NOCREATE_TYPE(QDeclarativeAnchors); QML_REGISTER_NOCREATE_TYPE(QDeclarativeAbstractAnimation); -- cgit v0.12 From 36af8113fc9b98c90c8fd0afd7a76f3bc23dc23b Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Wed, 24 Feb 2010 17:44:53 +0100 Subject: Install the QML extensions. --- imports/Qt/multimedia/qmldir | 1 + imports/Qt/widgets/qmldir | 1 + src/plugins/qdeclarativemodules/multimedia/multimedia.pro | 10 +++++++--- src/plugins/qdeclarativemodules/widgets/widgets.pro | 9 +++++++-- 4 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 imports/Qt/multimedia/qmldir create mode 100644 imports/Qt/widgets/qmldir diff --git a/imports/Qt/multimedia/qmldir b/imports/Qt/multimedia/qmldir new file mode 100644 index 0000000..0e6f656 --- /dev/null +++ b/imports/Qt/multimedia/qmldir @@ -0,0 +1 @@ +plugin multimedia diff --git a/imports/Qt/widgets/qmldir b/imports/Qt/widgets/qmldir new file mode 100644 index 0000000..6f19878 --- /dev/null +++ b/imports/Qt/widgets/qmldir @@ -0,0 +1 @@ +plugin widgets diff --git a/src/plugins/qdeclarativemodules/multimedia/multimedia.pro b/src/plugins/qdeclarativemodules/multimedia/multimedia.pro index 21382c5..d8ad18e 100644 --- a/src/plugins/qdeclarativemodules/multimedia/multimedia.pro +++ b/src/plugins/qdeclarativemodules/multimedia/multimedia.pro @@ -5,7 +5,11 @@ QT += multimedia declarative SOURCES += multimedia.cpp -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/qdeclarativemodules -target.path = $$[QT_INSTALL_PLUGINS]/plugins/qdeclarativemodules -INSTALLS += target +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/imports/Qt/multimedia +target.path = $$[QT_INSTALL_IMPORTS]/Qt/multimedia + +qmldir.files += $$QT_BUILD_TREE/imports/Qt/multimedia/qmldir +qmldir.path += $$[QT_INSTALL_IMPORTS]/Qt/multimedia + +INSTALLS += target qmldir diff --git a/src/plugins/qdeclarativemodules/widgets/widgets.pro b/src/plugins/qdeclarativemodules/widgets/widgets.pro index 03c4bf1..3ec38da 100644 --- a/src/plugins/qdeclarativemodules/widgets/widgets.pro +++ b/src/plugins/qdeclarativemodules/widgets/widgets.pro @@ -11,5 +11,10 @@ HEADERS += \ graphicswidgets_p.h \ graphicslayouts_p.h -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/qdeclarativemodules -target.path = $$[QT_INSTALL_PLUGINS]/plugins/qdeclarativemodules +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/imports/Qt/widgets +target.path = $$[QT_INSTALL_IMPORTS]/Qt/widgets + +qmldir.files += $$QT_BUILD_TREE/imports/Qt/widgets/qmldir +qmldir.path += $$[QT_INSTALL_IMPORTS]/Qt/widgets + +INSTALLS += target qmldir -- cgit v0.12 From f39bb2af2d81640d30222cd5abc31b076105dd8b Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Wed, 24 Feb 2010 18:39:52 +0100 Subject: Install the extensions in the given uri. Reviewed-by: mae --- src/plugins/qdeclarativemodules/widgets/widgets.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/plugins/qdeclarativemodules/widgets/widgets.cpp b/src/plugins/qdeclarativemodules/widgets/widgets.cpp index a0a2597..dc45428 100644 --- a/src/plugins/qdeclarativemodules/widgets/widgets.cpp +++ b/src/plugins/qdeclarativemodules/widgets/widgets.cpp @@ -121,19 +121,18 @@ public: virtual void initialize(QDeclarativeEngine *engine, const char *uri) { - Q_UNUSED(uri); Q_UNUSED(engine); Q_ASSERT(QLatin1String(uri) == QLatin1String("Qt.widgets")); QML_REGISTER_INTERFACE(QGraphicsLayoutItem); QML_REGISTER_INTERFACE(QGraphicsLayout); - QML_REGISTER_TYPE(Qt,4,6,QGraphicsLinearLayoutStretchItem,QGraphicsLinearLayoutStretchItemObject); - QML_REGISTER_TYPE(Qt,4,6,QGraphicsLinearLayout,QGraphicsLinearLayoutObject); - QML_REGISTER_TYPE(Qt,4,6,QGraphicsGridLayout,QGraphicsGridLayoutObject); - QML_REGISTER_EXTENDED_TYPE(Qt,4,6,QGraphicsView,QGraphicsView,QGraphicsViewDeclarativeUI); - QML_REGISTER_EXTENDED_TYPE(Qt,4,6,QGraphicsScene,QGraphicsScene,QGraphicsSceneDeclarativeUI); - QML_REGISTER_EXTENDED_TYPE(Qt,4,6,QGraphicsWidget,QGraphicsWidget,QGraphicsWidgetDeclarativeUI); + qmlRegisterType(uri,4,6,"QGraphicsLinearLayoutStretchItem","QGraphicsLinearLayoutStretchItemObject"); + qmlRegisterType(uri,4,6,"QGraphicsLinearLayout","QGraphicsLinearLayoutObject"); + qmlRegisterType(uri,4,6,"QGraphicsGridLayout","QGraphicsGridLayoutObject"); + qmlRegisterExtendedType(uri,4,6,"QGraphicsView","QGraphicsView"); + qmlRegisterExtendedType(uri,4,6,"QGraphicsScene","QGraphicsScene"); + qmlRegisterExtendedType(uri,4,6,"QGraphicsWidget","QGraphicsWidget"); QML_REGISTER_INTERFACE(QGraphicsItem); } }; -- cgit v0.12