[Scummvm-cvs-logs] SF.net SVN: scummvm: [27311] scummvm/trunk/gui
fingolfin at users.sourceforge.net
fingolfin at users.sourceforge.net
Sun Jun 10 15:56:10 CEST 2007
Revision: 27311
http://scummvm.svn.sourceforge.net/scummvm/?rev=27311&view=rev
Author: fingolfin
Date: 2007-06-10 06:56:10 -0700 (Sun, 10 Jun 2007)
Log Message:
-----------
Extended the fix for bug #1677997 to also cover the global options dialog; also made the code a bit more flexible
Modified Paths:
--------------
scummvm/trunk/gui/launcher.cpp
scummvm/trunk/gui/options.cpp
scummvm/trunk/gui/options.h
Modified: scummvm/trunk/gui/launcher.cpp
===================================================================
--- scummvm/trunk/gui/launcher.cpp 2007-06-10 12:51:26 UTC (rev 27310)
+++ scummvm/trunk/gui/launcher.cpp 2007-06-10 13:56:10 UTC (rev 27311)
@@ -124,13 +124,12 @@
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 @@
_focusedWidget = 0;
_dragWidget = 0;
setupWidgets();
- resetWidgets();
+ loadConfigToWidgets();
}
OptionsDialog::reflowLayout();
@@ -311,16 +310,12 @@
_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 @@
_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 @@
ConfMan.removeKey("platform", _domain);
else
ConfMan.set("platform", Common::getPlatformCode(platform), _domain);
- }
- OptionsDialog::close();
}
void EditGameDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {
Modified: scummvm/trunk/gui/options.cpp
===================================================================
--- scummvm/trunk/gui/options.cpp 2007-06-10 12:51:26 UTC (rev 27310)
+++ scummvm/trunk/gui/options.cpp 2007-06-10 13:56:10 UTC (rev 27311)
@@ -122,7 +122,11 @@
// Reset result value
setResult(0);
+
+ loadConfigToWidgets();
+}
+void OptionsDialog::loadConfigToWidgets() {
// Graphic options
if (_fullscreenCheckbox) {
_gfxPopUp->setSelected(0);
@@ -251,7 +255,16 @@
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 @@
ConfMan.removeKey("speech_mute", _domain);
}
}
-
- // Save config file
- ConfMan.flushToDisk();
- }
-
- Dialog::close();
}
void OptionsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {
@@ -659,7 +666,14 @@
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");
tab->setHints(THEME_HINT_FIRST_DRAW | THEME_HINT_SAVE_BACKGROUND);
@@ -754,9 +768,27 @@
#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
Common::String savePath(ConfMan.get("savepath", _domain));
@@ -791,8 +823,9 @@
}
}
-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 @@
ConfMan.removeKey("extrapath", _domain);
ConfMan.setInt("autosave_period", _autosavePeriodPopUp->getSelectedTag(), _domain);
- }
- OptionsDialog::close();
}
void GlobalOptionsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {
Modified: scummvm/trunk/gui/options.h
===================================================================
--- scummvm/trunk/gui/options.h 2007-06-10 12:51:26 UTC (rev 27310)
+++ scummvm/trunk/gui/options.h 2007-06-10 13:56:10 UTC (rev 27311)
@@ -81,6 +81,10 @@
void setVolumeSettingsState(bool enabled);
void setSubtitleSettingsState(bool enabled);
+ //virtual void setupWidgets();
+ virtual void loadConfigToWidgets();
+ virtual void saveConfigFromWidgets();
+
private:
//
// Graphics controls
@@ -147,10 +151,10 @@
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 @@
StaticTextWidget *_curTheme;
PopUpWidget *_autosavePeriodPopUp;
+
+ void setupWidgets();
+ virtual void loadConfigToWidgets();
+ virtual void saveConfigFromWidgets();
};
} // End of namespace GUI
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list