mirror of
https://github.com/libretro/scummvm.git
synced 2025-04-02 14:51:40 +00:00
added checkboxes to the 'Edit Game...' dialog which let the user determine whether to override global settings or not; besides other things, this fixes bug #837599 (Default volume is 0 for newly added games)
svn-id: r11196
This commit is contained in:
parent
ced5921ac0
commit
a93c9f49ba
@ -53,7 +53,12 @@ enum {
|
||||
kAddGameCmd = 'ADDG',
|
||||
kEditGameCmd = 'EDTG',
|
||||
kRemoveGameCmd = 'REMG',
|
||||
kQuitCmd = 'QUIT'
|
||||
kQuitCmd = 'QUIT',
|
||||
|
||||
|
||||
kCmdGlobalGraphicsOverride = 'OGFX',
|
||||
kCmdGlobalAudioOverride = 'OSFX',
|
||||
kCmdGlobalVolumeOverride = 'OVOL'
|
||||
};
|
||||
|
||||
/*
|
||||
@ -88,10 +93,14 @@ protected:
|
||||
|
||||
PopUpWidget *_langPopUp;
|
||||
PopUpWidget *_platformPopUp;
|
||||
|
||||
CheckboxWidget *_globalGraphicsOverride;
|
||||
CheckboxWidget *_globalAudioOverride;
|
||||
CheckboxWidget *_globalVolumeOverride;
|
||||
};
|
||||
|
||||
EditGameDialog::EditGameDialog(const String &domain, GameSettings target)
|
||||
: OptionsDialog(domain, 10, 50, 320 - 2 * 10, 140) {
|
||||
: OptionsDialog(domain, 10, 40, 320 - 2 * 10, 140) {
|
||||
|
||||
const int x = 5;
|
||||
const int w = _w - 15;
|
||||
@ -157,6 +166,10 @@ EditGameDialog::EditGameDialog(const String &domain, GameSettings target)
|
||||
//
|
||||
tab->addTab("Graphics");
|
||||
yoffset = vBorder;
|
||||
|
||||
_globalGraphicsOverride = new CheckboxWidget(tab, x, yoffset, w, 16, "Override global graphic settings", kCmdGlobalGraphicsOverride);
|
||||
yoffset += 16;
|
||||
|
||||
yoffset = addGraphicControls(tab, yoffset);
|
||||
|
||||
//
|
||||
@ -164,6 +177,10 @@ EditGameDialog::EditGameDialog(const String &domain, GameSettings target)
|
||||
//
|
||||
tab->addTab("Audio");
|
||||
yoffset = vBorder;
|
||||
|
||||
_globalAudioOverride = new CheckboxWidget(tab, x, yoffset, w, 16, "Override global audio settings", kCmdGlobalAudioOverride);
|
||||
yoffset += 16;
|
||||
|
||||
yoffset = addMIDIControls(tab, yoffset);
|
||||
|
||||
//
|
||||
@ -171,6 +188,10 @@ EditGameDialog::EditGameDialog(const String &domain, GameSettings target)
|
||||
//
|
||||
tab->addTab("Volume");
|
||||
yoffset = vBorder;
|
||||
|
||||
_globalVolumeOverride = new CheckboxWidget(tab, x, yoffset, w, 16, "Override global volume settings", kCmdGlobalVolumeOverride);
|
||||
yoffset += 16;
|
||||
|
||||
yoffset = addVolumeControls(tab, yoffset);
|
||||
|
||||
|
||||
@ -185,6 +206,23 @@ EditGameDialog::EditGameDialog(const String &domain, GameSettings target)
|
||||
void EditGameDialog::open() {
|
||||
OptionsDialog::open();
|
||||
|
||||
// En-/disable dialog items depending on whether overrides are active or not.
|
||||
bool e;
|
||||
|
||||
e = ConfMan.hasKey("fullscreen", _domain) ||
|
||||
ConfMan.hasKey("aspect_ratio", _domain);
|
||||
_globalGraphicsOverride->setState(e);
|
||||
|
||||
e = ConfMan.hasKey("music_driver", _domain) ||
|
||||
ConfMan.hasKey("multi_midi", _domain) ||
|
||||
ConfMan.hasKey("native_mt32", _domain);
|
||||
_globalAudioOverride->setState(e);
|
||||
|
||||
e = ConfMan.hasKey("master_volume", _domain) ||
|
||||
ConfMan.hasKey("music_volume", _domain) ||
|
||||
ConfMan.hasKey("sfx_volume", _domain);
|
||||
_globalVolumeOverride->setState(e);
|
||||
|
||||
int sel = 0;
|
||||
|
||||
// TODO: game path
|
||||
@ -229,7 +267,20 @@ void EditGameDialog::close() {
|
||||
}
|
||||
|
||||
void EditGameDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {
|
||||
if (cmd == kOKCmd) {
|
||||
switch (cmd) {
|
||||
case kCmdGlobalGraphicsOverride:
|
||||
setGraphicSettingsState(data != 0);
|
||||
draw();
|
||||
break;
|
||||
case kCmdGlobalAudioOverride:
|
||||
setAudioSettingsState(data != 0);
|
||||
draw();
|
||||
break;
|
||||
case kCmdGlobalVolumeOverride:
|
||||
setVolumeSettingsState(data != 0);
|
||||
draw();
|
||||
break;
|
||||
case kOKCmd: {
|
||||
// Write back changes made to config object
|
||||
String newDomain(_domainWidget->getLabel());
|
||||
if (newDomain != _domain) {
|
||||
@ -241,8 +292,11 @@ void EditGameDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat
|
||||
ConfMan.renameGameDomain(_domain, newDomain);
|
||||
_domain = newDomain;
|
||||
}
|
||||
}
|
||||
// FALL THROUGH to default case
|
||||
default:
|
||||
OptionsDialog::handleCommand(sender, cmd, data);
|
||||
}
|
||||
OptionsDialog::handleCommand(sender, cmd, data);
|
||||
}
|
||||
|
||||
|
||||
|
165
gui/options.cpp
165
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;
|
||||
}
|
||||
|
@ -52,11 +52,16 @@ protected:
|
||||
int addGraphicControls(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 setVolumeSettingsState(bool enabled);
|
||||
|
||||
private:
|
||||
//
|
||||
// Graphics controls
|
||||
//
|
||||
bool _enableGraphicSettings;
|
||||
PopUpWidget *_gfxPopUp;
|
||||
CheckboxWidget *_fullscreenCheckbox;
|
||||
CheckboxWidget *_aspectCheckbox;
|
||||
@ -64,14 +69,16 @@ private:
|
||||
//
|
||||
// MIDI controls
|
||||
//
|
||||
bool _enableAudioSettings;
|
||||
PopUpWidget *_midiPopUp;
|
||||
|
||||
CheckboxWidget *_multiMidiCheckbox;
|
||||
CheckboxWidget *_mt32Checkbox;
|
||||
|
||||
//
|
||||
// Volume controls
|
||||
//
|
||||
bool _enableVolumeSettings;
|
||||
|
||||
SliderWidget *_masterVolumeSlider;
|
||||
StaticTextWidget *_masterVolumeLabel;
|
||||
|
||||
|
@ -167,7 +167,6 @@ CheckboxWidget::CheckboxWidget(GuiObject *boss, int x, int y, int w, int h, cons
|
||||
void CheckboxWidget::handleMouseUp(int x, int y, int button, int clickCount) {
|
||||
if (isEnabled() && x >= 0 && x < _w && y >= 0 && y < _h) {
|
||||
toggleState();
|
||||
sendCommand(_cmd, _state);
|
||||
}
|
||||
}
|
||||
|
||||
@ -177,6 +176,7 @@ void CheckboxWidget::setState(bool state) {
|
||||
_flags ^= WIDGET_INV_BORDER;
|
||||
draw();
|
||||
}
|
||||
sendCommand(_cmd, _state);
|
||||
}
|
||||
|
||||
void CheckboxWidget::drawWidget(bool hilite) {
|
||||
@ -248,7 +248,9 @@ void SliderWidget::drawWidget(bool hilite) {
|
||||
gui->box(_x + _labelWidth, _y, _w - _labelWidth, _h, gui->_color, gui->_shadowcolor);
|
||||
|
||||
// Draw the 'bar'
|
||||
gui->fillRect(_x + _labelWidth + 2, _y + 2, valueToPos(_value), _h - 4, hilite ? gui->_textcolorhi : gui->_textcolor);
|
||||
gui->fillRect(_x + _labelWidth + 2, _y + 2, valueToPos(_value), _h - 4,
|
||||
!isEnabled() ? gui->_color :
|
||||
hilite ? gui->_textcolorhi : gui->_textcolor);
|
||||
}
|
||||
|
||||
int SliderWidget::valueToPos(int value) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user