[Scummvm-cvs-logs] CVS: scummvm/gui launcher.cpp,1.88,1.89 options.cpp,1.50,1.51 options.h,1.16,1.17

Max Horn fingolfin at users.sourceforge.net
Sun Mar 14 18:34:39 CET 2004


Update of /cvsroot/scummvm/scummvm/gui
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19082/gui

Modified Files:
	launcher.cpp options.cpp options.h 
Log Message:
...and mor. Next big thing should be to document the overlay stuff, but that'll have to wait till after I slept :-)

Index: launcher.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/gui/launcher.cpp,v
retrieving revision 1.88
retrieving revision 1.89
diff -u -d -r1.88 -r1.89
--- launcher.cpp	9 Feb 2004 07:52:21 -0000	1.88
+++ launcher.cpp	15 Mar 2004 02:21:03 -0000	1.89
@@ -86,8 +86,6 @@
 public:
 	EditGameDialog(const String &domain, GameSettings target);
 
-	void open();
-	void close();
 	virtual void handleCommand(CommandSender *sender, uint32 cmd, uint32 data);
 
 protected:
@@ -100,6 +98,10 @@
 	CheckboxWidget *_globalGraphicsOverride;
 	CheckboxWidget *_globalAudioOverride;
 	CheckboxWidget *_globalVolumeOverride;
+
+	virtual void applySettings();
+	virtual void loadSettings();
+	virtual void saveSettings();
 };
 
 EditGameDialog::EditGameDialog(const String &domain, GameSettings target)
@@ -203,11 +205,17 @@
 
 	// Add OK & Cancel buttons
 	addButton(_w - 2 * (kButtonWidth + 10), _h - 24, "Cancel", kCloseCmd, 0);
-	addButton(_w - (kButtonWidth + 10), _h - 24, "OK", kOKCmd, 0);
+	addButton(_w - (kButtonWidth + 10), _h - 24, "OK", kSaveCmd, 0);
 }
 
-void EditGameDialog::open() {
-	OptionsDialog::open();
+void EditGameDialog::applySettings() {
+	// Do *never* apply settings from the EditGameDialog!
+	// After all, we are editing a game target in the launcher; that target
+	// can definitely not be the active target, since we are in the launcher.
+}
+
+void EditGameDialog::loadSettings() {
+	OptionsDialog::loadSettings();
 
 	int sel, i;
 	bool e;
@@ -251,24 +259,22 @@
 	_platformPopUp->setSelected(sel);
 }
 
+void EditGameDialog::saveSettings() {
+	ConfMan.set("description", _descriptionWidget->getLabel(), _domain);
 
-void EditGameDialog::close() {
-	if (getResult()) {
-		ConfMan.set("description", _descriptionWidget->getLabel(), _domain);
+	Common::Language lang = (Common::Language)_langPopUp->getSelectedTag();
+	if (lang < 0)
+		ConfMan.removeKey("language", _domain);
+	else
+		ConfMan.set("language", Common::getLanguageCode(lang), _domain);
 
-		Common::Language lang = (Common::Language)_langPopUp->getSelectedTag();
-		if (lang < 0)
-			ConfMan.removeKey("language", _domain);
-		else
-			ConfMan.set("language", Common::getLanguageCode(lang), _domain);
+	Common::Platform platform = (Common::Platform)_platformPopUp->getSelectedTag();
+	if (platform < 0)
+		ConfMan.removeKey("platform", _domain);
+	else
+		ConfMan.set("platform", Common::getPlatformCode(platform), _domain);
 
-		Common::Platform platform = (Common::Platform)_platformPopUp->getSelectedTag();
-		if (platform < 0)
-			ConfMan.removeKey("platform", _domain);
-		else
-			ConfMan.set("platform", Common::getPlatformCode(platform), _domain);
-	}
-	OptionsDialog::close();
+	OptionsDialog::saveSettings();
 }
 
 void EditGameDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {
@@ -285,7 +291,7 @@
 		setVolumeSettingsState(data != 0);
 		draw();
 		break;
-	case kOKCmd: {
+	case kSaveCmd: {
 		// Write back changes made to config object
 		String newDomain(_domainWidget->getLabel());
 		if (newDomain != _domain) {

Index: options.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/gui/options.cpp,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -d -r1.50 -r1.51
--- options.cpp	24 Feb 2004 22:39:38 -0000	1.50
+++ options.cpp	15 Mar 2004 02:21:03 -0000	1.51
@@ -55,6 +55,8 @@
 OptionsDialog::OptionsDialog(const String &domain, int x, int y, int w, int h)
 	: Dialog(x, y, w, h),
 	_domain(domain),
+	_isActiveDomain(domain.isEmpty() || domain == ConfMan.getActiveDomain() ||
+				(ConfMan.getActiveDomain().isEmpty() && domain == Common::ConfigManager::kApplicationDomain)),
 	_enableGraphicSettings(false),
 	_gfxPopUp(0), _fullscreenCheckbox(0), _aspectCheckbox(0),
 	_enableAudioSettings(false),
@@ -64,6 +66,7 @@
 	_musicVolumeSlider(0), _musicVolumeLabel(0),
 	_sfxVolumeSlider(0), _sfxVolumeLabel(0) {
 
+printf("_isActiveDomain = %d, _domain = %s, active domain = %s\n", _isActiveDomain, _domain.c_str(), ConfMan.getActiveDomain().c_str());
 }
 
 void OptionsDialog::open() {
@@ -71,15 +74,49 @@
 
 	// Reset result value
 	setResult(0);
+
+	loadSettings();
+}
+
+void OptionsDialog::handleScreenChanged() {
+	loadSettings();
+}
+
+void OptionsDialog::close() {
+	if (getResult() == kSaveCmd) {
+		saveSettings();
+	}
+
+	if (_isActiveDomain && (getResult() == kSaveCmd || getResult() == kApplyCmd)) {
+		applySettings();
+	}
+
+	Dialog::close();
+}
+
+void OptionsDialog::applySettings() {
+	// Activate changes now
+	if (_enableGraphicSettings) {
+		g_system->setFeatureState(OSystem::kFeatureFullscreenMode, _fullscreenCheckbox->getState());
+		g_system->setFeatureState(OSystem::kFeatureAspectRatioCorrection, _aspectCheckbox->getState());
+		if ((int32)_gfxPopUp->getSelectedTag() >= 0)
+			g_system->setGraphicsMode(_gfxPopUp->getSelectedTag());
+	}
+}
+
+void OptionsDialog::loadSettings() {
+	bool state;
 	
 	if (_fullscreenCheckbox) {
 		_gfxPopUp->setSelected(0);
-		_gfxPopUp->setEnabled(false);
 
-		if (ConfMan.hasKey("gfx_mode", _domain)) {
+		if (_isActiveDomain) {
+			int gfxMode = g_system->getGraphicsMode();
+			_gfxPopUp->setSelectedTag(gfxMode);
+		} else if (ConfMan.hasKey("gfx_mode", _domain)) {
 			const OSystem::GraphicsMode *gm = g_system->getSupportedGraphicsModes();
-			String gfxMode = ConfMan.get("gfx_mode", _domain);
 			int gfxCount = 1;
+			String gfxMode = ConfMan.get("gfx_mode", _domain);
 			while (gm->name) {
 				gfxCount++;
 
@@ -92,10 +129,16 @@
 
 #ifndef _WIN32_WCE
 		// Fullscreen setting
-		_fullscreenCheckbox->setState(ConfMan.getBool("fullscreen", _domain));
+		state = _isActiveDomain ?
+					g_system->getFeatureState(OSystem::kFeatureFullscreenMode) :
+					ConfMan.getBool("fullscreen", _domain);
+		_fullscreenCheckbox->setState(state);
 	
 		// Aspect ratio setting
-		_aspectCheckbox->setState(ConfMan.getBool("aspect_ratio", _domain));
+		state = _isActiveDomain ?
+					g_system->getFeatureState(OSystem::kFeatureAspectRatioCorrection) :
+					ConfMan.getBool("aspect_ratio", _domain);
+		_aspectCheckbox->setState(state);
 #endif
 	}
 
@@ -140,59 +183,55 @@
 	}
 }
 
-void OptionsDialog::close() {
-	if (getResult()) {
-		if (_fullscreenCheckbox) {
-			if (_enableGraphicSettings) {
-				ConfMan.set("fullscreen", _fullscreenCheckbox->getState(), _domain);
-				ConfMan.set("aspect_ratio", _aspectCheckbox->getState(), _domain);
+void OptionsDialog::saveSettings() {
+	if (_fullscreenCheckbox) {
+		if (_enableGraphicSettings) {
+			ConfMan.set("fullscreen", _fullscreenCheckbox->getState(), _domain);
+			ConfMan.set("aspect_ratio", _aspectCheckbox->getState(), _domain);
 
-				if ((int32)_gfxPopUp->getSelectedTag() >= 0)
-					ConfMan.set("gfx_mode", _gfxPopUp->getSelectedString(), _domain);
-			} else {
-				ConfMan.removeKey("fullscreen", _domain);
-				ConfMan.removeKey("aspect_ratio", _domain);
-				ConfMan.removeKey("gfx_mode", _domain);
-			}
+			if ((int32)_gfxPopUp->getSelectedTag() >= 0)
+				ConfMan.set("gfx_mode", _gfxPopUp->getSelectedString(), _domain);
+		} else {
+			ConfMan.removeKey("fullscreen", _domain);
+			ConfMan.removeKey("aspect_ratio", _domain);
+			ConfMan.removeKey("gfx_mode", _domain);
 		}
+	}
 
-		if (_masterVolumeSlider) {
-			if (_enableVolumeSettings) {
-				ConfMan.set("master_volume", _masterVolumeSlider->getValue(), _domain);
-				ConfMan.set("music_volume", _musicVolumeSlider->getValue(), _domain);
-				ConfMan.set("sfx_volume", _sfxVolumeSlider->getValue(), _domain);
-			} else {
-				ConfMan.removeKey("master_volume", _domain);
-				ConfMan.removeKey("music_volume", _domain);
-				ConfMan.removeKey("sfx_volume", _domain);
-			}
+	if (_masterVolumeSlider) {
+		if (_enableVolumeSettings) {
+			ConfMan.set("master_volume", _masterVolumeSlider->getValue(), _domain);
+			ConfMan.set("music_volume", _musicVolumeSlider->getValue(), _domain);
+			ConfMan.set("sfx_volume", _sfxVolumeSlider->getValue(), _domain);
+		} else {
+			ConfMan.removeKey("master_volume", _domain);
+			ConfMan.removeKey("music_volume", _domain);
+			ConfMan.removeKey("sfx_volume", _domain);
 		}
+	}
 
-		if (_multiMidiCheckbox) {
-			if (_enableAudioSettings) {
-				ConfMan.set("multi_midi", _multiMidiCheckbox->getState(), _domain);
-				ConfMan.set("native_mt32", _mt32Checkbox->getState(), _domain);
-				ConfMan.set("subtitles", _subCheckbox->getState(), _domain); 
-				const MidiDriverDescription *md = getAvailableMidiDrivers();
-				while (md->name && md->id != (int)_midiPopUp->getSelectedTag())
-					md++;
-				if (md->name)
-					ConfMan.set("music_driver", md->name, _domain);
-				else
-					ConfMan.removeKey("music_driver", _domain);
-			} else {
-				ConfMan.removeKey("multi_midi", _domain);
-				ConfMan.removeKey("native_mt32", _domain);
+	if (_multiMidiCheckbox) {
+		if (_enableAudioSettings) {
+			ConfMan.set("multi_midi", _multiMidiCheckbox->getState(), _domain);
+			ConfMan.set("native_mt32", _mt32Checkbox->getState(), _domain);
+			ConfMan.set("subtitles", _subCheckbox->getState(), _domain); 
+			const MidiDriverDescription *md = getAvailableMidiDrivers();
+			while (md->name && md->id != (int)_midiPopUp->getSelectedTag())
+				md++;
+			if (md->name)
+				ConfMan.set("music_driver", md->name, _domain);
+			else
 				ConfMan.removeKey("music_driver", _domain);
-				ConfMan.removeKey("subtitles", _domain); 
-			}
+		} else {
+			ConfMan.removeKey("multi_midi", _domain);
+			ConfMan.removeKey("native_mt32", _domain);
+			ConfMan.removeKey("music_driver", _domain);
+			ConfMan.removeKey("subtitles", _domain); 
 		}
-
-		// Save config file
-		ConfMan.flushToDisk();
 	}
 
-	Dialog::close();
+	// Save config file
+	ConfMan.flushToDisk();
 }
 
 void OptionsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {
@@ -209,10 +248,14 @@
 		_sfxVolumeLabel->setValue(_sfxVolumeSlider->getValue());
 		_sfxVolumeLabel->draw();
 		break;
-	case kOKCmd:
-		setResult(1);
+	case kApplyCmd:
+	case kSaveCmd:
+		setResult(cmd);
 		close();
 		break;
+	case kRevertCmd:
+		// TODO: Implement this!
+		break;
 	default:
 		Dialog::handleCommand(sender, cmd, data);
 	}
@@ -344,7 +387,7 @@
 
 
 GlobalOptionsDialog::GlobalOptionsDialog(GameDetector &detector)
-	: OptionsDialog(Common::ConfigManager::kApplicationDomain, 10, 20, 320 - 2 * 10, 200 - 2 * 20) {
+	: OptionsDialog(Common::ConfigManager::kApplicationDomain, 10, 10, 320 - 2 * 10, 200 - 2 * 10) {
 
 	const int vBorder = 5;
 	int yoffset;
@@ -388,19 +431,30 @@
 	tab->setActiveTab(0);
 
 	// Add OK & Cancel buttons
-	addButton(_w - 2 * (kButtonWidth + 10), _h - 24, "Cancel", kCloseCmd, 0);
-	addButton(_w - (kButtonWidth + 10), _h - 24, "OK", kOKCmd, 0);
+	addButton(10, _h - 24, "Revert", kRevertCmd, 0);
+	addButton(_w - 2 * (kButtonWidth + 10), _h - 24, "Save", kSaveCmd, 0);
+	addButton(_w - (kButtonWidth + 10), _h - 24, "Apply", kApplyCmd, 0);
 
 	// Create file browser dialog
 	_browser = new BrowserDialog("Select directory for savegames");
+
+	setGraphicSettingsState(true);
+	setAudioSettingsState(true);
+	setVolumeSettingsState(true);
 }
 
 GlobalOptionsDialog::~GlobalOptionsDialog() {
 	delete _browser;
 }
 
-void GlobalOptionsDialog::open() {
-	OptionsDialog::open();
+void GlobalOptionsDialog::applySettings() {
+	OptionsDialog::applySettings();
+
+	// TODO ?
+}
+
+void GlobalOptionsDialog::loadSettings() {
+	OptionsDialog::loadSettings();
 
 #if !( defined(__DC__) || defined(__GP32__) )
 	// Set _savePath to the current save path
@@ -416,12 +470,11 @@
 #endif
 }
 
-void GlobalOptionsDialog::close() {
-	if (getResult()) {
-		// Savepath
-		ConfMan.set("savepath", _savePath->getLabel(), _domain);
-	}
-	OptionsDialog::close();
+void GlobalOptionsDialog::saveSettings() {
+	// Savepath
+	ConfMan.set("savepath", _savePath->getLabel(), _domain);
+
+	OptionsDialog::saveSettings();
 }
 
 void GlobalOptionsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {

Index: options.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/gui/options.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- options.h	5 Feb 2004 11:59:05 -0000	1.16
+++ options.h	15 Mar 2004 02:21:03 -0000	1.17
@@ -42,15 +42,20 @@
 	void open();
 	void close();
 	void handleCommand(CommandSender *sender, uint32 cmd, uint32 data);
+	void handleScreenChanged();
 
 	enum {
-		kOKCmd					= 'ok  '
+		kApplyCmd	= 'aply',
+		kSaveCmd	= 'save',
+		kRevertCmd	= 'rvrt'
 	};
 
 protected:
 	/** Config domain this dialog is used to edit. */
 	String _domain;
 	
+	const bool _isActiveDomain;
+	
 	int addGraphicControls(GuiObject *boss, int yoffset);
 	int addMIDIControls(GuiObject *boss, int yoffset);
 	int addVolumeControls(GuiObject *boss, int yoffset);
@@ -58,6 +63,10 @@
 	void setGraphicSettingsState(bool enabled);
 	void setAudioSettingsState(bool enabled);
 	void setVolumeSettingsState(bool enabled);
+	
+	virtual void applySettings();
+	virtual void loadSettings();
+	virtual void saveSettings();
 
 private:
 	//
@@ -99,13 +108,15 @@
 	GlobalOptionsDialog(GameDetector &detector);
 	~GlobalOptionsDialog();
 
-	void open();
-	void close();
 	void handleCommand(CommandSender *sender, uint32 cmd, uint32 data);
 
 protected:
 	BrowserDialog *_browser;
 	StaticTextWidget *_savePath;
+
+	virtual void applySettings();
+	virtual void loadSettings();
+	virtual void saveSettings();
 };
 
 } // End of namespace GUI





More information about the Scummvm-git-logs mailing list