From 9324ef6eb1b67cfb90a00c87793e29f4ee32366f Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Tue, 15 Sep 2015 11:30:47 +0200 Subject: [PATCH] JsonWizard: Allow object or list of objects for "options" This is compatible with the existing wizards and makes writing a wizard a tiny bit simpler and more consistent. Change-Id: I72c6f858f337552fe2495a16beff17cdf0cce66d Reviewed-by: Orgad Shaneh --- .../jsonwizard/jsonwizardfactory.cpp | 43 +++++++++---------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp index 42f7aebd0f1..f4370132d86 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp @@ -625,29 +625,28 @@ bool JsonWizardFactory::initialize(const QVariantMap &data, const QDir &baseDir, setFlags(flags); // Options: - QVariant optionValue = data.value(QLatin1String(OPTIONS_KEY)); - if (optionValue.type() == QVariant::List) { - foreach (const QVariant &v, optionValue.toList()) { - if (v.type() != QVariant::Map) { - *errorMessage = tr("List element of \"options\" is not an object."); - return false; - } - QVariantMap data = v.toMap(); - const QString key = data.value(QStringLiteral("key"), QString()).toString(); - const QString value = data.value(QStringLiteral("value"), QString()).toString(); - if (key.isEmpty()) { - *errorMessage = tr("No \"key\" given for entry in \"options\"."); - return false; - } - if (m_options.contains(key)) { - *errorMessage = tr("When parsing \"options\": Key \"%1\" set more than once.").arg(key); - return false; - } - m_options.insert(key, value); - } - } else if (optionValue.isValid()) { - *errorMessage = tr("Value for \"options\" is not a list."); + const QVariant optionValue = data.value(QLatin1String(OPTIONS_KEY)); + const QVariantList optionList = objectOrList(optionValue, errorMessage); + if (optionList.isEmpty()) return false; + + foreach (const QVariant &v, optionList) { + if (v.type() != QVariant::Map) { + *errorMessage = tr("List element of \"options\" is not an object."); + return false; + } + QVariantMap data = v.toMap(); + const QString key = data.value(QStringLiteral("key"), QString()).toString(); + const QString value = data.value(QStringLiteral("value"), QString()).toString(); + if (key.isEmpty()) { + *errorMessage = tr("No \"key\" given for entry in \"options\"."); + return false; + } + if (m_options.contains(key)) { + *errorMessage = tr("When parsing \"options\": Key \"%1\" set more than once.").arg(key); + return false; + } + m_options.insert(key, value); } return true;