porymap/include/scripting.h

74 lines
2.4 KiB
C
Raw Normal View History

2020-09-13 23:37:55 +01:00
#pragma once
#ifndef SCRIPTING_H
#define SCRIPTING_H
#include "mainwindow.h"
#include "block.h"
2022-09-05 17:17:27 +01:00
#include "scriptutility.h"
#include <QStringList>
#include <QJSEngine>
enum CallbackType {
2020-05-03 17:28:02 +01:00
OnProjectOpened,
OnProjectClosed,
OnBlockChanged,
OnBorderMetatileChanged,
OnBlockHoverChanged,
OnBlockHoverCleared,
OnMapOpened,
OnMapResized,
OnBorderResized,
2021-12-10 21:09:06 +00:00
OnMapShifted,
OnTilesetUpdated,
2021-12-10 21:52:17 +00:00
OnMainTabChanged,
OnMapViewTabChanged,
2022-08-30 17:53:33 +01:00
OnBorderVisibilityToggled,
};
class Scripting
{
public:
Scripting(MainWindow *mainWindow);
static void init(MainWindow *mainWindow);
2022-09-05 04:41:42 +01:00
static void populateGlobalObject(MainWindow *mainWindow);
static QJSEngine *getEngine();
static void invokeAction(int actionIndex);
2020-05-03 17:28:02 +01:00
static void cb_ProjectOpened(QString projectPath);
static void cb_ProjectClosed(QString projectPath);
static void cb_MetatileChanged(int x, int y, Block prevBlock, Block newBlock);
static void cb_BorderMetatileChanged(int x, int y, uint16_t prevMetatileId, uint16_t newMetatileId);
static void cb_BlockHoverChanged(int x, int y);
static void cb_BlockHoverCleared();
static void cb_MapOpened(QString mapName);
static void cb_MapResized(int oldWidth, int oldHeight, int newWidth, int newHeight);
static void cb_BorderResized(int oldWidth, int oldHeight, int newWidth, int newHeight);
2021-12-10 21:09:06 +00:00
static void cb_MapShifted(int xDelta, int yDelta);
static void cb_TilesetUpdated(QString tilesetName);
2021-12-10 21:52:17 +00:00
static void cb_MainTabChanged(int oldTab, int newTab);
static void cb_MapViewTabChanged(int oldTab, int newTab);
2022-08-30 17:53:33 +01:00
static void cb_BorderVisibilityToggled(bool visible);
2021-11-20 03:32:14 +00:00
static bool tryErrorJS(QJSValue js);
2022-09-05 04:41:42 +01:00
static QJSValue fromBlock(Block block);
static QJSValue fromTile(Tile tile);
static Tile toTile(QJSValue obj);
static QJSValue version(QList<int> versionNums);
static QJSValue dimensions(int width, int height);
static QJSValue position(int x, int y);
static const QImage * getImage(const QString &filepath, bool useCache);
2022-09-05 04:41:42 +01:00
static QJSValue dialogInput(QJSValue input, bool selectedOk);
private:
2023-02-09 16:28:55 +00:00
MainWindow *mainWindow;
QJSEngine *engine;
QStringList filepaths;
QList<QJSValue> modules;
2021-12-07 19:44:40 +00:00
QMap<QString, const QImage*> imageCache;
ScriptUtility *scriptUtility;
void loadModules(QStringList moduleFiles);
void invokeCallback(CallbackType type, QJSValueList args);
};
#endif // SCRIPTING_H