Refactoring save_game_interactive in savegame.cpp.
This commit is contained in:
parent
b0c5361877
commit
3e13357f4f
2 changed files with 76 additions and 64 deletions
136
src/savegame.cpp
136
src/savegame.cpp
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue