diff --git a/src/core/fullscreen_ui.cpp b/src/core/fullscreen_ui.cpp index 99cf84ea4..7eb411695 100644 --- a/src/core/fullscreen_ui.cpp +++ b/src/core/fullscreen_ui.cpp @@ -503,6 +503,7 @@ struct ALIGN_TO_CACHE_LINE UIState float settings_last_bg_alpha = 1.0f; SettingsPage settings_page = SettingsPage::Interface; std::unique_ptr game_settings_interface; + std::string game_settings_serial; const GameDatabase::Entry* game_settings_db_entry; std::unique_ptr game_settings_entry; std::vector> game_list_directories_cache; @@ -875,6 +876,11 @@ void FullscreenUI::Shutdown(bool clear_state) std::memset(s_state.controller_macro_expanded, 0, sizeof(s_state.controller_macro_expanded)); s_state.game_list_sorted_entries = {}; s_state.game_list_directories_cache = {}; + s_state.game_settings_db_entry = nullptr; + s_state.game_settings_entry.reset(); + s_state.game_settings_serial = {}; + s_state.game_settings_interface.reset(); + s_state.game_settings_changed = false; s_state.game_patch_list = {}; s_state.enabled_game_patch_cache = {}; s_state.game_cheats_list = {}; @@ -3208,6 +3214,7 @@ void FullscreenUI::SwitchToSettings() { s_state.game_settings_entry.reset(); s_state.game_settings_interface.reset(); + s_state.game_settings_serial = {}; s_state.game_settings_db_entry = nullptr; s_state.game_patch_list = {}; s_state.enabled_game_patch_cache = {}; @@ -3225,6 +3232,7 @@ void FullscreenUI::SwitchToSettings() void FullscreenUI::SwitchToGameSettingsForSerial(std::string_view serial) { + s_state.game_settings_serial = serial; s_state.game_settings_entry.reset(); s_state.game_settings_db_entry = GameDatabase::GetEntryForSerial(serial); s_state.game_settings_interface = @@ -3296,7 +3304,7 @@ void FullscreenUI::PopulatePatchesAndCheatsList(const std::string_view serial) s_state.game_patch_list = Cheats::GetCodeInfoList(serial, std::nullopt, false, true, true); s_state.game_cheats_list = Cheats::GetCodeInfoList( serial, std::nullopt, true, s_state.game_settings_interface->GetBoolValue("Cheats", "LoadCheatsFromDatabase", true), - true); + s_state.game_settings_interface->GetBoolValue("Cheats", "SortList", false)); s_state.game_cheat_groups = Cheats::GetCodeListUniquePrefixes(s_state.game_cheats_list, true); s_state.enabled_game_patch_cache = s_state.game_settings_interface->GetStringList(Cheats::PATCHES_CONFIG_SECTION, Cheats::PATCH_ENABLE_CONFIG_KEY); @@ -6239,8 +6247,20 @@ void FullscreenUI::DrawPatchesOrCheatsSettingsPage(bool cheats) else bsi->SetBoolValue("Cheats", "LoadCheatsFromDatabase", false); SetSettingsChanged(bsi); - if (s_state.game_settings_entry) - PopulatePatchesAndCheatsList(s_state.game_settings_entry->serial); + PopulatePatchesAndCheatsList(s_state.game_settings_serial); + } + + bool sort_list = bsi->GetBoolValue("Cheats", "SortList", false); + if (ToggleButton(FSUI_ICONSTR(ICON_FA_SORT_ALPHA_DOWN, "Sort Alphabetically"), + FSUI_CSTR("Sorts the cheat list alphabetically by the name of the code."), &sort_list)) + { + if (!sort_list) + bsi->DeleteValue("Cheats", "SortList"); + else + bsi->SetBoolValue("Cheats", "SortList", true); + SetSettingsChanged(bsi); + s_state.game_cheats_list = + Cheats::GetCodeInfoList(s_state.game_settings_serial, std::nullopt, true, load_database_cheats, sort_list); } if (code_list.empty()) @@ -9014,8 +9034,10 @@ TRANSLATE_NOOP("FullscreenUI", "Smooth Scrolling"); TRANSLATE_NOOP("FullscreenUI", "Smooths out blockyness between colour transitions in 24-bit content, usually FMVs."); TRANSLATE_NOOP("FullscreenUI", "Smooths out the blockiness of magnified textures on 2D objects."); TRANSLATE_NOOP("FullscreenUI", "Smooths out the blockiness of magnified textures on 3D objects."); +TRANSLATE_NOOP("FullscreenUI", "Sort Alphabetically"); TRANSLATE_NOOP("FullscreenUI", "Sort By"); TRANSLATE_NOOP("FullscreenUI", "Sort Reversed"); +TRANSLATE_NOOP("FullscreenUI", "Sorts the cheat list alphabetically by the name of the code."); TRANSLATE_NOOP("FullscreenUI", "Sound Effects"); TRANSLATE_NOOP("FullscreenUI", "Specifies the amount of buffer time added, which reduces the additional sleep time introduced."); TRANSLATE_NOOP("FullscreenUI", "Spectator Mode");