QScriptValue NestedListModel::get(int index) const { QDeclarativeEngine *eng = qmlEngine(m_listModel); if (!eng) return 0; if (index < 0 || index >= count()) { QScriptEngine *seng = QDeclarativeEnginePrivate::getScriptEngine(eng); if (seng) return seng->undefinedValue(); return 0; } ModelNode *node = qvariant_cast<ModelNode *>(_root->values.at(index)); if (!node) return 0; return QDeclarativeEnginePrivate::qmlScriptObject(node->object(this), eng); }
QVariant NestedListModel::valueForNode(ModelNode *node, bool *hasNested) const { QObject *rv = 0; if (hasNested) *hasNested = false; if (node->isArray) { // List rv = node->model(this); if (hasNested) *hasNested = true; } else { if (!node->properties.isEmpty()) { // Object rv = node->object(this); } else if (node->values.count() == 0) { // Invalid return QVariant(); } else if (node->values.count() == 1) { // Value QVariant &var = node->values[0]; ModelNode *valueNode = qvariant_cast<ModelNode *>(var); if (valueNode) { if (!valueNode->properties.isEmpty()) rv = valueNode->object(this); else rv = valueNode->model(this); } else { return var; } } } if (rv) { return QVariant::fromValue(rv); } else { return QVariant(); } }