aboutsummaryrefslogtreecommitdiff
path: root/gui/options.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gui/options.cpp')
-rw-r--r--gui/options.cpp165
1 files changed, 114 insertions, 51 deletions
diff --git a/gui/options.cpp b/gui/options.cpp
index 1346434050..8e995e06e5 100644
--- a/gui/options.cpp
+++ b/gui/options.cpp
@@ -53,8 +53,11 @@ enum {
OptionsDialog::OptionsDialog(const String &domain, int x, int y, int w, int h)
: Dialog(x, y, w, h),
_domain(domain),
+ _enableGraphicSettings(false),
_gfxPopUp(0), _fullscreenCheckbox(0), _aspectCheckbox(0),
+ _enableAudioSettings(false),
_multiMidiCheckbox(0), _mt32Checkbox(0),
+ _enableVolumeSettings(false),
_masterVolumeSlider(0), _masterVolumeLabel(0),
_musicVolumeSlider(0), _musicVolumeLabel(0),
_sfxVolumeSlider(0), _sfxVolumeLabel(0) {
@@ -67,71 +70,97 @@ void OptionsDialog::open() {
// Reset result value
setResult(0);
- // FIXME - disable GFX popup for now
- _gfxPopUp->setSelected(0);
- _gfxPopUp->setEnabled(false);
-
- // Fullscreen setting
- _fullscreenCheckbox->setState(ConfMan.getBool("fullscreen", _domain));
-
- // Aspect ratio setting
- _aspectCheckbox->setState(ConfMan.getBool("aspect_ratio", _domain));
-
- // Music driver
- const MidiDriverDescription *md = getAvailableMidiDrivers();
- const int midiDriver = parseMusicDriver(ConfMan.get("music_driver", _domain));
- int i = 0;
- while (md->name && md->id != midiDriver) {
- i++;
- md++;
+ if (_fullscreenCheckbox) {
+ // FIXME - disable GFX popup for now
+ _gfxPopUp->setSelected(0);
+ _gfxPopUp->setEnabled(false);
+
+ // Fullscreen setting
+ _fullscreenCheckbox->setState(ConfMan.getBool("fullscreen", _domain));
+
+ // Aspect ratio setting
+ _aspectCheckbox->setState(ConfMan.getBool("aspect_ratio", _domain));
}
- _midiPopUp->setSelected(md->name ? i : 0);
- // Multi midi setting
- _multiMidiCheckbox->setState(ConfMan.getBool("multi_midi", _domain));
-
- // Native mt32 setting
- _mt32Checkbox->setState(ConfMan.getBool("native_mt32", _domain));
-
- int vol;
-
- vol = ConfMan.getInt("master_volume", _domain);
- _masterVolumeSlider->setValue(vol);
- _masterVolumeLabel->setValue(vol);
-
- vol = ConfMan.getInt("music_volume", _domain);
- _musicVolumeSlider->setValue(vol);
- _musicVolumeLabel->setValue(vol);
-
- vol = ConfMan.getInt("sfx_volume", _domain);
- _sfxVolumeSlider->setValue(vol);
- _sfxVolumeLabel->setValue(vol);
+ if (_multiMidiCheckbox) {
+ // Music driver
+ const MidiDriverDescription *md = getAvailableMidiDrivers();
+ int i = 0;
+ const int midiDriver =
+ ConfMan.hasKey("music_driver", _domain)
+ ? parseMusicDriver(ConfMan.get("music_driver", _domain))
+ : MD_AUTO;
+ while (md->name && md->id != midiDriver) {
+ i++;
+ md++;
+ }
+ _midiPopUp->setSelected(md->name ? i : 0);
+
+ // Multi midi setting
+ _multiMidiCheckbox->setState(ConfMan.getBool("multi_midi", _domain));
+
+ // Native mt32 setting
+ _mt32Checkbox->setState(ConfMan.getBool("native_mt32", _domain));
+ }
+
+ if (_masterVolumeSlider) {
+ int vol;
+
+ vol = ConfMan.getInt("master_volume", _domain);
+ _masterVolumeSlider->setValue(vol);
+ _masterVolumeLabel->setValue(vol);
+
+ vol = ConfMan.getInt("music_volume", _domain);
+ _musicVolumeSlider->setValue(vol);
+ _musicVolumeLabel->setValue(vol);
+
+ vol = ConfMan.getInt("sfx_volume", _domain);
+ _sfxVolumeSlider->setValue(vol);
+ _sfxVolumeLabel->setValue(vol);
+ }
}
void OptionsDialog::close() {
if (getResult()) {
if (_fullscreenCheckbox) {
- ConfMan.set("fullscreen", _fullscreenCheckbox->getState(), _domain);
- ConfMan.set("aspect_ratio", _aspectCheckbox->getState(), _domain);
+ if (_enableGraphicSettings) {
+ ConfMan.set("fullscreen", _fullscreenCheckbox->getState(), _domain);
+ ConfMan.set("aspect_ratio", _aspectCheckbox->getState(), _domain);
+ } else {
+ ConfMan.removeKey("fullscreen", _domain);
+ ConfMan.removeKey("aspect_ratio", _domain);
+ }
}
if (_masterVolumeSlider) {
- ConfMan.set("master_volume", _masterVolumeSlider->getValue(), _domain);
- ConfMan.set("music_volume", _musicVolumeSlider->getValue(), _domain);
- ConfMan.set("sfx_volume", _sfxVolumeSlider->getValue(), _domain);
+ if (_enableVolumeSettings) {
+ ConfMan.set("master_volume", _masterVolumeSlider->getValue(), _domain);
+ ConfMan.set("music_volume", _musicVolumeSlider->getValue(), _domain);
+ ConfMan.set("sfx_volume", _sfxVolumeSlider->getValue(), _domain);
+ } else {
+ ConfMan.removeKey("master_volume", _domain);
+ ConfMan.removeKey("music_volume", _domain);
+ ConfMan.removeKey("sfx_volume", _domain);
+ }
}
if (_multiMidiCheckbox) {
- ConfMan.set("multi_midi", _multiMidiCheckbox->getState(), _domain);
- ConfMan.set("native_mt32", _mt32Checkbox->getState(), _domain);
-
- const MidiDriverDescription *md = getAvailableMidiDrivers();
- while (md->name && md->id != (int)_midiPopUp->getSelectedTag())
- md++;
- if (md->name)
- ConfMan.set("music_driver", md->name, _domain);
- else
+ if (_enableAudioSettings) {
+ ConfMan.set("multi_midi", _multiMidiCheckbox->getState(), _domain);
+ ConfMan.set("native_mt32", _mt32Checkbox->getState(), _domain);
+
+ const MidiDriverDescription *md = getAvailableMidiDrivers();
+ while (md->name && md->id != (int)_midiPopUp->getSelectedTag())
+ md++;
+ if (md->name)
+ ConfMan.set("music_driver", md->name, _domain);
+ else
+ ConfMan.removeKey("music_driver", _domain);
+ } else {
+ ConfMan.removeKey("multi_midi", _domain);
+ ConfMan.removeKey("native_mt32", _domain);
ConfMan.removeKey("music_driver", _domain);
+ }
}
// Save config file
@@ -164,6 +193,34 @@ void OptionsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data
}
}
+void OptionsDialog::setGraphicSettingsState(bool enabled) {
+ _enableGraphicSettings = enabled;
+
+// _gfxPopUp->setEnabled(enabled);
+ _fullscreenCheckbox->setEnabled(enabled);
+ _aspectCheckbox->setEnabled(enabled);
+}
+
+void OptionsDialog::setAudioSettingsState(bool enabled) {
+ _enableAudioSettings = enabled;
+
+ _midiPopUp->setEnabled(enabled);
+ _multiMidiCheckbox->setEnabled(enabled);
+ _mt32Checkbox->setEnabled(enabled);
+}
+
+void OptionsDialog::setVolumeSettingsState(bool enabled) {
+ _enableVolumeSettings = enabled;
+
+ _masterVolumeSlider->setEnabled(enabled);
+ _masterVolumeLabel->setEnabled(enabled);
+ _musicVolumeSlider->setEnabled(enabled);
+ _musicVolumeLabel->setEnabled(enabled);
+ _sfxVolumeSlider->setEnabled(enabled);
+ _sfxVolumeLabel->setEnabled(enabled);
+}
+
+
int OptionsDialog::addGraphicControls(GuiObject *boss, int yoffset) {
const int x = 10;
const int w = _w - 2 * 10;
@@ -197,6 +254,8 @@ int OptionsDialog::addGraphicControls(GuiObject *boss, int yoffset) {
// Aspect ratio checkbox
_aspectCheckbox = new CheckboxWidget(boss, x, yoffset, w, 16, "Aspect ratio correction");
yoffset += 16;
+
+ _enableGraphicSettings = true;
return yoffset;
}
@@ -223,6 +282,8 @@ int OptionsDialog::addMIDIControls(GuiObject *boss, int yoffset) {
// Native mt32 setting
_mt32Checkbox = new CheckboxWidget(boss, x, yoffset, w, 16, "True Roland MT-32 (disable GM emulation)");
yoffset += 16;
+
+ _enableAudioSettings = true;
return yoffset;
}
@@ -246,6 +307,8 @@ int OptionsDialog::addVolumeControls(GuiObject *boss, int yoffset) {
_sfxVolumeSlider->setMinValue(0); _sfxVolumeSlider->setMaxValue(255);
_sfxVolumeLabel->setFlags(WIDGET_CLEARBG);
yoffset += 16;
+
+ _enableVolumeSettings = true;
return yoffset;
}