QStringList QDeclarativeObjectScriptClass::propertyNames(Object *object) { QObject *obj = toQObject(object); if (!obj) return QStringList(); QDeclarativeEnginePrivate *enginePrivate = QDeclarativeEnginePrivate::get(engine); QDeclarativePropertyCache *cache = 0; QDeclarativeData *ddata = QDeclarativeData::get(obj); if (ddata) cache = ddata->propertyCache; if (!cache) { cache = enginePrivate->cache(obj); if (cache) { if (ddata) { cache->addref(); ddata->propertyCache = cache; } } else { // Not cachable - fall back to QMetaObject (eg. dynamic meta object) // XXX QDeclarativeOpenMetaObject has a cache, so this is suboptimal. // XXX This is a workaround for QTBUG-9420. const QMetaObject *mo = obj->metaObject(); QStringList r; int pc = mo->propertyCount(); int po = mo->propertyOffset(); for (int i=po; i<pc; ++i) r += QString::fromUtf8(mo->property(i).name()); return r; } } return cache->propertyNames(); }
QVariant QScriptValueImpl::toVariant() const { switch (m_type) { case QScript::InvalidType: return QVariant(); case QScript::UndefinedType: case QScript::NullType: case QScript::PointerType: case QScript::ReferenceType: break; case QScript::BooleanType: return QVariant(m_bool_value); case QScript::IntegerType: return QVariant(m_int_value); case QScript::NumberType: return QVariant(m_number_value); case QScript::StringType: return QVariant(m_string_value->s); case QScript::LazyStringType: return QVariant(*m_lazy_string_value); case QScript::ObjectType: if (isDate()) return QVariant(toDateTime()); #ifndef QT_NO_REGEXP if (isRegExp()) return QVariant(toRegExp()); #endif if (isVariant()) return variantValue(); #ifndef QT_NO_QOBJECT if (isQObject()) return qVariantFromValue(toQObject()); #endif QScriptValueImpl v = engine()->toPrimitive(*this); if (!v.isObject()) return v.toVariant(); break; } // switch return QVariant(); }
QDeclarativeObjectScriptClass::Value QDeclarativeObjectScriptClass::property(Object *object, const Identifier &name) { return property(toQObject(object), name); }
void QDeclarativeObjectScriptClass::setProperty(Object *object, const Identifier &name, const QScriptValue &value) { return setProperty(toQObject(object), name, value, context()); }
QScriptClass::QueryFlags QDeclarativeObjectScriptClass::queryProperty(Object *object, const Identifier &name, QScriptClass::QueryFlags flags) { return queryProperty(toQObject(object), name, flags, 0); }