Qt: Add scripting storage integration

This commit is contained in:
Vicki Pfau 2023-02-05 21:20:27 -08:00
parent 63d96ab712
commit f3d49527b7
2 changed files with 16 additions and 0 deletions

View File

@ -20,6 +20,7 @@
#include "scripting/ScriptingTextBufferModel.h" #include "scripting/ScriptingTextBufferModel.h"
#include <mgba/script/input.h> #include <mgba/script/input.h>
#include <mgba/script/storage.h>
#include <mgba-util/math.h> #include <mgba-util/math.h>
#include <mgba-util/string.h> #include <mgba-util/string.h>
@ -51,6 +52,9 @@ ScriptingController::ScriptingController(QObject* parent)
m_bufferModel = new ScriptingTextBufferModel(this); m_bufferModel = new ScriptingTextBufferModel(this);
QObject::connect(m_bufferModel, &ScriptingTextBufferModel::textBufferCreated, this, &ScriptingController::textBufferCreated); QObject::connect(m_bufferModel, &ScriptingTextBufferModel::textBufferCreated, this, &ScriptingController::textBufferCreated);
connect(&m_storageFlush, &QTimer::timeout, this, &ScriptingController::flushStorage);
m_storageFlush.setInterval(5);
mScriptGamepadInit(&m_gamepad); mScriptGamepadInit(&m_gamepad);
init(); init();
@ -144,6 +148,10 @@ void ScriptingController::runCode(const QString& code) {
load(vf, "*prompt"); load(vf, "*prompt");
} }
void ScriptingController::flushStorage() {
mScriptStorageFlushAll(&m_scriptContext);
}
bool ScriptingController::eventFilter(QObject* obj, QEvent* ev) { bool ScriptingController::eventFilter(QObject* obj, QEvent* ev) {
event(obj, ev); event(obj, ev);
return false; return false;
@ -293,6 +301,7 @@ void ScriptingController::detachGamepad() {
void ScriptingController::init() { void ScriptingController::init() {
mScriptContextInit(&m_scriptContext); mScriptContextInit(&m_scriptContext);
mScriptContextAttachStdlib(&m_scriptContext); mScriptContextAttachStdlib(&m_scriptContext);
mScriptContextAttachStorage(&m_scriptContext);
mScriptContextAttachSocket(&m_scriptContext); mScriptContextAttachSocket(&m_scriptContext);
mScriptContextAttachInput(&m_scriptContext); mScriptContextAttachInput(&m_scriptContext);
mScriptContextRegisterEngines(&m_scriptContext); mScriptContextRegisterEngines(&m_scriptContext);
@ -308,6 +317,8 @@ void ScriptingController::init() {
if (m_engines.count() == 1) { if (m_engines.count() == 1) {
m_activeEngine = *m_engines.begin(); m_activeEngine = *m_engines.begin();
} }
m_storageFlush.start();
} }
uint32_t ScriptingController::qtToScriptingKey(const QKeyEvent* event) { uint32_t ScriptingController::qtToScriptingKey(const QKeyEvent* event) {

View File

@ -7,6 +7,7 @@
#include <QHash> #include <QHash>
#include <QObject> #include <QObject>
#include <QTimer>
#include <mgba/script/context.h> #include <mgba/script/context.h>
#include <mgba/script/input.h> #include <mgba/script/input.h>
@ -55,6 +56,8 @@ public slots:
void reset(); void reset();
void runCode(const QString& code); void runCode(const QString& code);
void flushStorage();
protected: protected:
bool eventFilter(QObject*, QEvent*) override; bool eventFilter(QObject*, QEvent*) override;
@ -84,6 +87,8 @@ private:
std::shared_ptr<CoreController> m_controller; std::shared_ptr<CoreController> m_controller;
InputController* m_inputController = nullptr; InputController* m_inputController = nullptr;
QTimer m_storageFlush;
}; };
} }