aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schickel2012-07-01 16:07:48 +0200
committerJohannes Schickel2012-07-01 16:49:07 +0200
commitbd3d5fb8ffed3938c68a723d5c5bfbb6b56fb0ec (patch)
treeabd363915ff1f3c6ab48a119b19935a4a6726597
parent236db5ed87acf603898243734e2c5273c23568cb (diff)
downloadscummvm-rg350-bd3d5fb8ffed3938c68a723d5c5bfbb6b56fb0ec.tar.gz
scummvm-rg350-bd3d5fb8ffed3938c68a723d5c5bfbb6b56fb0ec.tar.bz2
scummvm-rg350-bd3d5fb8ffed3938c68a723d5c5bfbb6b56fb0ec.zip
GUI: Clean up save load chooser selection code.
-rw-r--r--gui/saveload-dialog.cpp47
-rw-r--r--gui/saveload-dialog.h5
-rw-r--r--gui/saveload.cpp30
3 files changed, 37 insertions, 45 deletions
diff --git a/gui/saveload-dialog.cpp b/gui/saveload-dialog.cpp
index 3a778b2fa4..dce09aaec8 100644
--- a/gui/saveload-dialog.cpp
+++ b/gui/saveload-dialog.cpp
@@ -31,6 +31,22 @@
namespace GUI {
+SaveLoadChooserType getRequestedSaveLoadDialog(const bool saveMode, const MetaEngine &metaEngine) {
+ const Common::String &userConfig = ConfMan.get("gui_saveload_chooser", Common::ConfigManager::kApplicationDomain);
+ if (!saveMode && g_gui.getWidth() >= 640 && g_gui.getHeight() >= 400
+ && metaEngine.hasFeature(MetaEngine::kSavesSupportMetaInfo)
+ && metaEngine.hasFeature(MetaEngine::kSavesSupportThumbnail)
+ && userConfig.equalsIgnoreCase("grid")) {
+ // In case we are 640x400 or higher, this dialog is not in save mode,
+ // the user requested the grid dialog and the engines supports it we
+ // try to set it up.
+ return kSaveLoadDialogGrid;
+ } else {
+ // In all other cases we want to use the list dialog.
+ return kSaveLoadDialogList;
+ }
+}
+
enum {
kListSwitchCmd = 'LIST',
kGridSwitchCmd = 'GRID'
@@ -73,7 +89,7 @@ int SaveLoadChooserDialog::run(const Common::String &target, const MetaEngine *m
void SaveLoadChooserDialog::handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) {
switch (cmd) {
case kListSwitchCmd:
- setResult(kSwitchToList);
+ setResult(kSwitchSaveLoadDialog);
// We save the requested dialog type here to avoid the setting to be
// overwritten when our reflowLayout logic selects a different dialog
// type.
@@ -82,7 +98,7 @@ void SaveLoadChooserDialog::handleCommand(GUI::CommandSender *sender, uint32 cmd
break;
case kGridSwitchCmd:
- setResult(kSwitchToGrid);
+ setResult(kSwitchSaveLoadDialog);
// See above.
ConfMan.set("gui_saveload_chooser", "grid", Common::ConfigManager::kApplicationDomain);
close();
@@ -116,34 +132,11 @@ void SaveLoadChooserDialog::reflowLayout() {
addChooserButtons();
const SaveLoadChooserType currentType = getType();
- SaveLoadChooserType requestedType;
-
- const Common::String &userConfig = ConfMan.get("gui_saveload_chooser", Common::ConfigManager::kApplicationDomain);
- if (!_saveMode && g_gui.getWidth() >= 640 && g_gui.getHeight() >= 400
- && _metaEngine->hasFeature(MetaEngine::kSavesSupportMetaInfo)
- && _metaEngine->hasFeature(MetaEngine::kSavesSupportThumbnail)
- && userConfig.equalsIgnoreCase("grid")) {
- // In case we are 640x400 or higher, this dialog is not in save mode,
- // the user requested the grid dialog and the engines supports it we
- // try to set it up.
- requestedType = kSaveLoadDialogGrid;
- } else {
- // In all other cases we want to use the list dialog.
- requestedType = kSaveLoadDialogList;
- }
+ const SaveLoadChooserType requestedType = getRequestedSaveLoadDialog(_saveMode, *_metaEngine);
// Change the dialog type if there is any need for it.
if (requestedType != currentType) {
- switch (requestedType) {
- case kSaveLoadDialogGrid:
- setResult(kSwitchToGrid);
- break;
-
- case kSaveLoadDialogList:
- setResult(kSwitchToList);
- break;
- }
-
+ setResult(kSwitchSaveLoadDialog);
close();
}
diff --git a/gui/saveload-dialog.h b/gui/saveload-dialog.h
index 75b1dc41e0..68512ad9a5 100644
--- a/gui/saveload-dialog.h
+++ b/gui/saveload-dialog.h
@@ -29,14 +29,15 @@
namespace GUI {
-#define kSwitchToList -2
-#define kSwitchToGrid -3
+#define kSwitchSaveLoadDialog -2
enum SaveLoadChooserType {
kSaveLoadDialogList = 0,
kSaveLoadDialogGrid = 1
};
+SaveLoadChooserType getRequestedSaveLoadDialog(const bool saveMode, const MetaEngine &metaEngine);
+
class SaveLoadChooserDialog : protected Dialog {
public:
SaveLoadChooserDialog(const Common::String &dialogName, const bool saveMode);
diff --git a/gui/saveload.cpp b/gui/saveload.cpp
index 7f3dd6d5d8..12e62122fe 100644
--- a/gui/saveload.cpp
+++ b/gui/saveload.cpp
@@ -40,18 +40,20 @@ SaveLoadChooser::~SaveLoadChooser() {
}
void SaveLoadChooser::selectChooser(const MetaEngine &engine) {
- delete _impl;
- _impl = 0;
+ const SaveLoadChooserType requestedType = getRequestedSaveLoadDialog(_saveMode, engine);
+ if (!_impl || _impl->getType() != requestedType) {
+ delete _impl;
+ _impl = 0;
- Common::String userConfig = ConfMan.get("gui_saveload_chooser", Common::ConfigManager::kApplicationDomain);
+ switch (requestedType) {
+ case kSaveLoadDialogGrid:
+ _impl = new LoadChooserThumbnailed(_title);
+ break;
- if (!_saveMode && g_gui.getWidth() >= 640 && g_gui.getHeight() >= 400
- && engine.hasFeature(MetaEngine::kSavesSupportMetaInfo)
- && engine.hasFeature(MetaEngine::kSavesSupportThumbnail)
- && userConfig.equalsIgnoreCase("grid")) {
- _impl = new LoadChooserThumbnailed(_title);
- } else {
- _impl = new SaveLoadChooserSimple(_title, _buttonLabel, _saveMode);
+ case kSaveLoadDialogList:
+ _impl = new SaveLoadChooserSimple(_title, _buttonLabel, _saveMode);
+ break;
+ }
}
}
@@ -90,12 +92,8 @@ int SaveLoadChooser::runModalWithPluginAndTarget(const EnginePlugin *plugin, con
do {
ret = _impl->run(target, &(**plugin));
- if (ret == kSwitchToList) {
- delete _impl;
- _impl = new SaveLoadChooserSimple(_title, _buttonLabel, _saveMode);
- } else if (ret == kSwitchToGrid) {
- delete _impl;
- _impl = new LoadChooserThumbnailed(_title);
+ if (ret == kSwitchSaveLoadDialog) {
+ selectChooser(**plugin);
}
} while (ret < -1);