예제 #1
0
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);
                }
            }
        }
    }
}
예제 #2
0
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();
}