From fa3ef5376acc69b147718f49eddb842fdd5d2dd2 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Wed, 21 Mar 2012 16:28:32 +1000 Subject: Use QQmlAbstractBoundSignal where appropriate. Prepare for the addition of another subclass. Change-Id: I340f735503e661d9d735f3316a065f807294921b Reviewed-by: Chris Adams --- src/qml/qml/qqmlproperty.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/qml/qml/qqmlproperty.cpp') diff --git a/src/qml/qml/qqmlproperty.cpp b/src/qml/qml/qqmlproperty.cpp index 14778ce6c8..ebcf903ab3 100644 --- a/src/qml/qml/qqmlproperty.cpp +++ b/src/qml/qml/qqmlproperty.cpp @@ -928,7 +928,7 @@ QQmlPropertyPrivate::signalExpression(const QQmlProperty &that) for (int ii = 0; ii < children.count(); ++ii) { QObject *child = children.at(ii); - QQmlBoundSignal *signal = QQmlBoundSignal::cast(child); + QQmlAbstractBoundSignal *signal = qobject_cast(child); if (signal && signal->index() == that.index()) return signal->expression(); } @@ -957,7 +957,7 @@ QQmlPropertyPrivate::setSignalExpression(const QQmlProperty &that, for (int ii = 0; ii < children.count(); ++ii) { QObject *child = children.at(ii); - QQmlBoundSignal *signal = QQmlBoundSignal::cast(child); + QQmlAbstractBoundSignal *signal = qobject_cast(child); if (signal && signal->index() == that.index()) return signal->setExpression(expr); } -- cgit v1.2.3 From 68ac4c57c46f72b4db16cf02ba67953c9cf4bdc4 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Fri, 23 Mar 2012 08:22:02 +1000 Subject: Remove QObject parenting from QQmlAbstractBoundSignal. Change-Id: If549cf57bbac18a986a2a0e63fdc76902d2dae43 Reviewed-by: Chris Adams --- src/qml/qml/qqmlproperty.cpp | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) (limited to 'src/qml/qml/qqmlproperty.cpp') diff --git a/src/qml/qml/qqmlproperty.cpp b/src/qml/qml/qqmlproperty.cpp index ebcf903ab3..0848df62c7 100644 --- a/src/qml/qml/qqmlproperty.cpp +++ b/src/qml/qml/qqmlproperty.cpp @@ -923,15 +923,17 @@ QQmlPropertyPrivate::signalExpression(const QQmlProperty &that) if (!(that.type() & QQmlProperty::SignalProperty)) return 0; - const QObjectList &children = that.d->object->children(); - - for (int ii = 0; ii < children.count(); ++ii) { - QObject *child = children.at(ii); + QQmlData *data = QQmlData::get(that.d->object); + if (!data) + return 0; - QQmlAbstractBoundSignal *signal = qobject_cast(child); - if (signal && signal->index() == that.index()) - return signal->expression(); - } + QQmlAbstractBoundSignal *signalHandler = data->signalHandlers; + + while (signalHandler && signalHandler->index() != that.index()) + signalHandler = signalHandler->m_nextSignal; + + if (signalHandler) + return signalHandler->expression(); return 0; } @@ -952,19 +954,23 @@ QQmlPropertyPrivate::setSignalExpression(const QQmlProperty &that, return 0; } - const QObjectList &children = that.d->object->children(); - - for (int ii = 0; ii < children.count(); ++ii) { - QObject *child = children.at(ii); + QQmlData *data = QQmlData::get(that.d->object, 0 != expr); + if (!data) + return 0; - QQmlAbstractBoundSignal *signal = qobject_cast(child); - if (signal && signal->index() == that.index()) - return signal->setExpression(expr); - } + QQmlAbstractBoundSignal *signalHandler = data->signalHandlers; + + while (signalHandler && signalHandler->index() != that.index()) + signalHandler = signalHandler->m_nextSignal; + + if (signalHandler) + return signalHandler->setExpression(expr); if (expr) { QQmlBoundSignal *signal = new QQmlBoundSignal(that.d->object, that.method(), that.d->object); - return signal->setExpression(expr); + QQmlExpression *oldExpr = signal->setExpression(expr); + signal->addToObject(); + return oldExpr; } else { return 0; } -- cgit v1.2.3 From f931ec39513854e56560fe85d55a5d144e22af88 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Mon, 26 Mar 2012 18:56:47 +1000 Subject: Update documentation Added \inmodule tags for qml module classes which were lacking them. Also updated the \since to 5.0. Change-Id: Ia5d393d593fdb484893cd4e3796b6854d4c637b3 Reviewed-by: Jerome Pasion Reviewed-by: Chris Adams --- src/qml/qml/qqmlproperty.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/qml/qml/qqmlproperty.cpp') diff --git a/src/qml/qml/qqmlproperty.cpp b/src/qml/qml/qqmlproperty.cpp index 0848df62c7..ea7d624c2c 100644 --- a/src/qml/qml/qqmlproperty.cpp +++ b/src/qml/qml/qqmlproperty.cpp @@ -72,7 +72,8 @@ QT_BEGIN_NAMESPACE /*! \class QQmlProperty -\since 4.7 +\since 5.0 +\inmodule QtQml \brief The QQmlProperty class abstracts accessing properties on objects created from QML. As QML uses Qt's meta-type system all of the existing QMetaObject classes can be used to introspect @@ -108,6 +109,8 @@ qWarning() << "Current pixel size:" << property.read().toInt(); property.write(24); qWarning() << "Pixel size should now be 24:" << property.read().toInt(); \endcode + +The QtQuick 1 version of this class was named QDeclarativeProperty. */ /*! -- cgit v1.2.3 From ec7deb3d123bb44b5d57590615a60ed48b1d2860 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Fri, 23 Mar 2012 09:32:45 +1000 Subject: Add QQmlBoundSignalNoParams This class is used for signal handlers with no parameters, and is more lightweight than QQmlBoundSignal. Change-Id: Ie63eb989d334906657fd16fe35386df198654c28 Reviewed-by: Chris Adams --- src/qml/qml/qqmlproperty.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/qml/qml/qqmlproperty.cpp') diff --git a/src/qml/qml/qqmlproperty.cpp b/src/qml/qml/qqmlproperty.cpp index ea7d624c2c..2d459421d9 100644 --- a/src/qml/qml/qqmlproperty.cpp +++ b/src/qml/qml/qqmlproperty.cpp @@ -970,7 +970,11 @@ QQmlPropertyPrivate::setSignalExpression(const QQmlProperty &that, return signalHandler->setExpression(expr); if (expr) { - QQmlBoundSignal *signal = new QQmlBoundSignal(that.d->object, that.method(), that.d->object); + QQmlAbstractBoundSignal *signal = 0; + if (that.method().parameterTypes().count()) + signal = new QQmlBoundSignal(that.d->object, that.method(), that.d->object); + else + signal = new QQmlBoundSignalNoParams(that.d->object, that.method(), that.d->object); QQmlExpression *oldExpr = signal->setExpression(expr); signal->addToObject(); return oldExpr; -- cgit v1.2.3