made it so auto-saves begin being deleted after there are more than 5
This commit is contained in:
parent
828d18d14b
commit
cd9d30e0aa
10 changed files with 102 additions and 58 deletions
|
@ -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),
|
||||
|
|
|
@ -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_;
|
||||
};
|
||||
|
|
107
src/dialogs.cpp
107
src/dialogs.cpp
|
@ -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();
|
||||
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 };
|
||||
|
||||
|
|
|
@ -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(){
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue