QString ActionInstance::evaluateVariableArray(bool &ok, const QScriptValue &scriptValue) { QString result; QScriptValueIterator it(scriptValue); if(scriptValue.isArray()) { int lastIndex = -1; result = QStringLiteral("["); while (it.hasNext()) { it.next(); if (it.flags() & QScriptValue::SkipInEnumeration) continue; QScriptValue nextScriptValue = it.value(); //is it an array ? if(nextScriptValue.isArray()) result += evaluateVariableArray(ok, nextScriptValue); else if(NumericalIndex.exactMatch(it.name())) //it.name : numerical only ? { int newIndex = it.name().toInt(); if( newIndex > lastIndex+1) { //insert some commas for(lastIndex++ ; lastIndex < newIndex; lastIndex++ ) result += QStringLiteral(","); } lastIndex = newIndex; result += it.value().toString(); } else result += it.name().append(QStringLiteral("=")).append(it.value().toString()); result += QStringLiteral(","); } if(result == QLatin1String("[")) result += QStringLiteral("]"); else result[result.lastIndexOf(QStringLiteral(","))] = QLatin1Char(']'); } else result = it.value().toString(); return result; }
void YTCategories::parseCategories(QByteArray bytes) { QList<YTCategory> categories; QScriptEngine engine; QScriptValue json = engine.evaluate("(" + QString::fromUtf8(bytes) + ")"); QScriptValue items = json.property("items"); if (items.isArray()) { QScriptValueIterator it(items); while (it.hasNext()) { it.next(); QScriptValue item = it.value(); // For some reason the array has an additional element containing its size. if (!item.isObject()) continue; QScriptValue snippet = item.property("snippet"); bool isAssignable = snippet.property("assignable").toBool(); if (!isAssignable) continue; YTCategory category; category.term = item.property("id").toString(); category.label = snippet.property("title").toString(); categories << category; } } emit categoriesLoaded(categories); }
bool ModelNode::setObjectValue(const QScriptValue& valuemap, bool writeToCache) { bool emitItemsChanged = false; QScriptValueIterator it(valuemap); while (it.hasNext()) { it.next(); ModelNode *prev = properties.value(it.name()); ModelNode *value = new ModelNode(m_model); QScriptValue v = it.value(); if (v.isArray()) { value->isArray = true; value->setListValue(v); if (writeToCache && objectCache) objectCache->setValue(it.name().toUtf8(), QVariant::fromValue(value->model(m_model))); emitItemsChanged = true; // for now, too inefficient to check whether list and sublists have changed } else { value->values << v.toVariant(); if (writeToCache && objectCache) objectCache->setValue(it.name().toUtf8(), value->values.last()); if (!emitItemsChanged && prev && prev->values.count() == 1 && prev->values[0] != value->values.last()) { emitItemsChanged = true; } } if (properties.contains(it.name())) delete properties[it.name()]; properties.insert(it.name(), value); } return emitItemsChanged; }
static void valueToIntList(const QScriptValue &arr, QList<int> &list) { list.clear(); if (arr.isArray()) { int length = arr.property("length").toInteger(); for (int i = 0; i < length; i++) list.append(arr.property(i).toInteger()); } }
QScriptValue UniversalInputDialogScript::add(const QScriptValue& def, const QScriptValue& description, const QScriptValue& id){ QWidget* w = 0; if (def.isArray()) { QStringList options; QScriptValueIterator it(def); while (it.hasNext()) { it.next(); if (it.flags() & QScriptValue::SkipInEnumeration) continue; if (it.value().isString() || it.value().isNumber()) options << it.value().toString(); else engine->currentContext()->throwError("Invalid default value in array (must be string or number): "+it.value().toString()); } w = addComboBox(ManagedProperty::fromValue(options), description.toString()); } else if (def.isBool()) { w = addCheckBox(ManagedProperty::fromValue(def.toBool()), description.toString()); } else if (def.isNumber()) { w = addDoubleSpinBox(ManagedProperty::fromValue(def.toNumber()), description.toString()); } else if (def.isString()) { w = addLineEdit(ManagedProperty::fromValue(def.toString()), description.toString()); } else { engine->currentContext()->throwError(tr("Invalid default value: %1").arg(def.toString())); return QScriptValue(); } if (id.isValid()) properties.last().name = id.toString(); return engine->newQObject(w); }
QString to_source_f<QScriptValue>::operator()( QScriptValue const & x ) const { if( x.isUndefined() ) return "undefined"; if( x.isNull() ) return "null"; if(0) qDebug() << "to_source_f<QScriptValue>("<<x.toString()<<")"; #define TODO(A,B,C) #define DO(IS,T,TO) \ if( x.IS() ) {\ if(0) qDebug() << "to_source_f<QScriptValue>(is-a: "<<# IS<<")"; \ return toSource<T>( x.TO() );\ } DO(isVariant,QVariant,toVariant); // must come before the others! DO(isBoolean,bool,toBoolean); DO(isNumber,qreal,toNumber); DO(isString,QString,toString); TODO(isRegExp,QRegExp,toRegExp); if( x.isArray() || x.isObject() ) { if(0) qDebug() << "to_source_f<QScriptValue>(is-a: array or object)"; return to_source_f_object()( x ); } #undef DO #undef TODO return QString("undefined"); }
QList<ScraperSearchResult> IMDB::parseSearch(QString json) { QList<ScraperSearchResult> results; QScriptValue sc; QScriptEngine engine; sc = engine.evaluate("(" + QString(json) + ")"); if (sc.isArray() ) { QScriptValueIterator it(sc); while (it.hasNext() ) { it.next(); if (it.value().property("imdb_id").toString().isEmpty()) continue; ScraperSearchResult result; result.name = Helper::urlDecode(it.value().property("title").toString()); result.id = it.value().property("imdb_id").toString(); result.released = QDate::fromString(it.value().property("year").toString(), "yyyy"); results.append(result); } } else { if (!sc.property("imdb_id").toString().isEmpty()) { ScraperSearchResult result; result.name = Helper::urlDecode(sc.property("title").toString()); result.id = sc.property("imdb_id").toString(); result.released = QDate::fromString(sc.property("year").toString(), "yyyy"); results.append(result); } } return results; }
QAction *KWin::AbstractScript::scriptValueToAction(QScriptValue &value, QMenu *parent) { QScriptValue titleValue = value.property(QStringLiteral("text")); QScriptValue checkableValue = value.property(QStringLiteral("checkable")); QScriptValue checkedValue = value.property(QStringLiteral("checked")); QScriptValue itemsValue = value.property(QStringLiteral("items")); QScriptValue triggeredValue = value.property(QStringLiteral("triggered")); if (!titleValue.isValid()) { // title not specified - does not make any sense to include return nullptr; } const QString title = titleValue.toString(); const bool checkable = checkableValue.isValid() && checkableValue.toBool(); const bool checked = checkable && checkedValue.isValid() && checkedValue.toBool(); // either a menu or a menu item if (itemsValue.isValid()) { if (!itemsValue.isArray()) { // not an array, so cannot be a menu return nullptr; } QScriptValue lengthValue = itemsValue.property(QStringLiteral("length")); if (!lengthValue.isValid() || !lengthValue.isNumber() || lengthValue.toInteger() == 0) { // length property missing return nullptr; } return createMenu(title, itemsValue, parent); } else if (triggeredValue.isValid()) { // normal item return createAction(title, checkable, checked, triggeredValue, parent); } return nullptr; }
ST convert_script_value_f_size<ST>::operator()( QScriptEngine *, const QScriptValue & args ) const { typedef typename point_valtype<ST>::value_type value_type; value_type w = 0; value_type h = 0; QScriptValue obj; bool smellArray = ( args.isArray() || ! args.property("length").isUndefined() ); if( smellArray ) { obj = args.property(0); } else if( args.isObject() ) { obj = args; } if( smellArray && !obj.isObject() ) { #define ARG(X) value_type(args.property(X).toNumber()) w = ARG(0); h = ARG(1); #undef ARG } else { #define ARG(X) value_type(obj.property(X).toNumber()) w = ARG("width"); h = ARG("height"); #undef ARG } return ST(w,h); }
PT convert_script_value_f_point<PT>::operator()( QScriptEngine *, const QScriptValue & args ) const { typedef typename point_valtype<PT>::value_type value_type; value_type x = 0; value_type y = 0; QScriptValue obj; bool smellArray = (args.isArray() || ! args.property("length").isUndefined()); if( smellArray ) { if(0) qDebug() << "Looks like arguments array."; obj = args.property(0); } else if( args.isObject() ) { if(0) qDebug() << "Looks like an object."; obj = args; } if( smellArray && !obj.isObject() ) { if(0) qDebug() << "Trying arguments array."; x = value_type(args.property(0).toNumber()); y = value_type(args.property(1).toNumber()); } else { if(0) qDebug() << "Trying object x/y:" << obj.toString() << ":" << toSource( obj ); if(0) qDebug() << "obj.property(x).toNumber():"<<obj.property("x").toNumber(); x = value_type(obj.property("x").toNumber()); y = value_type(obj.property("y").toNumber()); } if(0) qDebug() << "PT:"<<PT(x,y); return PT(x,y); }
void YTChannel::parseResponse(const QByteArray &bytes) { QScriptEngine engine; QScriptValue json = engine.evaluate("(" + QString::fromUtf8(bytes) + ")"); QScriptValue items = json.property("items"); if (items.isArray()) { QScriptValueIterator it(items); while (it.hasNext()) { it.next(); QScriptValue item = it.value(); // For some reason the array has an additional element containing its size. if (item.isObject()) { QScriptValue snippet = item.property("snippet"); displayName = snippet.property("title").toString(); description = snippet.property("description").toString(); QScriptValue thumbnails = snippet.property("thumbnails"); thumbnailUrl = thumbnails.property("medium").property("url").toString(); qDebug() << displayName << description << thumbnailUrl; } } } emit infoLoaded(); storeInfo(); loading = false; }
void tst_QScriptClass::newInstance() { QScriptEngine eng; TestClass cls(&eng); QScriptValue obj1 = eng.newObject(&cls); QVERIFY(!obj1.data().isValid()); QVERIFY(obj1.prototype().strictlyEquals(cls.prototype())); QEXPECT_FAIL("", "classname is not implemented", Continue); QCOMPARE(obj1.toString(), QString::fromLatin1("[object TestClass]")); QCOMPARE(obj1.scriptClass(), (QScriptClass*)&cls); QScriptValue num(&eng, 456); QScriptValue obj2 = eng.newObject(&cls, num); QVERIFY(obj2.data().strictlyEquals(num)); QVERIFY(obj2.prototype().strictlyEquals(cls.prototype())); QCOMPARE(obj2.scriptClass(), (QScriptClass*)&cls); QScriptValue obj3 = eng.newObject(); QCOMPARE(obj3.scriptClass(), (QScriptClass*)0); obj3.setScriptClass(&cls); QCOMPARE(obj3.scriptClass(), (QScriptClass*)&cls); obj3.setScriptClass(0); QCOMPARE(obj3.scriptClass(), (QScriptClass*)0); obj3.setScriptClass(&cls); QCOMPARE(obj3.scriptClass(), (QScriptClass*)&cls); TestClass cls2(&eng); obj3.setScriptClass(&cls2); QCOMPARE(obj3.scriptClass(), (QScriptClass*)&cls2); // undefined behavior really, but shouldn't crash QScriptValue arr = eng.newArray(); QVERIFY(arr.isArray()); QCOMPARE(arr.scriptClass(), (QScriptClass*)0); QTest::ignoreMessage(QtWarningMsg, "QScriptValue::setScriptClass() failed: cannot change class of non-QScriptObject"); arr.setScriptClass(&cls); QEXPECT_FAIL("", "Changing class of arbitrary script object is not allowed (it's OK)", Continue); QCOMPARE(arr.scriptClass(), (QScriptClass*)&cls); QEXPECT_FAIL("", "Changing class of arbitrary script object is not allowed (it's OK)", Continue); QVERIFY(!arr.isArray()); QVERIFY(arr.isObject()); }
/*! \qmlmethod ListModel::append(jsobject dict) Adds a new item to the end of the list model, with the values in \a dict. \code fruitModel.append({"cost": 5.95, "name":"Pizza"}) \endcode \sa set() remove() */ void QDeclarativeListModel::append(const QScriptValue& valuemap) { if (!valuemap.isObject() || valuemap.isArray()) { qmlInfo(this) << tr("append: value is not an object"); return; } insert(count(), valuemap); }
void JavascriptInstance::GetObjectInformation(const QScriptValue &object, QSet<qint64> &ids, uint &valueCount, uint &objectCount, uint &nullCount, uint &numberCount, uint &boolCount, uint &stringCount, uint &arrayCount, uint &funcCount, uint &qobjCount, uint &qobjMethodCount) { if (!ids.contains(object.objectId())) ids << object.objectId(); QScriptValueIterator iter(object); while(iter.hasNext()) { iter.next(); QScriptValue v = iter.value(); if (ids.contains(v.objectId())) continue; ids << v.objectId(); valueCount++; if (v.isNull()) nullCount++; if (v.isNumber()) numberCount++; else if (v.isBool()) boolCount++; else if (v.isString()) stringCount++; else if (v.isArray()) arrayCount++; else if (v.isFunction()) funcCount++; else if (v.isQObject()) qobjCount++; if (v.isObject()) objectCount++; if (v.isQMetaObject()) qobjMethodCount += v.toQMetaObject()->methodCount(); // Recurse if ((v.isObject() || v.isArray()) && !v.isFunction() && !v.isString() && !v.isNumber() && !v.isBool() && !v.isQObject() && !v.isQMetaObject()) GetObjectInformation(v, ids, valueCount, objectCount, nullCount, numberCount, boolCount, stringCount, arrayCount, funcCount, qobjCount, qobjMethodCount); } }
static JSAgentWatchData fromScriptValue(const QString &expression, const QScriptValue &value) { static const QString arrayStr = QCoreApplication::translate ("Debugger::JSAgentWatchData", "[Array of length %1]"); static const QString undefinedStr = QCoreApplication::translate ("Debugger::JSAgentWatchData", "<undefined>"); JSAgentWatchData data; data.exp = expression.toUtf8(); data.name = data.exp; data.hasChildren = false; data.value = value.toString().toUtf8(); data.objectId = value.objectId(); if (value.isArray()) { data.type = "Array"; data.value = arrayStr.arg(value.property(QLatin1String("length")).toString()).toUtf8(); data.hasChildren = true; } else if (value.isBool()) { data.type = "Bool"; // data.value = value.toBool() ? "true" : "false"; } else if (value.isDate()) { data.type = "Date"; data.value = value.toDateTime().toString().toUtf8(); } else if (value.isError()) { data.type = "Error"; } else if (value.isFunction()) { data.type = "Function"; } else if (value.isUndefined()) { data.type = undefinedStr.toUtf8(); } else if (value.isNumber()) { data.type = "Number"; } else if (value.isRegExp()) { data.type = "RegExp"; } else if (value.isString()) { data.type = "String"; } else if (value.isVariant()) { data.type = "Variant"; } else if (value.isQObject()) { const QObject *obj = value.toQObject(); data.type = "Object"; data.value += '['; data.value += obj->metaObject()->className(); data.value += ']'; data.hasChildren = true; } else if (value.isObject()) { data.type = "Object"; data.hasChildren = true; data.value = "[Object]"; } else if (value.isNull()) { data.type = "<null>"; } else { data.type = "<unknown>"; } return data; }
/*! \internal Overloadable method allows properties to be set during creation */ QScriptValue QDeclarativeComponent::createObject(QObject* parent, const QScriptValue& valuemap) { Q_D(QDeclarativeComponent); if (!valuemap.isObject() || valuemap.isArray()) { qmlInfo(this) << tr("createObject: value is not an object"); return QScriptValue(QScriptValue::NullValue); } return d->createObject(parent, valuemap); }
QColor convert_script_value_f<QColor>::operator()( QScriptEngine *, const QScriptValue & args ) const { int r = 0; int g = 0; int b = 0; qreal a = 255; QScriptValue obj; bool smellArray = ( args.isArray() || ! args.property("length").isUndefined() ); if( smellArray ) { obj = args.property(0); } else if( args.isObject() ) { obj = args; } if( smellArray && !obj.isObject() ) { #define ARG(X) args.property(X).toInt32() int argc = args.property("length").toInt32(); QScriptValue arg = args.property(0); if( (1 == argc) && arg.isString() ) { return QColor( arg.toString() ); } r = (argc > 0) ? ARG(0) : 0; g = (argc > 1) ? ARG(1) : 0; b = (argc > 2) ? ARG(2) : 0; a = (argc > 3) ? args.property(3).toNumber() : 255.0; #undef ARG } else { #define ARG(X) obj.property(X).toInt32() r = ARG("red"); g = ARG("green"); b = ARG("blue"); #undef ARG QScriptValue av( obj.property("alpha") ); if( ! av.isUndefined() ) { a = av.toNumber(); } } QColor c( r, g, b ); if( a <= 1.0 ) c.setAlphaF(a); else c.setAlpha( int(a) ); return c; }
void tst_QScriptClass::newInstance() { QScriptEngine eng; TestClass cls(&eng); QScriptValue obj1 = eng.newObject(&cls); QVERIFY(!obj1.data().isValid()); QVERIFY(obj1.prototype().strictlyEquals(cls.prototype())); QCOMPARE(obj1.toString(), QString::fromLatin1("[object TestClass]")); QCOMPARE(obj1.scriptClass(), (QScriptClass*)&cls); QScriptValue num(&eng, 456); QScriptValue obj2 = eng.newObject(&cls, num); QVERIFY(obj2.data().strictlyEquals(num)); QVERIFY(obj2.prototype().strictlyEquals(cls.prototype())); QCOMPARE(obj2.scriptClass(), (QScriptClass*)&cls); QScriptValue obj3 = eng.newObject(); QCOMPARE(obj3.scriptClass(), (QScriptClass*)0); obj3.setScriptClass(&cls); QCOMPARE(obj3.scriptClass(), (QScriptClass*)&cls); obj3.setScriptClass(0); QCOMPARE(obj3.scriptClass(), (QScriptClass*)0); obj3.setScriptClass(&cls); QCOMPARE(obj3.scriptClass(), (QScriptClass*)&cls); TestClass cls2(&eng); obj3.setScriptClass(&cls2); QCOMPARE(obj3.scriptClass(), (QScriptClass*)&cls2); // undefined behavior really, but shouldn't crash QScriptValue arr = eng.newArray(); QVERIFY(arr.isArray()); QCOMPARE(arr.scriptClass(), (QScriptClass*)0); arr.setScriptClass(&cls); QCOMPARE(arr.scriptClass(), (QScriptClass*)&cls); QVERIFY(!arr.isArray()); QVERIFY(arr.isObject()); }
void DynamicConnectionPageWindow::updateQueryPane() { QScriptValue val = scriptRunner.callFunction("getScript"); QString script; if(val.isArray()){ script = val.toVariant().toStringList().join("\n"); }else{ script = val.toString(); } editor->setPlainText(script); }
QVector<QUuid> qVectorQUuidFromScriptValue(const QScriptValue& array) { if (!array.isArray()) { return QVector<QUuid>(); } QVector<QUuid> newVector; int length = array.property("length").toInteger(); newVector.reserve(length); for (int i = 0; i < length; i++) { QString uuidAsString = array.property(i).toString(); QUuid fromString(uuidAsString); newVector << fromString; } return newVector; }
static QStringList toStringList(const QScriptValue &scriptValue) { if (scriptValue.isString()) { return QStringList(scriptValue.toString()); } else if (scriptValue.isArray()) { QStringList lst; int i = 0; forever { QScriptValue elem = scriptValue.property(i++); if (!elem.isValid()) break; lst.push_back(elem.toString()); } return lst; }
static QVariant convertValue(const QScriptValue& value) { if (value.isArray()) { QVariantList lst; int len = value.property("length").toUInt32(); for (int i = 0; i < len; ++i) { QScriptValue p = value.property(i); lst.append(convertValue(p)); } return lst; } else return value.toVariant(); }
QVector<float> qVectorFloatFromScriptValue(const QScriptValue& array) { if(!array.isArray()) { return QVector<float>(); } QVector<float> newVector; int length = array.property("length").toInteger(); newVector.reserve(length); for (int i = 0; i < length; i++) { if(array.property(i).isNumber()) { newVector << array.property(i).toNumber(); } } return newVector; }
static QScriptValue qmlsqldatabase_executeSql(QScriptContext *context, QScriptEngine *engine) { QSqlDatabase db = qscriptvalue_cast<QSqlDatabase>(context->thisObject()); QString sql = context->argument(0).toString(); QSqlQuery query(db); bool err = false; QScriptValue result; if (query.prepare(sql)) { if (context->argumentCount() > 1) { QScriptValue values = context->argument(1); if (values.isObject()) { if (values.isArray()) { int size = values.property(QLatin1String("length")).toInt32(); for (int i = 0; i < size; ++i) query.bindValue(i, values.property(i).toVariant()); } else { for (QScriptValueIterator it(values); it.hasNext();) { it.next(); query.bindValue(it.name(),it.value().toVariant()); } } } else { query.bindValue(0,values.toVariant()); } } if (query.exec()) { result = engine->newObject(); QDeclarativeScriptEngine *qmlengine = static_cast<QDeclarativeScriptEngine*>(engine); if (!qmlengine->sqlQueryClass) qmlengine->sqlQueryClass = new QDeclarativeSqlQueryScriptClass(engine); QScriptValue rows = engine->newObject(qmlengine->sqlQueryClass); rows.setData(engine->newVariant(qVariantFromValue(query))); rows.setProperty(QLatin1String("item"), engine->newFunction(qmlsqldatabase_item,1), QScriptValue::SkipInEnumeration); result.setProperty(QLatin1String("rows"),rows); result.setProperty(QLatin1String("rowsAffected"),query.numRowsAffected()); result.setProperty(QLatin1String("insertId"),query.lastInsertId().toString()); } else { err = true; } } else { err = true; } if (err) THROW_SQL(DATABASE_ERR,query.lastError().text()); return result; }
/** * parse returned JSON data * check if user has authorized * then update list */ void EksigatorWindow::parseJson(QByteArray result) { QScriptValue sc; QScriptEngine engine; sc = engine.evaluate(QString(result)); //flush lists while (!updatedTitles.isEmpty()) { updatedTitles.removeFirst(); } while (!notUpdatedTitles.isEmpty()) { notUpdatedTitles.removeFirst(); } if(!isAuthenticated(sc)) { QString loginError = trUtf8("Giriş başarısız, e-postanızı ve API anahtarınızı kontrol edin"); this->ui->statusBar->showMessage(loginError,5000); } else { this->ui->statusBar->clearMessage(); //traverse in object if (sc.isArray()) { QScriptValueIterator it(sc); while (it.hasNext()) { it.next(); QString itemStatus = it.value().property("status").toString(); QString itemLastId = it.value().property("lastId").toString(); QString itemTitle = it.value().property("title").toString(); if( itemStatus.toInt() == 1 ) { updatedTitles << itemTitle; } else { notUpdatedTitles << itemTitle; } } } } }
QString to_source_f_object::operator()( QScriptValue const & x ) const { if( ! x.isObject() ) return QString("undefined"); // should we return an empty string? if( x.isNull() ) return QString("null"); if( x.isFunction() ) return x.toString(); // QString("('[toSource() cannot handle functions]',null)"); if( scriptValList().contains(x) ) { return QString("('[toSource() skipping circular object reference!]',null)"); } scriptValList().append(x); QScriptValueIterator it( x ); QByteArray ba; QBuffer buf(&ba); // Note that we use QBuffer, instead of QDataStream because // writing to a QDataStream serializes in a custom binary format. :( // FIXME: replace this with QTextStream. buf.open(QIODevice::WriteOnly); bool isAr = x.isArray(); char const * opener = (isAr ? "[" : "{"); char const * closer = (isAr ? "]" : "}"); char const * sep = ","; buf.write(opener); while( it.hasNext() ) { it.next(); if(0) qDebug() << "to_source_object_f: child:"<<it.name(); QString sub; if( isAr ) { sub = toSource( it.value() ); } else { sub = QString("%1:%2"). arg(it.name()). arg( toSource( it.value() ) ); } buf.write( sub.toAscii().constData(), sub.size() ); if( it.hasNext() ) buf.write(sep); } buf.write(closer); buf.close(); scriptValList().removeAll(x); QString ret(ba); return ret; }
const QList<ParameterInfo>& RootNetworkValue::getParameterInfo() { if (isLoaded() && _parameterInfo.isEmpty()) { ScriptCache* cache = _program->getCache(); QScriptEngine* engine = cache->getEngine(); QScriptValue parameters = _value.property(cache->getParametersString()); if (parameters.isArray()) { int length = parameters.property(cache->getLengthString()).toInt32(); for (int i = 0; i < length; i++) { QScriptValue parameter = parameters.property(i); ParameterInfo info = { engine->toStringHandle(parameter.property(cache->getNameString()).toString()), QMetaType::type(parameter.property(cache->getTypeString()).toString().toUtf8().constData()) }; _parameterInfo.append(info); } } } return _parameterInfo; }
/*! \qmlmethod ListModel::insert(int index, jsobject dict) Adds a new item to the list model at position \a index, with the values in \a dict. \code fruitModel.insert(2, {"cost": 5.95, "name":"Pizza"}) \endcode The \a index must be to an existing item in the list, or one past the end of the list (equivalent to append). \sa set() append() */ void QDeclarativeListModel::insert(int index, const QScriptValue& valuemap) { if (!valuemap.isObject() || valuemap.isArray()) { qmlInfo(this) << tr("insert: value is not an object"); return; } if (index < 0 || index > count()) { qmlInfo(this) << tr("insert: index %1 out of range").arg(index); return; } bool ok = m_flat ? m_flat->insert(index, valuemap) : m_nested->insert(index, valuemap); if (ok && !inWorkerThread()) { emit itemsInserted(index, 1); emit countChanged(); } }
void tst_QScriptContext::backtrace() { QFETCH(QString, code); QFETCH(QStringList, expectedbacktrace); QScriptEngine eng; eng.globalObject().setProperty("bt", eng.newFunction(getBacktrace)); eng.globalObject().setProperty("custom_eval", eng.newFunction(custom_eval)); eng.globalObject().setProperty("custom_call", eng.newFunction(custom_call)); eng.globalObject().setProperty("native_recurse", eng.newFunction(native_recurse)); QString fileName = "testfile"; QScriptValue ret = eng.evaluate(code, fileName); QVERIFY(!eng.hasUncaughtException()); QVERIFY(ret.isArray()); QStringList slist = qscriptvalue_cast<QStringList>(ret); QCOMPARE(slist, expectedbacktrace); }
void ModelNode::setListValue(const QScriptValue& valuelist) { QScriptValueIterator it(valuelist); values.clear(); int size = valuelist.property(QLatin1String("length")).toInt32(); for (int i=0; i<size; i++) { ModelNode *value = new ModelNode; QScriptValue v = valuelist.property(i); if (v.isArray()) { value->isArray = true; value->setListValue(v); } else if (v.isObject()) { value->setObjectValue(v); } else { value->values << v.toVariant(); } values.append(qVariantFromValue(value)); } }