From fef343ff9ef93ced4ac908f2c1f178f68660b17e Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 15 Jun 2016 01:06:58 +0200 Subject: [PATCH] Create menu_setting_find_enum --- menu/menu_setting.c | 35 +++++++++++++++++++++++++++++++++++ menu/menu_setting.h | 4 ++++ 2 files changed, 39 insertions(+) diff --git a/menu/menu_setting.c b/menu/menu_setting.c index a69d908731..9952eca247 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -2040,6 +2040,29 @@ static rarch_setting_t *menu_setting_find_internal(rarch_setting_t *setting, return NULL; } +static rarch_setting_t *menu_setting_find_internal_enum(rarch_setting_t *setting, + enum menu_hash_enums enum_idx) +{ + for (; menu_setting_get_type(setting) != ST_NONE; menu_settings_list_increment(&setting)) + { + const char *name = menu_setting_get_name(setting); + const char *short_description = menu_setting_get_short_description(setting); + + if (setting->enum_idx == enum_idx && menu_setting_get_type(setting) <= ST_GROUP) + { + if (string_is_empty(short_description)) + return NULL; + + if (setting->read_handler) + setting->read_handler(setting); + + return setting; + } + } + + return NULL; +} + /** * menu_setting_find: * @settings : pointer to settings @@ -2064,6 +2087,18 @@ rarch_setting_t *menu_setting_find(const char *label) return menu_setting_find_internal(setting, label, needle); } +rarch_setting_t *menu_setting_find_enum(enum menu_hash_enums enum_idx) +{ + rarch_setting_t *setting = NULL; + + menu_entries_ctl(MENU_ENTRIES_CTL_SETTINGS_GET, &setting); + + if (!setting || enum_idx == 0) + return NULL; + + return menu_setting_find_internal_enum(setting, enum_idx); +} + int menu_setting_set_flags(rarch_setting_t *setting) { if (!setting) diff --git a/menu/menu_setting.h b/menu/menu_setting.h index bc91dfb00b..9e5b5395a9 100644 --- a/menu/menu_setting.h +++ b/menu/menu_setting.h @@ -26,6 +26,8 @@ #include "../command.h" #include "../input/input_driver.h" +#include "menu_hash.h" + RETRO_BEGIN_DECLS enum setting_type @@ -286,6 +288,8 @@ int menu_setting_set(unsigned type, const char *label, **/ rarch_setting_t *menu_setting_find(const char *label); +rarch_setting_t *menu_setting_find_enum(enum menu_hash_enums enum_idx); + /** * setting_set_with_string_representation: * @setting : pointer to setting