diff options
author | Andy Nichols <andy.nichols@qt.io> | 2019-10-01 12:32:45 +0200 |
---|---|---|
committer | Andy Nichols <andy.nichols@qt.io> | 2019-10-02 12:52:07 +0200 |
commit | 6d85dc137cbfa338a7cc7570d2be4a2f7f201f1f (patch) | |
tree | 787af16a6f62ff093a2dd8d18ba45df19820f7db | |
parent | 176cc2bf7d703472365cf7501983c28e5c6bc891 (diff) |
Allow balsam to set plugin options via argumentsv5.14.0-beta1
Change-Id: I3dfc67ae11e8408fb172bc541515aced414a3ad7
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
-rw-r--r-- | src/assetimport/qssgassetimportmanager.cpp | 8 | ||||
-rw-r--r-- | src/assetimport/qssgassetimportmanager_p.h | 1 | ||||
-rw-r--r-- | tools/balsam/main.cpp | 72 |
3 files changed, 79 insertions, 2 deletions
diff --git a/src/assetimport/qssgassetimportmanager.cpp b/src/assetimport/qssgassetimportmanager.cpp index 8cd2ec5b..fb9e1475 100644 --- a/src/assetimport/qssgassetimportmanager.cpp +++ b/src/assetimport/qssgassetimportmanager.cpp @@ -125,4 +125,12 @@ QVariantMap QSSGAssetImportManager::getOptionsForFile(const QString &filename) return options; } +QHash<QString, QVariantMap> QSSGAssetImportManager::getAllOptions() const +{ + QHash<QString, QVariantMap> options; + for (const auto importer : m_assetImporters) + options.insert(importer->inputExtensions().join(':'), importer->importOptions()); + return options; +} + QT_END_NAMESPACE diff --git a/src/assetimport/qssgassetimportmanager_p.h b/src/assetimport/qssgassetimportmanager_p.h index c87ee04f..05e2a4a4 100644 --- a/src/assetimport/qssgassetimportmanager_p.h +++ b/src/assetimport/qssgassetimportmanager_p.h @@ -76,6 +76,7 @@ public: const QVariantMap &options = QVariantMap(), QString *error = nullptr); QVariantMap getOptionsForFile(const QString &filename); + QHash<QString, QVariantMap> getAllOptions() const; private: QVector<QSSGAssetImporter *> m_assetImporters; diff --git a/tools/balsam/main.cpp b/tools/balsam/main.cpp index ec0cb708..dd101b8b 100644 --- a/tools/balsam/main.cpp +++ b/tools/balsam/main.cpp @@ -34,12 +34,72 @@ #include <QtCore/QDebug> #include <QtCore/QVariant> +#include <QtCore/QJsonObject> + #include <QtQuick3DAssetImport/private/qssgassetimportmanager_p.h> + + +QVector<QCommandLineOption> generateCommandLineOptions(const QVariantMap &optionsMap) { + QJsonObject options = QJsonObject::fromVariantMap(optionsMap); + QVector<QCommandLineOption> commandLineOptions; + if (options.isEmpty() || !options.contains(QStringLiteral("options"))) + return commandLineOptions; + + QJsonObject optionsObject = options.value(QStringLiteral("options")).toObject(); + for (const QString &optionsKey : optionsObject.keys()) { + QJsonObject option = optionsObject.value(optionsKey).toObject(); + QString optionType = option.value(QStringLiteral("type")).toString(); + QString description = option.value(QStringLiteral("description")).toString(); + if (optionType == QStringLiteral("Boolean")) { + // boolean flags + commandLineOptions.append(QCommandLineOption(optionsKey, description)); + commandLineOptions.append(QCommandLineOption(QStringLiteral("disable-") + optionsKey)); + } else { + // value types + if (optionType == QStringLiteral("Real")) { + QString defaultValue = QString::number(option.value("value").toDouble()); + QCommandLineOption valueOption(optionsKey, description, optionsKey, defaultValue); + commandLineOptions.append(valueOption); + } + } + } + return commandLineOptions; +} + +QVariantMap processCommandLineOptions(const QCommandLineParser &cmdLineParser, + const QVariantMap &optionsMap) +{ + QJsonObject options = QJsonObject::fromVariantMap(optionsMap); + if (options.isEmpty() || !options.contains(QStringLiteral("options"))) + return optionsMap; + + QJsonObject optionsObject = options.value(QStringLiteral("options")).toObject(); + for (const QString &optionsKey : optionsObject.keys()) { + QJsonObject option = optionsObject.value(optionsKey).toObject(); + QString optionType = option.value(QStringLiteral("type")).toString(); + if (optionType == QStringLiteral("Boolean")) { + if (cmdLineParser.isSet(optionsKey)) + option["value"] = true; + else if (cmdLineParser.isSet(QStringLiteral("disable-") + optionsKey)) + option["value"] = false; + } else if (optionType == QStringLiteral("Real")) { + if (cmdLineParser.isSet(optionsKey)) + option["value"] = cmdLineParser.value(optionsKey).toDouble(); + } + // update values + optionsObject[optionsKey] = option; + } + options["options"] = optionsObject; + return optionsObject.toVariantMap(); +} + int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); + QSSGAssetImportManager assetImporter; + // Setup command line arguments QCommandLineParser cmdLineParser; cmdLineParser.addHelpOption(); @@ -48,6 +108,15 @@ int main(int argc, char *argv[]) QObject::tr("Sets the location to place the generated file(s). Default is the current directory"), QObject::tr("outputPath"), QDir::currentPath()); cmdLineParser.addOption(outputPathOption); + + // Get Plugin options + auto pluginOptions = assetImporter.getAllOptions(); + QVector<QCommandLineOption> cmdLineOptions; + for (const auto &options : pluginOptions.values()) + cmdLineOptions.append(generateCommandLineOptions(options)); + for (const auto &cmdLineOption : cmdLineOptions) + cmdLineParser.addOption(cmdLineOption); + cmdLineParser.process(app); QStringList assetFileNames = cmdLineParser.positionalArguments(); @@ -65,12 +134,11 @@ int main(int argc, char *argv[]) if (assetFileNames.isEmpty()) return 0; - QSSGAssetImportManager assetImporter; - // Convert each assetFile is possible for (const auto &assetFileName : assetFileNames) { QString errorString; QVariantMap options = assetImporter.getOptionsForFile(assetFileName); + options = processCommandLineOptions(cmdLineParser, options); if (assetImporter.importFile(assetFileName, outputDirectory, options, &errorString) != QSSGAssetImportManager::ImportState::Success) qWarning() << "Failed to import file with error: " << errorString; } |