summaryrefslogtreecommitdiffstats
path: root/src/declarative/qml
diff options
context:
space:
mode:
Diffstat (limited to 'src/declarative/qml')
-rw-r--r--src/declarative/qml/qml.h22
-rw-r--r--src/declarative/qml/qmlcompiler.cpp33
-rw-r--r--src/declarative/qml/qmlcomponent.cpp2
-rw-r--r--src/declarative/qml/qmlcustomparser_p.h8
-rw-r--r--src/declarative/qml/qmlengine.cpp15
-rw-r--r--src/declarative/qml/qmlmetaproperty.cpp112
-rw-r--r--src/declarative/qml/qmlmetaproperty.h6
-rw-r--r--src/declarative/qml/qmlmetaproperty_p.h5
-rw-r--r--src/declarative/qml/qmlmetatype.cpp26
-rw-r--r--src/declarative/qml/qmlmetatype.h21
-rw-r--r--src/declarative/qml/qmlprivate.h2
-rw-r--r--src/declarative/qml/qmlvme.cpp6
12 files changed, 101 insertions, 157 deletions
diff --git a/src/declarative/qml/qml.h b/src/declarative/qml/qml.h
index f6a6371..bb7ae24 100644
--- a/src/declarative/qml/qml.h
+++ b/src/declarative/qml/qml.h
@@ -91,11 +91,11 @@ QT_BEGIN_NAMESPACE
#define QML_DEFINE_INTERFACE(INTERFACE) \
static int defineInterface##INTERFACE = qmlRegisterInterface<INTERFACE>(#INTERFACE);
-#define QML_DEFINE_EXTENDED_TYPE(URI, VERSION_MAJ, VERSION_MIN_FROM, VERSION_MIN_TO, NAME, TYPE, EXTENSION) \
- static int registerExtended##TYPE = qmlRegisterExtendedType<TYPE,EXTENSION>(#URI, VERSION_MAJ, VERSION_MIN_FROM, VERSION_MIN_TO, #NAME, #TYPE);
+#define QML_DEFINE_EXTENDED_TYPE(URI, VERSION_MAJ, VERS, NAME, TYPE, EXTENSION) \
+ static int registerExtended##TYPE = qmlRegisterExtendedType<TYPE,EXTENSION>(#URI, VERSION_MAJ, VERSION_MIN, #NAME, #TYPE);
-#define QML_DEFINE_TYPE(URI, VERSION_MAJ, VERSION_MIN_FROM, VERSION_MIN_TO, NAME, TYPE) \
- static int defineType##TYPE = qmlRegisterType<TYPE>(#URI, VERSION_MAJ, VERSION_MIN_FROM, VERSION_MIN_TO, #NAME, #TYPE);
+#define QML_DEFINE_TYPE(URI, VERSION_MAJ, VERSION_MIN, NAME, TYPE) \
+ static int defineType##TYPE = qmlRegisterType<TYPE>(#URI, VERSION_MAJ, VERSION_MIN, #NAME, #TYPE);
#define QML_DEFINE_EXTENDED_NOCREATE_TYPE(TYPE, EXTENSION) \
static int registerExtendedNoCreate##TYPE = qmlRegisterExtendedType<TYPE,EXTENSION>(#TYPE);
@@ -106,19 +106,19 @@ QT_BEGIN_NAMESPACE
#else
#define QML_DEFINE_INTERFACE(INTERFACE) \
- template<> QmlPrivate::InstanceType QmlPrivate::Define<INTERFACE *,0,0,0>::instance(qmlRegisterInterface<INTERFACE>(#INTERFACE));
+ template<> QmlPrivate::InstanceType QmlPrivate::Define<INTERFACE *,0,0>::instance(qmlRegisterInterface<INTERFACE>(#INTERFACE));
-#define QML_DEFINE_EXTENDED_TYPE(URI, VERSION_MAJ, VERSION_MIN_FROM, VERSION_MIN_TO, NAME, TYPE, EXTENSION) \
- template<> QmlPrivate::InstanceType QmlPrivate::Define<TYPE *,(VERSION_MAJ), (VERSION_MIN_FROM), (VERSION_MIN_TO)>::instance(qmlRegisterExtendedType<TYPE,EXTENSION>(#URI, VERSION_MAJ, VERSION_MIN_FROM, VERSION_MIN_TO, #NAME, #TYPE));
+#define QML_DEFINE_EXTENDED_TYPE(URI, VERSION_MAJ, VERSION_MIN, NAME, TYPE, EXTENSION) \
+ template<> QmlPrivate::InstanceType QmlPrivate::Define<TYPE *,(VERSION_MAJ), (VERSION_MIN)>::instance(qmlRegisterExtendedType<TYPE,EXTENSION>(#URI, VERSION_MAJ, VERSION_MIN, #NAME, #TYPE));
-#define QML_DEFINE_TYPE(URI, VERSION_MAJ, VERSION_MIN_FROM, VERSION_MIN_TO, NAME, TYPE) \
- template<> QmlPrivate::InstanceType QmlPrivate::Define<TYPE *,(VERSION_MAJ), (VERSION_MIN_FROM), (VERSION_MIN_TO)>::instance(qmlRegisterType<TYPE>(#URI, VERSION_MAJ, VERSION_MIN_FROM, VERSION_MIN_TO, #NAME, #TYPE));
+#define QML_DEFINE_TYPE(URI, VERSION_MAJ, VERSION_MIN, NAME, TYPE) \
+ template<> QmlPrivate::InstanceType QmlPrivate::Define<TYPE *,(VERSION_MAJ), (VERSION_MIN)>::instance(qmlRegisterType<TYPE>(#URI, VERSION_MAJ, VERSION_MIN, #NAME, #TYPE));
#define QML_DEFINE_EXTENDED_NOCREATE_TYPE(TYPE, EXTENSION) \
- template<> QmlPrivate::InstanceType QmlPrivate::Define<TYPE *,0,0,0>::instance(qmlRegisterExtendedType<TYPE,EXTENSION>(#TYPE));
+ template<> QmlPrivate::InstanceType QmlPrivate::Define<TYPE *,0,0>::instance(qmlRegisterExtendedType<TYPE,EXTENSION>(#TYPE));
#define QML_DEFINE_NOCREATE_TYPE(TYPE) \
- template<> QmlPrivate::InstanceType QmlPrivate::Define<TYPE *,0,0,0>::instance(qmlRegisterType<TYPE>(#TYPE));
+ template<> QmlPrivate::InstanceType QmlPrivate::Define<TYPE *,0,0>::instance(qmlRegisterType<TYPE>(#TYPE));
#endif
diff --git a/src/declarative/qml/qmlcompiler.cpp b/src/declarative/qml/qmlcompiler.cpp
index 3253e72..240f16c 100644
--- a/src/declarative/qml/qmlcompiler.cpp
+++ b/src/declarative/qml/qmlcompiler.cpp
@@ -814,8 +814,7 @@ void QmlCompiler::genObject(QmlParser::Object *obj)
create.create.type = obj->type;
if (!output->types.at(create.create.type).type &&
!obj->bindingBitmask.isEmpty()) {
- while (obj->bindingBitmask.size() % 4)
- obj->bindingBitmask.append(char(0));
+ Q_ASSERT(obj->bindingBitmask.size() % 4 == 0);
create.create.bindingBits =
output->indexForByteArray(obj->bindingBitmask);
} else {
@@ -1044,20 +1043,23 @@ bool QmlCompiler::buildComponent(QmlParser::Object *obj,
// Find, check and set the "id" property (if any)
Property *idProp = 0;
if (obj->properties.count() > 1 ||
- (obj->properties.count() == 1 && obj->properties.begin().key() != "id") ||
- !obj->scriptBlockObjects.isEmpty())
- COMPILE_EXCEPTION(obj, qApp->translate("QmlCompiler","Invalid component specification"));
+ (obj->properties.count() == 1 && obj->properties.begin().key() != "id"))
+ COMPILE_EXCEPTION(*obj->properties.begin(), qApp->translate("QmlCompiler","Invalid component specification"));
+
+ if (!obj->scriptBlockObjects.isEmpty())
+ COMPILE_EXCEPTION(obj->scriptBlockObjects.first(), qApp->translate("QmlCompiler","Invalid component specification"));
if (obj->properties.count())
idProp = *obj->properties.begin();
+
if (idProp && (idProp->value || idProp->values.count() > 1 || !isValidId(idProp->values.first()->primitive())))
- COMPILE_EXCEPTION(obj, qApp->translate("QmlCompiler","Invalid component id specification"));
+ COMPILE_EXCEPTION(idProp, qApp->translate("QmlCompiler","Invalid component id specification"));
if (idProp) {
QString idVal = idProp->values.first()->primitive();
if (compileState.ids.contains(idVal))
- COMPILE_EXCEPTION(obj, qApp->translate("QmlCompiler","id is not unique"));
+ COMPILE_EXCEPTION(idProp, qApp->translate("QmlCompiler","id is not unique"));
obj->id = idVal;
addId(idVal, obj);
@@ -1093,7 +1095,7 @@ bool QmlCompiler::buildScript(QmlParser::Object *obj, QmlParser::Object *script)
Property *source = *script->properties.begin();
if (script->defaultProperty)
- COMPILE_EXCEPTION(source, qApp->translate("QmlCompiler","Invalid Script block. Specify either the source property or inline script."));
+ COMPILE_EXCEPTION(source, qApp->translate("QmlCompiler","Invalid Script block. Specify either the source property or inline script"));
if (source->value || source->values.count() != 1 ||
source->values.at(0)->object || !source->values.at(0)->value.isString())
@@ -1180,12 +1182,10 @@ bool QmlCompiler::buildComponentFromRoot(QmlParser::Object *obj,
bool QmlCompiler::buildSubObject(Object *obj, const BindingContext &ctxt)
{
Q_ASSERT(obj->metatype);
+ Q_ASSERT(!obj->defaultProperty);
Q_ASSERT(ctxt.isSubContext()); // sub-objects must always be in a binding
// sub-context
- if (obj->defaultProperty)
- COMPILE_CHECK(buildProperty(obj->defaultProperty, obj, ctxt));
-
foreach(Property *prop, obj->properties) {
if (isSignalPropertyName(prop->name)) {
COMPILE_CHECK(buildSignal(prop, obj, ctxt));
@@ -1230,9 +1230,7 @@ bool QmlCompiler::buildSignal(QmlParser::Property *prop, QmlParser::Object *obj,
const BindingContext &ctxt)
{
Q_ASSERT(obj->metaObject());
-
- if (prop->isEmpty())
- COMPILE_EXCEPTION(prop, qApp->translate("QmlCompiler","Empty property assignment"));
+ Q_ASSERT(!prop->isEmpty());
QByteArray name = prop->name;
Q_ASSERT(name.startsWith("on"));
@@ -1261,6 +1259,10 @@ bool QmlCompiler::buildSignal(QmlParser::Property *prop, QmlParser::Object *obj,
prop->values.at(0)->type = Value::SignalObject;
} else {
prop->values.at(0)->type = Value::SignalExpression;
+
+ QString script = prop->values.at(0)->value.asScript().trimmed();
+ if (script.isEmpty())
+ COMPILE_EXCEPTION(prop, qApp->translate("QmlCompiler","Empty signal assignment"));
}
}
@@ -1701,6 +1703,9 @@ bool QmlCompiler::buildGroupedProperty(QmlParser::Property *prop,
Q_ASSERT(prop->type != 0);
Q_ASSERT(prop->index != -1);
+ if (prop->values.count())
+ COMPILE_EXCEPTION(prop->values.first(), qApp->translate("QmlCompiler", "Invalid value in grouped property"));
+
if (prop->type < (int)QVariant::UserType) {
QmlEnginePrivate *ep =
static_cast<QmlEnginePrivate *>(QObjectPrivate::get(engine));
diff --git a/src/declarative/qml/qmlcomponent.cpp b/src/declarative/qml/qmlcomponent.cpp
index 03f07b3..3c142a7 100644
--- a/src/declarative/qml/qmlcomponent.cpp
+++ b/src/declarative/qml/qmlcomponent.cpp
@@ -119,7 +119,7 @@ Item {
}
\endqml
*/
-QML_DEFINE_TYPE(Qt,4,6,(QT_VERSION&0x00ff00)>>8,Component,QmlComponent);
+QML_DEFINE_TYPE(Qt,4,6,Component,QmlComponent);
/*!
\enum QmlComponent::Status
diff --git a/src/declarative/qml/qmlcustomparser_p.h b/src/declarative/qml/qmlcustomparser_p.h
index 89d3be2..74bed25 100644
--- a/src/declarative/qml/qmlcustomparser_p.h
+++ b/src/declarative/qml/qmlcustomparser_p.h
@@ -128,11 +128,11 @@ private:
};
#if defined(Q_OS_SYMBIAN)
-# define QML_DEFINE_CUSTOM_TYPE(URI, VERSION_MAJ, VERSION_MIN_FROM, VERSION_MAJ_TO, NAME, TYPE, CUSTOMTYPE) \
- static int defineCustomType##NAME = qmlRegisterCustomType<TYPE>(#URI, VERSION_MAJ, VERSION_MIN_FROM, VERSION_MAJ_TO, #NAME, #TYPE, new CUSTOMTYPE);
+# define QML_DEFINE_CUSTOM_TYPE(URI, VERSION_MAJ, VERSION_MIN, NAME, TYPE, CUSTOMTYPE) \
+ static int defineCustomType##NAME = qmlRegisterCustomType<TYPE>(#URI, VERSION_MAJ, VERSION_MIN, #NAME, #TYPE, new CUSTOMTYPE);
#else
-# define QML_DEFINE_CUSTOM_TYPE(URI, VERSION_MAJ, VERSION_MIN_FROM, VERSION_MAJ_TO, NAME, TYPE, CUSTOMTYPE) \
- template<> QmlPrivate::InstanceType QmlPrivate::Define<TYPE *,(VERSION_MAJ), (VERSION_MIN_FROM), (VERSION_MAJ_TO)>::instance(qmlRegisterCustomType<TYPE>(#URI, VERSION_MAJ, VERSION_MIN_FROM, VERSION_MAJ_TO, #NAME, #TYPE, new CUSTOMTYPE));
+# define QML_DEFINE_CUSTOM_TYPE(URI, VERSION_MAJ, VERSION_MIN, NAME, TYPE, CUSTOMTYPE) \
+ template<> QmlPrivate::InstanceType QmlPrivate::Define<TYPE *,(VERSION_MAJ), (VERSION_MIN)>::instance(qmlRegisterCustomType<TYPE>(#URI, VERSION_MAJ, VERSION_MIN, #NAME, #TYPE, new CUSTOMTYPE));
#endif
QT_END_NAMESPACE
diff --git a/src/declarative/qml/qmlengine.cpp b/src/declarative/qml/qmlengine.cpp
index 2926791..3df04b2 100644
--- a/src/declarative/qml/qmlengine.cpp
+++ b/src/declarative/qml/qmlengine.cpp
@@ -103,7 +103,7 @@ QT_BEGIN_NAMESPACE
DEFINE_BOOL_CONFIG_OPTION(qmlDebugger, QML_DEBUGGER)
DEFINE_BOOL_CONFIG_OPTION(qmlImportTrace, QML_IMPORT_TRACE)
-QML_DEFINE_TYPE(Qt,4,6,(QT_VERSION&0x00ff00)>>8,Object,QObject)
+QML_DEFINE_TYPE(Qt,4,6,Object,QObject)
struct StaticQtMetaObject : public QObject
{
@@ -993,17 +993,13 @@ struct QmlEnginePrivate::ImportedNamespace {
if (line.isEmpty() || line.at(0) == QLatin1Char('#'))
continue;
if (line.startsWith(typespace)) {
- // eg. 1.2-5
int space1 = line.indexOf(QLatin1Char(' '));
int space2 = space1 >=0 ? line.indexOf(QLatin1Char(' '),space1+1) : -1;
QString mapversions = line.mid(space1+1,space2<0?line.length()-space1-1:space2-space1-1);
int dot = mapversions.indexOf(QLatin1Char('.'));
- int dash = mapversions.indexOf(QLatin1Char('-'));
int mapvmaj = mapversions.left(dot).toInt();
- if (mapvmaj==vmaj) {
- int mapvmin_from = (dash <= 0 ? mapversions.mid(dot+1) : mapversions.mid(dot+1,dash-dot-1)).toInt();
- int mapvmin_to = dash <= 0 ? mapvmin_from : mapversions.mid(dash+1).toInt();
- if (vmin >= mapvmin_from && vmin <= mapvmin_to) {
+ if (mapvmaj<=vmaj) {
+ if (mapvmaj<vmaj || vmin >= mapversions.mid(dot+1).toInt()) {
QStringRef mapfile = space2<0 ? QStringRef() : line.midRef(space2+1,line.length()-space2-1);
if (url_return)
*url_return = url.resolved(mapfile.toString());
@@ -1172,9 +1168,8 @@ static QmlTypeNameCache *cacheForNamespace(QmlEngine *engine, const QmlEnginePri
foreach (QmlType *type, types) {
if (type->qmlTypeName().startsWith(base) &&
type->qmlTypeName().lastIndexOf('/') == (base.length() - 1) &&
- type->majorVersion() == major && type->minMinorVersion() <= minor &&
- type->maxMinorVersion() >= minor) {
-
+ type->availableInVersion(major,minor))
+ {
QString name = QString::fromUtf8(type->qmlTypeName().mid(base.length()));
cache->add(name, type);
diff --git a/src/declarative/qml/qmlmetaproperty.cpp b/src/declarative/qml/qmlmetaproperty.cpp
index f340612..4ad9aac 100644
--- a/src/declarative/qml/qmlmetaproperty.cpp
+++ b/src/declarative/qml/qmlmetaproperty.cpp
@@ -111,27 +111,12 @@ void QmlMetaPropertyPrivate::initDefault(QObject *obj)
if (!obj)
return;
- object = obj;
QMetaProperty p = QmlMetaType::defaultProperty(obj);
core.load(p);
- if (core.isValid())
+ if (core.isValid()) {
isDefaultProperty = true;
-}
-
-/*!
- \internal
-
- Creates a QmlMetaProperty for the property at index \a idx of \a obj.
- */
-QmlMetaProperty::QmlMetaProperty(QObject *obj, int idx, QmlContext *ctxt)
-: d(new QmlMetaPropertyPrivate)
-{
- Q_ASSERT(obj);
-
- d->q = this;
- d->context = ctxt;
- d->object = obj;
- d->core.load(obj->metaObject()->property(idx));
+ object = obj;
+ }
}
/*!
@@ -142,6 +127,7 @@ QmlMetaProperty::QmlMetaProperty(QObject *obj, const QString &name)
{
d->q = this;
d->initProperty(obj, name);
+ if (!isValid()) d->object = 0;
}
/*!
@@ -154,6 +140,7 @@ QmlMetaProperty::QmlMetaProperty(QObject *obj, const QString &name, QmlContext *
d->q = this;
d->context = ctxt;
d->initProperty(obj, name);
+ if (!isValid()) { d->object = 0; d->context = 0; }
}
void QmlMetaPropertyPrivate::initProperty(QObject *obj, const QString &name)
@@ -425,12 +412,14 @@ bool QmlMetaProperty::isWritable() const
{
QmlMetaProperty::PropertyCategory category = propertyCategory();
+ if (!d->object)
+ return false;
if (category == List || category == QmlList)
return true;
else if (type() & SignalProperty)
- return true;
+ return false;
else if (d->core.isValid() && d->object)
- return d->object->metaObject()->property(d->core.coreIndex).isWritable();
+ return d->core.flags & QmlPropertyCache::Data::IsWritable;
else
return false;
}
@@ -456,25 +445,6 @@ bool QmlMetaProperty::isValid() const
}
/*!
- Returns all of \a obj's Qt properties.
-*/
-QStringList QmlMetaProperty::properties(QObject *obj)
-{
- // ### What is this used for?
- if (!obj)
- return QStringList();
-
- QStringList rv;
- const QMetaObject *mo = obj->metaObject();
- for (int ii = 0; ii < mo->propertyCount(); ++ii) {
- QMetaProperty prop = mo->property(ii);
- rv << QString::fromUtf8(prop.name());
- }
-
- return rv;
-}
-
-/*!
Return the name of this QML property.
*/
QString QmlMetaProperty::name() const
@@ -494,7 +464,13 @@ QString QmlMetaProperty::name() const
return rv;
} else {
- return d->core.name;
+ if (type() & SignalProperty) {
+ QString name = QLatin1String("on") + d->core.name;
+ name[2] = name.at(2).toUpper();
+ return name;
+ } else {
+ return d->core.name;
+ }
}
}
@@ -565,8 +541,10 @@ QmlAbstractBinding *QmlMetaProperty::binding() const
QmlAbstractBinding *
QmlMetaProperty::setBinding(QmlAbstractBinding *newBinding, QmlMetaProperty::WriteFlags flags) const
{
- if (!isProperty() || (type() & Attached) || !d->object)
+ if (!isProperty() || (type() & Attached) || !d->object) {
+ delete newBinding;
return 0;
+ }
return d->setBinding(d->object, d->core, newBinding, flags);
}
@@ -630,8 +608,10 @@ QmlExpression *QmlMetaProperty::signalExpression() const
*/
QmlExpression *QmlMetaProperty::setSignalExpression(QmlExpression *expr) const
{
- if (!(type() & SignalProperty))
+ if (!(type() & SignalProperty)) {
+ delete expr;
return 0;
+ }
const QObjectList &children = d->object->children();
@@ -686,13 +666,7 @@ QVariant QmlMetaProperty::read() const
if (type() & SignalProperty) {
- const QObjectList &children = object()->children();
-
- for (int ii = 0; ii < children.count(); ++ii) {
- QmlBoundSignal *sig = QmlBoundSignal::cast(children.at(ii));
- if (sig && sig->index() == d->core.coreIndex)
- return sig->expression()->expression();
- }
+ return QVariant();
} else if (type() & Property) {
@@ -857,7 +831,7 @@ bool QmlMetaPropertyPrivate::write(QObject *object, const QmlPropertyCache::Data
return false;
if (context && u.isRelative() && !u.isEmpty())
- u = context->baseUrl().resolved(u);
+ u = context->resolvedUrl(u);
int status = -1;
void *argv[] = { &u, 0, &status, &flags };
QMetaObject::metacall(object, QMetaObject::WriteProperty, coreIdx, argv);
@@ -990,7 +964,7 @@ bool QmlMetaProperty::write(const QVariant &value) const
bool QmlMetaProperty::write(const QVariant &value, QmlMetaProperty::WriteFlags flags) const
{
- if (d->object && type() & Property && d->core.isValid())
+ if (d->object && type() & Property && d->core.isValid() && isWritable())
return d->writeValueProperty(value, flags);
else
return false;
@@ -1083,27 +1057,6 @@ Q_GLOBAL_STATIC(QmlValueTypeFactory, qmlValueTypes);
Returns the property information serialized into a single integer.
QmlMetaProperty uses the bottom 24 bits only.
*/
-quint32 QmlMetaProperty::save() const
-{
- quint32 rv = 0;
- if (type() & Attached) {
- rv = d->attachedFunc;
- } else if (type() != Invalid) {
- rv = d->core.coreIndex;
- }
-
- Q_ASSERT(rv <= 0x7FF);
- Q_ASSERT(type() <= 0x3F);
- Q_ASSERT(d->valueTypeCoreIdx <= 0x7F);
-
- rv |= (type() << 18);
-
- if (type() & ValueTypeProperty)
- rv |= (d->valueTypeCoreIdx << 11);
-
- return rv;
-}
-
quint32 QmlMetaPropertyPrivate::saveValueType(int core, int valueType)
{
Q_ASSERT(core <= 0x7FF);
@@ -1130,8 +1083,11 @@ quint32 QmlMetaPropertyPrivate::saveProperty(int core)
to QmlMetaProperty::save(). Only the bottom 24-bits are
used, the high bits can be set to any value.
*/
-void QmlMetaProperty::restore(quint32 id, QObject *obj, QmlContext *ctxt)
+void QmlMetaPropertyPrivate::restore(QmlMetaProperty &prop, quint32 id,
+ QObject *obj, QmlContext *ctxt)
{
+ QmlMetaPropertyPrivate *d = prop.d;
+
QmlEnginePrivate *enginePrivate = 0;
if (ctxt && ctxt->engine())
enginePrivate = QmlEnginePrivate::get(ctxt->engine());
@@ -1143,9 +1099,9 @@ void QmlMetaProperty::restore(quint32 id, QObject *obj, QmlContext *ctxt)
uint type = id >> 18;
id &= 0xFFFF;
- if (type & Attached) {
+ if (type & QmlMetaProperty::Attached) {
d->attachedFunc = id;
- } else if (type & ValueTypeProperty) {
+ } else if (type & QmlMetaProperty::ValueTypeProperty) {
int coreIdx = id & 0x7FF;
int valueTypeIdx = id >> 11;
@@ -1159,7 +1115,7 @@ void QmlMetaProperty::restore(quint32 id, QObject *obj, QmlContext *ctxt)
d->core.load(p);
d->valueTypeCoreIdx = valueTypeIdx;
d->valueTypePropType = p2.userType();
- } else if (type & Property) {
+ } else if (type & QmlMetaProperty::Property) {
QmlPropertyCache *cache = enginePrivate?enginePrivate->cache(obj):0;
@@ -1171,12 +1127,12 @@ void QmlMetaProperty::restore(quint32 id, QObject *obj, QmlContext *ctxt)
d->core.load(p);
}
- } else if (type & SignalProperty) {
+ } else if (type & QmlMetaProperty::SignalProperty) {
QMetaMethod method = obj->metaObject()->method(id);
d->core.load(method);
} else {
- *this = QmlMetaProperty();
+ prop = QmlMetaProperty();
}
}
diff --git a/src/declarative/qml/qmlmetaproperty.h b/src/declarative/qml/qmlmetaproperty.h
index ce4ac1e..6db99c6 100644
--- a/src/declarative/qml/qmlmetaproperty.h
+++ b/src/declarative/qml/qmlmetaproperty.h
@@ -79,10 +79,8 @@ public:
QmlMetaProperty(QObject *, const QString &, QmlContext *);
QmlMetaProperty(const QmlMetaProperty &);
QmlMetaProperty &operator=(const QmlMetaProperty &);
- QmlMetaProperty(QObject *, int, QmlContext * = 0);
~QmlMetaProperty();
- static QStringList properties(QObject *);
QString name() const;
QVariant read() const;
@@ -96,9 +94,6 @@ public:
bool connectNotifier(QObject *dest, const char *slot) const;
bool connectNotifier(QObject *dest, int method) const;
- quint32 save() const;
- void restore(quint32, QObject *, QmlContext * = 0);
-
QMetaMethod method() const;
enum Type { Invalid = 0x00,
@@ -138,6 +133,7 @@ public:
int valueTypeCoreIndex() const;
private:
friend class QmlEnginePrivate;
+ friend class QmlMetaPropertyPrivate;;
QmlMetaPropertyPrivate *d;
};
typedef QList<QmlMetaProperty> QmlMetaProperties;
diff --git a/src/declarative/qml/qmlmetaproperty_p.h b/src/declarative/qml/qmlmetaproperty_p.h
index 925f1ea..d225afa 100644
--- a/src/declarative/qml/qmlmetaproperty_p.h
+++ b/src/declarative/qml/qmlmetaproperty_p.h
@@ -104,8 +104,9 @@ public:
static QmlAbstractBinding *setBinding(QObject *, const QmlPropertyCache::Data &, QmlAbstractBinding *,
QmlMetaProperty::WriteFlags flags = QmlMetaProperty::DontRemoveBinding);
- static quint32 saveValueType(int, int);
- static quint32 saveProperty(int);
+ static void Q_AUTOTEST_EXPORT restore(QmlMetaProperty &prop, quint32, QObject *, QmlContext * = 0);
+ static quint32 Q_AUTOTEST_EXPORT saveValueType(int, int);
+ static quint32 Q_AUTOTEST_EXPORT saveProperty(int);
static bool equal(const QMetaObject *, const QMetaObject *);
static bool canConvert(const QMetaObject *from, const QMetaObject *to);
diff --git a/src/declarative/qml/qmlmetatype.cpp b/src/declarative/qml/qmlmetatype.cpp
index 6ce51bd..6ecaa9f 100644
--- a/src/declarative/qml/qmlmetatype.cpp
+++ b/src/declarative/qml/qmlmetatype.cpp
@@ -119,8 +119,7 @@ public:
const char *m_iid;
QByteArray m_name;
int m_version_maj;
- int m_version_min_from;
- int m_version_min_to;
+ int m_version_min;
int m_typeId; int m_listId; int m_qmlListId;
QmlPrivate::Func m_opFunc;
const QMetaObject *m_baseMetaObject;
@@ -160,13 +159,12 @@ QmlType::QmlType(int type, int listType, int qmlListType,
d->m_index = index;
d->m_isSetup = true;
d->m_version_maj = 0;
- d->m_version_min_from = 0;
- d->m_version_min_to = 0;
+ d->m_version_min = 0;
}
QmlType::QmlType(int type, int listType, int qmlListType,
QmlPrivate::Func opFunc, const char *qmlName,
- int version_maj, int version_min_from, int version_min_to,
+ int version_maj, int version_min,
const QMetaObject *metaObject,
QmlAttachedPropertiesFunc attachedPropertiesFunc,
const QMetaObject *attachedType,
@@ -178,8 +176,7 @@ QmlType::QmlType(int type, int listType, int qmlListType,
{
d->m_name = qmlName;
d->m_version_maj = version_maj;
- d->m_version_min_from = version_min_from;
- d->m_version_min_to = version_min_to;
+ d->m_version_min = version_min;
d->m_typeId = type;
d->m_listId = listType;
d->m_qmlListId = qmlListType;
@@ -209,19 +206,14 @@ int QmlType::majorVersion() const
return d->m_version_maj;
}
-int QmlType::minMinorVersion() const
+int QmlType::minorVersion() const
{
- return d->m_version_min_from;
-}
-
-int QmlType::maxMinorVersion() const
-{
- return d->m_version_min_to;
+ return d->m_version_min;
}
bool QmlType::availableInVersion(int vmajor, int vminor) const
{
- return vmajor == d->m_version_maj && vminor >= d->m_version_min_from && vminor <= d->m_version_min_to;
+ return vmajor > d->m_version_maj || (vmajor == d->m_version_maj && vminor >= d->m_version_min);
}
void QmlTypePrivate::init() const
@@ -473,7 +465,7 @@ int QmlMetaType::registerInterface(const QmlPrivate::MetaTypeIds &id,
}
int QmlMetaType::registerType(const QmlPrivate::MetaTypeIds &id, QmlPrivate::Func func,
- const char *uri, int version_maj, int version_min_from, int version_min_to, const char *cname,
+ const char *uri, int version_maj, int version_min, const char *cname,
const QMetaObject *mo, QmlAttachedPropertiesFunc attach, const QMetaObject *attachMo,
int pStatus, int object, int valueSource, int valueInterceptor, QmlPrivate::CreateFunc extFunc, const QMetaObject *extmo, QmlCustomParser *parser)
{
@@ -499,7 +491,7 @@ int QmlMetaType::registerType(const QmlPrivate::MetaTypeIds &id, QmlPrivate::Fun
name.replace('.','/');
QmlType *type = new QmlType(id.typeId, id.listId, id.qmlListId,
- func, name, version_maj, version_min_from, version_min_to, mo, attach, attachMo, pStatus,
+ func, name, version_maj, version_min, mo, attach, attachMo, pStatus,
valueSource, valueInterceptor, extFunc, extmo, index, parser);
data->types.append(type);
diff --git a/src/declarative/qml/qmlmetatype.h b/src/declarative/qml/qmlmetatype.h
index eb5fd28..e90c367 100644
--- a/src/declarative/qml/qmlmetatype.h
+++ b/src/declarative/qml/qmlmetatype.h
@@ -61,7 +61,7 @@ class QmlCustomParser;
class Q_DECLARATIVE_EXPORT QmlMetaType
{
public:
- static int registerType(const QmlPrivate::MetaTypeIds &, QmlPrivate::Func, const char *, int vmaj, int vmin_from, int vmin_to, const char *qmlName, const QMetaObject *, QmlAttachedPropertiesFunc, const QMetaObject *, int pStatus, int object, int valueSource, int valueInterceptor, QmlPrivate::CreateFunc extFunc, const QMetaObject *extmo, QmlCustomParser *);
+ static int registerType(const QmlPrivate::MetaTypeIds &, QmlPrivate::Func, const char *, int vmaj, int vmin, const char *qmlName, const QMetaObject *, QmlAttachedPropertiesFunc, const QMetaObject *, int pStatus, int object, int valueSource, int valueInterceptor, QmlPrivate::CreateFunc extFunc, const QMetaObject *extmo, QmlCustomParser *);
static int registerInterface(const QmlPrivate::MetaTypeIds &, QmlPrivate::Func, const char *);
static bool copy(int type, void *data, const void *copy = 0);
@@ -118,8 +118,7 @@ public:
QByteArray qmlTypeName() const;
int majorVersion() const;
- int minMinorVersion() const;
- int maxMinorVersion() const;
+ int minorVersion() const;
bool availableInVersion(int vmajor, int vminor) const;
QByteArray hash() const;
@@ -156,7 +155,7 @@ private:
friend class QmlTypePrivate;
friend class QmlMetaTypeData;
QmlType(int, int, int, QmlPrivate::Func, const char *, int);
- QmlType(int, int, int, QmlPrivate::Func, const char *, int, int, int, const QMetaObject *, QmlAttachedPropertiesFunc, const QMetaObject *, int, int, int, QmlPrivate::CreateFunc, const QMetaObject *, int, QmlCustomParser *);
+ QmlType(int, int, int, QmlPrivate::Func, const char *, int, int, const QMetaObject *, QmlAttachedPropertiesFunc, const QMetaObject *, int, int, int, QmlPrivate::CreateFunc, const QMetaObject *, int, QmlCustomParser *);
~QmlType();
QmlTypePrivate *d;
@@ -172,7 +171,7 @@ int qmlRegisterType(const char *typeName)
qRegisterMetaType<T *>(QByteArray("QmlList<" + name + "*>*").constData())
};
- return QmlMetaType::registerType(ids, QmlPrivate::list_nocreate_op<T>, 0, 0, 0, 0, 0,
+ return QmlMetaType::registerType(ids, QmlPrivate::list_nocreate_op<T>, 0, 0, 0, 0,
&T::staticMetaObject,
QmlPrivate::attachedPropertiesFunc<T>(),
QmlPrivate::attachedPropertiesMetaObject<T>(),
@@ -184,7 +183,7 @@ int qmlRegisterType(const char *typeName)
}
template<typename T>
-int qmlRegisterType(const char *uri, int version_maj, int version_min_from, int version_min_to, const char *qmlName, const char *typeName)
+int qmlRegisterType(const char *uri, int version_maj, int version_min, const char *qmlName, const char *typeName)
{
QByteArray name(typeName);
QmlPrivate::MetaTypeIds ids = {
@@ -194,7 +193,7 @@ int qmlRegisterType(const char *uri, int version_maj, int version_min_from, int
};
return QmlMetaType::registerType(ids, QmlPrivate::list_op<T>,
- uri, version_maj, version_min_from, version_min_to, qmlName,
+ uri, version_maj, version_min, qmlName,
&T::staticMetaObject,
QmlPrivate::attachedPropertiesFunc<T>(),
QmlPrivate::attachedPropertiesMetaObject<T>(),
@@ -234,7 +233,7 @@ int qmlRegisterExtendedType(const char *typeName)
}
template<typename T, typename E>
-int qmlRegisterExtendedType(const char *uri, int version_maj, int version_min_from, int version_min_to, const char *qmlName, const char *typeName)
+int qmlRegisterExtendedType(const char *uri, int version_maj, int version_min, const char *qmlName, const char *typeName)
{
QByteArray name(typeName);
QmlPrivate::MetaTypeIds ids = {
@@ -253,7 +252,7 @@ int qmlRegisterExtendedType(const char *uri, int version_maj, int version_min_fr
}
return QmlMetaType::registerType(ids, QmlPrivate::list_op<T>,
- uri, version_maj, version_min_from, version_min_to, qmlName,
+ uri, version_maj, version_min, qmlName,
&T::staticMetaObject,
attached, attachedMo,
QmlPrivate::StaticCastSelector<T,QmlParserStatus>::cast(),
@@ -280,7 +279,7 @@ int qmlRegisterInterface(const char *typeName)
}
template<typename T>
-int qmlRegisterCustomType(const char *uri, int version_maj, int version_min_from, int version_min_to, const char *qmlName, const char *typeName, QmlCustomParser *parser)
+int qmlRegisterCustomType(const char *uri, int version_maj, int version_min, const char *qmlName, const char *typeName, QmlCustomParser *parser)
{
QByteArray name(typeName);
QmlPrivate::MetaTypeIds ids = {
@@ -290,7 +289,7 @@ int qmlRegisterCustomType(const char *uri, int version_maj, int version_min_from
};
return QmlMetaType::registerType(ids, QmlPrivate::list_op<T>,
- uri, version_maj, version_min_from, version_min_to, qmlName,
+ uri, version_maj, version_min, qmlName,
&T::staticMetaObject,
QmlPrivate::attachedPropertiesFunc<T>(),
QmlPrivate::attachedPropertiesMetaObject<T>(),
diff --git a/src/declarative/qml/qmlprivate.h b/src/declarative/qml/qmlprivate.h
index 6ab36a2..e5b1060 100644
--- a/src/declarative/qml/qmlprivate.h
+++ b/src/declarative/qml/qmlprivate.h
@@ -223,7 +223,7 @@ namespace QmlPrivate
InstanceType(int);
};
- template<typename T, int VMAJ, int VMIN1, int VMIN2>
+ template<typename T, int VMAJ, int VMIN>
struct Define {
static InstanceType instance;
};
diff --git a/src/declarative/qml/qmlvme.cpp b/src/declarative/qml/qmlvme.cpp
index 62ec025..f3d0f65 100644
--- a/src/declarative/qml/qmlvme.cpp
+++ b/src/declarative/qml/qmlvme.cpp
@@ -591,7 +591,7 @@ QObject *QmlVME::run(QStack<QObject *> &stack, QmlContext *ctxt,
stack.at(stack.count() - 1 - instr.assignBinding.context);
QmlMetaProperty mp;
- mp.restore(instr.assignBinding.property, target, ctxt);
+ QmlMetaPropertyPrivate::restore(mp, instr.assignBinding.property, target, ctxt);
int coreIndex = mp.coreIndex();
@@ -648,7 +648,7 @@ QObject *QmlVME::run(QStack<QObject *> &stack, QmlContext *ctxt,
QmlPropertyValueSource *vs = reinterpret_cast<QmlPropertyValueSource *>(reinterpret_cast<char *>(obj) + instr.assignValueSource.castValue);
QObject *target = stack.at(stack.count() - 1 - instr.assignValueSource.owner);
QmlMetaProperty prop;
- prop.restore(instr.assignValueSource.property, target, ctxt);
+ QmlMetaPropertyPrivate::restore(prop, instr.assignValueSource.property, target, ctxt);
obj->setParent(target);
vs->setTarget(prop);
}
@@ -660,7 +660,7 @@ QObject *QmlVME::run(QStack<QObject *> &stack, QmlContext *ctxt,
QmlPropertyValueInterceptor *vi = reinterpret_cast<QmlPropertyValueInterceptor *>(reinterpret_cast<char *>(obj) + instr.assignValueInterceptor.castValue);
QObject *target = stack.at(stack.count() - 1 - instr.assignValueInterceptor.owner);
QmlMetaProperty prop;
- prop.restore(instr.assignValueInterceptor.property, target, ctxt);
+ QmlMetaPropertyPrivate::restore(prop, instr.assignValueInterceptor.property, target, ctxt);
obj->setParent(target);
vi->setTarget(prop);
QmlVMEMetaObject *mo = static_cast<QmlVMEMetaObject *>((QMetaObject*)target->metaObject());