Added state recorder config dialogs to Qt GUI that prompt user to apply selected settings and to restart recorder for changes to take effect.
This commit is contained in:
parent
47f795b04b
commit
4cb6d97183
|
@ -27,6 +27,7 @@
|
||||||
#include <QCloseEvent>
|
#include <QCloseEvent>
|
||||||
#include <QGridLayout>
|
#include <QGridLayout>
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
|
#include <QMessageBox>
|
||||||
|
|
||||||
#include "Qt/throttle.h"
|
#include "Qt/throttle.h"
|
||||||
#include "Qt/fceuWrapper.h"
|
#include "Qt/fceuWrapper.h"
|
||||||
|
@ -305,36 +306,89 @@ void StateRecorderDialog_t::closeEvent(QCloseEvent *event)
|
||||||
{
|
{
|
||||||
QSettings settings;
|
QSettings settings;
|
||||||
settings.setValue("stateRecorderWindow/geometry", saveGeometry());
|
settings.setValue("stateRecorderWindow/geometry", saveGeometry());
|
||||||
done(0);
|
|
||||||
deleteLater();
|
if (dataSavedCheck())
|
||||||
event->accept();
|
{
|
||||||
|
done(0);
|
||||||
|
deleteLater();
|
||||||
|
event->accept();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
void StateRecorderDialog_t::closeWindow(void)
|
void StateRecorderDialog_t::closeWindow(void)
|
||||||
{
|
{
|
||||||
QSettings settings;
|
QSettings settings;
|
||||||
settings.setValue("stateRecorderWindow/geometry", saveGeometry());
|
settings.setValue("stateRecorderWindow/geometry", saveGeometry());
|
||||||
done(0);
|
|
||||||
deleteLater();
|
if (dataSavedCheck())
|
||||||
|
{
|
||||||
|
done(0);
|
||||||
|
deleteLater();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
void StateRecorderDialog_t::applyChanges(void)
|
void StateRecorderDialog_t::packConfig( StateRecorderConfigData &config )
|
||||||
{
|
{
|
||||||
StateRecorderConfigData config;
|
|
||||||
|
|
||||||
config.historyDurationMinutes = static_cast<float>( historyDuration->value() );
|
config.historyDurationMinutes = static_cast<float>( historyDuration->value() );
|
||||||
config.timeBetweenSnapsMinutes = static_cast<float>( snapMinutes->value() ) +
|
config.timeBetweenSnapsMinutes = static_cast<float>( snapMinutes->value() ) +
|
||||||
( static_cast<float>( snapSeconds->value() ) / 60.0f );
|
( static_cast<float>( snapSeconds->value() ) / 60.0f );
|
||||||
config.compressionLevel = cmprLvlCbox->currentData().toInt();
|
config.compressionLevel = cmprLvlCbox->currentData().toInt();
|
||||||
config.loadPauseTimeSeconds = pauseDuration->value();
|
config.loadPauseTimeSeconds = pauseDuration->value();
|
||||||
config.pauseOnLoad = static_cast<StateRecorderConfigData::PauseType>( pauseOnLoadCbox->currentData().toInt() );
|
config.pauseOnLoad = static_cast<StateRecorderConfigData::PauseType>( pauseOnLoadCbox->currentData().toInt() );
|
||||||
|
}
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
bool StateRecorderDialog_t::dataSavedCheck(void)
|
||||||
|
{
|
||||||
|
bool okToClose = true;
|
||||||
|
const StateRecorderConfigData &curConfig = FCEU_StateRecorderGetConfigData();
|
||||||
|
|
||||||
|
StateRecorderConfigData selConfig;
|
||||||
|
|
||||||
|
packConfig( selConfig );
|
||||||
|
|
||||||
|
if ( selConfig.compare( curConfig ) == false )
|
||||||
|
{
|
||||||
|
QMessageBox msgBox(QMessageBox::Question, tr("State Recorder"),
|
||||||
|
tr("Setting selections have not yet been saved.\nDo you wish to save/apply the new settings?"),
|
||||||
|
QMessageBox::No | QMessageBox::Yes, this);
|
||||||
|
|
||||||
|
msgBox.setDefaultButton( QMessageBox::Yes );
|
||||||
|
|
||||||
|
int ret = msgBox.exec();
|
||||||
|
|
||||||
|
if ( ret == QMessageBox::Yes )
|
||||||
|
{
|
||||||
|
applyChanges();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return okToClose;
|
||||||
|
}
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void StateRecorderDialog_t::applyChanges(void)
|
||||||
|
{
|
||||||
|
StateRecorderConfigData config;
|
||||||
|
|
||||||
|
packConfig( config );
|
||||||
|
|
||||||
FCEU_WRAPPER_LOCK();
|
FCEU_WRAPPER_LOCK();
|
||||||
FCEU_StateRecorderSetEnabled( recorderEnable->isChecked() );
|
FCEU_StateRecorderSetEnabled( recorderEnable->isChecked() );
|
||||||
FCEU_StateRecorderSetConfigData( config );
|
FCEU_StateRecorderSetConfigData( config );
|
||||||
if (FCEU_StateRecorderRunning())
|
if (FCEU_StateRecorderRunning())
|
||||||
{
|
{
|
||||||
// TODO restart with new settings
|
QMessageBox msgBox(QMessageBox::Question, tr("State Recorder"),
|
||||||
|
tr("New settings will not take effect until state recorder is restarted. Do you wish to restart?"),
|
||||||
|
QMessageBox::No | QMessageBox::Yes, this);
|
||||||
|
|
||||||
|
msgBox.setDefaultButton( QMessageBox::Yes );
|
||||||
|
|
||||||
|
int ret = msgBox.exec();
|
||||||
|
|
||||||
|
if ( ret == QMessageBox::Yes )
|
||||||
|
{
|
||||||
|
FCEU_StateRecorderStop();
|
||||||
|
FCEU_StateRecorderStart();
|
||||||
|
updateStatusDisplay();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
FCEU_WRAPPER_UNLOCK();
|
FCEU_WRAPPER_UNLOCK();
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,8 @@
|
||||||
#include <QGroupBox>
|
#include <QGroupBox>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
|
||||||
|
struct StateRecorderConfigData;
|
||||||
|
|
||||||
class StateRecorderDialog_t : public QDialog
|
class StateRecorderDialog_t : public QDialog
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
@ -51,11 +53,13 @@ protected:
|
||||||
|
|
||||||
double saveTimeMs;
|
double saveTimeMs;
|
||||||
|
|
||||||
|
bool dataSavedCheck(void);
|
||||||
void recalcMemoryUsage(void);
|
void recalcMemoryUsage(void);
|
||||||
void updateStartStopBuffon(void);
|
void updateStartStopBuffon(void);
|
||||||
void updateRecorderStatusLabel(void);
|
void updateRecorderStatusLabel(void);
|
||||||
void updateBufferSizeStatus(void);
|
void updateBufferSizeStatus(void);
|
||||||
void updateStatusDisplay(void);
|
void updateStatusDisplay(void);
|
||||||
|
void packConfig( StateRecorderConfigData &config );
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void closeWindow(void);
|
void closeWindow(void);
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
#pragma once
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
enum ENUM_SSLOADPARAMS
|
enum ENUM_SSLOADPARAMS
|
||||||
|
@ -101,6 +102,11 @@ struct StateRecorderConfigData
|
||||||
loadPauseTimeSeconds = 3;
|
loadPauseTimeSeconds = 3;
|
||||||
pauseOnLoad = TEMPORARY_PAUSE;
|
pauseOnLoad = TEMPORARY_PAUSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool compare( const StateRecorderConfigData &other )
|
||||||
|
{
|
||||||
|
return memcmp( this, &other, sizeof(StateRecorderConfigData) ) == 0;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
int FCEU_StateRecorderStart(void);
|
int FCEU_StateRecorderStart(void);
|
||||||
|
|
Loading…
Reference in New Issue