From 7d252ff7fc251f8f28099afae38846e1bbcf5116 Mon Sep 17 00:00:00 2001 From: Kuhnovic <68320206+Kuhnovic@users.noreply.github.com> Date: Mon, 15 Sep 2025 13:14:56 +0200 Subject: [PATCH] Change: Ask for confirmation before deleting a savegame / scenario / heightmap. (#14621) --- src/fios_gui.cpp | 36 +++++++++++++++++++++--------------- src/lang/english.txt | 2 ++ 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index dd4f92aa95..a63679cc8f 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -349,6 +349,21 @@ private: if (confirmed) _switch_mode = SM_SAVE_HEIGHTMAP; } + static void DeleteFileConfirmationCallback(Window *window, bool confirmed) + { + auto *save_load_window = static_cast(window); + + if (confirmed) { + if (!FiosDelete(save_load_window->filename_editbox.text.GetText())) { + ShowErrorMessage(GetEncodedString(STR_ERROR_UNABLE_TO_DELETE_FILE), {}, WL_ERROR); + } else { + save_load_window->InvalidateData(SLIWD_RESCAN_FILES); + /* Reset file name to current date on successful delete */ + if (save_load_window->abstract_filetype == FT_SAVEGAME) save_load_window->GenerateFileName(); + } + } + } + public: /** Generate a default save filename. */ @@ -806,31 +821,22 @@ public: if (this->fop != SLO_SAVE) return; if (this->IsWidgetLowered(WID_SL_DELETE_SELECTION)) { // Delete button clicked - if (!FiosDelete(this->filename_editbox.text.GetText())) { - ShowErrorMessage(GetEncodedString(STR_ERROR_UNABLE_TO_DELETE_FILE), {}, WL_ERROR); - } else { - this->InvalidateData(SLIWD_RESCAN_FILES); - /* Reset file name to current date on successful delete */ - if (this->abstract_filetype == FT_SAVEGAME) GenerateFileName(); - } + ShowQuery(GetEncodedString(STR_SAVELOAD_DELETE_TITLE), GetEncodedString(STR_SAVELOAD_DELETE_WARNING), + this, SaveLoadWindow::DeleteFileConfirmationCallback); } else if (this->IsWidgetLowered(WID_SL_SAVE_GAME)) { // Save button clicked if (this->abstract_filetype == FT_SAVEGAME || this->abstract_filetype == FT_SCENARIO) { _file_to_saveload.name = FiosMakeSavegameName(this->filename_editbox.text.GetText()); if (FioCheckFileExists(_file_to_saveload.name, Subdirectory::SAVE_DIR)) { - ShowQuery( - GetEncodedString(STR_SAVELOAD_OVERWRITE_TITLE), - GetEncodedString(STR_SAVELOAD_OVERWRITE_WARNING), - this, SaveLoadWindow::SaveGameConfirmationCallback); + ShowQuery(GetEncodedString(STR_SAVELOAD_OVERWRITE_TITLE), GetEncodedString(STR_SAVELOAD_OVERWRITE_WARNING), + this, SaveLoadWindow::SaveGameConfirmationCallback); } else { _switch_mode = SM_SAVE_GAME; } } else { _file_to_saveload.name = FiosMakeHeightmapName(this->filename_editbox.text.GetText()); if (FioCheckFileExists(_file_to_saveload.name, Subdirectory::SAVE_DIR)) { - ShowQuery( - GetEncodedString(STR_SAVELOAD_OVERWRITE_TITLE), - GetEncodedString(STR_SAVELOAD_OVERWRITE_WARNING), - this, SaveLoadWindow::SaveHeightmapConfirmationCallback); + ShowQuery(GetEncodedString(STR_SAVELOAD_OVERWRITE_TITLE), GetEncodedString(STR_SAVELOAD_OVERWRITE_WARNING), + this, SaveLoadWindow::SaveHeightmapConfirmationCallback); } else { _switch_mode = SM_SAVE_HEIGHTMAP; } diff --git a/src/lang/english.txt b/src/lang/english.txt index 5c346825c8..f33f4848fc 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -3348,6 +3348,8 @@ STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: STR_SAVELOAD_FILTER_TITLE :{BLACK}Filter: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Overwrite File STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Are you sure you want to overwrite the existing file? +STR_SAVELOAD_DELETE_TITLE :{WHITE}Delete File +STR_SAVELOAD_DELETE_WARNING :{YELLOW}Are you sure you want to delete the file? STR_SAVELOAD_DIRECTORY :{RAW_STRING} (Directory) STR_SAVELOAD_PARENT_DIRECTORY :{RAW_STRING} (Parent directory)