diff options
author | Max Horn | 2007-06-10 13:56:10 +0000 |
---|---|---|
committer | Max Horn | 2007-06-10 13:56:10 +0000 |
commit | 85893e457d53aac998a4e83ab651952d954a6d7a (patch) | |
tree | 27fe7223641986bb5a1b946d764ecedd08fc3c8d /gui | |
parent | ede78ba7170d228555b5a9cc4b602a21e924f1ce (diff) | |
download | scummvm-rg350-85893e457d53aac998a4e83ab651952d954a6d7a.tar.gz scummvm-rg350-85893e457d53aac998a4e83ab651952d954a6d7a.tar.bz2 scummvm-rg350-85893e457d53aac998a4e83ab651952d954a6d7a.zip |
Extended the fix for bug #1677997 to also cover the global options dialog; also made the code a bit more flexible
svn-id: r27311
Diffstat (limited to 'gui')
-rw-r--r-- | gui/launcher.cpp | 23 | ||||
-rw-r--r-- | gui/options.cpp | 55 | ||||
-rw-r--r-- | gui/options.h | 12 |
3 files changed, 61 insertions, 29 deletions
diff --git a/gui/launcher.cpp b/gui/launcher.cpp index 4f9670b254..9e6163ca72 100644 --- a/gui/launcher.cpp +++ b/gui/launcher.cpp @@ -124,13 +124,12 @@ public: virtual void reflowLayout(); - void open(); - void close(); virtual void handleCommand(CommandSender *sender, uint32 cmd, uint32 data); protected: void setupWidgets(); - void resetWidgets(); + virtual void loadConfigToWidgets(); + virtual void saveConfigFromWidgets(); String _desc; @@ -298,7 +297,7 @@ void EditGameDialog::reflowLayout() { _focusedWidget = 0; _dragWidget = 0; setupWidgets(); - resetWidgets(); + loadConfigToWidgets(); } OptionsDialog::reflowLayout(); @@ -311,16 +310,12 @@ void EditGameDialog::reflowLayout() { _platformPopUp->changeLabelWidth(labelWidth); } -void EditGameDialog::open() { - OptionsDialog::open(); - - resetWidgets(); -} - -void EditGameDialog::resetWidgets() { +void EditGameDialog::loadConfigToWidgets() { int sel, i; bool e, f; + OptionsDialog::loadConfigToWidgets(); + // En-/disable dialog items depending on whether overrides are active or not. e = ConfMan.hasKey("gfx_mode", _domain) || @@ -377,9 +372,9 @@ void EditGameDialog::resetWidgets() { _platformPopUp->setSelected(sel); } +void EditGameDialog::saveConfigFromWidgets() { + OptionsDialog::saveConfigFromWidgets(); -void EditGameDialog::close() { - if (getResult()) { ConfMan.set("description", _descriptionWidget->getEditString(), _domain); Common::Language lang = (Common::Language)_langPopUp->getSelectedTag(); @@ -405,8 +400,6 @@ void EditGameDialog::close() { ConfMan.removeKey("platform", _domain); else ConfMan.set("platform", Common::getPlatformCode(platform), _domain); - } - OptionsDialog::close(); } void EditGameDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) { diff --git a/gui/options.cpp b/gui/options.cpp index 8a85368e90..1ca6b266a6 100644 --- a/gui/options.cpp +++ b/gui/options.cpp @@ -122,7 +122,11 @@ void OptionsDialog::open() { // Reset result value setResult(0); + + loadConfigToWidgets(); +} +void OptionsDialog::loadConfigToWidgets() { // Graphic options if (_fullscreenCheckbox) { _gfxPopUp->setSelected(0); @@ -251,7 +255,16 @@ void OptionsDialog::open() { void OptionsDialog::close() { if (getResult()) { + saveConfigFromWidgets(); + + // Save config file + ConfMan.flushToDisk(); + } + + Dialog::close(); +} +void OptionsDialog::saveConfigFromWidgets() { // Graphic options if (_fullscreenCheckbox) { if (_enableGraphicSettings) { @@ -381,12 +394,6 @@ void OptionsDialog::close() { ConfMan.removeKey("speech_mute", _domain); } } - - // Save config file - ConfMan.flushToDisk(); - } - - Dialog::close(); } void OptionsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) { @@ -659,6 +666,13 @@ void OptionsDialog::reflowLayout() { GlobalOptionsDialog::GlobalOptionsDialog() : OptionsDialog(Common::ConfigManager::kApplicationDomain, "globaloptions") { + + // FIXME: Disable the setupWidgets() call here for now. See reflowLayout() + // for details. + //setupWidgets(); +} + +void GlobalOptionsDialog::setupWidgets() { // The tab widget TabWidget *tab = new TabWidget(this, "globaloptions_tabwidget"); @@ -754,8 +768,26 @@ GlobalOptionsDialog::~GlobalOptionsDialog() { #endif } -void GlobalOptionsDialog::open() { - OptionsDialog::open(); +void GlobalOptionsDialog::reflowLayout() { + // FIXME/HACK to workaround bug #1677997: Tear down the whole dialog and + // recreate it on the fly when a resolution/theme change occurs. Not nice + // at all, but works well enough. + { + delete _firstWidget; + _firstWidget = 0; + _mouseWidget = 0; + _focusedWidget = 0; + _dragWidget = 0; + setupWidgets(); + loadConfigToWidgets(); + } + + OptionsDialog::reflowLayout(); +} + +void GlobalOptionsDialog::loadConfigToWidgets() { + + OptionsDialog::loadConfigToWidgets(); #if !( defined(__DC__) || defined(__GP32__) || defined(__PLAYSTATION2__) ) // Set _savePath to the current save path @@ -791,8 +823,9 @@ void GlobalOptionsDialog::open() { } } -void GlobalOptionsDialog::close() { - if (getResult()) { +void GlobalOptionsDialog::saveConfigFromWidgets() { + OptionsDialog::saveConfigFromWidgets(); + String savePath(_savePath->getLabel()); if (!savePath.empty() && (savePath != "None")) ConfMan.set("savepath", savePath, _domain); @@ -810,8 +843,6 @@ void GlobalOptionsDialog::close() { ConfMan.removeKey("extrapath", _domain); ConfMan.setInt("autosave_period", _autosavePeriodPopUp->getSelectedTag(), _domain); - } - OptionsDialog::close(); } void GlobalOptionsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) { diff --git a/gui/options.h b/gui/options.h index 8743528f12..7b8b6abe46 100644 --- a/gui/options.h +++ b/gui/options.h @@ -81,6 +81,10 @@ protected: void setVolumeSettingsState(bool enabled); void setSubtitleSettingsState(bool enabled); + //virtual void setupWidgets(); + virtual void loadConfigToWidgets(); + virtual void saveConfigFromWidgets(); + private: // // Graphics controls @@ -147,10 +151,10 @@ public: GlobalOptionsDialog(); ~GlobalOptionsDialog(); - void open(); - void close(); void handleCommand(CommandSender *sender, uint32 cmd, uint32 data); + virtual void reflowLayout(); + protected: #ifdef SMALL_SCREEN_DEVICE KeysDialog *_keysDialog; @@ -165,6 +169,10 @@ protected: StaticTextWidget *_curTheme; PopUpWidget *_autosavePeriodPopUp; + + void setupWidgets(); + virtual void loadConfigToWidgets(); + virtual void saveConfigFromWidgets(); }; } // End of namespace GUI |