bsnes-mt/bsnes/target-bsnes/settings/_emulator.cpp
2020-09-13 04:16:49 +03:00

167 lines
No EOL
5.5 KiB
C++

/* MT. */
#include "bsnes-mt/translations.h"
namespace bmt = bsnesMt::translations;
/* /MT. */
auto EmulatorSettings::create() -> void {
setCollapsible();
setVisible(false);
optionsLabel.setText(bmt::get("Settings.Emulator.General").data()).setFont(Font().setBold());
warnOnUnverifiedGames.setText(bmt::get("Settings.Emulator.General.warnOnUnverifiedGames").data())
.setChecked(settings.emulator.warnOnUnverifiedGames)
.onToggle([&] {
settings.emulator.warnOnUnverifiedGames = warnOnUnverifiedGames.checked();
});
autoSaveMemory.setText(bmt::get("Settings.Emulator.General.autoSaveMemory").data())
.setChecked(settings.emulator.autoSaveMemory.enable)
.onToggle([&] {
settings.emulator.autoSaveMemory.enable = autoSaveMemory.checked();
});
autoSaveStateOnUnload.setText(bmt::get("Settings.Emulator.General.autoSaveStateOnUnload").data())
.setChecked(settings.emulator.autoSaveStateOnUnload)
.onToggle([&] {
settings.emulator.autoSaveStateOnUnload = autoSaveStateOnUnload.checked();
if (autoSaveStateOnUnload.checked()) {
autoLoadStateOnLoad.setEnabled(true);
}
else {
autoLoadStateOnLoad.setEnabled(false).setChecked(false).doToggle();
}
})
.doToggle();
autoLoadStateOnLoad.setText(bmt::get("Settings.Emulator.General.AutoResumeOnLoad").data())
.setChecked(settings.emulator.autoLoadStateOnLoad)
.onToggle([&] {
settings.emulator.autoLoadStateOnLoad = autoLoadStateOnLoad.checked();
});
nativeFileDialogs.setText(bmt::get("Settings.Emulator.General.UseNativeFileDialogs").data())
.setChecked(settings.general.nativeFileDialogs)
.onToggle([&] {
settings.general.nativeFileDialogs = nativeFileDialogs.checked();
});
Color spacerColor = {192, 192, 192}; // MT.
optionsSpacer.setColor(spacerColor);
fastForwardLabel.setText(bmt::get("Settings.Emulator.FastForward").data()).setFont(Font().setBold());
char colon = ':';
frameSkipLabel.setText({bmt::get("Settings.Emulator.FastForward.FrameSkip").data(), colon})
.setToolTip(bmt::get("Settings.Emulator.FastForward.FrameSkip.tooltip").data());
/* MT. */
string noneString = bmt::get("Common.None").data();
string framesString = bmt::get("Settings.Emulator.FastForward.FrameSkip.Frames").data();
string frames2to4String = bmt::get("Settings.Emulator.FastForward.FrameSkip.Frames2to4").data();
/* /MT. */
frameSkipAmount.append(ComboButtonItem().setText(noneString));
frameSkipAmount.append(ComboButtonItem().setText({"1 ", bmt::get("Settings.Common.FrameLowercase").data()}));
/* MT. */
for (uint8_t i = 2; i < 5; i++) {
frameSkipAmount.append(ComboButtonItem().setText(string(frames2to4String).replace('|', i)));
}
for (uint8_t i = 5; i < 10; i++) {
frameSkipAmount.append(ComboButtonItem().setText(string(framesString).replace('|', i)));
}
/* /MT. */
frameSkipAmount.item(settings.fastForward.frameSkip).setSelected();
frameSkipAmount.onChange([&] {
settings.fastForward.frameSkip = frameSkipAmount.selected().offset();
});
limiterLabel.setText({bmt::get("Settings.Emulator.FastForward.Limiter").data(), colon})
.setToolTip(bmt::get("Settings.Emulator.FastForward.Limiter.tooltip").data());
limiterAmount.append(ComboButtonItem().setText(noneString));
/* MT. */
for (uint8_t i = 2; i < 9; i++) {
limiterAmount.append(ComboButtonItem().setText({100 * i, '%'}));
}
/* /MT. */
auto limiter = settings.fastForward.limiter; // MT.
limiterAmount.item(limiter == 0 ? 0 : limiter - 1).setSelected(); // MT.
limiterAmount.onChange([&] {
auto index = limiterAmount.selected().offset();
settings.fastForward.limiter = index == 0 ? 0 : index + 1; // MT.
});
fastForwardMute.setText(bmt::get("Settings.Emulator.FastForward.mute").data())
.setChecked(settings.fastForward.mute)
.onToggle([&] {
settings.fastForward.mute = fastForwardMute.checked();
});
fastForwardSpacer.setColor(spacerColor);
rewindLabel.setText(bmt::get("Settings.Emulator.Rewind").data()).setFont(Font().setBold());
string everyString = bmt::get("Settings.Emulator.Rewind.Frequency.everyFrames").data(); // MT.
rewindFrequencyLabel.setText({bmt::get("Settings.Emulator.Rewind.Frequency").data(), colon});
rewindFrequencyOption.append(ComboButtonItem().setText(bmt::get("Common.Disabled").data()));
/* MT. */
for (uint8_t number = 10; number < 70; number += 10) {
rewindFrequencyOption.append(ComboButtonItem().setText(string(everyString).replace('|', number)));
}
/* /MT. */
auto frequency = settings.rewind.frequency; // MT.
rewindFrequencyOption.item(frequency == 0 ? 0 : frequency / 10).setSelected(); // MT.
rewindFrequencyOption.onChange([&] {
settings.rewind.frequency = rewindFrequencyOption.selected().offset() * 10;
program.rewindReset();
});
string statesString = bmt::get("Settings.Emulator.Rewind.Length.states").data(); // MT.
rewindLengthLabel.setText({bmt::get("Settings.Emulator.Rewind.Length").data(), colon});
auto length = settings.rewind.length; // MT.
/* MT. */
for (uint8_t i = 0, j = 1; i < 6; i++) {
auto curLength = j * 10;
auto item = ComboButtonItem().setText(string(statesString).replace('|', curLength));
if (curLength == length) {
item.setSelected();
}
rewindLengthOption.append(item);
j *= 2;
}
/* /MT. */
rewindLengthOption.onChange([&] {
settings.rewind.length = 10 << rewindLengthOption.selected().offset();
program.rewindReset();
});
rewindMute.setText(bmt::get("Settings.Emulator.Rewind.mute").data())
.setChecked(settings.rewind.mute)
.onToggle([&] {
settings.rewind.mute = rewindMute.checked();
});
}