ConsoleItem *constructLogItemTree(ConsoleItem *parent, const QVariant &result, const QString &key = QString()) { if (!result.isValid()) return 0; ConsoleItem *item = new ConsoleItem(parent); if (result.type() == QVariant::Map) { if (key.isEmpty()) item->setText(QLatin1String("Object")); else item->setText(key + QLatin1String(" : Object")); QMapIterator<QString, QVariant> i(result.toMap()); while (i.hasNext()) { i.next(); ConsoleItem *child = constructLogItemTree(item, i.value(), i.key()); if (child) item->insertChild(child, true); } } else if (result.type() == QVariant::List) { if (key.isEmpty()) item->setText(QLatin1String("List")); else item->setText(QString(QLatin1String("[%1] : List")).arg(key)); QVariantList resultList = result.toList(); for (int i = 0; i < resultList.count(); i++) { ConsoleItem *child = constructLogItemTree(item, resultList.at(i), QString::number(i)); if (child) item->insertChild(child, true); } } else if (result.canConvert(QVariant::String)) { item->setText(result.toString()); } else { item->setText(QLatin1String("Unknown Value")); } return item; }
void QmlConsoleModel::evaluate(const QString &expression) { QmlConsoleManager *manager = qobject_cast<QmlConsoleManager *>(QmlConsoleManager::instance()); if (manager) { if (manager->d->scriptEvaluator) { QmlConsoleModel::qmlConsoleItemModel()->appendEditableRow(); manager->d->scriptEvaluator->evaluateScript(expression); } else { QVariant result = manager->d->scriptEngine->evaluate(expression).toVariant(); ConsoleItem *root = manager->rootItem(); ConsoleItem *item = constructLogItemTree(root, result); if (item) { QmlConsoleModel::qmlConsoleItemModel()->appendEditableRow(); manager->printToConsolePane(item); } } } }
void QmlConsoleModel::evaluate(const QString &expression) { QmlConsoleManager *manager = qobject_cast<QmlConsoleManager *>(QmlConsoleManager::instance()); if (manager) { if (manager->d->scriptEvaluator) { QmlConsoleModel::qmlConsoleItemModel()->appendEditableRow(); manager->d->scriptEvaluator->evaluateScript(expression); } else { ConsoleItem *root = manager->rootItem(); ConsoleItem *item = constructLogItemTree( root, QCoreApplication::translate("QmlJSTools::Internal::QmlConsoleModel", "Can only evaluate during a QML debug session.")); if (item) { QmlConsoleModel::qmlConsoleItemModel()->appendEditableRow(); manager->printToConsolePane(item); } } } }