static void populateRuleComponentModel(RuleComponentModel *component, QmlObject::Ptr object, const QMap<QString, QmlObject::Ptr> &mappers) { if (!component) { return; } for (int i = 0; i < component->count(); ++i) { QVariant type = component->data(component->index(i), RuleComponentModel::Type); MetaProperty *meta = type.value<MetaProperty *>(); if (meta) { QString key = meta->name(); if (object->hasProperty(key)) { // TODO: migrate to MetaProperty QVariant value = object->property(key); if (value.canConvert<Reference::Ptr>()) { Reference::Ptr reference = value.value<Reference::Ptr>(); if (mappers.contains(reference->identifier())) { // Check mapper QmlObject::Ptr mapper = mappers.value(reference->identifier()); if (mapper->type() == "TimeMapper") { int hour = mapper->property("hour").toInt(); int minute = mapper->property("minute").toInt(); QTime time = QTime(hour, minute); component->setValue(i, QVariant(time)); } } } else { component->setValue(i, value); } } } } }
QVariant MetaPropertyModel::data(const QModelIndex &index, int role) const { if (!m_metaObject || !index.isValid()) { return QVariant(); } MetaProperty *property = m_metaObject->propertyAt(index.row()); if (role == Qt::DisplayRole) { switch (index.column()) { case 0: return property->name(); case 2: return property->typeName(); case 3: return property->metaObject()->className(); } } if (index.column() == 1) { if (!m_object) { return QVariant(); } // TODO: cache this, to make this more robust against m_object becoming invalid const QVariant value = property->value(m_metaObject->castForPropertyAt(m_object, index.row())); switch (role) { case Qt::DisplayRole: return Util::variantToString(value); case Qt::DecorationRole: return Util::decorationForVariant(value); case Qt::EditRole: return value; } } return QVariant(); }