diff --git a/plugins/JSAPIExample/src/JSAPIExample.cpp b/plugins/JSAPIExample/src/JSAPIExample.cpp
index 1ac8d56fc5..f3947b2f4f 100644
--- a/plugins/JSAPIExample/src/JSAPIExample.cpp
+++ b/plugins/JSAPIExample/src/JSAPIExample.cpp
@@ -73,8 +73,9 @@ public:
// (as such this plugin class and its methods remain forward-compatible with other engines like QML's QJSEngine)
public slots:
- // returns a pretty-printed representation for logging eg: print(JSAPIExample)
- inline QString toString() const { return QString("[%1 version=%2]").arg(objectName()).arg(_version); }
+ // pretty-printed representation for logging eg: print(JSAPIExample)
+ // (note: Qt script engines automatically look for a ".toString" method on native classes when coercing values to strings)
+ QString toString() const { return QString("[%1 version=%2]").arg(objectName()).arg(_version); }
/**jsdoc
* Returns current microseconds (usecs) since Epoch. note: 1000usecs == 1ms
@@ -100,12 +101,16 @@ public slots:
}
return out;
}
+
/**jsdoc
* Example of returning a JS Array result
* @example
emulate Object.values(keyValues)
* print(JSON.stringify(JSAPIExample.values({ "a": 1, "b": 2 }))); // [1,2]
*/
- QVariant values(const QVariantMap& keyValues) const { return keyValues.values(); }
+ QVariant values(const QVariantMap& keyValues) const {
+ QVariantList values = keyValues.values();
+ return values;
+ }
/**jsdoc
* Another example of returning JS Array data
@@ -129,10 +134,14 @@ public slots:
* var u = JSAPIExample.qUncompressString(z); // u will be a String value
* print(JSON.stringify({ input: data, compressed: z.byteLength, output: u, uncompressed: u.length }));
*/
- QVariant qCompressString(const QString& data, int compress_level = -1) const {
- return qCompress(data.toUtf8(), compress_level);
+ QVariant qCompressString(const QString& jsString, int compress_level = -1) const {
+ QByteArray arrayBuffer = qCompress(jsString.toUtf8(), compress_level);
+ return arrayBuffer;
+ }
+ QVariant qUncompressString(const QByteArray& arrayBuffer) const {
+ QString jsString = QString::fromUtf8(qUncompress(arrayBuffer));
+ return jsString;
}
- QString qUncompressString(const QByteArray& data) const { return QString::fromUtf8(qUncompress(data)); }
/**
* Example of exposing a custom "managed" C++ QObject to JS
@@ -149,12 +158,13 @@ public slots:
*/
QScriptValue getScopedSettings(const QString& scope) {
auto engine = QScriptable::engine();
- if (!engine) return QScriptValue::NullValue;
+ if (!engine)
+ return QScriptValue::NullValue;
QString error;
auto cppValue = createScopedSettings(scope, engine, error);
if (!cppValue) {
- raiseScriptingError(context(), "error creating scoped settings instance: " + error);
- return QScriptValue::NullValue;
+ raiseScriptingError(context(), "error creating scoped settings instance: " + error);
+ return QScriptValue::NullValue;
}
return engine->newQObject(cppValue, QScriptEngine::ScriptOwnership, QScriptEngine::ExcludeDeleteLater);
}
@@ -163,7 +173,6 @@ private:
const QString _version{ JSAPI_SEMANTIC_VERSION };
};
-// Example of how to create a QObject class that can have multiple instances created from the JS side
// JSSettingsHelper emulates a subset of QSetting APIs:
// fileName() -- full path to the scoped settings .json file
// allKeys() -- all previously stored keys available in the scoped settings file
@@ -204,6 +213,7 @@ protected:
}
};
+// verifies the requested scope is sensible and creates/returns a scoped JSSettingsHelper instance
QObject* createScopedSettings(const QString& scope, QObject* parent, QString& error) {
const QRegExp VALID_SETTINGS_SCOPE{ "[-_A-Za-z0-9]{1,64}" };
if (!VALID_SETTINGS_SCOPE.exactMatch(scope)) {