Reduce some boilerplate with global and aw's options.

Signed-off-by: Andrea Odetti <mariofutire@gmail.com>
This commit is contained in:
Andrea Odetti 2019-12-01 19:49:11 +00:00
parent 177f345861
commit 7c90b040ef
5 changed files with 76 additions and 100 deletions

View file

@ -118,7 +118,7 @@ GlobalOptions GlobalOptions::fromQSettings()
return options;
}
void GlobalOptions::setData(const Preferences::Data & data)
void GlobalOptions::setData(const GlobalOptions & data)
{
if (this->msGap != data.msGap)
{
@ -126,10 +126,10 @@ void GlobalOptions::setData(const Preferences::Data & data)
QSettings().setValue(REG_TIMER, this->msGap);
}
if (this->msFullSpeed != data.fullSpeedMs)
if (this->msFullSpeed != data.msFullSpeed)
{
this->msFullSpeed = data.fullSpeedMs;
QSettings().setValue(REG_FULL_SPEED, this->msGap);
this->msFullSpeed = data.msFullSpeed;
QSettings().setValue(REG_FULL_SPEED, this->msFullSpeed);
}
if (this->screenshotTemplate != data.screenshotTemplate)
@ -138,21 +138,21 @@ void GlobalOptions::setData(const Preferences::Data & data)
QSettings().setValue(REG_SCREENSHOT_TEMPLATE, this->screenshotTemplate);
}
if (this->slot0Card != data.cardInSlot0)
if (this->slot0Card != data.slot0Card)
{
this->slot0Card = data.cardInSlot0;
this->slot0Card = data.slot0Card;
QSettings().setValue(REG_SLOT0_CARD, this->slot0Card);
}
if (this->ramWorksMemorySize != data.ramWorksSize)
if (this->ramWorksMemorySize != data.ramWorksMemorySize)
{
this->ramWorksMemorySize = data.ramWorksSize;
this->ramWorksMemorySize = data.ramWorksMemorySize;
QSettings().setValue(REG_RAMWORKS_SIZE, this->ramWorksMemorySize);
}
if (this->gamepadName != data.joystick)
if (this->gamepadName != data.gamepadName)
{
this->gamepadName = data.joystick;
this->gamepadName = data.gamepadName;
QSettings().setValue(REG_GAMEPAD_NAME, this->gamepadName);
}
@ -175,20 +175,7 @@ void GlobalOptions::setData(const Preferences::Data & data)
}
}
void GlobalOptions::getData(Preferences::Data & data) const
{
data.msGap = this->msGap;
data.fullSpeedMs = this->msFullSpeed;
data.cardInSlot0 = this->slot0Card;
data.ramWorksSize = this->ramWorksMemorySize;
data.screenshotTemplate = this->screenshotTemplate;
data.joystick = this->gamepadName;
data.audioLatency = this->audioLatency;
data.silenceDelay = this->silenceDelay;
data.volume = this->volume;
}
void getAppleWinPreferences(Preferences::Data & data)
void getAppleWinPreferences(PreferenceData & data)
{
data.disks.resize(diskIDs.size());
for (size_t i = 0; i < diskIDs.size(); ++i)
@ -228,7 +215,7 @@ void getAppleWinPreferences(Preferences::Data & data)
data.verticalBlend = IsVideoStyle(VS_COLOR_VERTICAL_BLEND);
}
void setAppleWinPreferences(const Preferences::Data & currentData, const Preferences::Data & newData)
void setAppleWinPreferences(const PreferenceData & currentData, const PreferenceData & newData)
{
if (currentData.apple2Type != newData.apple2Type)
{

View file

@ -22,11 +22,31 @@ public:
int silenceDelay;
int volume;
void getData(Preferences::Data & data) const;
void setData(const Preferences::Data & data);
void setData(const GlobalOptions & data);
};
void getAppleWinPreferences(Preferences::Data & data);
void setAppleWinPreferences(const Preferences::Data & currentData, const Preferences::Data & newData);
struct PreferenceData
{
GlobalOptions options;
int apple2Type;
bool mouseInSlot4;
bool cpmInSlot5;
bool hdInSlot7;
bool enhancedSpeed;
int videoType;
bool scanLines;
bool verticalBlend;
std::vector<QString> disks;
std::vector<QString> hds;
QString saveState;
};
void getAppleWinPreferences(PreferenceData & data);
void setAppleWinPreferences(const PreferenceData & currentData, const PreferenceData & newData);
#endif // CONFIGURATION_H

View file

@ -5,6 +5,8 @@
#include "Common.h"
#include "Memory.h"
#include "options.h"
#include <QFileDialog>
#include <QGamepadManager>
#include <QSettings>
@ -130,7 +132,7 @@ Preferences::Preferences(QWidget *parent) :
myHDs.push_back(ui->hd2);
}
void Preferences::setup(const Data & data, QSettings & settings)
void Preferences::setup(const PreferenceData & data, QSettings & settings)
{
populateJoysticks();
setData(data);
@ -167,69 +169,66 @@ void Preferences::setSettings(QSettings & settings)
ui->registryTree->expandAll();
}
void Preferences::setData(const Data & data)
void Preferences::setData(const PreferenceData & data)
{
ui->lc_0->setCurrentIndex(data.options.slot0Card);
ui->timer_gap->setValue(data.options.msGap);
ui->full_ms->setValue(data.options.msFullSpeed);
ui->rw_size->setMaximum(kMaxExMemoryBanks);
ui->rw_size->setValue(data.options.ramWorksMemorySize);
ui->joystick->setCurrentText(data.options.gamepadName);
ui->screenshot->setText(data.options.screenshotTemplate);
ui->audio_latency->setValue(data.options.audioLatency);
ui->silence_delay->setValue(data.options.silenceDelay);
ui->volume->setValue(data.options.volume);
initialiseDisks(myDisks, data.disks);
initialiseDisks(myHDs, data.hds);
ui->enhanced_speed->setChecked(data.enhancedSpeed);
ui->apple2Type->setCurrentIndex(data.apple2Type);
ui->lc_0->setCurrentIndex(data.cardInSlot0);
ui->mouse_4->setChecked(data.mouseInSlot4);
ui->cpm_5->setChecked(data.cpmInSlot5);
ui->hd_7->setChecked(data.hdInSlot7);
ui->timer_gap->setValue(data.msGap);
ui->full_ms->setValue(data.fullSpeedMs);
ui->rw_size->setMaximum(kMaxExMemoryBanks);
ui->rw_size->setValue(data.ramWorksSize);
// synchronise
on_hd_7_clicked(data.hdInSlot7);
ui->joystick->setCurrentText(data.joystick);
ui->save_state->setText(data.saveState);
ui->screenshot->setText(data.screenshotTemplate);
ui->audio_latency->setValue(data.audioLatency);
ui->silence_delay->setValue(data.silenceDelay);
ui->volume->setValue(data.volume);
ui->video_type->setCurrentIndex(data.videoType);
ui->scan_lines->setChecked(data.scanLines);
ui->vertical_blend->setChecked(data.verticalBlend);
}
Preferences::Data Preferences::getData() const
PreferenceData Preferences::getData() const
{
Data data;
PreferenceData data;
data.options.slot0Card = ui->lc_0->currentIndex();
data.options.ramWorksMemorySize = ui->rw_size->value();
data.options.msGap = ui->timer_gap->value();
data.options.msFullSpeed = ui->full_ms->value();
data.options.screenshotTemplate = ui->screenshot->text();
data.options.audioLatency = ui->audio_latency->value();
data.options.silenceDelay = ui->silence_delay->value();
data.options.volume = ui->volume->value();
// because index = 0 is None
if (ui->joystick->currentIndex() >= 1)
{
data.options.gamepadName = ui->joystick->currentText();
}
fillData(myDisks, data.disks);
fillData(myHDs, data.hds);
data.enhancedSpeed = ui->enhanced_speed->isChecked();
data.apple2Type = ui->apple2Type->currentIndex();
data.cardInSlot0 = ui->lc_0->currentIndex();
data.mouseInSlot4 = ui->mouse_4->isChecked();
data.cpmInSlot5 = ui->cpm_5->isChecked();
data.hdInSlot7 = ui->hd_7->isChecked();
data.ramWorksSize = ui->rw_size->value();
data.msGap = ui->timer_gap->value();
data.fullSpeedMs = ui->full_ms->value();
// because index = 0 is None
if (ui->joystick->currentIndex() >= 1)
{
data.joystick = ui->joystick->currentText();
}
data.saveState = ui->save_state->text();
data.screenshotTemplate = ui->screenshot->text();
data.audioLatency = ui->audio_latency->value();
data.silenceDelay = ui->silence_delay->value();
data.volume = ui->volume->value();
data.videoType = ui->video_type->currentIndex();
data.scanLines = ui->scan_lines->isChecked();

View file

@ -7,6 +7,7 @@
class QComboBox;
class QSettings;
struct PreferenceData;
namespace Ui {
class Preferences;
@ -18,41 +19,10 @@ class Preferences : public QDialog
public:
struct Data
{
int apple2Type;
int cardInSlot0;
bool mouseInSlot4;
bool cpmInSlot5;
bool hdInSlot7;
int msGap;
int fullSpeedMs;
int ramWorksSize;
QString joystick;
bool enhancedSpeed;
int audioLatency;
int silenceDelay;
int volume;
int videoType;
bool scanLines;
bool verticalBlend;
std::vector<QString> disks;
std::vector<QString> hds;
QString saveState;
QString screenshotTemplate;
};
explicit Preferences(QWidget *parent);
void setup(const Data & data, QSettings & settings);
Data getData() const;
void setup(const PreferenceData & data, QSettings & settings);
PreferenceData getData() const;
private slots:
void on_disk1_activated(int index);
@ -74,7 +44,7 @@ private:
std::vector<QComboBox *> myHDs;
void setSettings(QSettings & settings);
void setData(const Data & data);
void setData(const PreferenceData & data);
void populateJoysticks();
void browseDisk(const std::vector<QComboBox *> & vdisks, const size_t id);

View file

@ -386,18 +386,18 @@ void QApple::on_actionOptions_triggered()
// but often it forces to terminate the emulator
PauseEmulator pause(this);
Preferences::Data currentData;
PreferenceData currentData;
getAppleWinPreferences(currentData);
myOptions.getData(currentData);
currentData.options = myOptions;
QSettings settings; // the function will "modify" it
myPreferences->setup(currentData, settings);
if (myPreferences->exec())
{
const Preferences::Data newData = myPreferences->getData();
const PreferenceData newData = myPreferences->getData();
setAppleWinPreferences(currentData, newData);
myOptions.setData(newData);
myOptions.setData(newData.options);
reloadOptions();
}