diff --git a/src/drivers/Qt/ConsoleWindow.cpp b/src/drivers/Qt/ConsoleWindow.cpp index fc324712..bcc49353 100644 --- a/src/drivers/Qt/ConsoleWindow.cpp +++ b/src/drivers/Qt/ConsoleWindow.cpp @@ -1096,10 +1096,10 @@ void consoleWin_t::createMainMenu(void) loadLuaAct = nullptr; #endif -#ifdef _S9XLUA_H - // File -> Load QScript - loadJsAct = new QAction(tr("Load &Qt Script"), this); - loadJsAct->setStatusTip(tr("Load Qt Script")); +#ifdef __FCEU_QSCRIPT_ENABLE__ + // File -> Load JavaScript + loadJsAct = new QAction(tr("Load &JavaScript"), this); + loadJsAct->setStatusTip(tr("Load JavaScript")); connect(loadJsAct, SIGNAL(triggered()), this, SLOT(loadJs(void)) ); fileMenu->addAction(loadJsAct); diff --git a/src/drivers/Qt/QtScriptManager.cpp b/src/drivers/Qt/QtScriptManager.cpp index d2c3c2d2..71044f06 100644 --- a/src/drivers/Qt/QtScriptManager.cpp +++ b/src/drivers/Qt/QtScriptManager.cpp @@ -29,6 +29,7 @@ #endif #include +#include #include #include #include @@ -184,6 +185,15 @@ bool JoypadScriptObject::buttonChanged(enum Button b) return hasChanged; } //---------------------------------------------------- +Q_INVOKABLE void JoypadScriptObject::ovrdResetAll() +{ + for (int i=0; ithrowError(QJSValue::GenericError, "No movie loaded."); + } + return FCEUI_GetMovieLength(); +} +//---------------------------------------------------- +int MovieScriptObject::rerecordCount() +{ + if (!FCEUMOV_IsRecording() && !FCEUMOV_IsPlaying() && !FCEUMOV_Mode(MOVIEMODE_TASEDITOR)) + { + script->throwError(QJSValue::GenericError, "No movie loaded."); + } + return FCEUI_GetMovieRerecordCount(); +} +//---------------------------------------------------- +QString MovieScriptObject::getFilepath() +{ + if (!FCEUMOV_IsRecording() && !FCEUMOV_IsPlaying() && !FCEUMOV_Mode(MOVIEMODE_TASEDITOR)) + { + script->throwError(QJSValue::GenericError, "No movie loaded."); + } + return QString::fromStdString(FCEUI_GetMovieName()); +} +//---------------------------------------------------- +QString MovieScriptObject::getFilename() +{ + if (!FCEUMOV_IsRecording() && !FCEUMOV_IsPlaying() && !FCEUMOV_Mode(MOVIEMODE_TASEDITOR)) + { + script->throwError(QJSValue::GenericError, "No movie loaded."); + } + QFileInfo fi( QString::fromStdString(FCEUI_GetMovieName()) ); + return fi.fileName(); +} +//---------------------------------------------------- +bool MovieScriptObject::skipRerecords = false; +//---------------------------------------------------- +void MovieScriptObject::rerecordCounting(bool counting) +{ + skipRerecords = counting; +} +//---------------------------------------------------- +bool MovieScriptObject::play(const QString& filename, bool readOnly, int pauseFrame) +{ + if (pauseFrame < 0) pauseFrame = 0; + + // Load it! + bool loaded = FCEUI_LoadMovie(filename.toLocal8Bit().data(), readOnly, pauseFrame); + + return loaded; +} +//---------------------------------------------------- bool MovieScriptObject::record(const QString& filename, int saveType, const QString author) { if (filename.isEmpty()) @@ -1751,6 +1866,7 @@ bool QtScriptInstance::onGuiThread() int QtScriptInstance::throwError(QJSValue::ErrorType errorType, const QString &message) { running = false; + mem->reset(); engine->throwError(errorType, message); return 0; } @@ -2075,6 +2191,13 @@ void QtScriptManager::removeScriptInstance(QtScriptInstance* script) it++; } } + + // If no scripts are loaded, reset globals + if (scriptList.size() == 0) + { + JS::MovieScriptObject::skipRerecords = false; + JS::JoypadScriptObject::ovrdResetAll(); + } } //---------------------------------------------------- void QtScriptManager::frameBeginUpdate() @@ -2713,6 +2836,11 @@ void QScriptDialog_t::logOutput(const QString& text) } } //---------------------------------------------------- +bool FCEU_JSRerecordCountSkip() +{ + return JS::MovieScriptObject::skipRerecords; +} +//---------------------------------------------------- uint8_t FCEU_JSReadJoypad(int which, uint8_t joyl) { return JS::JoypadScriptObject::readOverride(which, joyl); diff --git a/src/drivers/Qt/QtScriptManager.h b/src/drivers/Qt/QtScriptManager.h index 66199274..3e746561 100644 --- a/src/drivers/Qt/QtScriptManager.h +++ b/src/drivers/Qt/QtScriptManager.h @@ -270,14 +270,7 @@ public slots: jsOverrideMask2[player] = 0x00; } - Q_INVOKABLE void ovrdResetAll() - { - for (int i=0; i> ((which - 1) * 8); @@ -6738,7 +6738,7 @@ uint8 FCEU_LuaReadJoypad(int which, uint8 joyl) { * * This function will not return true if a script is not running. */ -int FCEU_LuaRerecordCountSkip() { +bool FCEU_LuaRerecordCountSkip() { // FIXME: return true if (there are any active callback functions && skipRerecords) return L && luaRunning && skipRerecords; } diff --git a/src/movie.cpp b/src/movie.cpp index f3d422db..3bee0e4a 100644 --- a/src/movie.cpp +++ b/src/movie.cpp @@ -1645,18 +1645,20 @@ bool FCEUMOV_PostLoad(void) void FCEUMOV_IncrementRerecordCount() { + bool skip = false; #ifdef _S9XLUA_H - if(!FCEU_LuaRerecordCountSkip()) + skip = skip || FCEU_LuaRerecordCountSkip(); +#endif +#ifdef __FCEU_QSCRIPT_ENABLE__ + extern bool FCEU_JSRerecordCountSkip(); + skip = skip || FCEU_JSRerecordCountSkip(); +#endif + + if(!skip) if (movieMode != MOVIEMODE_TASEDITOR) currRerecordCount++; else currMovieData.rerecordCount++; -#else - if (movieMode != MOVIEMODE_TASEDITOR) - currRerecordCount++; - else - currMovieData.rerecordCount++; -#endif if (movieMode != MOVIEMODE_TASEDITOR) currMovieData.rerecordCount = currRerecordCount; }