#if __has_include() #include #include "scripting.h" #include "log.h" #include "config.h" #include "mainwindow.h" const QMap callbackFunctions = { {OnProjectOpened, "onProjectOpened"}, {OnProjectClosed, "onProjectClosed"}, {OnBlockChanged, "onBlockChanged"}, {OnBorderMetatileChanged, "onBorderMetatileChanged"}, {OnBlockHoverChanged, "onBlockHoverChanged"}, {OnBlockHoverCleared, "onBlockHoverCleared"}, {OnMapOpened, "onMapOpened"}, {OnLayoutOpened, "onLayoutOpened"}, {OnMapResized, "onMapResized"}, {OnBorderResized, "onBorderResized"}, {OnMapShifted, "onMapShifted"}, {OnTilesetUpdated, "onTilesetUpdated"}, {OnMainTabChanged, "onMainTabChanged"}, {OnMapViewTabChanged, "onMapViewTabChanged"}, {OnBorderVisibilityToggled, "onBorderVisibilityToggled"}, }; Scripting *instance = nullptr; void Scripting::stop() { delete instance; instance = nullptr; } void Scripting::init(MainWindow *mainWindow) { Scripting::stop(); instance = new Scripting(mainWindow); } Scripting::Scripting(MainWindow *mainWindow) { this->mainWindow = mainWindow; this->engine = new QJSEngine(); this->engine->installExtensions(QJSEngine::ConsoleExtension); const QStringList paths = userConfig.getCustomScriptPaths(); const QList enabled = userConfig.getCustomScriptsEnabled(); for (int i = 0; i < paths.length(); i++) { if (enabled.value(i, true)) loadScript(paths.at(i)); } this->scriptUtility = new ScriptUtility(mainWindow); } Scripting::~Scripting() { if (mainWindow) mainWindow->clearOverlay(); this->engine->setInterrupted(true); qDeleteAll(this->imageCache); this->scripts.clear(); this->scriptExecutionStack.clear(); delete this->engine; delete this->scriptUtility; } void Scripting::loadScript(const QString &filepath) { if (filepath.isEmpty()) return; auto script = QSharedPointer