Atlas-Launcher/source/javascript/module/AtlasJsModule.cpp

47 lines
No EOL
1.4 KiB
C++

#include "AtlasJsModule.hpp"
#include <QJSEngine>
#include "debug/DebugJsModule.hpp"
#include "image/ImageJsModule.hpp"
AtlasJsModule::AtlasJsModule(QJSEngine* engine, QObject* parent) : QObject(parent) {
// set the engine
this->engine = engine;
// load the submodules
this->submodules[QStringLiteral("debug")] = std::make_shared<DebugJsModule>(this->engine);
this->submodules[QStringLiteral("image")] = std::make_shared<ImageJsModule>(this->engine);
}
QJSValue AtlasJsModule::require(const QString& name) {
std::shared_ptr<BaseJsModule> submodule;
try {
// get the submodule from its name
submodule = this->submodules.at(name);
} catch (const std::out_of_range&) {
// if not found, throw a Javascript error and return null
this->engine->throwError(
QJSValue::ReferenceError,
QStringLiteral("the module \"") + name + QStringLiteral("\" does not exist.")
);
return QJSValue(QJSPrimitiveNull());
}
// return the module as a new javascript object
return this->engine->newQObject(submodule.get());
}
QJSValueList AtlasJsModule::getVersion() {
// TODO(Faraphel): should be stored somewhere else.
// TODO(Faraphel): The type should implement an easy comparison system, if possible
QJSValueList version;
version.append(1);
version.append(0);
version.append(0);
return version;
}