[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