Skip to content

Commit

Permalink
ENGINES: Add error handling for GMM Gamestate Load/Save Usage.
Browse files Browse the repository at this point in the history
As indicated by wjp, the Global Main Menu (GMM) did not check or report
on the returned error state from saveGameState() and loadGameState() usage.
This corrects this and adds a MessageDialog report of any failure.
  • Loading branch information
digitall committed Feb 21, 2012
1 parent 7986f17 commit aa26d5d
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 13 deletions.
19 changes: 12 additions & 7 deletions engines/dialogs.cpp
Expand Up @@ -227,19 +227,24 @@ void MainMenuDialog::save() {
Common::String result(_saveDialog->getResultString());
if (result.empty()) {
// If the user was lazy and entered no save name, come up with a default name.
Common::String buf;
#if defined(USE_SAVEGAME_TIMESTAMP)
TimeDate curTime;
g_system->getTimeAndDate(curTime);
curTime.tm_year += 1900; // fixup year
curTime.tm_mon++; // fixup month
buf = Common::String::format("%04d.%02d.%02d / %02d:%02d:%02d", curTime.tm_year, curTime.tm_mon, curTime.tm_mday, curTime.tm_hour, curTime.tm_min, curTime.tm_sec);
result = Common::String::format("%04d.%02d.%02d / %02d:%02d:%02d", curTime.tm_year, curTime.tm_mon, curTime.tm_mday, curTime.tm_hour, curTime.tm_min, curTime.tm_sec);
#else
buf = Common::String::format("Save %d", slot + 1);
result = Common::String::format("Save %d", slot + 1);
#endif
_engine->saveGameState(slot, buf);
} else {
_engine->saveGameState(slot, result);
}

Common::Error status = _engine->saveGameState(slot, result);
if (status.getCode() != Common::kNoError) {
Common::String failMessage = Common::String::format(_("Gamestate save failed (%s)! "
"Please consult the README for basic information, and for "
"instructions on how to obtain further assistance."), status.getDesc().c_str());
GUI::MessageDialog dialog(failMessage);
dialog.runModal();
}

close();
Expand All @@ -256,7 +261,7 @@ void MainMenuDialog::load() {

_engine->setGameToLoadSlot(slot);

if (slot >= 0)
if (slot >= 0)
close();
}

Expand Down
16 changes: 10 additions & 6 deletions engines/engine.cpp
Expand Up @@ -420,12 +420,16 @@ void Engine::openMainMenuDialog() {
// (not from inside the menu loop to avoid
// mouse cursor glitches and simliar bugs,
// e.g. #2822778).
// FIXME: For now we just ignore the return
// value, which is quite bad since it could
// be a fatal loading error, which renders
// the engine unusable.
if (_saveSlotToLoad >= 0)
loadGameState(_saveSlotToLoad);
if (_saveSlotToLoad >= 0) {
Common::Error status = loadGameState(_saveSlotToLoad);
if (status.getCode() != Common::kNoError) {
Common::String failMessage = Common::String::format(_("Gamestate load failed (%s)! "
"Please consult the README for basic information, and for "
"instructions on how to obtain further assistance."), status.getDesc().c_str());
GUI::MessageDialog dialog(failMessage);
dialog.runModal();
}
}

syncSoundSettings();
}
Expand Down

0 comments on commit aa26d5d

Please sign in to comment.