mirror of https://github.com/mgba-emu/mgba.git
Scripting: Add reset menu opiton
This commit is contained in:
parent
b3476a997a
commit
e69be0cc6f
|
@ -273,7 +273,7 @@ static THREAD_ENTRY _mCoreThreadRun(void* context) {
|
|||
}
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
// startCallback could add a script context
|
||||
if (!scriptContext) {
|
||||
if (scriptContext != threadContext->scriptContext) {
|
||||
scriptContext = threadContext->scriptContext;
|
||||
if (scriptContext) {
|
||||
_mCoreThreadAddCallbacks(threadContext);
|
||||
|
@ -294,7 +294,7 @@ static THREAD_ENTRY _mCoreThreadRun(void* context) {
|
|||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
// resetCallback could add a script context
|
||||
if (!scriptContext) {
|
||||
if (scriptContext != threadContext->scriptContext) {
|
||||
scriptContext = threadContext->scriptContext;
|
||||
if (scriptContext) {
|
||||
_mCoreThreadAddCallbacks(threadContext);
|
||||
|
@ -351,7 +351,7 @@ static THREAD_ENTRY _mCoreThreadRun(void* context) {
|
|||
}
|
||||
}
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
if (!scriptContext) {
|
||||
if (scriptContext != threadContext->scriptContext) {
|
||||
scriptContext = threadContext->scriptContext;
|
||||
if (scriptContext) {
|
||||
_mCoreThreadAddCallbacks(threadContext);
|
||||
|
|
|
@ -13,10 +13,6 @@ using namespace QGBA;
|
|||
ScriptingController::ScriptingController(QObject* parent)
|
||||
: QObject(parent)
|
||||
{
|
||||
mScriptContextInit(&m_scriptContext);
|
||||
mScriptContextAttachStdlib(&m_scriptContext);
|
||||
mScriptContextRegisterEngines(&m_scriptContext);
|
||||
|
||||
m_logger.p = this;
|
||||
m_logger.log = [](mLogger* log, int, enum mLogLevel level, const char* format, va_list args) {
|
||||
Logger* logger = static_cast<Logger*>(log);
|
||||
|
@ -37,17 +33,7 @@ ScriptingController::ScriptingController(QObject* parent)
|
|||
}
|
||||
};
|
||||
|
||||
mScriptContextAttachLogger(&m_scriptContext, &m_logger);
|
||||
mScriptContextSetTextBufferFactory(&m_scriptContext, &ScriptingController::createTextBuffer, this);
|
||||
|
||||
HashTableEnumerate(&m_scriptContext.engines, [](const char* key, void* engine, void* context) {
|
||||
ScriptingController* self = static_cast<ScriptingController*>(context);
|
||||
self->m_engines[QString::fromUtf8(key)] = static_cast<mScriptEngineContext*>(engine);
|
||||
}, this);
|
||||
|
||||
if (m_engines.count() == 1) {
|
||||
m_activeEngine = *m_engines.begin();
|
||||
}
|
||||
init();
|
||||
}
|
||||
|
||||
ScriptingController::~ScriptingController() {
|
||||
|
@ -99,6 +85,18 @@ void ScriptingController::clearController() {
|
|||
m_controller.reset();
|
||||
}
|
||||
|
||||
void ScriptingController::reset() {
|
||||
CoreController::Interrupter interrupter(m_controller);
|
||||
mScriptContextDetachCore(&m_scriptContext);
|
||||
mScriptContextDeinit(&m_scriptContext);
|
||||
m_engines.clear();
|
||||
m_activeEngine = nullptr;
|
||||
init();
|
||||
if (m_controller && m_controller->hasStarted()) {
|
||||
mScriptContextAttachCore(&m_scriptContext, m_controller->thread()->core);
|
||||
}
|
||||
}
|
||||
|
||||
void ScriptingController::runCode(const QString& code) {
|
||||
VFileDevice vf(code.toUtf8());
|
||||
load(vf, "*prompt");
|
||||
|
@ -110,3 +108,21 @@ mScriptTextBuffer* ScriptingController::createTextBuffer(void* context) {
|
|||
emit self->textBufferCreated(buffer);
|
||||
return buffer->textBuffer();
|
||||
}
|
||||
|
||||
void ScriptingController::init() {
|
||||
mScriptContextInit(&m_scriptContext);
|
||||
mScriptContextAttachStdlib(&m_scriptContext);
|
||||
mScriptContextRegisterEngines(&m_scriptContext);
|
||||
|
||||
mScriptContextAttachLogger(&m_scriptContext, &m_logger);
|
||||
mScriptContextSetTextBufferFactory(&m_scriptContext, &ScriptingController::createTextBuffer, this);
|
||||
|
||||
HashTableEnumerate(&m_scriptContext.engines, [](const char* key, void* engine, void* context) {
|
||||
ScriptingController* self = static_cast<ScriptingController*>(context);
|
||||
self->m_engines[QString::fromUtf8(key)] = static_cast<mScriptEngineContext*>(engine);
|
||||
}, this);
|
||||
|
||||
if (m_engines.count() == 1) {
|
||||
m_activeEngine = *m_engines.begin();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,9 +42,12 @@ signals:
|
|||
|
||||
public slots:
|
||||
void clearController();
|
||||
void reset();
|
||||
void runCode(const QString& code);
|
||||
|
||||
private:
|
||||
void init();
|
||||
|
||||
static mScriptTextBuffer* createTextBuffer(void* context);
|
||||
|
||||
struct Logger : mLogger {
|
||||
|
|
|
@ -29,6 +29,7 @@ ScriptingView::ScriptingView(ScriptingController* controller, QWidget* parent)
|
|||
|
||||
connect(m_ui.buffers, &QListWidget::currentRowChanged, this, &ScriptingView::selectBuffer);
|
||||
connect(m_ui.load, &QAction::triggered, this, &ScriptingView::load);
|
||||
connect(m_ui.reset, &QAction::triggered, controller, &ScriptingController::reset);
|
||||
}
|
||||
|
||||
void ScriptingView::submitRepl() {
|
||||
|
|
|
@ -80,6 +80,7 @@
|
|||
<string>File</string>
|
||||
</property>
|
||||
<addaction name="load"/>
|
||||
<addaction name="reset"/>
|
||||
</widget>
|
||||
<addaction name="menuFile"/>
|
||||
</widget>
|
||||
|
@ -89,6 +90,11 @@
|
|||
<string>Load script...</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="reset">
|
||||
<property name="text">
|
||||
<string>&Reset</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
|
|
Loading…
Reference in New Issue