aboutsummaryrefslogtreecommitdiff
path: root/gui
diff options
context:
space:
mode:
authorMax Horn2007-06-10 13:56:10 +0000
committerMax Horn2007-06-10 13:56:10 +0000
commit85893e457d53aac998a4e83ab651952d954a6d7a (patch)
tree27fe7223641986bb5a1b946d764ecedd08fc3c8d /gui
parentede78ba7170d228555b5a9cc4b602a21e924f1ce (diff)
downloadscummvm-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.cpp23
-rw-r--r--gui/options.cpp55
-rw-r--r--gui/options.h12
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