Refactoring save_game_interactive in savegame.cpp.

This commit is contained in:
Jörg Hinrichs 2009-04-28 19:03:51 +00:00
parent b0c5361877
commit 3e13357f4f
2 changed files with 76 additions and 64 deletions

View file

@ -21,6 +21,7 @@
#include "game_events.hpp"
#include "gettext.hpp"
#include "gui/dialogs/game_save.hpp"
#include "gui/dialogs/message.hpp"
#include "gui/widgets/window.hpp"
#include "log.hpp"
#include "map.hpp"
@ -475,41 +476,13 @@ bool savegame::save_game_interactive(display& gui, const std::string& message,
show_confirmation_ = ask_for_filename;
create_filename();
int res = 0;
int res = gui2::twindow::OK;
bool exit = true;
static bool ignore_all = false;
do{
try{
if (ask_for_filename){
std::string filename = filename_;
if (has_exit_button){
gui2::tgame_save_oos dlg(title_, filename, message);
dlg.show(gui.video());
filename = dlg.filename();
ignore_all = dlg.ignore_all();
res = dlg.get_retval();
}
else{
if (dialog_type == gui::OK_CANCEL){
gui2::tgame_save dlg(title_, filename);
dlg.show(gui.video());
filename = dlg.filename();
res = dlg.get_retval();
}
else if (dialog_type == gui::YES_NO){
gui2::tgame_save_message dlg(title_, filename, message);
dlg.show(gui.video());
filename = dlg.filename();
res = dlg.get_retval();
}
}
check_filename(filename, gui);
set_filename(filename);
}
if (ask_for_filename)
res = show_save_dialog(gui.video(), has_exit_button, message, dialog_type);
if (res == gui2::twindow::OK)
exit = check_overwrite(gui);
@ -529,6 +502,75 @@ bool savegame::save_game_interactive(display& gui, const std::string& message,
return save_game(&gui);
}
int savegame::show_save_dialog(CVideo& video, bool is_oos, const std::string& message, const gui::DIALOG_TYPE dialog_type)
{
static bool ignore_all = false;
int res = 0;
std::string filename = filename_;
if (is_oos && (!ignore_all)){
gui2::tgame_save_oos dlg(title_, filename, message);
dlg.show(video);
filename = dlg.filename();
ignore_all = dlg.ignore_all();
res = dlg.get_retval();
}
else{
if (dialog_type == gui::OK_CANCEL){
gui2::tgame_save dlg(title_, filename);
dlg.show(video);
filename = dlg.filename();
res = dlg.get_retval();
}
else if (dialog_type == gui::YES_NO){
gui2::tgame_save_message dlg(title_, filename, message);
dlg.show(video);
filename = dlg.filename();
res = dlg.get_retval();
}
}
check_filename(filename, video);
set_filename(filename);
return res;
}
bool savegame::check_overwrite(display& gui)
{
std::string filename = filename_;
if (savegame_manager::save_game_exists(filename, compress_saves_)) {
std::stringstream s;
s << _("Save already exists. Do you want to overwrite it?")
<< std::endl << _("Name: ") << filename;
int overwrite = gui::dialog(gui,_("Overwrite?"),
s.str(), gui::YES_NO).show();
return overwrite == 0;
} else {
return true;
}
}
void savegame::check_filename(const std::string& filename, CVideo& video)
{
if (is_gzip_file(filename)) {
gui2::show_message(video, _("Error"), _("Save names should not end on '.gz'. "
"Please choose a different name."));
//gui::message_dialog(gui, _("Error"),
// _("Save names should not end on '.gz'. "
// "Please choose a different name.")).show();
throw illegal_filename_exception();
}
}
void savegame::set_filename(std::string filename)
{
filename.erase(std::remove_if(filename.begin(), filename.end(),
dialogs::is_illegal_file_char), filename.end());
filename_ = filename;
}
void savegame::before_save()
{
gamestate_.replay_data = recorder.get_replay_data();
@ -753,38 +795,6 @@ void savegame::extract_summary_data_from_save(config& out)
}
}
bool savegame::check_overwrite(display& gui)
{
std::string filename = filename_;
if (savegame_manager::save_game_exists(filename, compress_saves_)) {
std::stringstream s;
s << _("Save already exists. Do you want to overwrite it?")
<< std::endl << _("Name: ") << filename;
int overwrite = gui::dialog(gui,_("Overwrite?"),
s.str(), gui::YES_NO).show();
return overwrite == 0;
} else {
return true;
}
}
void savegame::check_filename(const std::string& filename, display& gui)
{
if (is_gzip_file(filename)) {
gui::message_dialog(gui, _("Error"),
_("Save names should not end on '.gz'. "
"Please choose a different name.")).show();
throw illegal_filename_exception();
}
}
void savegame::set_filename(std::string filename)
{
filename.erase(std::remove_if(filename.begin(), filename.end(),
dialogs::is_illegal_file_char), filename.end());
filename_ = filename;
}
scenariostart_savegame::scenariostart_savegame(game_state &gamestate, const bool compress_saves)
: savegame(gamestate, compress_saves)
{

View file

@ -173,7 +173,9 @@ private:
override this to take effect. */
virtual void create_filename() {}
/** Check, if the filename contains illegal constructs like ".gz". */
void check_filename(const std::string& filename, display& gui);
void check_filename(const std::string& filename, CVideo& video);
/** Display the save game dialog. */
int show_save_dialog(CVideo& video, bool is_oos, const std::string& message, const gui::DIALOG_TYPE dialog_type);
/** Ask the user if an existing file should be overwritten. */
bool check_overwrite(display& gui);