aboutsummaryrefslogtreecommitdiff
path: root/gui/options.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gui/options.cpp')
-rw-r--r--gui/options.cpp66
1 files changed, 60 insertions, 6 deletions
diff --git a/gui/options.cpp b/gui/options.cpp
index 371a949c35..aa5f7b46bb 100644
--- a/gui/options.cpp
+++ b/gui/options.cpp
@@ -627,18 +627,51 @@ void OptionsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data
_midiGainLabel->setLabel(Common::String::format("%.2f", (double)_midiGainSlider->getValue() / 100.0));
_midiGainLabel->draw();
break;
- case kMusicVolumeChanged:
- _musicVolumeLabel->setValue(_musicVolumeSlider->getValue());
+ case kMusicVolumeChanged: {
+ const int newValue = _musicVolumeSlider->getValue();
+ _musicVolumeLabel->setValue(newValue);
_musicVolumeLabel->draw();
+
+ if (_guioptions.contains(GUIO_LINKMUSICTOSFX)) {
+ updateSfxVolume(newValue);
+
+ if (_guioptions.contains(GUIO_LINKSPEECHTOSFX)) {
+ updateSpeechVolume(newValue);
+ }
+ }
+
break;
- case kSfxVolumeChanged:
+ }
+ case kSfxVolumeChanged: {
+ const int newValue = _sfxVolumeSlider->getValue();
_sfxVolumeLabel->setValue(_sfxVolumeSlider->getValue());
_sfxVolumeLabel->draw();
+
+ if (_guioptions.contains(GUIO_LINKMUSICTOSFX)) {
+ updateMusicVolume(newValue);
+ }
+
+ if (_guioptions.contains(GUIO_LINKSPEECHTOSFX)) {
+ updateSpeechVolume(newValue);
+ }
+
break;
- case kSpeechVolumeChanged:
- _speechVolumeLabel->setValue(_speechVolumeSlider->getValue());
+ }
+ case kSpeechVolumeChanged: {
+ const int newValue = _speechVolumeSlider->getValue();
+ _speechVolumeLabel->setValue(newValue);
_speechVolumeLabel->draw();
+
+ if (_guioptions.contains(GUIO_LINKSPEECHTOSFX)) {
+ updateSfxVolume(newValue);
+
+ if (_guioptions.contains(GUIO_LINKMUSICTOSFX)) {
+ updateMusicVolume(newValue);
+ }
+ }
+
break;
+ }
case kMuteAllChanged:
// 'true' because if control is disabled then event do not pass
setVolumeSettingsState(true);
@@ -769,7 +802,7 @@ void OptionsDialog::setVolumeSettingsState(bool enabled) {
// Disable speech volume slider, when we are in subtitle only mode.
if (_subToggleGroup)
ena = ena && _subToggleGroup->getValue() != kSubtitlesSubs;
- if (_guioptions.contains(GUIO_NOSPEECH))
+ if (_guioptions.contains(GUIO_NOSPEECH) || _guioptions.contains(GUIO_NOSPEECHVOLUME))
ena = false;
_speechVolumeDesc->setEnabled(ena);
@@ -1142,6 +1175,27 @@ int OptionsDialog::getSubtitleMode(bool subtitles, bool speech_mute) {
return kSubtitlesSubs;
}
+void OptionsDialog::updateMusicVolume(const int newValue) const {
+ _musicVolumeLabel->setValue(newValue);
+ _musicVolumeSlider->setValue(newValue);
+ _musicVolumeLabel->draw();
+ _musicVolumeSlider->draw();
+}
+
+void OptionsDialog::updateSfxVolume(const int newValue) const {
+ _sfxVolumeLabel->setValue(newValue);
+ _sfxVolumeSlider->setValue(newValue);
+ _sfxVolumeLabel->draw();
+ _sfxVolumeSlider->draw();
+}
+
+void OptionsDialog::updateSpeechVolume(const int newValue) const {
+ _speechVolumeLabel->setValue(newValue);
+ _speechVolumeSlider->setValue(newValue);
+ _speechVolumeLabel->draw();
+ _speechVolumeSlider->draw();
+}
+
void OptionsDialog::reflowLayout() {
if (_graphicsTabId != -1 && _tabWidget)
_tabWidget->setTabTitle(_graphicsTabId, g_system->getOverlayWidth() > 320 ? _("Graphics") : _("GFX"));