Better enum registration

This commit is contained in:
Dale Glass 2020-09-07 18:57:05 +02:00
parent c65cc9570d
commit 26bcaa420d
3 changed files with 24 additions and 7 deletions

View file

@ -7537,13 +7537,7 @@ void Application::registerScriptEngineWithApplicationServices(const ScriptEngine
scriptEngine->registerGlobalObject("HifiAbout", AboutUtil::getInstance()); // Deprecated.
scriptEngine->registerGlobalObject("ResourceRequestObserver", DependencyManager::get<ResourceRequestObserver>().data());
// This is obviously wrong -- FIXME!
scriptEngine->registerValue("Bucket.Public", static_cast<int>(ExternalResource::Bucket::Public));
scriptEngine->registerValue("Bucket.Content", static_cast<int>(ExternalResource::Bucket::Content));
scriptEngine->registerValue("Bucket.MPAssets", static_cast<int>(ExternalResource::Bucket::MPAssets));
scriptEngine->registerValue("Bucket.Assets", static_cast<int>(ExternalResource::Bucket::Assets));
scriptEngine->registerEnum("Bucket", QMetaEnum::fromType<ExternalResource::Bucket>());
scriptEngine->registerGlobalObject("ExternalResource", ExternalResource::getInstance());
registerInteractiveWindowMetaType(scriptEngine.data());

View file

@ -827,6 +827,19 @@ void ScriptEngine::init() {
}));
}
void ScriptEngine::registerEnum(const QString& enumName, QMetaEnum newEnum) {
if (!newEnum.isValid()) {
qCCritical(scriptengine) << "registerEnum called on invalid enum with name " << enumName;
return;
}
for(int i=0;i<newEnum.keyCount();i++) {
const char *keyName = newEnum.key(i);
QString fullName = enumName + "." + keyName;
registerValue(fullName, newEnum.keyToValue(keyName));
}
}
void ScriptEngine::registerValue(const QString& valueName, QScriptValue value) {
if (QThread::currentThread() != thread()) {
#ifdef THREAD_DEBUGGING

View file

@ -20,6 +20,7 @@
#include <QtCore/QSet>
#include <QtCore/QWaitCondition>
#include <QtCore/QStringList>
#include <QMetaEnum>
#include <QtScript/QScriptEngine>
@ -230,6 +231,15 @@ public:
Q_INVOKABLE void registerFunction(const QString& parent, const QString& name, QScriptEngine::FunctionSignature fun,
int numArguments = -1);
/**jsdoc
* @function Script.registerEnum
* @param {string} enumName - Name.
* @param {object} newEnum - Enumeration to be added
* @deprecated This function is deprecated and will be removed.
*/
/// registers a global enum
Q_INVOKABLE void registerEnum(const QString& enumName, QMetaEnum newEnum);
/**jsdoc
* @function Script.registerValue
* @param {string} name - Name.