Fix old C-style casting.

There's a lot of code here that seems to change, but it's actually only one line.
I think newline differences are messing things up.
This commit is contained in:
Stephen Anthony 2019-07-25 10:14:57 -02:30
parent 61d9f26bc6
commit dc7697a4d4
1 changed files with 350 additions and 350 deletions

View File

@ -1,351 +1,351 @@
//============================================================================ //============================================================================
// //
// SSSS tt lll lll // SSSS tt lll lll
// SS SS tt ll ll // SS SS tt ll ll
// SS tttttt eeee ll ll aaaa // SS tttttt eeee ll ll aaaa
// SSSS tt ee ee ll ll aa // SSSS tt ee ee ll ll aa
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator" // SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
// SS SS tt ee ll ll aa aa // SS SS tt ee ll ll aa aa
// SSSS ttt eeeee llll llll aaaaa // SSSS ttt eeeee llll llll aaaaa
// //
// Copyright (c) 1995-2019 by Bradford W. Mott, Stephen Anthony // Copyright (c) 1995-2019 by Bradford W. Mott, Stephen Anthony
// and the Stella Team // and the Stella Team
// //
// See the file "License.txt" for information on usage and redistribution of // See the file "License.txt" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES. // this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================ //============================================================================
#include <sstream>
#include "bspf.hxx"
#include "Console.hxx"
#include "Cart.hxx"
#include "CartDPC.hxx"
#include "Control.hxx"
#include "Dialog.hxx"
#include "Font.hxx"
#include "Menu.hxx"
#include "OSystem.hxx"
#include "PopUpWidget.hxx"
#include "Settings.hxx"
#include "Sound.hxx"
#include "Widget.hxx"
#include "AudioSettings.hxx"
#include "AudioDialog.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AudioDialog::AudioDialog(OSystem& osystem, DialogContainer& parent,
const GUI::Font& font)
: Dialog(osystem, parent, font, "Audio settings")
{
const int VBORDER = 10;
const int HBORDER = 10;
const int INDENT = 20;
const int VGAP = 4;
const int lineHeight = font.getLineHeight(),
fontWidth = font.getMaxCharWidth();
int xpos, ypos;
int lwidth = font.getStringWidth("Volume "),
pwidth;
WidgetArray wid;
VariantList items;
// Set real dimensions
_w = 48 * fontWidth + HBORDER * 2;
_h = 12 * (lineHeight + VGAP) + VBORDER + _th;
xpos = HBORDER; ypos = VBORDER + _th;
// Enable sound
mySoundEnableCheckbox = new CheckboxWidget(this, font, xpos, ypos,
"Enable sound", kSoundEnableChanged);
wid.push_back(mySoundEnableCheckbox);
ypos += lineHeight + VGAP;
xpos += INDENT;
// Volume
myVolumeSlider = new SliderWidget(this, font, xpos, ypos,
"Volume", lwidth, 0, 4 * fontWidth, "%");
myVolumeSlider->setMinValue(1); myVolumeSlider->setMaxValue(100);
myVolumeSlider->setTickmarkIntervals(4);
wid.push_back(myVolumeSlider);
ypos += lineHeight + VGAP;
// Mode
items.clear();
VarList::push_back(items, "Low quality, medium lag", static_cast<int>(AudioSettings::Preset::lowQualityMediumLag));
VarList::push_back(items, "High quality, medium lag", static_cast<int>(AudioSettings::Preset::highQualityMediumLag));
VarList::push_back(items, "High quality, low lag", static_cast<int>(AudioSettings::Preset::highQualityLowLag));
VarList::push_back(items, "Ultra quality, minimal lag", static_cast<int>(AudioSettings::Preset::ultraQualityMinimalLag));
VarList::push_back(items, "Custom", static_cast<int>(AudioSettings::Preset::custom));
myModePopup = new PopUpWidget(this, font, xpos, ypos,
font.getStringWidth("Ultry quality, minimal lag"), lineHeight,
items, "Mode", lwidth, kModeChanged);
wid.push_back(myModePopup);
ypos += lineHeight + VGAP;
xpos += INDENT;
// Fragment size
pwidth = font.getStringWidth("512 samples");
lwidth = font.getStringWidth("Resampling quality ");
items.clear();
VarList::push_back(items, "128 samples", 128);
VarList::push_back(items, "256 samples", 256);
VarList::push_back(items, "512 samples", 512);
VarList::push_back(items, "1k samples", 1024);
VarList::push_back(items, "2k samples", 2048);
VarList::push_back(items, "4K samples", 4096);
myFragsizePopup = new PopUpWidget(this, font, xpos, ypos,
pwidth, lineHeight,
items, "Fragment size", lwidth);
wid.push_back(myFragsizePopup);
ypos += lineHeight + VGAP;
// Output frequency
items.clear();
VarList::push_back(items, "44100 Hz", 44100);
VarList::push_back(items, "48000 Hz", 48000);
VarList::push_back(items, "96000 Hz", 96000);
myFreqPopup = new PopUpWidget(this, font, xpos, ypos,
pwidth, lineHeight,
items, "Sample rate", lwidth);
wid.push_back(myFreqPopup);
ypos += lineHeight + VGAP;
// Resampling quality
items.clear();
VarList::push_back(items, "Low", static_cast<int>(AudioSettings::ResamplingQuality::nearestNeightbour));
VarList::push_back(items, "High", static_cast<int>(AudioSettings::ResamplingQuality::lanczos_2));
VarList::push_back(items, "Ultra", static_cast<int>(AudioSettings::ResamplingQuality::lanczos_3));
myResamplingPopup = new PopUpWidget(this, font, xpos, ypos,
pwidth, lineHeight,
items, "Resampling quality ", lwidth);
wid.push_back(myResamplingPopup);
ypos += lineHeight + VGAP;
// Param 1
int swidth = pwidth+23;
myHeadroomSlider = new SliderWidget(this, font, xpos, ypos, swidth, lineHeight,
"Headroom ", 0, kHeadroomChanged, 10 * fontWidth);
myHeadroomSlider->setMinValue(0); myHeadroomSlider->setMaxValue(AudioSettings::MAX_HEADROOM);
myHeadroomSlider->setTickmarkIntervals(5);
wid.push_back(myHeadroomSlider);
ypos += lineHeight + VGAP;
// Param 2
myBufferSizeSlider = new SliderWidget(this, font, xpos, ypos, swidth, lineHeight,
"Buffer size ", 0, kBufferSizeChanged, 10 * fontWidth);
myBufferSizeSlider->setMinValue(0); myBufferSizeSlider->setMaxValue(AudioSettings::MAX_BUFFER_SIZE);
myBufferSizeSlider->setTickmarkIntervals(5);
wid.push_back(myBufferSizeSlider);
ypos += lineHeight + VGAP;
// Stereo sound
xpos -= INDENT;
myStereoSoundCheckbox = new CheckboxWidget(this, font, xpos, ypos,
"Stereo for all ROMs");
wid.push_back(myStereoSoundCheckbox);
ypos += lineHeight + VGAP;
myDpcPitch = new SliderWidget(this, font, xpos, ypos,
"DPC Pitch ", 0, 0, 5 * fontWidth);
myDpcPitch->setMinValue(10000); myDpcPitch->setMaxValue(30000);
myDpcPitch->setStepValue(100);
myDpcPitch->setTickmarkIntervals(2);
wid.push_back(myDpcPitch);
// Add Defaults, OK and Cancel buttons
addDefaultsOKCancelBGroup(wid, font);
addToFocusList(wid);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void AudioDialog::loadConfig()
{
AudioSettings& audioSettings = instance().audioSettings();
// Enable sound
mySoundEnableCheckbox->setState(audioSettings.enabled());
// Volume
myVolumeSlider->setValue(audioSettings.volume());
// Stereo
myStereoSoundCheckbox->setState(audioSettings.stereo());
// DPC Pitch
myDpcPitch->setValue(audioSettings.dpcPitch());
// Preset / mode
myModePopup->setSelected(static_cast<int>(audioSettings.preset()));
updateSettingsWithPreset(instance().audioSettings());
updateEnabledState();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void AudioDialog::updateSettingsWithPreset(AudioSettings& audioSettings)
{
// Fragsize
myFragsizePopup->setSelected(audioSettings.fragmentSize());
// Output frequency
myFreqPopup->setSelected(audioSettings.sampleRate());
// Headroom
myHeadroomSlider->setValue(audioSettings.headroom());
// Buffer size
myBufferSizeSlider->setValue(audioSettings.bufferSize());
// Resampling quality
myResamplingPopup->setSelected(static_cast<int>(audioSettings.resamplingQuality()));
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void AudioDialog::saveConfig()
{
AudioSettings& audioSettings = instance().audioSettings();
// Enabled
audioSettings.setEnabled(mySoundEnableCheckbox->getState());
instance().sound().setEnabled(mySoundEnableCheckbox->getState());
// Volume
audioSettings.setVolume(myVolumeSlider->getValue());
instance().sound().setVolume(myVolumeSlider->getValue());
// Stereo
audioSettings.setStereo(myStereoSoundCheckbox->getState());
// DPC Pitch
audioSettings.setDpcPitch(myDpcPitch->getValue());
// update if current cart is Pitfall II
if (instance().hasConsole() && instance().console().cartridge().name() == "CartridgeDPC")
{
CartridgeDPC& cart = (CartridgeDPC&)instance().console().cartridge();
cart.setDpcPitch(myDpcPitch->getValue());
}
AudioSettings::Preset preset = static_cast<AudioSettings::Preset>(myModePopup->getSelectedTag().toInt());
audioSettings.setPreset(preset);
if (preset == AudioSettings::Preset::custom) {
// Fragsize
audioSettings.setFragmentSize(myFragsizePopup->getSelectedTag().toInt());
audioSettings.setSampleRate(myFreqPopup->getSelectedTag().toInt());
audioSettings.setHeadroom(myHeadroomSlider->getValue());
audioSettings.setBufferSize(myBufferSizeSlider->getValue());
audioSettings.setResamplingQuality(static_cast<AudioSettings::ResamplingQuality>(myResamplingPopup->getSelectedTag().toInt()));
}
// Only force a re-initialization when necessary, since it can
// be a time-consuming operation
if(instance().hasConsole())
instance().console().initializeAudio();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void AudioDialog::setDefaults()
{
mySoundEnableCheckbox->setState(AudioSettings::DEFAULT_ENABLED);
myVolumeSlider->setValue(AudioSettings::DEFAULT_VOLUME);
myStereoSoundCheckbox->setState(AudioSettings::DEFAULT_STEREO);
myDpcPitch->setValue(AudioSettings::DEFAULT_DPC_PITCH);
myModePopup->setSelected(static_cast<int>(AudioSettings::DEFAULT_PRESET));
if (AudioSettings::DEFAULT_PRESET == AudioSettings::Preset::custom) {
myResamplingPopup->setSelected(static_cast<int>(AudioSettings::DEFAULT_RESAMPLING_QUALITY));
myFragsizePopup->setSelected(AudioSettings::DEFAULT_FRAGMENT_SIZE);
myFreqPopup->setSelected(AudioSettings::DEFAULT_SAMPLE_RATE);
myHeadroomSlider->setValue(AudioSettings::DEFAULT_HEADROOM);
myBufferSizeSlider->setValue(AudioSettings::DEFAULT_BUFFER_SIZE);
}
else updatePreset();
updateEnabledState();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void AudioDialog::updateEnabledState()
{
bool active = mySoundEnableCheckbox->getState();
AudioSettings::Preset preset = static_cast<AudioSettings::Preset>(myModePopup->getSelectedTag().toInt());
bool userMode = preset == AudioSettings::Preset::custom;
myVolumeSlider->setEnabled(active);
myStereoSoundCheckbox->setEnabled(active);
myModePopup->setEnabled(active);
// enable only for Pitfall II cart
myDpcPitch->setEnabled(active && instance().hasConsole() && instance().console().cartridge().name() == "CartridgeDPC");
myFragsizePopup->setEnabled(active && userMode);
myFreqPopup->setEnabled(active && userMode);
myResamplingPopup->setEnabled(active && userMode);
myHeadroomSlider->setEnabled(active && userMode);
myBufferSizeSlider->setEnabled(active && userMode);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void AudioDialog::updatePreset()
{
AudioSettings::Preset preset = static_cast<AudioSettings::Preset>(myModePopup->getSelectedTag().toInt());
// Make a copy that does not affect the actual settings...
AudioSettings audioSettings = instance().audioSettings();
audioSettings.setPersistent(false);
// ... and set the requested preset
audioSettings.setPreset(preset);
updateSettingsWithPreset(audioSettings);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #include <sstream>
void AudioDialog::handleCommand(CommandSender* sender, int cmd,
int data, int id) #include "bspf.hxx"
{
switch(cmd) #include "Console.hxx"
{ #include "Cart.hxx"
case GuiObject::kOKCmd: #include "CartDPC.hxx"
saveConfig(); #include "Control.hxx"
close(); #include "Dialog.hxx"
break; #include "Font.hxx"
#include "Menu.hxx"
case GuiObject::kDefaultsCmd: #include "OSystem.hxx"
setDefaults(); #include "PopUpWidget.hxx"
break; #include "Settings.hxx"
#include "Sound.hxx"
case kSoundEnableChanged: #include "Widget.hxx"
updateEnabledState(); #include "AudioSettings.hxx"
break;
#include "AudioDialog.hxx"
case kModeChanged:
updatePreset(); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
updateEnabledState(); AudioDialog::AudioDialog(OSystem& osystem, DialogContainer& parent,
break; const GUI::Font& font)
: Dialog(osystem, parent, font, "Audio settings")
case kHeadroomChanged: {
{ const int VBORDER = 10;
std::ostringstream ss; const int HBORDER = 10;
ss << std::fixed << std::setprecision(1) << (0.5 * myHeadroomSlider->getValue()) << " frames"; const int INDENT = 20;
myHeadroomSlider->setValueLabel(ss.str()); const int VGAP = 4;
break; const int lineHeight = font.getLineHeight(),
} fontWidth = font.getMaxCharWidth();
case kBufferSizeChanged: int xpos, ypos;
{ int lwidth = font.getStringWidth("Volume "),
std::ostringstream ss; pwidth;
ss << std::fixed << std::setprecision(1) << (0.5 * myBufferSizeSlider->getValue()) << " frames";
myBufferSizeSlider->setValueLabel(ss.str()); WidgetArray wid;
break; VariantList items;
}
// Set real dimensions
default: _w = 48 * fontWidth + HBORDER * 2;
Dialog::handleCommand(sender, cmd, data, 0); _h = 12 * (lineHeight + VGAP) + VBORDER + _th;
break;
} xpos = HBORDER; ypos = VBORDER + _th;
}
// Enable sound
mySoundEnableCheckbox = new CheckboxWidget(this, font, xpos, ypos,
"Enable sound", kSoundEnableChanged);
wid.push_back(mySoundEnableCheckbox);
ypos += lineHeight + VGAP;
xpos += INDENT;
// Volume
myVolumeSlider = new SliderWidget(this, font, xpos, ypos,
"Volume", lwidth, 0, 4 * fontWidth, "%");
myVolumeSlider->setMinValue(1); myVolumeSlider->setMaxValue(100);
myVolumeSlider->setTickmarkIntervals(4);
wid.push_back(myVolumeSlider);
ypos += lineHeight + VGAP;
// Mode
items.clear();
VarList::push_back(items, "Low quality, medium lag", static_cast<int>(AudioSettings::Preset::lowQualityMediumLag));
VarList::push_back(items, "High quality, medium lag", static_cast<int>(AudioSettings::Preset::highQualityMediumLag));
VarList::push_back(items, "High quality, low lag", static_cast<int>(AudioSettings::Preset::highQualityLowLag));
VarList::push_back(items, "Ultra quality, minimal lag", static_cast<int>(AudioSettings::Preset::ultraQualityMinimalLag));
VarList::push_back(items, "Custom", static_cast<int>(AudioSettings::Preset::custom));
myModePopup = new PopUpWidget(this, font, xpos, ypos,
font.getStringWidth("Ultry quality, minimal lag"), lineHeight,
items, "Mode", lwidth, kModeChanged);
wid.push_back(myModePopup);
ypos += lineHeight + VGAP;
xpos += INDENT;
// Fragment size
pwidth = font.getStringWidth("512 samples");
lwidth = font.getStringWidth("Resampling quality ");
items.clear();
VarList::push_back(items, "128 samples", 128);
VarList::push_back(items, "256 samples", 256);
VarList::push_back(items, "512 samples", 512);
VarList::push_back(items, "1k samples", 1024);
VarList::push_back(items, "2k samples", 2048);
VarList::push_back(items, "4K samples", 4096);
myFragsizePopup = new PopUpWidget(this, font, xpos, ypos,
pwidth, lineHeight,
items, "Fragment size", lwidth);
wid.push_back(myFragsizePopup);
ypos += lineHeight + VGAP;
// Output frequency
items.clear();
VarList::push_back(items, "44100 Hz", 44100);
VarList::push_back(items, "48000 Hz", 48000);
VarList::push_back(items, "96000 Hz", 96000);
myFreqPopup = new PopUpWidget(this, font, xpos, ypos,
pwidth, lineHeight,
items, "Sample rate", lwidth);
wid.push_back(myFreqPopup);
ypos += lineHeight + VGAP;
// Resampling quality
items.clear();
VarList::push_back(items, "Low", static_cast<int>(AudioSettings::ResamplingQuality::nearestNeightbour));
VarList::push_back(items, "High", static_cast<int>(AudioSettings::ResamplingQuality::lanczos_2));
VarList::push_back(items, "Ultra", static_cast<int>(AudioSettings::ResamplingQuality::lanczos_3));
myResamplingPopup = new PopUpWidget(this, font, xpos, ypos,
pwidth, lineHeight,
items, "Resampling quality ", lwidth);
wid.push_back(myResamplingPopup);
ypos += lineHeight + VGAP;
// Param 1
int swidth = pwidth+23;
myHeadroomSlider = new SliderWidget(this, font, xpos, ypos, swidth, lineHeight,
"Headroom ", 0, kHeadroomChanged, 10 * fontWidth);
myHeadroomSlider->setMinValue(0); myHeadroomSlider->setMaxValue(AudioSettings::MAX_HEADROOM);
myHeadroomSlider->setTickmarkIntervals(5);
wid.push_back(myHeadroomSlider);
ypos += lineHeight + VGAP;
// Param 2
myBufferSizeSlider = new SliderWidget(this, font, xpos, ypos, swidth, lineHeight,
"Buffer size ", 0, kBufferSizeChanged, 10 * fontWidth);
myBufferSizeSlider->setMinValue(0); myBufferSizeSlider->setMaxValue(AudioSettings::MAX_BUFFER_SIZE);
myBufferSizeSlider->setTickmarkIntervals(5);
wid.push_back(myBufferSizeSlider);
ypos += lineHeight + VGAP;
// Stereo sound
xpos -= INDENT;
myStereoSoundCheckbox = new CheckboxWidget(this, font, xpos, ypos,
"Stereo for all ROMs");
wid.push_back(myStereoSoundCheckbox);
ypos += lineHeight + VGAP;
myDpcPitch = new SliderWidget(this, font, xpos, ypos,
"DPC Pitch ", 0, 0, 5 * fontWidth);
myDpcPitch->setMinValue(10000); myDpcPitch->setMaxValue(30000);
myDpcPitch->setStepValue(100);
myDpcPitch->setTickmarkIntervals(2);
wid.push_back(myDpcPitch);
// Add Defaults, OK and Cancel buttons
addDefaultsOKCancelBGroup(wid, font);
addToFocusList(wid);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void AudioDialog::loadConfig()
{
AudioSettings& audioSettings = instance().audioSettings();
// Enable sound
mySoundEnableCheckbox->setState(audioSettings.enabled());
// Volume
myVolumeSlider->setValue(audioSettings.volume());
// Stereo
myStereoSoundCheckbox->setState(audioSettings.stereo());
// DPC Pitch
myDpcPitch->setValue(audioSettings.dpcPitch());
// Preset / mode
myModePopup->setSelected(static_cast<int>(audioSettings.preset()));
updateSettingsWithPreset(instance().audioSettings());
updateEnabledState();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void AudioDialog::updateSettingsWithPreset(AudioSettings& audioSettings)
{
// Fragsize
myFragsizePopup->setSelected(audioSettings.fragmentSize());
// Output frequency
myFreqPopup->setSelected(audioSettings.sampleRate());
// Headroom
myHeadroomSlider->setValue(audioSettings.headroom());
// Buffer size
myBufferSizeSlider->setValue(audioSettings.bufferSize());
// Resampling quality
myResamplingPopup->setSelected(static_cast<int>(audioSettings.resamplingQuality()));
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void AudioDialog::saveConfig()
{
AudioSettings& audioSettings = instance().audioSettings();
// Enabled
audioSettings.setEnabled(mySoundEnableCheckbox->getState());
instance().sound().setEnabled(mySoundEnableCheckbox->getState());
// Volume
audioSettings.setVolume(myVolumeSlider->getValue());
instance().sound().setVolume(myVolumeSlider->getValue());
// Stereo
audioSettings.setStereo(myStereoSoundCheckbox->getState());
// DPC Pitch
audioSettings.setDpcPitch(myDpcPitch->getValue());
// update if current cart is Pitfall II
if (instance().hasConsole() && instance().console().cartridge().name() == "CartridgeDPC")
{
CartridgeDPC& cart = static_cast<CartridgeDPC&>(instance().console().cartridge());
cart.setDpcPitch(myDpcPitch->getValue());
}
AudioSettings::Preset preset = static_cast<AudioSettings::Preset>(myModePopup->getSelectedTag().toInt());
audioSettings.setPreset(preset);
if (preset == AudioSettings::Preset::custom) {
// Fragsize
audioSettings.setFragmentSize(myFragsizePopup->getSelectedTag().toInt());
audioSettings.setSampleRate(myFreqPopup->getSelectedTag().toInt());
audioSettings.setHeadroom(myHeadroomSlider->getValue());
audioSettings.setBufferSize(myBufferSizeSlider->getValue());
audioSettings.setResamplingQuality(static_cast<AudioSettings::ResamplingQuality>(myResamplingPopup->getSelectedTag().toInt()));
}
// Only force a re-initialization when necessary, since it can
// be a time-consuming operation
if(instance().hasConsole())
instance().console().initializeAudio();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void AudioDialog::setDefaults()
{
mySoundEnableCheckbox->setState(AudioSettings::DEFAULT_ENABLED);
myVolumeSlider->setValue(AudioSettings::DEFAULT_VOLUME);
myStereoSoundCheckbox->setState(AudioSettings::DEFAULT_STEREO);
myDpcPitch->setValue(AudioSettings::DEFAULT_DPC_PITCH);
myModePopup->setSelected(static_cast<int>(AudioSettings::DEFAULT_PRESET));
if (AudioSettings::DEFAULT_PRESET == AudioSettings::Preset::custom) {
myResamplingPopup->setSelected(static_cast<int>(AudioSettings::DEFAULT_RESAMPLING_QUALITY));
myFragsizePopup->setSelected(AudioSettings::DEFAULT_FRAGMENT_SIZE);
myFreqPopup->setSelected(AudioSettings::DEFAULT_SAMPLE_RATE);
myHeadroomSlider->setValue(AudioSettings::DEFAULT_HEADROOM);
myBufferSizeSlider->setValue(AudioSettings::DEFAULT_BUFFER_SIZE);
}
else updatePreset();
updateEnabledState();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void AudioDialog::updateEnabledState()
{
bool active = mySoundEnableCheckbox->getState();
AudioSettings::Preset preset = static_cast<AudioSettings::Preset>(myModePopup->getSelectedTag().toInt());
bool userMode = preset == AudioSettings::Preset::custom;
myVolumeSlider->setEnabled(active);
myStereoSoundCheckbox->setEnabled(active);
myModePopup->setEnabled(active);
// enable only for Pitfall II cart
myDpcPitch->setEnabled(active && instance().hasConsole() && instance().console().cartridge().name() == "CartridgeDPC");
myFragsizePopup->setEnabled(active && userMode);
myFreqPopup->setEnabled(active && userMode);
myResamplingPopup->setEnabled(active && userMode);
myHeadroomSlider->setEnabled(active && userMode);
myBufferSizeSlider->setEnabled(active && userMode);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void AudioDialog::updatePreset()
{
AudioSettings::Preset preset = static_cast<AudioSettings::Preset>(myModePopup->getSelectedTag().toInt());
// Make a copy that does not affect the actual settings...
AudioSettings audioSettings = instance().audioSettings();
audioSettings.setPersistent(false);
// ... and set the requested preset
audioSettings.setPreset(preset);
updateSettingsWithPreset(audioSettings);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void AudioDialog::handleCommand(CommandSender* sender, int cmd,
int data, int id)
{
switch(cmd)
{
case GuiObject::kOKCmd:
saveConfig();
close();
break;
case GuiObject::kDefaultsCmd:
setDefaults();
break;
case kSoundEnableChanged:
updateEnabledState();
break;
case kModeChanged:
updatePreset();
updateEnabledState();
break;
case kHeadroomChanged:
{
std::ostringstream ss;
ss << std::fixed << std::setprecision(1) << (0.5 * myHeadroomSlider->getValue()) << " frames";
myHeadroomSlider->setValueLabel(ss.str());
break;
}
case kBufferSizeChanged:
{
std::ostringstream ss;
ss << std::fixed << std::setprecision(1) << (0.5 * myBufferSizeSlider->getValue()) << " frames";
myBufferSizeSlider->setValueLabel(ss.str());
break;
}
default:
Dialog::handleCommand(sender, cmd, data, 0);
break;
}
}