mirror of https://github.com/mgba-emu/mgba.git
Qt: Add load/saveState VFile functions, flags parameter to explicit state functions
This commit is contained in:
parent
4d3f9389e9
commit
d70be08dd1
|
@ -509,8 +509,12 @@ void CoreController::loadState(int slot) {
|
|||
});
|
||||
}
|
||||
|
||||
void CoreController::loadState(const QString& path) {
|
||||
void CoreController::loadState(const QString& path, int flags) {
|
||||
m_statePath = path;
|
||||
int savedFlags = m_loadStateFlags;
|
||||
if (flags != -1) {
|
||||
m_loadStateFlags = flags;
|
||||
}
|
||||
mCoreThreadRunFunction(&m_threadContext, [](mCoreThread* context) {
|
||||
CoreController* controller = static_cast<CoreController*>(context->userData);
|
||||
VFile* vf = VFileDevice::open(controller->m_statePath, O_RDONLY);
|
||||
|
@ -527,6 +531,35 @@ void CoreController::loadState(const QString& path) {
|
|||
}
|
||||
vf->close(vf);
|
||||
});
|
||||
m_loadStateFlags = savedFlags;
|
||||
}
|
||||
|
||||
void CoreController::loadState(QIODevice* iodev, int flags) {
|
||||
m_stateVf = VFileDevice::wrap(iodev, QIODevice::ReadOnly);
|
||||
if (!m_stateVf) {
|
||||
return;
|
||||
}
|
||||
int savedFlags = m_loadStateFlags;
|
||||
if (flags != -1) {
|
||||
m_loadStateFlags = flags;
|
||||
}
|
||||
mCoreThreadRunFunction(&m_threadContext, [](mCoreThread* context) {
|
||||
CoreController* controller = static_cast<CoreController*>(context->userData);
|
||||
VFile* vf = controller->m_stateVf;
|
||||
if (!vf) {
|
||||
return;
|
||||
}
|
||||
if (!controller->m_backupLoadState.isOpen()) {
|
||||
controller->m_backupLoadState = VFileDevice::openMemory();
|
||||
}
|
||||
mCoreSaveStateNamed(context->core, controller->m_backupLoadState, controller->m_saveStateFlags);
|
||||
if (mCoreLoadStateNamed(context->core, vf, controller->m_loadStateFlags)) {
|
||||
emit controller->frameAvailable();
|
||||
emit controller->stateLoaded();
|
||||
}
|
||||
vf->close(vf);
|
||||
});
|
||||
m_loadStateFlags = savedFlags;
|
||||
}
|
||||
|
||||
void CoreController::saveState(int slot) {
|
||||
|
@ -545,8 +578,12 @@ void CoreController::saveState(int slot) {
|
|||
});
|
||||
}
|
||||
|
||||
void CoreController::saveState(const QString& path) {
|
||||
void CoreController::saveState(const QString& path, int flags) {
|
||||
m_statePath = path;
|
||||
int savedFlags = m_saveStateFlags;
|
||||
if (flags != -1) {
|
||||
m_saveStateFlags = flags;
|
||||
}
|
||||
mCoreThreadRunFunction(&m_threadContext, [](mCoreThread* context) {
|
||||
CoreController* controller = static_cast<CoreController*>(context->userData);
|
||||
VFile* vf = VFileDevice::open(controller->m_statePath, O_RDONLY);
|
||||
|
@ -562,6 +599,28 @@ void CoreController::saveState(const QString& path) {
|
|||
mCoreSaveStateNamed(context->core, vf, controller->m_saveStateFlags);
|
||||
vf->close(vf);
|
||||
});
|
||||
m_saveStateFlags = savedFlags;
|
||||
}
|
||||
|
||||
void CoreController::saveState(QIODevice* iodev, int flags) {
|
||||
m_stateVf = VFileDevice::wrap(iodev, QIODevice::WriteOnly | QIODevice::Truncate);
|
||||
if (!m_stateVf) {
|
||||
return;
|
||||
}
|
||||
int savedFlags = m_saveStateFlags;
|
||||
if (flags != -1) {
|
||||
m_saveStateFlags = flags;
|
||||
}
|
||||
mCoreThreadRunFunction(&m_threadContext, [](mCoreThread* context) {
|
||||
CoreController* controller = static_cast<CoreController*>(context->userData);
|
||||
VFile* vf = controller->m_stateVf;
|
||||
if (!vf) {
|
||||
return;
|
||||
}
|
||||
mCoreSaveStateNamed(context->core, vf, controller->m_saveStateFlags);
|
||||
vf->close(vf);
|
||||
});
|
||||
m_saveStateFlags = savedFlags;
|
||||
}
|
||||
|
||||
void CoreController::loadBackupState() {
|
||||
|
|
|
@ -120,9 +120,11 @@ public slots:
|
|||
void forceFastForward(bool);
|
||||
|
||||
void loadState(int slot = 0);
|
||||
void loadState(const QString& path);
|
||||
void loadState(const QString& path, int flags = -1);
|
||||
void loadState(QIODevice* iodev, int flags = -1);
|
||||
void saveState(int slot = 0);
|
||||
void saveState(const QString& path);
|
||||
void saveState(const QString& path, int flags = -1);
|
||||
void saveState(QIODevice* iodev, int flags = -1);
|
||||
void loadBackupState();
|
||||
void saveBackupState();
|
||||
|
||||
|
@ -225,6 +227,7 @@ private:
|
|||
QByteArray m_backupSaveState{nullptr};
|
||||
int m_stateSlot = 1;
|
||||
QString m_statePath;
|
||||
VFile* m_stateVf;
|
||||
int m_loadStateFlags;
|
||||
int m_saveStateFlags;
|
||||
|
||||
|
|
Loading…
Reference in New Issue