aboutsummaryrefslogtreecommitdiff
path: root/gui
diff options
context:
space:
mode:
authorMax Horn2004-03-15 02:21:04 +0000
committerMax Horn2004-03-15 02:21:04 +0000
commit782dabbcd399b0582df73ff82107ffca70abb0f7 (patch)
treec4752b3709de6bc55349f4d1584be794ad421747 /gui
parentb389dfa2a328f28f5e90982a7146f7e221b1dba1 (diff)
downloadscummvm-rg350-782dabbcd399b0582df73ff82107ffca70abb0f7.tar.gz
scummvm-rg350-782dabbcd399b0582df73ff82107ffca70abb0f7.tar.bz2
scummvm-rg350-782dabbcd399b0582df73ff82107ffca70abb0f7.zip
...and mor. Next big thing should be to document the overlay stuff, but that'll have to wait till after I slept :-)
svn-id: r13295
Diffstat (limited to 'gui')
-rw-r--r--gui/launcher.cpp48
-rw-r--r--gui/options.cpp179
-rw-r--r--gui/options.h17
3 files changed, 157 insertions, 87 deletions
diff --git a/gui/launcher.cpp b/gui/launcher.cpp
index 0ab29f97c9..53772c67d4 100644
--- a/gui/launcher.cpp
+++ b/gui/launcher.cpp
@@ -86,8 +86,6 @@ class EditGameDialog : public OptionsDialog {
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 @@ protected:
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 @@ EditGameDialog::EditGameDialog(const String &domain, GameSettings target)
// 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::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::open() {
- OptionsDialog::open();
+void EditGameDialog::loadSettings() {
+ OptionsDialog::loadSettings();
int sel, i;
bool e;
@@ -251,24 +259,22 @@ void EditGameDialog::open() {
_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 @@ void EditGameDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat
setVolumeSettingsState(data != 0);
draw();
break;
- case kOKCmd: {
+ case kSaveCmd: {
// Write back changes made to config object
String newDomain(_domainWidget->getLabel());
if (newDomain != _domain) {
diff --git a/gui/options.cpp b/gui/options.cpp
index cb42735246..f4ffaf98e5 100644
--- a/gui/options.cpp
+++ b/gui/options.cpp
@@ -55,6 +55,8 @@ enum {
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 @@ OptionsDialog::OptionsDialog(const String &domain, int x, int y, int w, int h)
_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 @@ void OptionsDialog::open() {
// 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 @@ void OptionsDialog::open() {
#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::open() {
}
}
-void OptionsDialog::close() {
- if (getResult()) {
- 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);
- }
+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 (_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 @@ void OptionsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data
_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 @@ int OptionsDialog::addVolumeControls(GuiObject *boss, int yoffset) {
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 @@ GlobalOptionsDialog::GlobalOptionsDialog(GameDetector &detector)
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 @@ void GlobalOptionsDialog::open() {
#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) {
diff --git a/gui/options.h b/gui/options.h
index 9f6c6bf852..0196bad21d 100644
--- a/gui/options.h
+++ b/gui/options.h
@@ -42,15 +42,20 @@ public:
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 @@ protected:
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 @@ public:
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