diff options
author | Sandro S. Andrade <sandroandrade@kde.org> | 2012-12-15 22:44:31 -0300 |
---|---|---|
committer | Sandro S. Andrade <sandroandrade@kde.org> | 2012-12-16 02:51:32 +0100 |
commit | 3b1dbc39f5eeec407c86c4a504dba072b981f23e (patch) | |
tree | 764058fbb0d292cab52f3887933716f661150eff | |
parent | 68e3a84bfc63c6801c3702c807a6520ed1d49a26 (diff) |
Implement setProperty() and property() in QWrappedObject
Change-Id: I16b6acfa579a63f1d2852ca4bed272d3fc530c5d
Reviewed-by: Sandro S. Andrade <sandroandrade@kde.org>
-rw-r--r-- | examples/uml/nested-packages/main.cpp | 4 | ||||
-rw-r--r-- | src/wrappedobjects/qmetawrappedobject.cpp | 11 | ||||
-rw-r--r-- | src/wrappedobjects/qmetawrappedobject.h | 6 | ||||
-rw-r--r-- | src/wrappedobjects/qwrappedobject.cpp | 17 |
4 files changed, 34 insertions, 4 deletions
diff --git a/examples/uml/nested-packages/main.cpp b/examples/uml/nested-packages/main.cpp index 45df085b..28d104db 100644 --- a/examples/uml/nested-packages/main.cpp +++ b/examples/uml/nested-packages/main.cpp @@ -34,10 +34,6 @@ int main () QWrappedObjectPointer<QModel> model = new QModel; model->setName("MyModel"); - const QMetaWrappedObject *metaWrappedObject = model->metaWrappedObject(); - qDebug() << "MetaWrappedObject property count: " << metaWrappedObject->propertyCount(); - return 0; - QWrappedObjectPointer<QPackage> package = new QPackage; package->setName("Package1"); diff --git a/src/wrappedobjects/qmetawrappedobject.cpp b/src/wrappedobjects/qmetawrappedobject.cpp index a3fb3415..6e8e4637 100644 --- a/src/wrappedobjects/qmetawrappedobject.cpp +++ b/src/wrappedobjects/qmetawrappedobject.cpp @@ -92,6 +92,17 @@ QMetaPropertyInfo QMetaWrappedObject::property(int index) const return d_ptr->propertyInfos.at(index); } +int QMetaWrappedObject::indexOfProperty(const char *name) const +{ + int i = 0; + foreach (const QMetaPropertyInfo &propertyInfo, d_ptr->propertyInfos) { + if (propertyInfo == name) + return i; + ++i; + } + return -1; +} + void QMetaWrappedObject::handleWrappedObjectProperties(const QWrappedObject *wrappingObject, QStringList &visitedClasses) const { foreach (QWrappedObject *wrappedObject, wrappingObject->wrappedObjects()) diff --git a/src/wrappedobjects/qmetawrappedobject.h b/src/wrappedobjects/qmetawrappedobject.h index 307fd230..643a2ca2 100644 --- a/src/wrappedobjects/qmetawrappedobject.h +++ b/src/wrappedobjects/qmetawrappedobject.h @@ -67,6 +67,11 @@ struct Q_WRAPPEDOBJECTS_EXPORT QMetaPropertyInfo { return qstrcmp(metaProperty.name(), other.metaProperty.name()) == 0 ? true:false; } + + inline bool operator==(const char *name) const + { + return qstrcmp(metaProperty.name(), name) == 0 ? true:false; + } }; class Q_WRAPPEDOBJECTS_EXPORT QMetaWrappedObject @@ -79,6 +84,7 @@ public: int propertyCount() const; QMetaPropertyInfo property(int index) const; + int indexOfProperty(const char *name) const; protected: explicit QMetaWrappedObject(QWrappedObject *wrappedObject); diff --git a/src/wrappedobjects/qwrappedobject.cpp b/src/wrappedobjects/qwrappedobject.cpp index ad853082..8bc2e83e 100644 --- a/src/wrappedobjects/qwrappedobject.cpp +++ b/src/wrappedobjects/qwrappedobject.cpp @@ -114,10 +114,27 @@ const QMetaWrappedObject *QWrappedObject::metaWrappedObject() bool QWrappedObject::setProperty(const char *name, const QVariant &value) { + Q_D(QWrappedObject); + int index; + if ((index = d->metaWrappedObject->indexOfProperty(name)) != -1) { + QMetaPropertyInfo metaPropertyInfo = d->metaWrappedObject->property(index); + metaPropertyInfo.metaProperty.write(metaPropertyInfo.propertyWrappedObject, value); + return true; + } + else + return false; } QVariant QWrappedObject::property(const char *name) const { + Q_D(const QWrappedObject); + int index; + if ((index = d->metaWrappedObject->indexOfProperty(name)) != -1) { + QMetaPropertyInfo metaPropertyInfo = d->metaWrappedObject->property(index); + return metaPropertyInfo.metaProperty.read(metaPropertyInfo.propertyWrappedObject); + } + else + return QVariant(); } #include "moc_qwrappedobject.cpp" |