made it so auto-saves begin being deleted after there are more than 5

This commit is contained in:
David White 2008-01-05 08:10:49 +00:00
parent 828d18d14b
commit cd9d30e0aa
10 changed files with 102 additions and 58 deletions

View file

@ -81,6 +81,11 @@ std::vector<std::string> empty_string_vector;
namespace gui {
dialog_textbox::~dialog_textbox()
{
delete label_;
}
dialog::dimension_measurements::dimension_measurements() :
x(-1),
y(-1),

View file

@ -100,7 +100,7 @@ public:
: textbox(video, width, text, editable, max_size, alpha, alpha_focus, false),
label_(label_widget)
{}
~dialog_textbox() { delete label_; }
virtual ~dialog_textbox();
label *get_label() const { return label_; }
@ -110,6 +110,9 @@ public:
return h;
}
private:
//forbidden operations
dialog_textbox(const dialog_textbox&);
void operator=(const dialog_textbox&);
label *label_;
};

View file

@ -269,56 +269,6 @@ int get_save_name(display & disp,const std::string& message, const std::string&
//! Class to handle deleting a saved game.
namespace {
class delete_save : public gui::dialog_button_action
{
public:
delete_save(display& disp, std::vector<save_info>& saves, std::vector<config*>& save_summaries) : disp_(disp), saves_(saves), summaries_(save_summaries) {}
private:
gui::dialog_button_action::RESULT button_pressed(int menu_selection);
display& disp_;
std::vector<save_info>& saves_;
std::vector<config*>& summaries_;
};
gui::dialog_button_action::RESULT delete_save::button_pressed(int menu_selection)
{
const size_t index = size_t(menu_selection);
if(index < saves_.size()) {
// See if we should ask the user for deletion confirmation
if(preferences::ask_delete_saves()) {
gui::dialog dmenu(disp_,"",
_("Do you really want to delete this game?"),
gui::YES_NO);
dmenu.add_option(_("Don't ask me again!"), true);
const int res = dmenu.show();
// See if the user doesn't want to be asked this again
if(dmenu.option_checked()) {
preferences::set_ask_delete_saves(false);
}
if(res != 0) {
return gui::CONTINUE_DIALOG;
}
}
// Delete the file
delete_game(saves_[index].name);
// Remove it from the list of saves
saves_.erase(saves_.begin() + index);
if(index < summaries_.size()) {
summaries_.erase(summaries_.begin() + index);
}
return gui::DELETE_ITEM;
} else {
return gui::CONTINUE_DIALOG;
}
}
class load_game_filter_textbox : public gui::dialog_textbox {
public:
load_game_filter_textbox(CVideo& video, const std::vector<std::string>& items, gui::dialog& dialog)
@ -368,6 +318,57 @@ private:
}
};
class delete_save : public gui::dialog_button_action
{
public:
delete_save(display& disp, load_game_filter_textbox& filter, std::vector<save_info>& saves, std::vector<config*>& save_summaries) : disp_(disp), saves_(saves), summaries_(save_summaries), filter_(filter) {}
private:
gui::dialog_button_action::RESULT button_pressed(int menu_selection);
display& disp_;
std::vector<save_info>& saves_;
std::vector<config*>& summaries_;
load_game_filter_textbox& filter_;
};
gui::dialog_button_action::RESULT delete_save::button_pressed(int menu_selection)
{
const size_t index = size_t(filter_.get_save_index(menu_selection));
if(index < saves_.size()) {
// See if we should ask the user for deletion confirmation
if(preferences::ask_delete_saves()) {
gui::dialog dmenu(disp_,"",
_("Do you really want to delete this game?"),
gui::YES_NO);
dmenu.add_option(_("Don't ask me again!"), true);
const int res = dmenu.show();
// See if the user doesn't want to be asked this again
if(dmenu.option_checked()) {
preferences::set_ask_delete_saves(false);
}
if(res != 0) {
return gui::CONTINUE_DIALOG;
}
}
// Delete the file
delete_game(saves_[index].name);
// Remove it from the list of saves
saves_.erase(saves_.begin() + index);
if(index < summaries_.size()) {
summaries_.erase(summaries_.begin() + index);
}
return gui::DELETE_ITEM;
} else {
return gui::CONTINUE_DIALOG;
}
}
static const int save_preview_border = 10;
class save_preview_pane : public gui::preview_pane
@ -608,9 +609,6 @@ std::string load_game_dialog(display& disp, const config& game_config, const gam
summaries.push_back(&cfg);
}
delete_save save_deleter(disp,games,summaries);
gui::dialog_button_info delete_button(&save_deleter,_("Delete Save"));
const events::event_context context;
std::vector<std::string> items;
@ -645,6 +643,9 @@ std::string load_game_dialog(display& disp, const config& game_config, const gam
// create an option for whether the replay should be shown or not
if(show_replay != NULL)
lmenu.add_option(_("Show replay"), false);
delete_save save_deleter(disp,*filter,games,summaries);
gui::dialog_button_info delete_button(&save_deleter,_("Delete Save"));
lmenu.add_button(delete_button);
int res = lmenu.show();

View file

@ -466,6 +466,16 @@ void set_savemax(int value)
preferences::set("save_max", lexical_cast<std::string>(value));
}
int autosavemax()
{
return lexical_cast_default<int>(preferences::get("auto_save_max"), 5);
}
void set_autosavemax(int value)
{
preferences::set("auto_save_max", lexical_cast<std::string>(value));
}
std::string client_type()
{
return preferences::get("client_type") == "ai" ? "ai" : "human";

View file

@ -138,6 +138,9 @@ namespace preferences {
void set_savemax(int value);
int savemax();
void set_autosavemax(int value);
int autosavemax();
const int INFINITE_SAVES = 61;
bool show_floating_labels();

View file

@ -708,7 +708,7 @@ struct save_info_less_time {
}
};
std::vector<save_info> get_saves_list(const std::string *dir)
std::vector<save_info> get_saves_list(const std::string *dir, const std::string* filter)
{
const std::string& saves_dir = (dir) ? *dir : get_saves_dir();
@ -717,6 +717,10 @@ std::vector<save_info> get_saves_list(const std::string *dir)
std::vector<save_info> res;
for(std::vector<std::string>::iterator i = saves.begin(); i != saves.end(); ++i) {
if(filter && std::search(i->begin(), i->end(), filter->begin(), filter->end()) == i->end()) {
continue;
}
const time_t modified = file_create_time(saves_dir + "/" + *i);
replace_underbar2space(*i);

View file

@ -292,7 +292,7 @@ struct save_info {
};
//! Get a list of available saves.
std::vector<save_info> get_saves_list(const std::string *dir = NULL);
std::vector<save_info> get_saves_list(const std::string* dir = NULL, const std::string* filter = NULL);
enum WRITE_GAME_MODE { WRITE_SNAPSHOT_ONLY, WRITE_FULL_GAME };

View file

@ -49,7 +49,7 @@
namespace {
static void remove_old_saves()
void remove_old_saves()
{
int countdown = preferences::savemax();
if (countdown == preferences::INFINITE_SAVES)
@ -65,6 +65,19 @@ static void remove_old_saves()
}
}
void remove_old_auto_saves()
{
const std::string auto_save = "Auto-Save";
int countdown = preferences::autosavemax();
std::vector<save_info> games = get_saves_list(NULL, &auto_save);
for (std::vector<save_info>::iterator i = games.begin(); i != games.end(); i++) {
if (countdown-- < 0) {
LOG_NG << "Deleting savegame '" << i->name << "'\n";
delete_game(i->name);
}
}
}
std::vector<std::string> create_unit_table(const game_data& gameinfo, const statistics::stats::str_int_map& m, unsigned int team)
{
std::vector<std::string> table;
@ -869,7 +882,7 @@ private:
end = SDL_GetTicks();
LOG_NG << "Milliseconds to save " << savename << ": " << end - start << "\n";
remove_old_saves();
remove_old_auto_saves();
}
void menu_handler::load_game(){

View file

@ -56,6 +56,10 @@ textbox::textbox(CVideo &video, int width, const std::string& text, bool editabl
update_text_cache(true);
}
textbox::~textbox()
{
}
void textbox::set_inner_location(SDL_Rect const &rect)
{
bg_register(rect);

View file

@ -28,6 +28,7 @@ class textbox : public scrollarea
{
public:
textbox(CVideo &video, int width, const std::string& text="", bool editable=true, size_t max_size = 256, double alpha = 0.4, double alpha_focus = 0.2, const bool auto_join = true);
virtual ~textbox();
const std::string text() const;
void set_text(const std::string& text);