aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Nichols <andy.nichols@qt.io>2019-10-01 12:32:45 +0200
committerAndy Nichols <andy.nichols@qt.io>2019-10-02 12:52:07 +0200
commit6d85dc137cbfa338a7cc7570d2be4a2f7f201f1f (patch)
tree787af16a6f62ff093a2dd8d18ba45df19820f7db
parent176cc2bf7d703472365cf7501983c28e5c6bc891 (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.cpp8
-rw-r--r--src/assetimport/qssgassetimportmanager_p.h1
-rw-r--r--tools/balsam/main.cpp72
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;
}