diff options
Diffstat (limited to 'gui')
-rw-r--r-- | gui/launcher.cpp | 31 | ||||
-rw-r--r-- | gui/options.cpp | 87 | ||||
-rw-r--r-- | gui/options.h | 10 |
3 files changed, 100 insertions, 28 deletions
diff --git a/gui/launcher.cpp b/gui/launcher.cpp index e9b784ef45..67b562dfd8 100644 --- a/gui/launcher.cpp +++ b/gui/launcher.cpp @@ -61,6 +61,7 @@ enum { kCmdGlobalGraphicsOverride = 'OGFX', kCmdGlobalAudioOverride = 'OSFX', + kCmdGlobalMIDIOverride = 'OMID', kCmdGlobalVolumeOverride = 'OVOL', kCmdExtraBrowser = 'PEXT', @@ -128,6 +129,7 @@ protected: CheckboxWidget *_globalGraphicsOverride; CheckboxWidget *_globalAudioOverride; + CheckboxWidget *_globalMIDIOverride; CheckboxWidget *_globalVolumeOverride; }; @@ -215,7 +217,7 @@ EditGameDialog::EditGameDialog(const String &domain, GameSettings target) yoffset += 18; // - // 2) The graphics tab + // 3) The graphics tab // tab->addTab("Gfx"); yoffset = vBorder; @@ -226,7 +228,7 @@ EditGameDialog::EditGameDialog(const String &domain, GameSettings target) yoffset = addGraphicControls(tab, yoffset); // - // 3) The audio tab + // 4) The audio tab // tab->addTab("Audio"); yoffset = vBorder; @@ -234,10 +236,21 @@ EditGameDialog::EditGameDialog(const String &domain, GameSettings target) _globalAudioOverride = new CheckboxWidget(tab, x, yoffset, w, 16, "Override global audio settings", kCmdGlobalAudioOverride); yoffset += 16; + yoffset = addAudioControls(tab, yoffset); + + // + // 5) The MIDI tab + // + tab->addTab("MIDI"); + yoffset = vBorder; + + _globalMIDIOverride = new CheckboxWidget(tab, x, yoffset, w, 16, "Override global MIDI settings", kCmdGlobalMIDIOverride); + yoffset += 16; + yoffset = addMIDIControls(tab, yoffset); // - // 3) The volume tab + // 6) The volume tab // tab->addTab("Volume"); yoffset = vBorder; @@ -269,10 +282,14 @@ void EditGameDialog::open() { _globalGraphicsOverride->setState(e); e = ConfMan.hasKey("music_driver", _domain) || - ConfMan.hasKey("multi_midi", _domain) || - ConfMan.hasKey("native_mt32", _domain); + ConfMan.hasKey("subtitles", _domain); _globalAudioOverride->setState(e); + e = ConfMan.hasKey("multi_midi", _domain) || + ConfMan.hasKey("native_mt32", _domain)|| + ConfMan.hasKey("enable_gs", _domain); + _globalMIDIOverride->setState(e); + e = ConfMan.hasKey("music_volume", _domain) || ConfMan.hasKey("sfx_volume", _domain) || ConfMan.hasKey("speech_volume", _domain); @@ -342,6 +359,10 @@ void EditGameDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat setAudioSettingsState(data != 0); draw(); break; + case kCmdGlobalMIDIOverride: + setMIDISettingsState(data != 0); + draw(); + break; case kCmdGlobalVolumeOverride: setVolumeSettingsState(data != 0); draw(); diff --git a/gui/options.cpp b/gui/options.cpp index 040fafc9d0..1544730c89 100644 --- a/gui/options.cpp +++ b/gui/options.cpp @@ -78,7 +78,9 @@ OptionsDialog::OptionsDialog(const String &domain, int x, int y, int w, int h) _enableGraphicSettings(false), _gfxPopUp(0), _renderModePopUp(0), _fullscreenCheckbox(0), _aspectCheckbox(0), _enableAudioSettings(false), - _multiMidiCheckbox(0), _mt32Checkbox(0), _subCheckbox(0), + _subCheckbox(0), + _enableMIDISettings(false), + _multiMidiCheckbox(0), _mt32Checkbox(0), _enableGSCheckbox(0), _enableVolumeSettings(false), _musicVolumeSlider(0), _musicVolumeLabel(0), _sfxVolumeSlider(0), _sfxVolumeLabel(0), @@ -131,7 +133,7 @@ void OptionsDialog::open() { #endif } - if (_multiMidiCheckbox) { + if (_subCheckbox) { // Music driver const MidiDriverDescription *md = MidiDriver::getAvailableMidiDrivers(); int i = 0; @@ -145,15 +147,22 @@ void OptionsDialog::open() { } _midiPopUp->setSelected(md->name ? i : 0); + // Subtitles setting + _subCheckbox->setState(ConfMan.getBool("subtitles", _domain)); + } + + if (_multiMidiCheckbox) { + // Multi midi setting _multiMidiCheckbox->setState(ConfMan.getBool("multi_midi", _domain)); // Native mt32 setting _mt32Checkbox->setState(ConfMan.getBool("native_mt32", _domain)); - // Subtitles setting - _subCheckbox->setState(ConfMan.getBool("subtitles", _domain)); + // GS extensions setting + _enableGSCheckbox->setState(ConfMan.getBool("enable_gs", _domain)); } + if (_musicVolumeSlider) { int vol; @@ -204,10 +213,8 @@ void OptionsDialog::close() { } } - if (_multiMidiCheckbox) { + if (_subCheckbox) { if (_enableAudioSettings) { - ConfMan.set("multi_midi", _multiMidiCheckbox->getState(), _domain); - ConfMan.set("native_mt32", _mt32Checkbox->getState(), _domain); ConfMan.set("subtitles", _subCheckbox->getState(), _domain); const MidiDriverDescription *md = MidiDriver::getAvailableMidiDrivers(); while (md->name && md->id != (int)_midiPopUp->getSelectedTag()) @@ -217,13 +224,23 @@ void OptionsDialog::close() { else ConfMan.removeKey("music_driver", _domain); } else { - ConfMan.removeKey("multi_midi", _domain); - ConfMan.removeKey("native_mt32", _domain); ConfMan.removeKey("music_driver", _domain); ConfMan.removeKey("subtitles", _domain); } } + if (_multiMidiCheckbox) { + if (_enableMIDISettings) { + ConfMan.set("multi_midi", _multiMidiCheckbox->getState(), _domain); + ConfMan.set("native_mt32", _mt32Checkbox->getState(), _domain); + ConfMan.set("enable_gs", _enableGSCheckbox->getState(), _domain); + } else { + ConfMan.removeKey("multi_midi", _domain); + ConfMan.removeKey("native_mt32", _domain); + ConfMan.removeKey("enable_gs", _domain); + } + } + // Save config file ConfMan.flushToDisk(); } @@ -269,9 +286,15 @@ void OptionsDialog::setAudioSettingsState(bool enabled) { _enableAudioSettings = enabled; _midiPopUp->setEnabled(enabled); + _subCheckbox->setEnabled(enabled); +} + +void OptionsDialog::setMIDISettingsState(bool enabled) { + _enableMIDISettings = enabled; + _multiMidiCheckbox->setEnabled(enabled); _mt32Checkbox->setEnabled(enabled); - _subCheckbox->setEnabled(enabled); + _enableGSCheckbox->setEnabled(enabled); } void OptionsDialog::setVolumeSettingsState(bool enabled) { @@ -330,13 +353,13 @@ int OptionsDialog::addGraphicControls(GuiObject *boss, int yoffset) { return yoffset; } -int OptionsDialog::addMIDIControls(GuiObject *boss, int yoffset) { +int OptionsDialog::addAudioControls(GuiObject *boss, int yoffset) { const int x = 10; const int w = _w - 20; // The MIDI mode popup & a label _midiPopUp = new PopUpWidget(boss, x-5, yoffset, w+5, kLineHeight, "Music driver: ", 100); - yoffset += 16; + yoffset += 18; // Populate it const MidiDriverDescription *md = MidiDriver::getAvailableMidiDrivers(); @@ -345,25 +368,39 @@ int OptionsDialog::addMIDIControls(GuiObject *boss, int yoffset) { md++; } + // Subtitles on/off + _subCheckbox = new CheckboxWidget(boss, x, yoffset, w, 16, "Display subtitles"); + yoffset += 16; + + yoffset += 18; + + _enableAudioSettings = true; + + return yoffset; +} + +int OptionsDialog::addMIDIControls(GuiObject *boss, int yoffset) { + const int x = 10; + const int w = _w - 20; + // SoundFont new ButtonWidget(boss, x, yoffset, kButtonWidth + 14, 16, "SoundFont: ", kChooseSoundFontCmd, 0); _soundFont = new StaticTextWidget(boss, x + kButtonWidth + 20, yoffset + 3, _w - (x + kButtonWidth + 20) - 10, kLineHeight, "None", kTextAlignLeft); - yoffset += 18; - + // Multi midi setting _multiMidiCheckbox = new CheckboxWidget(boss, x, yoffset, w, 16, "Mixed Adlib/MIDI mode"); - yoffset += 15; + yoffset += 16; // Native mt32 setting _mt32Checkbox = new CheckboxWidget(boss, x, yoffset, w, 16, "True Roland MT-32 (disable GM emulation)"); - yoffset += 15; + yoffset += 16; - // Subtitles on/off - _subCheckbox = new CheckboxWidget(boss, x, yoffset, w, 16, "Display subtitles"); - yoffset += 15; + // GS Extensions setting + _enableGSCheckbox = new CheckboxWidget(boss, x, yoffset, w, 16, "Enable Roland GS Mode"); + yoffset += 16; - _enableAudioSettings = true; + _enableMIDISettings = true; return yoffset; } @@ -417,13 +454,19 @@ GlobalOptionsDialog::GlobalOptionsDialog(GameDetector &detector) // tab->addTab("Audio"); yoffset = vBorder; - yoffset = addMIDIControls(tab, yoffset); + yoffset = addAudioControls(tab, yoffset); yoffset = addVolumeControls(tab, yoffset); // TODO: cd drive setting + // + // 3) The MIDI tab + // + tab->addTab("MIDI"); + yoffset = vBorder; + yoffset = addMIDIControls(tab, yoffset); // - // 3) The miscellaneous tab + // 4) The miscellaneous tab // tab->addTab("Paths"); yoffset = vBorder; diff --git a/gui/options.h b/gui/options.h index 5797a62494..cbe6817be1 100644 --- a/gui/options.h +++ b/gui/options.h @@ -59,11 +59,13 @@ protected: StaticTextWidget *_soundFont; int addGraphicControls(GuiObject *boss, int yoffset); + int addAudioControls(GuiObject *boss, int yoffset); int addMIDIControls(GuiObject *boss, int yoffset); int addVolumeControls(GuiObject *boss, int yoffset); void setGraphicSettingsState(bool enabled); void setAudioSettingsState(bool enabled); + void setMIDISettingsState(bool enabled); void setVolumeSettingsState(bool enabled); private: @@ -81,9 +83,15 @@ private: // bool _enableAudioSettings; PopUpWidget *_midiPopUp; + CheckboxWidget *_subCheckbox; + + // + // MIDI controls + // + bool _enableMIDISettings; CheckboxWidget *_multiMidiCheckbox; CheckboxWidget *_mt32Checkbox; - CheckboxWidget *_subCheckbox; + CheckboxWidget *_enableGSCheckbox; // // Volume controls |