diff options
Diffstat (limited to 'src/declarative')
-rw-r--r-- | src/declarative/extra/extra.pri | 2 | ||||
-rw-r--r-- | src/declarative/util/qmlpropertymap.cpp (renamed from src/declarative/extra/qbindablemap.cpp) | 88 | ||||
-rw-r--r-- | src/declarative/util/qmlpropertymap.h (renamed from src/declarative/extra/qbindablemap.h) | 21 | ||||
-rw-r--r-- | src/declarative/util/util.pri | 6 |
4 files changed, 65 insertions, 52 deletions
diff --git a/src/declarative/extra/extra.pri b/src/declarative/extra/extra.pri index 726f099..502504a 100644 --- a/src/declarative/extra/extra.pri +++ b/src/declarative/extra/extra.pri @@ -6,7 +6,6 @@ SOURCES += \ extra/qfxanimatedimageitem.cpp \ extra/qfxparticles.cpp \ extra/qmlbehavior.cpp \ - extra/qbindablemap.cpp \ extra/qmlfontloader.cpp HEADERS += \ @@ -18,7 +17,6 @@ HEADERS += \ extra/qfxanimatedimageitem_p.h \ extra/qfxparticles.h \ extra/qmlbehavior.h \ - extra/qbindablemap.h \ extra/qmlfontloader.h contains(QT_CONFIG, xmlpatterns) { diff --git a/src/declarative/extra/qbindablemap.cpp b/src/declarative/util/qmlpropertymap.cpp index 5254e2a..e23eebf 100644 --- a/src/declarative/extra/qbindablemap.cpp +++ b/src/declarative/util/qmlpropertymap.cpp @@ -39,7 +39,7 @@ ** ****************************************************************************/ -#include "qbindablemap.h" +#include "qmlpropertymap.h" #include <qmlopenmetaobject.h> #include <QDebug> @@ -47,24 +47,45 @@ QT_BEGIN_NAMESPACE //QBindableMapMetaObject lets us listen for changes coming from QML //so we can emit the changed signal. -class QBindableMapMetaObject : public QmlOpenMetaObject +class QmlPropertyMapMetaObject : public QmlOpenMetaObject { public: - QBindableMapMetaObject(QBindableMap *obj) : QmlOpenMetaObject(obj) - { - map = obj; - } + QmlPropertyMapMetaObject(QmlPropertyMap *obj, QmlPropertyMapPrivate *objPriv); protected: - virtual void propertyWrite(int index) - { - map->emitChanged(QString::fromUtf8(name(index))); - } + virtual void propertyWrite(int index); private: - QBindableMap *map; + QmlPropertyMap *map; + QmlPropertyMapPrivate *priv; }; +class QmlPropertyMapPrivate : public QObjectPrivate +{ + Q_DECLARE_PUBLIC(QmlPropertyMap) +public: + QmlPropertyMapMetaObject *mo; + QStringList keys; + void emitChanged(const QString &key); +}; + +void QmlPropertyMapPrivate::emitChanged(const QString &key) +{ + Q_Q(QmlPropertyMap); + emit q->changed(key); +} + +QmlPropertyMapMetaObject::QmlPropertyMapMetaObject(QmlPropertyMap *obj, QmlPropertyMapPrivate *objPriv) : QmlOpenMetaObject(obj) +{ + map = obj; + priv = objPriv; +} + +void QmlPropertyMapMetaObject::propertyWrite(int index) +{ + priv->emitChanged(QString::fromUtf8(name(index))); +} + /*! \class QBindableMap \brief The QBindableMap class allows you to set key-value pairs that can be used in bindings. @@ -104,34 +125,31 @@ private: // can we provide a way to clear keys? // do we want to make any claims regarding key ordering? // should we have signals for insertion and and deletion -- becoming more model like -// should we emit change for our own changes as well? -// Bug or Feature?: values can be created in QML (owner.somethingElse = "Hello") will create somethingElse property. (need to verify if this is actually the case) -// Bug or Feature?: all values are read-write (there are no read-only values) /*! Constructs a bindable map with parent object \a parent. */ -QBindableMap::QBindableMap(QObject *parent) -: QObject(parent) +QmlPropertyMap::QmlPropertyMap(QObject *parent) +: QObject(*(new QmlPropertyMapPrivate), parent) { - m_mo = new QBindableMapMetaObject(this); + Q_D(QmlPropertyMap); + d->mo = new QmlPropertyMapMetaObject(this, d); } /*! Destroys the bindable map. */ -QBindableMap::~QBindableMap() +QmlPropertyMap::~QmlPropertyMap() { } /*! Clears the value (if any) associated with \a key. */ -void QBindableMap::clearValue(const QString &key) +void QmlPropertyMap::clearValue(const QString &key) { - //m_keys.remove(); //### - m_mo->setValue(key.toUtf8(), QVariant()); - //emit changed(key); + Q_D(QmlPropertyMap); + d->mo->setValue(key.toUtf8(), QVariant()); } /*! @@ -140,9 +158,10 @@ void QBindableMap::clearValue(const QString &key) If no value has been set for this key (or if the value has been cleared), an invalid QVariant is returned. */ -QVariant QBindableMap::value(const QString &key) const +QVariant QmlPropertyMap::value(const QString &key) const { - return m_mo->value(key.toUtf8()); + Q_D(const QmlPropertyMap); + return d->mo->value(key.toUtf8()); } /*! @@ -150,12 +169,12 @@ QVariant QBindableMap::value(const QString &key) const If the key doesn't exist, it is automatically created. */ -void QBindableMap::setValue(const QString &key, QVariant value) +void QmlPropertyMap::setValue(const QString &key, const QVariant &value) { - if (!m_keys.contains(key)) - m_keys.append(key); - m_mo->setValue(key.toUtf8(), value); - //emit changed(key); + Q_D(QmlPropertyMap); + if (!d->keys.contains(key)) + d->keys.append(key); + d->mo->setValue(key.toUtf8(), value); } /*! @@ -164,19 +183,16 @@ void QBindableMap::setValue(const QString &key, QVariant value) Keys that have been cleared will still appear in this list, even though their associated values are invalid QVariants. */ -QStringList QBindableMap::keys() const +QStringList QmlPropertyMap::keys() const { - return m_keys; + Q_D(const QmlPropertyMap); + return d->keys; } /*! \fn void QBindableMap::changed(const QString &key) This signal is emitted whenever one of the values in the map is changed. \a key is the key corresponding to the value that was changed. - */ +*/ -void QBindableMap::emitChanged(const QString &key) -{ - emit changed(key); -} QT_END_NAMESPACE diff --git a/src/declarative/extra/qbindablemap.h b/src/declarative/util/qmlpropertymap.h index aa1908e..295f4b7 100644 --- a/src/declarative/extra/qbindablemap.h +++ b/src/declarative/util/qmlpropertymap.h @@ -39,8 +39,8 @@ ** ****************************************************************************/ -#ifndef QBINDABLEMAP_H -#define QBINDABLEMAP_H +#ifndef QMLPROPERTYMAP_H +#define QMLPROPERTYMAP_H #include <QtDeclarative/qfxglobal.h> #include <QtCore/QObject> @@ -54,16 +54,16 @@ QT_BEGIN_NAMESPACE QT_MODULE(Declarative) -class QBindableMapMetaObject; -class Q_DECLARATIVE_EXPORT QBindableMap : public QObject +class QmlPropertyMapPrivate; +class Q_DECLARATIVE_EXPORT QmlPropertyMap : public QObject { Q_OBJECT public: - QBindableMap(QObject *parent = 0); - virtual ~QBindableMap(); + QmlPropertyMap(QObject *parent = 0); + virtual ~QmlPropertyMap(); QVariant value(const QString &key) const; - void setValue(const QString &key, QVariant value); + void setValue(const QString &key, const QVariant &value); void clearValue(const QString &key); Q_INVOKABLE QStringList keys() const; @@ -72,11 +72,8 @@ Q_SIGNALS: void changed(const QString &key); private: - Q_DISABLE_COPY(QBindableMap) - void emitChanged(const QString &key); - QBindableMapMetaObject *m_mo; - QStringList m_keys; - friend class QBindableMapMetaObject; + Q_DECLARE_PRIVATE(QmlPropertyMap) + Q_DISABLE_COPY(QmlPropertyMap) }; QT_END_NAMESPACE diff --git a/src/declarative/util/util.pri b/src/declarative/util/util.pri index ec9967c..01ad898 100644 --- a/src/declarative/util/util.pri +++ b/src/declarative/util/util.pri @@ -19,7 +19,8 @@ SOURCES += \ util/qmlopenmetaobject.cpp \ util/qmltimeline.cpp \ util/qmltimer.cpp \ - util/qmlbind.cpp + util/qmlbind.cpp \ + util/qmlpropertymap.cpp HEADERS += \ util/qmlview.h \ @@ -46,4 +47,5 @@ HEADERS += \ util/qmlnullablevalue_p.h \ util/qmltimeline_p.h \ util/qmltimer.h \ - util/qmlbind.h + util/qmlbind.h \ + util/qmlpropertymap.h |