From 6e81098132cb949bc8b7804f02e689d92ca3f77f Mon Sep 17 00:00:00 2001 From: retroNUC <71151161+retroNUC@users.noreply.github.com> Date: Wed, 4 Jan 2023 16:21:02 +0000 Subject: [PATCH] Add Achievements Visibility submenu options - Startup Summary split off from Verbose Mode, added option to hide for games with zero core cheevos - Some existing options moved into this submenu - Leaderboard-related options coming in future PR --- cheevos/cheevos.c | 87 +++++++++-------- cheevos/cheevos_locals.h | 9 ++ config.def.h | 2 + configuration.c | 4 +- configuration.h | 2 + intl/msg_hash_lbl.h | 16 ++++ intl/msg_hash_us.h | 67 +++++++++---- menu/cbs/menu_cbs_deferred_push.c | 5 + menu/cbs/menu_cbs_ok.c | 5 + menu/cbs/menu_cbs_sublabel.c | 13 +++ menu/cbs/menu_cbs_title.c | 2 + menu/menu_cbs.h | 1 + menu/menu_displaylist.c | 25 ++++- menu/menu_displaylist.h | 1 + menu/menu_setting.c | 151 +++++++++++++++++++++++------- msg_hash.h | 8 ++ ui/drivers/qt/qt_options.cpp | 17 ++++ ui/drivers/qt/qt_options.h | 1 + 18 files changed, 325 insertions(+), 91 deletions(-) diff --git a/cheevos/cheevos.c b/cheevos/cheevos.c index 52efcc2769..e504ae51f7 100644 --- a/cheevos/cheevos.c +++ b/cheevos/cheevos.c @@ -331,24 +331,27 @@ void rcheevos_award_achievement(rcheevos_locals_t* locals, cheevo->id, cheevo->title, cheevo->description); /* Show the on screen message. */ -#if defined(HAVE_GFX_WIDGETS) - if (widgets_ready) - gfx_widgets_push_achievement(msg_hash_to_str(MSG_ACHIEVEMENT_UNLOCKED), cheevo->title, cheevo->badge); - else -#endif + if (settings->bools.cheevos_visibility_unlock) { - char buffer[256]; - size_t _len = strlcpy(buffer, +#if defined(HAVE_GFX_WIDGETS) + if (widgets_ready) + gfx_widgets_push_achievement(msg_hash_to_str(MSG_ACHIEVEMENT_UNLOCKED), cheevo->title, cheevo->badge); + else +#endif + { + char buffer[256]; + size_t _len = strlcpy(buffer, msg_hash_to_str(MSG_ACHIEVEMENT_UNLOCKED), sizeof(buffer)); - buffer[_len ] = ':'; - buffer[_len+1] = ' '; - buffer[_len+2] = '\0'; - strlcat(buffer, cheevo->title, sizeof(buffer)); - runloop_msg_queue_push(buffer, 0, 2 * 60, false, NULL, + buffer[_len ] = ':'; + buffer[_len+1] = ' '; + buffer[_len+2] = '\0'; + strlcat(buffer, cheevo->title, sizeof(buffer)); + runloop_msg_queue_push(buffer, 0, 2 * 60, false, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); - runloop_msg_queue_push(cheevo->description, 0, 3 * 60, false, NULL, + runloop_msg_queue_push(cheevo->description, 0, 3 * 60, false, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); + } } /* Start the award task (unofficial achievement @@ -1477,44 +1480,47 @@ void rcheevos_show_mastery_placard(void) title[sizeof(title) - 1] = '\0'; CHEEVOS_LOG(RCHEEVOS_TAG "%s\n", title); -#if defined (HAVE_GFX_WIDGETS) - if (gfx_widgets_ready()) + if (settings->bools.cheevos_visibility_unlock) { - const bool content_runtime_log = settings->bools.content_runtime_log; - const bool content_runtime_log_aggr = settings->bools.content_runtime_log_aggregate; - char msg[128]; - size_t len = strlcpy(msg, rcheevos_locals.displayname, sizeof(msg)); - - if (len < sizeof(msg) - 12 && - (content_runtime_log || content_runtime_log_aggr)) +#if defined (HAVE_GFX_WIDGETS) + if (gfx_widgets_ready()) { - const char* content_path = path_get(RARCH_PATH_CONTENT); - const char* core_path = path_get(RARCH_PATH_CORE); - runtime_log_t* runtime_log = runtime_log_init( + const bool content_runtime_log = settings->bools.content_runtime_log; + const bool content_runtime_log_aggr = settings->bools.content_runtime_log_aggregate; + char msg[128]; + size_t len = strlcpy(msg, rcheevos_locals.displayname, sizeof(msg)); + + if (len < sizeof(msg) - 12 && + (content_runtime_log || content_runtime_log_aggr)) + { + const char* content_path = path_get(RARCH_PATH_CONTENT); + const char* core_path = path_get(RARCH_PATH_CORE); + runtime_log_t* runtime_log = runtime_log_init( content_path, core_path, settings->paths.directory_runtime_log, settings->paths.directory_playlist, !content_runtime_log_aggr); - if (runtime_log) - { - const runloop_state_t* runloop_state = runloop_state_get_ptr(); - runtime_log_add_runtime_usec(runtime_log, - runloop_state->core_runtime_usec); + if (runtime_log) + { + const runloop_state_t* runloop_state = runloop_state_get_ptr(); + runtime_log_add_runtime_usec(runtime_log, + runloop_state->core_runtime_usec); - len += snprintf(msg + len, sizeof(msg) - len, " | "); - runtime_log_get_runtime_str(runtime_log, msg + len, sizeof(msg) - len); - msg[sizeof(msg) - 1] = '\0'; + len += snprintf(msg + len, sizeof(msg) - len, " | "); + runtime_log_get_runtime_str(runtime_log, msg + len, sizeof(msg) - len); + msg[sizeof(msg) - 1] = '\0'; - free(runtime_log); + free(runtime_log); + } } - } - gfx_widgets_push_achievement(title, msg, rcheevos_locals.game.badge_name); - } - else + gfx_widgets_push_achievement(title, msg, rcheevos_locals.game.badge_name); + } + else #endif - runloop_msg_queue_push(title, 0, 3 * 60, false, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); + runloop_msg_queue_push(title, 0, 3 * 60, false, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); + } } static void rcheevos_show_game_placard(void) @@ -1574,7 +1580,8 @@ static void rcheevos_show_game_placard(void) msg[sizeof(msg) - 1] = 0; CHEEVOS_LOG(RCHEEVOS_TAG "%s\n", msg); - if (settings->bools.cheevos_verbose_enable) + if (settings->uints.cheevos_visibility_summary == RCHEEVOS_SUMMARY_ALLGAMES || + (number_of_core > 0 && settings->uints.cheevos_visibility_summary == RCHEEVOS_SUMMARY_HASCHEEVOS)) { #if defined (HAVE_GFX_WIDGETS) if (gfx_widgets_ready()) diff --git a/cheevos/cheevos_locals.h b/cheevos/cheevos_locals.h index 1960e414de..6fbd4a8ee5 100644 --- a/cheevos/cheevos_locals.h +++ b/cheevos/cheevos_locals.h @@ -110,6 +110,15 @@ enum rcheevos_load_state RCHEEVOS_LOAD_STATE_ABORTED }; +enum rcheevos_summary_notif +{ + RCHEEVOS_SUMMARY_ALLGAMES = 0, + RCHEEVOS_SUMMARY_HASCHEEVOS, + RCHEEVOS_SUMMARY_OFF, + RCHEEVOS_SUMMARY_LAST + +}; + typedef struct rcheevos_load_info_t { enum rcheevos_load_state state; diff --git a/config.def.h b/config.def.h index 8c99b5ee3a..830a51b2dc 100644 --- a/config.def.h +++ b/config.def.h @@ -189,6 +189,8 @@ #define DEFAULT_CHEEVOS_APPEARANCE_PADDING_AUTO true #define DEFAULT_CHEEVOS_APPEARANCE_PADDING_H 0.0f #define DEFAULT_CHEEVOS_APPEARANCE_PADDING_V 0.0f +#define DEFAULT_CHEEVOS_VISIBILITY_SUMMARY 1 /* RCHEEVOS_SUMMARY_HASCHEEVOS */ +#define DEFAULT_CHEEVOS_VISIBILITY_UNLOCK true #endif /* VIDEO */ diff --git a/configuration.c b/configuration.c index 522becf719..ad81f62bef 100644 --- a/configuration.c +++ b/configuration.c @@ -1952,6 +1952,7 @@ static struct config_bool_setting *populate_settings_bool( SETTING_BOOL("cheevos_badges_enable", &settings->bools.cheevos_badges_enable, true, false, false); SETTING_BOOL("cheevos_start_active", &settings->bools.cheevos_start_active, true, false, false); SETTING_BOOL("cheevos_appearance_padding_auto", &settings->bools.cheevos_appearance_padding_auto, true, DEFAULT_CHEEVOS_APPEARANCE_PADDING_AUTO, false); + SETTING_BOOL("cheevos_visibility_unlock", &settings->bools.cheevos_visibility_unlock, true, DEFAULT_CHEEVOS_VISIBILITY_UNLOCK, false); #endif #ifdef HAVE_OVERLAY SETTING_BOOL("input_overlay_enable", &settings->bools.input_overlay_enable, true, config_overlay_enable_default(), false); @@ -2283,7 +2284,8 @@ static struct config_uint_setting *populate_settings_uint( #endif #endif #ifdef HAVE_CHEEVOS - SETTING_UINT("cheevos_appearance_anchor", &settings->uints.cheevos_appearance_anchor, true, DEFAULT_CHEEVOS_APPEARANCE_ANCHOR, false); + SETTING_UINT("cheevos_appearance_anchor", &settings->uints.cheevos_appearance_anchor, true, DEFAULT_CHEEVOS_APPEARANCE_ANCHOR, false); + SETTING_UINT("cheevos_visibility_summary", &settings->uints.cheevos_visibility_summary, true, DEFAULT_CHEEVOS_VISIBILITY_SUMMARY, false); #endif SETTING_UINT("audio_out_rate", &settings->uints.audio_output_sample_rate, true, DEFAULT_OUTPUT_RATE, false); SETTING_UINT("custom_viewport_width", &settings->video_viewport_custom.width, false, 0 /* TODO */, false); diff --git a/configuration.h b/configuration.h index 0a27999d68..797056e770 100644 --- a/configuration.h +++ b/configuration.h @@ -342,6 +342,7 @@ typedef struct settings #endif unsigned cheevos_appearance_anchor; + unsigned cheevos_visibility_summary; } uints; struct @@ -836,6 +837,7 @@ typedef struct settings bool cheevos_unlock_sound_enable; bool cheevos_challenge_indicators; bool cheevos_appearance_padding_auto; + bool cheevos_visibility_unlock; /* Camera */ bool camera_allow; diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index 3cf6d10539..fc3e39c570 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -452,6 +452,18 @@ MSG_HASH( MENU_ENUM_LABEL_CHEEVOS_APPEARANCE_PADDING_AUTO, "cheevos_appearance_padding_auto" ) +MSG_HASH( + MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_SETTINGS, + "cheevos_visibility_settings" + ) +MSG_HASH( + MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_SUMMARY, + "cheevos_visibility_summary" + ) +MSG_HASH( + MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_UNLOCK, + "cheevos_visibility_unlock" + ) MSG_HASH( MENU_ENUM_LABEL_CLOSE_CONTENT, "unload_core" @@ -1138,6 +1150,10 @@ MSG_HASH( MENU_ENUM_LABEL_DEFERRED_CHEEVOS_APPEARANCE_SETTINGS_LIST, "deferred_cheevos_appearance_settings_list" ) +MSG_HASH( + MENU_ENUM_LABEL_DEFERRED_CHEEVOS_VISIBILITY_SETTINGS_LIST, + "deferred_cheevos_visibility_settings_list" + ) MSG_HASH( MENU_ENUM_LABEL_DEFERRED_REWIND_SETTINGS_LIST, "deferred_rewind_settings_list" diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 2f0a9eae4b..5b73f9a91c 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -6027,14 +6027,6 @@ MSG_HASH( MENU_ENUM_SUBLABEL_CHEEVOS_UNLOCK_SOUND_ENABLE, "Play a sound when an achievement is unlocked." ) -MSG_HASH( - MENU_ENUM_LABEL_VALUE_CHEEVOS_VERBOSE_ENABLE, - "Verbose Mode" - ) -MSG_HASH( - MENU_ENUM_SUBLABEL_CHEEVOS_VERBOSE_ENABLE, - "Show more information in the notifications." - ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CHEEVOS_AUTO_SCREENSHOT, "Automatic Screenshot" @@ -6051,14 +6043,6 @@ MSG_HASH( MENU_ENUM_SUBLABEL_CHEEVOS_START_ACTIVE, "Start the session with all achievements active (even the ones previously unlocked)." ) -MSG_HASH( - MENU_ENUM_LABEL_VALUE_CHEEVOS_CHALLENGE_INDICATORS, - "Challenge Indicators" - ) -MSG_HASH( - MENU_ENUM_SUBLABEL_CHEEVOS_CHALLENGE_INDICATORS, - "Allows achievements to display an on-screen indicator while the achievement can be earned." - ) /* Settings > Achievements > Appearance */ @@ -6127,6 +6111,57 @@ MSG_HASH( "Distance from top/bottom screen edge, which can compensate for display overscan." ) +/* Settings > Achievements > Visibility */ + +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_SETTINGS, + "Visibility" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_SETTINGS, + "Change which messages and on-screen elements are shown. Does not disable functionality." + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_SUMMARY, + "Startup Summary" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_SUMMARY, + "Shows information about the game being loaded and the user's current progress.\n'All Games in Database' will show summary for games with no published achievements." + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_SUMMARY_ALLGAMES, + "All Games in Database" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_SUMMARY_HASCHEEVOS, + "Games with Achievements" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_UNLOCK, + "New Unlocks/Mastery" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_UNLOCK, + "Shows when a new achievement is unlocked or a game is mastered." + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_CHALLENGE_INDICATORS, + "Active Challenge Indicators" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CHEEVOS_CHALLENGE_INDICATORS, + "Shows on-screen indicators while some conditional achievements can be earned." + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_VERBOSE_ENABLE, + "Verbose Mode" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CHEEVOS_VERBOSE_ENABLE, + "Shows additional messages for accounts and other internal errors/problems." + ) + /* Settings > Network */ MSG_HASH( diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index b10fa87816..8f6cca20ff 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -205,6 +205,7 @@ GENERIC_DEFERRED_PUSH(deferred_push_user_interface_settings_list, DISPLAYLIST_ GENERIC_DEFERRED_PUSH(deferred_push_power_management_settings_list, DISPLAYLIST_POWER_MANAGEMENT_SETTINGS_LIST) GENERIC_DEFERRED_PUSH(deferred_push_retro_achievements_settings_list,DISPLAYLIST_RETRO_ACHIEVEMENTS_SETTINGS_LIST) GENERIC_DEFERRED_PUSH(deferred_push_cheevos_appearance_settings_list,DISPLAYLIST_CHEEVOS_APPEARANCE_SETTINGS_LIST) +GENERIC_DEFERRED_PUSH(deferred_push_cheevos_visibility_settings_list,DISPLAYLIST_CHEEVOS_VISIBILITY_SETTINGS_LIST) GENERIC_DEFERRED_PUSH(deferred_push_updater_settings_list, DISPLAYLIST_UPDATER_SETTINGS_LIST) GENERIC_DEFERRED_PUSH(deferred_push_bluetooth_settings_list, DISPLAYLIST_BLUETOOTH_SETTINGS_LIST) GENERIC_DEFERRED_PUSH(deferred_push_wifi_settings_list, DISPLAYLIST_WIFI_SETTINGS_LIST) @@ -726,6 +727,7 @@ static int menu_cbs_init_bind_deferred_push_compare_label( {MENU_ENUM_LABEL_DEFERRED_MENU_SOUNDS_LIST, deferred_push_menu_sounds_list}, {MENU_ENUM_LABEL_DEFERRED_RETRO_ACHIEVEMENTS_SETTINGS_LIST, deferred_push_retro_achievements_settings_list}, {MENU_ENUM_LABEL_DEFERRED_CHEEVOS_APPEARANCE_SETTINGS_LIST, deferred_push_cheevos_appearance_settings_list}, + {MENU_ENUM_LABEL_DEFERRED_CHEEVOS_VISIBILITY_SETTINGS_LIST, deferred_push_cheevos_visibility_settings_list}, {MENU_ENUM_LABEL_DEFERRED_UPDATER_SETTINGS_LIST, deferred_push_updater_settings_list}, {MENU_ENUM_LABEL_DEFERRED_NETWORK_SETTINGS_LIST, deferred_push_network_settings_list}, {MENU_ENUM_LABEL_DEFERRED_SUBSYSTEM_SETTINGS_LIST, deferred_push_subsystem_settings_list}, @@ -1270,6 +1272,9 @@ static int menu_cbs_init_bind_deferred_push_compare_label( case MENU_ENUM_LABEL_DEFERRED_CHEEVOS_APPEARANCE_SETTINGS_LIST: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_cheevos_appearance_settings_list); break; + case MENU_ENUM_LABEL_DEFERRED_CHEEVOS_VISIBILITY_SETTINGS_LIST: + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_cheevos_visibility_settings_list); + break; case MENU_ENUM_LABEL_DEFERRED_ONSCREEN_DISPLAY_SETTINGS_LIST: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_onscreen_display_settings_list); break; diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index 3cd4a0fcbd..87e6c8032b 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -417,6 +417,8 @@ static enum msg_hash_enums action_ok_dl_to_enum(unsigned lbl) return MENU_ENUM_LABEL_DEFERRED_RETRO_ACHIEVEMENTS_SETTINGS_LIST; case ACTION_OK_DL_CHEEVOS_APPEARANCE_SETTINGS_LIST: return MENU_ENUM_LABEL_DEFERRED_CHEEVOS_APPEARANCE_SETTINGS_LIST; + case ACTION_OK_DL_CHEEVOS_VISIBILITY_SETTINGS_LIST: + return MENU_ENUM_LABEL_DEFERRED_CHEEVOS_VISIBILITY_SETTINGS_LIST; case ACTION_OK_DL_UPDATER_SETTINGS_LIST: return MENU_ENUM_LABEL_DEFERRED_UPDATER_SETTINGS_LIST; case ACTION_OK_DL_NETWORK_HOSTING_SETTINGS_LIST: @@ -1613,6 +1615,7 @@ int generic_action_ok_displaylist_push(const char *path, case ACTION_OK_DL_MENU_FILE_BROWSER_SETTINGS_LIST: case ACTION_OK_DL_RETRO_ACHIEVEMENTS_SETTINGS_LIST: case ACTION_OK_DL_CHEEVOS_APPEARANCE_SETTINGS_LIST: + case ACTION_OK_DL_CHEEVOS_VISIBILITY_SETTINGS_LIST: case ACTION_OK_DL_UPDATER_SETTINGS_LIST: case ACTION_OK_DL_NETWORK_SETTINGS_LIST: case ACTION_OK_DL_NETWORK_HOSTING_SETTINGS_LIST: @@ -5856,6 +5859,7 @@ DEFAULT_ACTION_OK_FUNC(action_ok_user_interface_list, ACTION_OK_DL_USER_INTERFAC DEFAULT_ACTION_OK_FUNC(action_ok_menu_file_browser_list, ACTION_OK_DL_MENU_FILE_BROWSER_SETTINGS_LIST) DEFAULT_ACTION_OK_FUNC(action_ok_retro_achievements_list, ACTION_OK_DL_RETRO_ACHIEVEMENTS_SETTINGS_LIST) DEFAULT_ACTION_OK_FUNC(action_ok_cheevos_appearance_list, ACTION_OK_DL_CHEEVOS_APPEARANCE_SETTINGS_LIST) +DEFAULT_ACTION_OK_FUNC(action_ok_cheevos_visibility_list, ACTION_OK_DL_CHEEVOS_VISIBILITY_SETTINGS_LIST) DEFAULT_ACTION_OK_FUNC(action_ok_updater_list, ACTION_OK_DL_UPDATER_SETTINGS_LIST) DEFAULT_ACTION_OK_FUNC(action_ok_lakka_services, ACTION_OK_DL_LAKKA_SERVICES_LIST) DEFAULT_ACTION_OK_FUNC(action_ok_user_list, ACTION_OK_DL_USER_SETTINGS_LIST) @@ -8419,6 +8423,7 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs, {MENU_ENUM_LABEL_FILE_BROWSER_OPEN_PICKER, action_ok_open_picker}, {MENU_ENUM_LABEL_RETRO_ACHIEVEMENTS_SETTINGS, action_ok_retro_achievements_list}, {MENU_ENUM_LABEL_CHEEVOS_APPEARANCE_SETTINGS, action_ok_cheevos_appearance_list}, + {MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_SETTINGS, action_ok_cheevos_visibility_list}, {MENU_ENUM_LABEL_UPDATER_SETTINGS, action_ok_updater_list}, #ifdef HAVE_BLUETOOTH {MENU_ENUM_LABEL_BLUETOOTH_SETTINGS, action_ok_bluetooth_list}, diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index 342bfdcb8a..ed47f4c6ce 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -311,6 +311,10 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_appearance_anchor, MENU_ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_appearance_padding_auto, MENU_ENUM_SUBLABEL_CHEEVOS_APPEARANCE_PADDING_AUTO) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_appearance_padding_h, MENU_ENUM_SUBLABEL_CHEEVOS_APPEARANCE_PADDING_H) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_appearance_padding_v, MENU_ENUM_SUBLABEL_CHEEVOS_APPEARANCE_PADDING_V) +DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_visibility_settings, MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_SETTINGS) +DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_visibility_unlock, MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_UNLOCK) +DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cheevos_visibility_summary, MENU_ENUM_SUBLABEL_CHEEVOS_VISIBILITY_SUMMARY) + #endif DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_views_settings_list, MENU_ENUM_SUBLABEL_MENU_VIEWS_SETTINGS) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_quick_menu_views_settings_list, MENU_ENUM_SUBLABEL_QUICK_MENU_VIEWS_SETTINGS) @@ -4311,6 +4315,15 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_CHEEVOS_APPEARANCE_PADDING_V: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_appearance_padding_v); break; + case MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_SETTINGS: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_visibility_settings); + break; + case MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_UNLOCK: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_visibility_unlock); + break; + case MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_SUMMARY: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_visibility_summary); + break; #endif case MENU_ENUM_LABEL_SETTINGS: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_settings); diff --git a/menu/cbs/menu_cbs_title.c b/menu/cbs/menu_cbs_title.c index 417110f9b0..a47b57d7f8 100644 --- a/menu/cbs/menu_cbs_title.c +++ b/menu/cbs/menu_cbs_title.c @@ -658,6 +658,7 @@ DEFAULT_TITLE_MACRO(action_get_menu_sounds_list, MENU_ENUM_LABEL_ DEFAULT_TITLE_MACRO(action_get_menu_file_browser_settings_list, MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS) DEFAULT_TITLE_MACRO(action_get_retro_achievements_settings_list,MENU_ENUM_LABEL_VALUE_RETRO_ACHIEVEMENTS_SETTINGS) DEFAULT_TITLE_MACRO(action_get_cheevos_appearance_settings_list,MENU_ENUM_LABEL_VALUE_CHEEVOS_APPEARANCE_SETTINGS) +DEFAULT_TITLE_MACRO(action_get_cheevos_visibility_settings_list,MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_SETTINGS) DEFAULT_TITLE_MACRO(action_get_bluetooth_settings_list, MENU_ENUM_LABEL_VALUE_BLUETOOTH_SETTINGS) DEFAULT_TITLE_MACRO(action_get_wifi_networks_list, MENU_ENUM_LABEL_VALUE_WIFI_NETWORKS) DEFAULT_TITLE_MACRO(action_get_wifi_settings_list, MENU_ENUM_LABEL_VALUE_WIFI_SETTINGS) @@ -1019,6 +1020,7 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs, {MENU_ENUM_LABEL_DEFERRED_MENU_FILE_BROWSER_SETTINGS_LIST, action_get_menu_file_browser_settings_list}, {MENU_ENUM_LABEL_DEFERRED_RETRO_ACHIEVEMENTS_SETTINGS_LIST, action_get_retro_achievements_settings_list}, {MENU_ENUM_LABEL_DEFERRED_CHEEVOS_APPEARANCE_SETTINGS_LIST, action_get_cheevos_appearance_settings_list}, + {MENU_ENUM_LABEL_DEFERRED_CHEEVOS_VISIBILITY_SETTINGS_LIST, action_get_cheevos_visibility_settings_list}, {MENU_ENUM_LABEL_DEFERRED_BLUETOOTH_SETTINGS_LIST, action_get_bluetooth_settings_list}, {MENU_ENUM_LABEL_DEFERRED_WIFI_NETWORKS_LIST, action_get_wifi_networks_list}, {MENU_ENUM_LABEL_DEFERRED_WIFI_SETTINGS_LIST, action_get_wifi_settings_list}, diff --git a/menu/menu_cbs.h b/menu/menu_cbs.h index 76571847d1..0f2ea3bc8d 100644 --- a/menu/menu_cbs.h +++ b/menu/menu_cbs.h @@ -201,6 +201,7 @@ enum ACTION_OK_DL_MENU_FILE_BROWSER_SETTINGS_LIST, ACTION_OK_DL_RETRO_ACHIEVEMENTS_SETTINGS_LIST, ACTION_OK_DL_CHEEVOS_APPEARANCE_SETTINGS_LIST, + ACTION_OK_DL_CHEEVOS_VISIBILITY_SETTINGS_LIST, ACTION_OK_DL_ACHIEVEMENTS_HARDCORE_PAUSE_LIST, ACTION_OK_DL_UPDATER_SETTINGS_LIST, ACTION_OK_DL_BLUETOOTH_SETTINGS_LIST, diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 4c9fed861f..37e6d0853b 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -8341,9 +8341,9 @@ unsigned menu_displaylist_build_list( {MENU_ENUM_LABEL_CHEEVOS_USERNAME, PARSE_ONLY_STRING, false }, {MENU_ENUM_LABEL_CHEEVOS_PASSWORD, PARSE_ONLY_STRING, false }, {MENU_ENUM_LABEL_CHEEVOS_APPEARANCE_SETTINGS, PARSE_ACTION, false }, + {MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_SETTINGS, PARSE_ACTION, false }, {MENU_ENUM_LABEL_CHEEVOS_HARDCORE_MODE_ENABLE, PARSE_ONLY_BOOL, false }, {MENU_ENUM_LABEL_CHEEVOS_LEADERBOARDS_ENABLE, PARSE_ONLY_STRING_OPTIONS, false }, - {MENU_ENUM_LABEL_CHEEVOS_CHALLENGE_INDICATORS, PARSE_ONLY_BOOL, false }, {MENU_ENUM_LABEL_CHEEVOS_RICHPRESENCE_ENABLE, PARSE_ONLY_BOOL, false }, #ifndef HAVE_GFX_WIDGETS {MENU_ENUM_LABEL_CHEEVOS_BADGES_ENABLE, PARSE_ONLY_BOOL, false }, @@ -8355,7 +8355,6 @@ unsigned menu_displaylist_build_list( #ifdef HAVE_SCREENSHOTS {MENU_ENUM_LABEL_CHEEVOS_AUTO_SCREENSHOT, PARSE_ONLY_BOOL, false }, #endif - {MENU_ENUM_LABEL_CHEEVOS_VERBOSE_ENABLE, PARSE_ONLY_BOOL, false }, {MENU_ENUM_LABEL_CHEEVOS_START_ACTIVE, PARSE_ONLY_BOOL, false }, }; @@ -8419,6 +8418,27 @@ unsigned menu_displaylist_build_list( } } break; + case DISPLAYLIST_CHEEVOS_VISIBILITY_SETTINGS_LIST: + { + menu_displaylist_build_info_selective_t build_list[] = { + {MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_SUMMARY, PARSE_ONLY_UINT, true}, + {MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_UNLOCK, PARSE_ONLY_BOOL, true}, + {MENU_ENUM_LABEL_CHEEVOS_CHALLENGE_INDICATORS, PARSE_ONLY_BOOL, true}, + {MENU_ENUM_LABEL_CHEEVOS_VERBOSE_ENABLE, PARSE_ONLY_BOOL, true}, + }; + + for (i = 0; i < ARRAY_SIZE(build_list); i++) + { + if (!build_list[i].checked && !include_everything) + continue; + + if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(list, + build_list[i].enum_idx, build_list[i].parse_type, + false) == 0) + count++; + } + } + break; case DISPLAYLIST_ACCOUNTS_TWITCH_LIST: if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(list, MENU_ENUM_LABEL_TWITCH_STREAM_KEY, @@ -13171,6 +13191,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, case DISPLAYLIST_ACCOUNTS_TWITCH_LIST: case DISPLAYLIST_RETRO_ACHIEVEMENTS_SETTINGS_LIST: case DISPLAYLIST_CHEEVOS_APPEARANCE_SETTINGS_LIST: + case DISPLAYLIST_CHEEVOS_VISIBILITY_SETTINGS_LIST: case DISPLAYLIST_ACCOUNTS_YOUTUBE_LIST: case DISPLAYLIST_ACCOUNTS_FACEBOOK_LIST: case DISPLAYLIST_RECORDING_SETTINGS_LIST: diff --git a/menu/menu_displaylist.h b/menu/menu_displaylist.h index 508efd2575..d6e52fd312 100644 --- a/menu/menu_displaylist.h +++ b/menu/menu_displaylist.h @@ -218,6 +218,7 @@ enum menu_displaylist_ctl_state DISPLAYLIST_MENU_SOUNDS_LIST, DISPLAYLIST_RETRO_ACHIEVEMENTS_SETTINGS_LIST, DISPLAYLIST_CHEEVOS_APPEARANCE_SETTINGS_LIST, + DISPLAYLIST_CHEEVOS_VISIBILITY_SETTINGS_LIST, DISPLAYLIST_UPDATER_SETTINGS_LIST, DISPLAYLIST_BLUETOOTH_SETTINGS_LIST, DISPLAYLIST_WIFI_SETTINGS_LIST, diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 78169a5bdb..cc917f2a75 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -306,6 +306,7 @@ enum settings_list_type SETTINGS_LIST_PLAYLIST, SETTINGS_LIST_CHEEVOS, SETTINGS_LIST_CHEEVOS_APPEARANCE, + SETTINGS_LIST_CHEEVOS_VISIBILITY, SETTINGS_LIST_CORE_UPDATER, SETTINGS_LIST_NETPLAY, SETTINGS_LIST_LAKKA_SERVICES, @@ -8804,6 +8805,36 @@ static void achievement_leaderboards_enabled_write_handler(rarch_setting_t* sett rcheevos_leaderboards_enabled_changed(); } +static void setting_get_string_representation_uint_cheevos_visibility_summary( + rarch_setting_t* setting, + char* s, size_t len) +{ + if (!setting) + return; + + switch (*setting->value.target.unsigned_integer) + { + case RCHEEVOS_SUMMARY_ALLGAMES: + strlcpy(s, + msg_hash_to_str( + MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_SUMMARY_ALLGAMES), + len); + break; + case RCHEEVOS_SUMMARY_HASCHEEVOS: + strlcpy(s, + msg_hash_to_str( + MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_SUMMARY_HASCHEEVOS), + len); + break; + case RCHEEVOS_SUMMARY_OFF: + strlcpy(s, + msg_hash_to_str( + MENU_ENUM_LABEL_VALUE_OFF), + len); + break; + } +} + static void achievement_leaderboards_get_string_representation(rarch_setting_t* setting, char* s, size_t len) { const char* value = setting->value.target.string; @@ -10162,6 +10193,14 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); + + CONFIG_ACTION( + list, list_info, + MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_SETTINGS, + MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_SETTINGS, + &group_info, + &subgroup_info, + parent_group); #endif CONFIG_ACTION( @@ -19991,22 +20030,6 @@ static bool setting_append_list( (*list)[list_info->index - 1].get_string_representation = achievement_leaderboards_get_string_representation; (*list)[list_info->index - 1].free_flags &= ~SD_FREE_FLAG_VALUES; - CONFIG_BOOL( - list, list_info, - &settings->bools.cheevos_challenge_indicators, - MENU_ENUM_LABEL_CHEEVOS_CHALLENGE_INDICATORS, - MENU_ENUM_LABEL_VALUE_CHEEVOS_CHALLENGE_INDICATORS, - true, - MENU_ENUM_LABEL_VALUE_OFF, - MENU_ENUM_LABEL_VALUE_ON, - &group_info, - &subgroup_info, - parent_group, - general_write_handler, - general_read_handler, - SD_FLAG_NONE - ); - CONFIG_BOOL( list, list_info, &settings->bools.cheevos_richpresence_enable, @@ -20060,22 +20083,6 @@ static bool setting_append_list( ); #endif - CONFIG_BOOL( - list, list_info, - &settings->bools.cheevos_verbose_enable, - MENU_ENUM_LABEL_CHEEVOS_VERBOSE_ENABLE, - MENU_ENUM_LABEL_VALUE_CHEEVOS_VERBOSE_ENABLE, - true, - MENU_ENUM_LABEL_VALUE_OFF, - MENU_ENUM_LABEL_VALUE_ON, - &group_info, - &subgroup_info, - parent_group, - general_write_handler, - general_read_handler, - SD_FLAG_ADVANCED - ); - CONFIG_BOOL( list, list_info, &settings->bools.cheevos_auto_screenshot, @@ -20207,6 +20214,85 @@ static bool setting_append_list( menu_settings_list_current_add_range(list, list_info, 0.0, 0.5, 0.01, true, true); #endif + END_SUB_GROUP(list, list_info, parent_group); + END_GROUP(list, list_info, parent_group); +#endif + break; + case SETTINGS_LIST_CHEEVOS_VISIBILITY: +#ifdef HAVE_CHEEVOS + START_GROUP(list, list_info, &group_info, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_SETTINGS), + parent_group); + parent_group = msg_hash_to_str(MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_SETTINGS); + START_SUB_GROUP(list, list_info, "State", &group_info, &subgroup_info, parent_group); + + CONFIG_UINT( + list, list_info, + &settings->uints.cheevos_visibility_summary, + MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_SUMMARY, + MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_SUMMARY, + DEFAULT_CHEEVOS_VISIBILITY_SUMMARY, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler); + (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; + (*list)[list_info->index - 1].action_left = &setting_uint_action_left_with_refresh; + (*list)[list_info->index - 1].action_right = &setting_uint_action_right_with_refresh; + (*list)[list_info->index - 1].get_string_representation = + &setting_get_string_representation_uint_cheevos_visibility_summary; + menu_settings_list_current_add_range(list, list_info, 0, RCHEEVOS_SUMMARY_LAST - 1, 1, true, true); + (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_UINT_COMBOBOX; + + CONFIG_BOOL( + list, list_info, + &settings->bools.cheevos_visibility_unlock, + MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_UNLOCK, + MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_UNLOCK, + true, + MENU_ENUM_LABEL_VALUE_OFF, + MENU_ENUM_LABEL_VALUE_ON, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler, + SD_FLAG_NONE + ); + + CONFIG_BOOL( + list, list_info, + &settings->bools.cheevos_challenge_indicators, + MENU_ENUM_LABEL_CHEEVOS_CHALLENGE_INDICATORS, + MENU_ENUM_LABEL_VALUE_CHEEVOS_CHALLENGE_INDICATORS, + true, + MENU_ENUM_LABEL_VALUE_OFF, + MENU_ENUM_LABEL_VALUE_ON, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler, + SD_FLAG_NONE + ); + + CONFIG_BOOL( + list, list_info, + &settings->bools.cheevos_verbose_enable, + MENU_ENUM_LABEL_CHEEVOS_VERBOSE_ENABLE, + MENU_ENUM_LABEL_VALUE_CHEEVOS_VERBOSE_ENABLE, + true, + MENU_ENUM_LABEL_VALUE_OFF, + MENU_ENUM_LABEL_VALUE_ON, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler, + SD_FLAG_ADVANCED + ); + END_SUB_GROUP(list, list_info, parent_group); END_GROUP(list, list_info, parent_group); #endif @@ -22249,6 +22335,7 @@ static rarch_setting_t *menu_setting_new_internal(rarch_setting_info_t *list_inf SETTINGS_LIST_PLAYLIST, SETTINGS_LIST_CHEEVOS, SETTINGS_LIST_CHEEVOS_APPEARANCE, + SETTINGS_LIST_CHEEVOS_VISIBILITY, SETTINGS_LIST_CORE_UPDATER, SETTINGS_LIST_NETPLAY, SETTINGS_LIST_LAKKA_SERVICES, diff --git a/msg_hash.h b/msg_hash.h index 0326032c8d..59f2d2fdc0 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -1663,6 +1663,13 @@ enum msg_hash_enums MENU_ENUM_LABEL_VALUE_CHEEVOS_APPEARANCE_ANCHOR_BOTTOMCENTER, MENU_ENUM_LABEL_VALUE_CHEEVOS_APPEARANCE_ANCHOR_BOTTOMRIGHT, + MENU_LABEL(CHEEVOS_VISIBILITY_SETTINGS), + MENU_LABEL(CHEEVOS_VISIBILITY_SUMMARY), + MENU_LABEL(CHEEVOS_VISIBILITY_UNLOCK), + + MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_SUMMARY_ALLGAMES, + MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_SUMMARY_HASCHEEVOS, + MENU_LBL_H(ACCOUNTS_RETRO_ACHIEVEMENTS), MENU_LABEL(ACCOUNTS_TWITCH), MENU_LABEL(ACCOUNTS_YOUTUBE), @@ -1821,6 +1828,7 @@ enum msg_hash_enums MENU_ENUM_LABEL_DEFERRED_MENU_FILE_BROWSER_SETTINGS_LIST, MENU_ENUM_LABEL_DEFERRED_RETRO_ACHIEVEMENTS_SETTINGS_LIST, MENU_ENUM_LABEL_DEFERRED_CHEEVOS_APPEARANCE_SETTINGS_LIST, + MENU_ENUM_LABEL_DEFERRED_CHEEVOS_VISIBILITY_SETTINGS_LIST, MENU_ENUM_LABEL_DEFERRED_UPDATER_SETTINGS_LIST, MENU_ENUM_LABEL_DEFERRED_BLUETOOTH_SETTINGS_LIST, MENU_ENUM_LABEL_DEFERRED_WIFI_SETTINGS_LIST, diff --git a/ui/drivers/qt/qt_options.cpp b/ui/drivers/qt/qt_options.cpp index 37b12bb068..c560cfc1f5 100644 --- a/ui/drivers/qt/qt_options.cpp +++ b/ui/drivers/qt/qt_options.cpp @@ -54,10 +54,13 @@ QWidget *AchievementsPage::widget() CheckBox *enabledCheckBox = new CheckBox(MENU_ENUM_LABEL_CHEEVOS_ENABLE); file_list_t *generalList = (file_list_t*)calloc(1, sizeof(*generalList)); file_list_t *appearanceList = (file_list_t*)calloc(1, sizeof(*appearanceList)); + file_list_t *visibilityList = (file_list_t*)calloc(1, sizeof(*visibilityList)); m_generalGroup = new SettingsGroup("General"); m_appearanceGroup = new SettingsGroup(msg_hash_to_str( MENU_ENUM_LABEL_VALUE_CHEEVOS_APPEARANCE_SETTINGS)); + m_visibilityGroup = new SettingsGroup(msg_hash_to_str( + MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_SETTINGS)); menu_displaylist_build_list(generalList, settings, DISPLAYLIST_RETRO_ACHIEVEMENTS_SETTINGS_LIST, true); @@ -86,6 +89,18 @@ QWidget *AchievementsPage::widget() } file_list_free(appearanceList); + menu_displaylist_build_list(visibilityList, settings, + DISPLAYLIST_CHEEVOS_VISIBILITY_SETTINGS_LIST, true); + + for (i = 0; i < visibilityList->size; i++) + { + menu_file_list_cbs_t* cbs = (menu_file_list_cbs_t*) + file_list_get_actiondata_at_offset(visibilityList, i); + + m_visibilityGroup->add(cbs->enum_idx); + } + file_list_free(visibilityList); + connect(enabledCheckBox, SIGNAL(stateChanged(int)), this, SLOT(onAchievementEnabledChanged(int))); @@ -94,6 +109,7 @@ QWidget *AchievementsPage::widget() layout->addWidget(enabledCheckBox); layout->addWidget(m_generalGroup); layout->addWidget(m_appearanceGroup); + layout->addWidget(m_visibilityGroup); layout->addStretch(); @@ -106,6 +122,7 @@ void AchievementsPage::onAchievementEnabledChanged(int state) { m_generalGroup->setDisabled(state == Qt::Unchecked); m_appearanceGroup->setDisabled(state == Qt::Unchecked); + m_visibilityGroup->setDisabled(state == Qt::Unchecked); } AudioCategory::AudioCategory(QWidget *parent) : diff --git a/ui/drivers/qt/qt_options.h b/ui/drivers/qt/qt_options.h index 6e6ecf5cbf..8b89b5716b 100644 --- a/ui/drivers/qt/qt_options.h +++ b/ui/drivers/qt/qt_options.h @@ -469,6 +469,7 @@ private slots: private: SettingsGroup* m_generalGroup; SettingsGroup* m_appearanceGroup; + SettingsGroup* m_visibilityGroup; }; /************************************************************