summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSandro S. Andrade <sandroandrade@kde.org>2012-12-15 22:44:31 -0300
committerSandro S. Andrade <sandroandrade@kde.org>2012-12-16 02:51:32 +0100
commit3b1dbc39f5eeec407c86c4a504dba072b981f23e (patch)
tree764058fbb0d292cab52f3887933716f661150eff
parent68e3a84bfc63c6801c3702c807a6520ed1d49a26 (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.cpp4
-rw-r--r--src/wrappedobjects/qmetawrappedobject.cpp11
-rw-r--r--src/wrappedobjects/qmetawrappedobject.h6
-rw-r--r--src/wrappedobjects/qwrappedobject.cpp17
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"