From 3fe88060184f964563cd9dabcbcab941f4982334 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 30 Dec 2019 05:43:48 +0100 Subject: [PATCH] (Subsystem Settings) Create separate subsystem settings list - will be selectively hidden later based on whether subsystems are implemented for the core --- intl/msg_hash_lbl.h | 4 ++++ intl/msg_hash_us.h | 4 ++++ menu/cbs/menu_cbs_deferred_push.c | 2 ++ menu/cbs/menu_cbs_ok.c | 7 +++++++ menu/cbs/menu_cbs_title.c | 2 ++ menu/drivers/materialui.c | 12 ++---------- menu/drivers/ozone/ozone.c | 12 ++---------- menu/drivers/xmb.c | 12 +++--------- menu/menu_cbs.h | 1 + menu/menu_displaylist.c | 28 ++++++++++++++++++++++++++++ menu/menu_displaylist.h | 1 + menu/menu_driver.c | 20 +++++++++++++------- menu/menu_driver.h | 2 +- menu/menu_setting.c | 8 ++++++++ msg_hash.h | 2 ++ 15 files changed, 80 insertions(+), 37 deletions(-) diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index 04e148bf33..f74217ce02 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -399,6 +399,8 @@ MSG_HASH(MENU_ENUM_LABEL_DEFERRED_QUICK_MENU_VIEWS_SETTINGS_LIST, "deferred_quick_menu_views_settings_list") MSG_HASH(MENU_ENUM_LABEL_DEFERRED_SETTINGS_VIEWS_SETTINGS_LIST, "deferred_settings_views_settings_list") +MSG_HASH(MENU_ENUM_LABEL_DEFERRED_SUBSYSTEM_SETTINGS_LIST, + "deferred_subsystem_settings_list") MSG_HASH(MENU_ENUM_LABEL_DEFERRED_NETWORK_HOSTING_SETTINGS_LIST, "deferred_network_hosting_settings_list") MSG_HASH(MENU_ENUM_LABEL_DEFERRED_NETWORK_SETTINGS_LIST, @@ -861,6 +863,8 @@ MSG_HASH(MENU_ENUM_LABEL_NETWORK_REMOTE_USER_LAST_ENABLE, "network_remote_user_last_enable") MSG_HASH(MENU_ENUM_LABEL_NETWORK_ON_DEMAND_THUMBNAILS, "network_on_demand_thumbnails") +MSG_HASH(MENU_ENUM_LABEL_SUBSYSTEM_SETTINGS, + "subsystem_settings") MSG_HASH(MENU_ENUM_LABEL_NETWORK_HOSTING_SETTINGS, "network_hosting_settings") MSG_HASH(MENU_ENUM_LABEL_NETWORK_SETTINGS, diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index c037654119..9f8367410b 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -2171,6 +2171,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_NETWORK_HOSTING_SETTINGS, "Host" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SUBSYSTEM_SETTINGS, + "Subsystems" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_NETWORK_SETTINGS, "Network" diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index 7edc0206a6..26215d0e75 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -182,6 +182,7 @@ generic_deferred_push(deferred_push_retro_achievements_settings_list,DISPLAYLIST generic_deferred_push(deferred_push_updater_settings_list, DISPLAYLIST_UPDATER_SETTINGS_LIST) generic_deferred_push(deferred_push_wifi_settings_list, DISPLAYLIST_WIFI_SETTINGS_LIST) generic_deferred_push(deferred_push_network_settings_list, DISPLAYLIST_NETWORK_SETTINGS_LIST) +generic_deferred_push(deferred_push_subsystem_settings_list, DISPLAYLIST_SUBSYSTEM_SETTINGS_LIST) generic_deferred_push(deferred_push_network_hosting_settings_list, DISPLAYLIST_NETWORK_HOSTING_SETTINGS_LIST) generic_deferred_push(deferred_push_lakka_services_list, DISPLAYLIST_LAKKA_SERVICES_LIST) generic_deferred_push(deferred_push_user_settings_list, DISPLAYLIST_USER_SETTINGS_LIST) @@ -716,6 +717,7 @@ static int menu_cbs_init_bind_deferred_push_compare_label( {MENU_ENUM_LABEL_DEFERRED_RETRO_ACHIEVEMENTS_SETTINGS_LIST, deferred_push_retro_achievements_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}, {MENU_ENUM_LABEL_DEFERRED_NETWORK_HOSTING_SETTINGS_LIST, deferred_push_network_hosting_settings_list}, {MENU_ENUM_LABEL_DEFERRED_WIFI_SETTINGS_LIST, deferred_push_wifi_settings_list}, {MENU_ENUM_LABEL_DEFERRED_LAKKA_SERVICES_LIST, deferred_push_lakka_services_list}, diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index 4a80594940..4566446ff7 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -280,6 +280,8 @@ static enum msg_hash_enums action_ok_dl_to_enum(unsigned lbl) return MENU_ENUM_LABEL_DEFERRED_UPDATER_SETTINGS_LIST; case ACTION_OK_DL_NETWORK_HOSTING_SETTINGS_LIST: return MENU_ENUM_LABEL_DEFERRED_NETWORK_HOSTING_SETTINGS_LIST; + case ACTION_OK_DL_SUBSYSTEM_SETTINGS_LIST: + return MENU_ENUM_LABEL_DEFERRED_SUBSYSTEM_SETTINGS_LIST; case ACTION_OK_DL_NETWORK_SETTINGS_LIST: return MENU_ENUM_LABEL_DEFERRED_NETWORK_SETTINGS_LIST; case ACTION_OK_DL_WIFI_SETTINGS_LIST: @@ -1112,6 +1114,7 @@ int generic_action_ok_displaylist_push(const char *path, case ACTION_OK_DL_UPDATER_SETTINGS_LIST: case ACTION_OK_DL_NETWORK_SETTINGS_LIST: case ACTION_OK_DL_NETWORK_HOSTING_SETTINGS_LIST: + case ACTION_OK_DL_SUBSYSTEM_SETTINGS_LIST: case ACTION_OK_DL_WIFI_SETTINGS_LIST: case ACTION_OK_DL_NETPLAY: case ACTION_OK_DL_NETPLAY_LAN_SCAN_SETTINGS_LIST: @@ -4793,6 +4796,7 @@ default_action_ok_func(action_ok_configurations_list, ACTION_OK_DL_CONFIGURATION default_action_ok_func(action_ok_saving_list, ACTION_OK_DL_SAVING_SETTINGS_LIST) default_action_ok_func(action_ok_network_list, ACTION_OK_DL_NETWORK_SETTINGS_LIST) default_action_ok_func(action_ok_network_hosting_list, ACTION_OK_DL_NETWORK_HOSTING_SETTINGS_LIST) +default_action_ok_func(action_ok_subsystem_list, ACTION_OK_DL_SUBSYSTEM_SETTINGS_LIST) default_action_ok_func(action_ok_database_manager_list, ACTION_OK_DL_DATABASE_MANAGER_LIST) default_action_ok_func(action_ok_wifi_list, ACTION_OK_DL_WIFI_SETTINGS_LIST) default_action_ok_func(action_ok_cursor_manager_list, ACTION_OK_DL_CURSOR_MANAGER_LIST) @@ -6950,6 +6954,9 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_NETWORK_HOSTING_SETTINGS: BIND_ACTION_OK(cbs, action_ok_network_hosting_list); break; + case MENU_ENUM_LABEL_SUBSYSTEM_SETTINGS: + BIND_ACTION_OK(cbs, action_ok_subsystem_list); + break; case MENU_ENUM_LABEL_NETWORK_SETTINGS: BIND_ACTION_OK(cbs, action_ok_network_list); break; diff --git a/menu/cbs/menu_cbs_title.c b/menu/cbs/menu_cbs_title.c index 40e151dce0..8de989abcf 100644 --- a/menu/cbs/menu_cbs_title.c +++ b/menu/cbs/menu_cbs_title.c @@ -377,6 +377,7 @@ default_title_macro(action_get_menu_file_browser_settings_list, MENU_ENUM_LABEL_ default_title_macro(action_get_retro_achievements_settings_list,MENU_ENUM_LABEL_VALUE_RETRO_ACHIEVEMENTS_SETTINGS) default_title_macro(action_get_wifi_settings_list, MENU_ENUM_LABEL_VALUE_WIFI_SETTINGS) default_title_macro(action_get_network_hosting_settings_list, MENU_ENUM_LABEL_VALUE_NETWORK_HOSTING_SETTINGS) +default_title_macro(action_get_subsystem_settings_list, MENU_ENUM_LABEL_VALUE_SUBSYSTEM_SETTINGS) default_title_macro(action_get_network_settings_list, MENU_ENUM_LABEL_VALUE_NETWORK_SETTINGS) default_title_macro(action_get_netplay_lan_scan_settings_list, MENU_ENUM_LABEL_VALUE_NETPLAY_LAN_SCAN_SETTINGS) #ifdef HAVE_LAKKA @@ -666,6 +667,7 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs, {MENU_ENUM_LABEL_DEFERRED_WIFI_SETTINGS_LIST, action_get_wifi_settings_list}, {MENU_ENUM_LABEL_DEFERRED_UPDATER_SETTINGS_LIST, action_get_updater_settings_list}, {MENU_ENUM_LABEL_DEFERRED_NETWORK_HOSTING_SETTINGS_LIST, action_get_network_hosting_settings_list}, + {MENU_ENUM_LABEL_DEFERRED_SUBSYSTEM_SETTINGS_LIST, action_get_subsystem_settings_list}, {MENU_ENUM_LABEL_DEFERRED_NETWORK_SETTINGS_LIST, action_get_network_settings_list}, {MENU_ENUM_LABEL_DEFERRED_NETPLAY_LAN_SCAN_SETTINGS_LIST, action_get_netplay_lan_scan_settings_list}, #ifdef HAVE_LAKKA diff --git a/menu/drivers/materialui.c b/menu/drivers/materialui.c index 5dc3a09d3d..922c854c71 100644 --- a/menu/drivers/materialui.c +++ b/menu/drivers/materialui.c @@ -6675,19 +6675,11 @@ static int materialui_list_push(void *data, void *userdata, if (settings->bools.menu_show_load_content) { - const struct retro_subsystem_info* subsystem; - entry.enum_idx = MENU_ENUM_LABEL_LOAD_CONTENT_LIST; menu_displaylist_setting(&entry); - /* Core fully loaded, use the subsystem data */ - if (system->subsystem.data) - subsystem = system->subsystem.data; - /* Core not loaded completely, use the data we peeked on load core */ - else - subsystem = subsystem_data; - - menu_subsystem_populate(subsystem, info->list); + entry.enum_idx = MENU_ENUM_LABEL_SUBSYSTEM_SETTINGS; + menu_displaylist_setting(&entry); } if (settings->bools.menu_content_show_history) diff --git a/menu/drivers/ozone/ozone.c b/menu/drivers/ozone/ozone.c index 80acf623de..69e9df06fe 100644 --- a/menu/drivers/ozone/ozone.c +++ b/menu/drivers/ozone/ozone.c @@ -831,19 +831,11 @@ static int ozone_list_push(void *data, void *userdata, if (settings->bools.menu_show_load_content) { - const struct retro_subsystem_info* subsystem; - entry.enum_idx = MENU_ENUM_LABEL_LOAD_CONTENT_LIST; menu_displaylist_setting(&entry); - /* Core fully loaded, use the subsystem data */ - if (system->subsystem.data) - subsystem = system->subsystem.data; - /* Core not loaded completely, use the data we peeked on load core */ - else - subsystem = subsystem_data; - - menu_subsystem_populate(subsystem, info->list); + entry.enum_idx = MENU_ENUM_LABEL_SUBSYSTEM_SETTINGS; + menu_displaylist_setting(&entry); } if (settings->bools.menu_show_load_disc) diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 74631e1dc6..b0ee9ac65d 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -6178,20 +6178,14 @@ static int xmb_list_push(void *data, void *userdata, if (settings->bools.menu_show_load_content) { - const struct retro_subsystem_info* subsystem; - entry.enum_idx = MENU_ENUM_LABEL_LOAD_CONTENT_LIST; menu_displaylist_setting(&entry); - /* Core fully loaded, use the subsystem data */ - if (system->subsystem.data) - subsystem = system->subsystem.data; - /* Core not loaded completely, use the data we peeked on load core */ - else - subsystem = subsystem_data; - menu_subsystem_populate(subsystem, info->list); + entry.enum_idx = MENU_ENUM_LABEL_SUBSYSTEM_SETTINGS; + menu_displaylist_setting(&entry); } + if (settings->bools.menu_show_load_disc) { entry.enum_idx = MENU_ENUM_LABEL_LOAD_DISC; diff --git a/menu/menu_cbs.h b/menu/menu_cbs.h index b9047ac921..0836cfe99b 100644 --- a/menu/menu_cbs.h +++ b/menu/menu_cbs.h @@ -173,6 +173,7 @@ enum ACTION_OK_DL_UPDATER_SETTINGS_LIST, ACTION_OK_DL_WIFI_SETTINGS_LIST, ACTION_OK_DL_NETWORK_SETTINGS_LIST, + ACTION_OK_DL_SUBSYSTEM_SETTINGS_LIST, ACTION_OK_DL_NETWORK_HOSTING_SETTINGS_LIST, ACTION_OK_DL_NETPLAY_LAN_SCAN_SETTINGS_LIST, ACTION_OK_DL_LAKKA_SERVICES_LIST, diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 2f6a943d15..854c95c0a6 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -7007,6 +7007,34 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, switch (type) { + case DISPLAYLIST_SUBSYSTEM_SETTINGS_LIST: + { + const struct retro_subsystem_info* subsystem = subsystem_data; + rarch_system_info_t *sys_info = + runloop_get_system_info(); + /* Core not loaded completely, use the data we + * peeked on load core */ + + menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); + + /* Core fully loaded, use the subsystem data */ + if (sys_info && sys_info->subsystem.data) + subsystem = sys_info->subsystem.data; + + count = menu_subsystem_populate(subsystem, info->list); + + if (count == 0) + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_ENTRIES_TO_DISPLAY), + msg_hash_to_str(MENU_ENUM_LABEL_NO_ENTRIES_TO_DISPLAY), + MENU_ENUM_LABEL_NO_ENTRIES_TO_DISPLAY, + FILE_TYPE_NONE, 0, 0); + + info->need_push = true; + info->need_refresh = true; + info->need_clear = true; + } + break; case DISPLAYLIST_NETWORK_HOSTING_SETTINGS_LIST: #ifdef HAVE_NETWORKING { diff --git a/menu/menu_displaylist.h b/menu/menu_displaylist.h index a7ad3fe5fd..f7ce89c40b 100644 --- a/menu/menu_displaylist.h +++ b/menu/menu_displaylist.h @@ -136,6 +136,7 @@ enum menu_displaylist_ctl_state DISPLAYLIST_ACHIEVEMENT_LIST, DISPLAYLIST_USER_BINDS_LIST, DISPLAYLIST_ACCOUNTS_LIST, + DISPLAYLIST_SUBSYSTEM_SETTINGS_LIST, DISPLAYLIST_MIXER_STREAM_SETTINGS_LIST, DISPLAYLIST_DRIVER_SETTINGS_LIST, DISPLAYLIST_VIDEO_FULLSCREEN_MODE_SETTINGS_LIST, diff --git a/menu/menu_driver.c b/menu/menu_driver.c index 05d32fd22f..f99621ba9a 100644 --- a/menu/menu_driver.c +++ b/menu/menu_driver.c @@ -3966,8 +3966,9 @@ void hex32_to_rgba_normalized(uint32_t hex, float* rgba, float alpha) rgba[3] = rgba[7] = rgba[11] = rgba[15] = alpha; } -void menu_subsystem_populate(const struct retro_subsystem_info* subsystem, void *data) +unsigned menu_subsystem_populate(const struct retro_subsystem_info* subsystem, void *data) { + unsigned count = 0; settings_t *settings = config_get_ptr(); file_list_t *list = (file_list_t*)data; /* Note: Create this string here explicitly (rather than @@ -4038,11 +4039,12 @@ void menu_subsystem_populate(const struct retro_subsystem_info* subsystem, void strlcpy(s, tmp, sizeof(s)); } - menu_entries_append_enum(list, + if (menu_entries_append_enum(list, s, msg_hash_to_str(MENU_ENUM_LABEL_SUBSYSTEM_ADD), MENU_ENUM_LABEL_SUBSYSTEM_ADD, - MENU_SETTINGS_SUBSYSTEM_ADD + i, 0, 0); + MENU_SETTINGS_SUBSYSTEM_ADD + i, 0, 0)) + count++; } else { @@ -4085,11 +4087,12 @@ void menu_subsystem_populate(const struct retro_subsystem_info* subsystem, void } } - menu_entries_append_enum(list, + if (menu_entries_append_enum(list, s, msg_hash_to_str(MENU_ENUM_LABEL_SUBSYSTEM_LOAD), MENU_ENUM_LABEL_SUBSYSTEM_LOAD, - MENU_SETTINGS_SUBSYSTEM_LOAD, 0, 0); + MENU_SETTINGS_SUBSYSTEM_LOAD, 0, 0)) + count++; } } else @@ -4126,14 +4129,17 @@ void menu_subsystem_populate(const struct retro_subsystem_info* subsystem, void } } - menu_entries_append_enum(list, + if (menu_entries_append_enum(list, s, msg_hash_to_str(MENU_ENUM_LABEL_SUBSYSTEM_ADD), MENU_ENUM_LABEL_SUBSYSTEM_ADD, - MENU_SETTINGS_SUBSYSTEM_ADD + i, 0, 0); + MENU_SETTINGS_SUBSYSTEM_ADD + i, 0, 0)) + count++; } } } + + return count; } diff --git a/menu/menu_driver.h b/menu/menu_driver.h index 99444796dd..d5a5dec975 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -713,7 +713,7 @@ void menu_driver_destroy(void); void hex32_to_rgba_normalized(uint32_t hex, float* rgba, float alpha); -void menu_subsystem_populate(const struct retro_subsystem_info* subsystem, void *data); +unsigned menu_subsystem_populate(const struct retro_subsystem_info* subsystem, void *data); menu_handle_t *menu_driver_get_ptr(void); diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 6a6650f2fa..823c3bcb9f 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -7479,6 +7479,14 @@ static bool setting_append_list( &subgroup_info, parent_group); + CONFIG_ACTION( + list, list_info, + MENU_ENUM_LABEL_SUBSYSTEM_SETTINGS, + MENU_ENUM_LABEL_VALUE_SUBSYSTEM_SETTINGS, + &group_info, + &subgroup_info, + parent_group); + if (settings->bools.history_list_enable) { CONFIG_ACTION( diff --git a/msg_hash.h b/msg_hash.h index fcf2cd8aaa..075a7e0d55 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -1186,6 +1186,7 @@ enum msg_hash_enums MENU_LABEL(DIRECTORY_SETTINGS), MENU_LABEL(PRIVACY_SETTINGS), MENU_LABEL(MIDI_SETTINGS), + MENU_LABEL(SUBSYSTEM_SETTINGS), MENU_LABEL(NETWORK_HOSTING_SETTINGS), MENU_LABEL(NETWORK_SETTINGS), MENU_LABEL(NETPLAY_LAN_SCAN_SETTINGS), @@ -1348,6 +1349,7 @@ enum msg_hash_enums MENU_ENUM_LABEL_DEFERRED_RETRO_ACHIEVEMENTS_SETTINGS_LIST, MENU_ENUM_LABEL_DEFERRED_UPDATER_SETTINGS_LIST, MENU_ENUM_LABEL_DEFERRED_WIFI_SETTINGS_LIST, + MENU_ENUM_LABEL_DEFERRED_SUBSYSTEM_SETTINGS_LIST, MENU_ENUM_LABEL_DEFERRED_NETWORK_HOSTING_SETTINGS_LIST, MENU_ENUM_LABEL_DEFERRED_NETWORK_SETTINGS_LIST, MENU_ENUM_LABEL_DEFERRED_NETPLAY_LAN_SCAN_SETTINGS_LIST,