From 01284c023156d30be950e01faca6ecd90b98618b Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 30 Apr 2019 16:18:26 +0200 Subject: [PATCH] Remove setting_list.c and reintegrate it into menu_setting.c --- Makefile.common | 1 - griffin/griffin.c | 1 - menu/menu_setting.c | 2597 ++++++++++++++++++++++++++++++++++++++++--- menu/menu_setting.h | 23 - setting_list.c | 2395 --------------------------------------- setting_list.h | 210 ---- 6 files changed, 2430 insertions(+), 2797 deletions(-) delete mode 100644 setting_list.c diff --git a/Makefile.common b/Makefile.common index d252bade93..165ee54ab3 100644 --- a/Makefile.common +++ b/Makefile.common @@ -193,7 +193,6 @@ OBJ += frontend/frontend.o \ $(LIBRETRO_COMM_DIR)/lists/string_list.o \ $(LIBRETRO_COMM_DIR)/string/stdstring.o \ $(LIBRETRO_COMM_DIR)/memmap/memalign.o \ - setting_list.o \ list_special.o \ $(LIBRETRO_COMM_DIR)/file/nbio/nbio_stdio.o \ $(LIBRETRO_COMM_DIR)/file/nbio/nbio_linux.o \ diff --git a/griffin/griffin.c b/griffin/griffin.c index cf3c606a49..14feb61033 100644 --- a/griffin/griffin.c +++ b/griffin/griffin.c @@ -941,7 +941,6 @@ FILE #include "../libretro-common/lists/dir_list.c" #include "../libretro-common/lists/string_list.c" #include "../libretro-common/lists/file_list.c" -#include "../setting_list.c" #include "../libretro-common/file/retro_dirent.c" #include "../libretro-common/streams/file_stream.c" #include "../libretro-common/streams/file_stream_transforms.c" diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 2259fe6bff..05e4dcf5e7 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -62,6 +62,8 @@ #include "menu_driver.h" #include "menu_animation.h" #include "menu_input.h" +#include "widgets/menu_input_dialog.h" +#include "widgets/menu_input_bind_dialog.h" #include "../core.h" #include "../configuration.h" @@ -166,6 +168,2285 @@ struct string_options_entry size_t len; }; +/* SETTINGS LIST */ + +#define _3_SECONDS 3000000 +#define _6_SECONDS 6000000 +#define _9_SECONDS 9000000 +#define _12_SECONDS 12000000 +#define _15_SECONDS 15000000 +#define _18_SECONDS 18000000 +#define _21_SECONDS 21000000 + +#define CONFIG_SIZE(a, b, c, d, e, f, g, h, i, j, k, l) \ + if (settings_list_append(a, b)) \ + config_size(a, b, c, d, e, f, g, h, i, j, k, l) + +#define CONFIG_BOOL_ALT(a, b, c, d, e, f, g, h, i, j, k, l, m, n) \ + if (settings_list_append(a, b)) \ + config_bool_alt(a, b, c, d, e, f, g, h, i, j, k, l, m, n) + +#define CONFIG_BOOL(a, b, c, d, e, f, g, h, i, j, k, l, m, n) \ + if (settings_list_append(a, b)) \ + config_bool(a, b, c, d, e, f, g, h, i, j, k, l, m, n) + +#define CONFIG_INT(a, b, c, d, e, f, g, h, i, j, k) \ + if (settings_list_append(a, b)) \ + config_int(a, b, c, d, e, f, g, h, i, j, k) + +#define CONFIG_UINT_ALT(a, b, c, d, e, f, g, h, i, j, k) \ + if (settings_list_append(a, b)) \ + config_uint_alt(a, b, c, d, e, f, g, h, i, j, k) + +#define CONFIG_UINT(a, b, c, d, e, f, g, h, i, j, k) \ + if (settings_list_append(a, b)) \ + config_uint(a, b, c, d, e, f, g, h, i, j, k) + +#define CONFIG_STRING(a, b, c, d, e, f, g, h, i, j, k, l) \ + if (settings_list_append(a, b)) \ + config_string(a, b, c, d, e, f, g, h, i, j, k, l) + +#define CONFIG_FLOAT(a, b, c, d, e, f, g, h, i, j, k, l) \ + if (settings_list_append(a, b)) \ + config_float(a, b, c, d, e, f, g, h, i, j, k, l) + +#define CONFIG_DIR(a, b, c, d, e, f, g, h, i, j, k, l, m) \ + if (settings_list_append(a, b)) \ + config_dir(a, b, c, d, e, f, g, h, i, j, k, l, m) + +#define CONFIG_PATH(a, b, c, d, e, f, g, h, i, j, k, l) \ + if (settings_list_append(a, b)) \ + config_path(a, b, c, d, e, f, g, h, i, j, k, l) + +#define CONFIG_ACTION_ALT(a, b, c, d, e, f, g) \ + if (settings_list_append(a, b)) \ + config_action_alt(a, b, c, d, e, f, g) + +#define CONFIG_ACTION(a, b, c, d, e, f, g) \ + if (settings_list_append(a, b)) \ + config_action(a, b, c, d, e, f, g) + +#define END_GROUP(a, b, c) \ + if (settings_list_append(a, b)) \ + end_group(a, b, c) + +#define START_SUB_GROUP(a, b, c, d, e, f) \ + if (settings_list_append(a, b)) \ + start_sub_group(a, b, c, d, e, f) + +#define END_SUB_GROUP(a, b, c) \ + if (settings_list_append(a, b)) \ + end_sub_group(a, b, c) + +#define CONFIG_STRING_OPTIONS(a, b, c, d, e, f, g, h, i, j, k, l, m) \ + if (settings_list_append(a, b)) \ + config_string_options(a, b, c, d, e, f, g, h, i, j, k, l, m) + +#define CONFIG_HEX(a, b, c, d, e, f, g, h, i, j, k, l) \ + if (settings_list_append(a, b)) \ + config_hex(a, b, c, d, e, f, g, h, i, j, k, l) + +#define CONFIG_BIND_ALT(a, b, c, d, e, f, g, h, i, j, k) \ + if (settings_list_append(a, b)) \ + config_bind_alt(a, b, c, d, e, f, g, h, i, j, k) + +#define CONFIG_BIND(a, b, c, d, e, f, g, h, i, j, k, l) \ + if (settings_list_append(a, b)) \ + config_bind(a, b, c, d, e, f, g, h, i, j, k, l) + +#define SETTINGS_DATA_LIST_CURRENT_ADD_FREE_FLAGS(a, b, c) \ + (*a)[b->index - 1].free_flags |= c + +#define MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(a, b, c) \ + (*a)[b->index - 1].enum_idx = c + +#define MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_VALUE_IDX(a, b, c) \ + (*a)[b->index - 1].enum_value_idx = c + +static void menu_input_st_uint_cb(void *userdata, const char *str) +{ + if (str && *str) + { + const char *label = menu_input_dialog_get_label_setting_buffer(); + rarch_setting_t *setting = menu_setting_find(label); + + setting_set_with_string_representation(setting, str); + } + + menu_input_dialog_end(); +} + +static void menu_input_st_hex_cb(void *userdata, const char *str) +{ + if (str && *str) + { + const char *label = menu_input_dialog_get_label_setting_buffer(); + rarch_setting_t *setting = menu_setting_find(label); + + if (setting) + { + unsigned *ptr = (unsigned*)setting_get_ptr(setting); + if (str[0] == '#') + str++; + if (ptr) + *ptr = (unsigned)strtoul(str, NULL, 16); + } + } + + menu_input_dialog_end(); +} + +static void menu_input_st_string_cb(void *userdata, const char *str) +{ + if (str && *str) + { + rarch_setting_t *setting = NULL; + const char *label = menu_input_dialog_get_label_setting_buffer(); + + if (!string_is_empty(label)) + setting = menu_setting_find(label); + + if (setting) + { + setting_set_with_string_representation(setting, str); + menu_setting_generic(setting, false); + } + } + + menu_input_dialog_end(); +} + + +static int setting_generic_action_ok_linefeed(rarch_setting_t *setting, bool wraparound) +{ + menu_input_ctx_line_t line; + input_keyboard_line_complete_t cb = NULL; + + if (!setting) + return -1; + + (void)wraparound; + + switch (setting_get_type(setting)) + { + case ST_SIZE: + case ST_UINT: + cb = menu_input_st_uint_cb; + break; + case ST_HEX: + cb = menu_input_st_hex_cb; + break; + case ST_STRING: + case ST_STRING_OPTIONS: + cb = menu_input_st_string_cb; + break; + default: + break; + } + + line.label = setting->short_description; + line.label_setting = setting->name; + line.type = 0; + line.idx = 0; + line.cb = cb; + + if (!menu_input_dialog_start(&line)) + return -1; + + return 0; +} + +static void setting_add_special_callbacks( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + unsigned values) +{ + unsigned idx = list_info->index - 1; + + if (values & SD_FLAG_ALLOW_INPUT) + { + (*list)[idx].action_ok = setting_generic_action_ok_linefeed; + (*list)[idx].action_select = setting_generic_action_ok_linefeed; + + switch ((*list)[idx].type) + { + case ST_SIZE: + case ST_UINT: + (*list)[idx].action_cancel = NULL; + break; + case ST_HEX: + (*list)[idx].action_cancel = NULL; + break; + case ST_STRING: + (*list)[idx].action_start = setting_string_action_start_generic; + (*list)[idx].action_cancel = NULL; + break; + default: + break; + } + } +} + +#define SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(a, b, c) \ +{ \ + (*a)[b->index - 1].flags |= c; \ + setting_add_special_callbacks(a, b, c); \ +} + +static bool settings_list_append(rarch_setting_t **list, + rarch_setting_info_t *list_info) +{ + if (!list || !*list || !list_info) + return false; + + if (list_info->index == list_info->size) + { + rarch_setting_t *list_settings = NULL; + + list_info->size *= 2; + list_settings = (rarch_setting_t*) + realloc(*list, sizeof(rarch_setting_t) * list_info->size); + + if (!list_settings) + return false; + *list = list_settings; + } + + return true; +} + +unsigned setting_get_bind_type(rarch_setting_t *setting) +{ + if (!setting) + return 0; + return setting->bind_type; +} + +static int setting_bind_action_ok(rarch_setting_t *setting, bool wraparound) +{ + (void)wraparound; /* TODO/FIXME - handle this */ + + if (!menu_input_key_bind_set_mode(MENU_INPUT_BINDS_CTL_BIND_SINGLE, setting)) + return -1; + return 0; +} + +static int setting_int_action_right_default(rarch_setting_t *setting, bool wraparound) +{ + double max = 0.0f; + + if (!setting) + return -1; + + max = setting->max; + + (void)wraparound; /* TODO/FIXME - handle this */ + + *setting->value.target.integer = + *setting->value.target.integer + setting->step; + + if (setting->enforce_maxrange) + { + if (*setting->value.target.integer > max) + { + settings_t *settings = config_get_ptr(); + double min = setting->min; + + if (settings && settings->bools.menu_navigation_wraparound_enable) + *setting->value.target.integer = min; + else + *setting->value.target.integer = max; + } + } + + return 0; +} + +static int setting_bind_action_start(rarch_setting_t *setting) +{ + unsigned bind_type; + struct retro_keybind *keybind = NULL; + struct retro_keybind *def_binds = (struct retro_keybind *)retro_keybinds_1; + + if (!setting) + return -1; + + keybind = (struct retro_keybind*)setting->value.target.keybind; + if (!keybind) + return -1; + + keybind->joykey = NO_BTN; + keybind->joyaxis = AXIS_NONE; + + if (setting->index_offset) + def_binds = (struct retro_keybind*)retro_keybinds_rest; + + bind_type = setting_get_bind_type(setting); + keybind->key = def_binds[bind_type - MENU_SETTINGS_BIND_BEGIN].key; + + keybind->mbutton = NO_BTN; + + return 0; +} + +static void setting_get_string_representation_hex(rarch_setting_t *setting, + char *s, size_t len) +{ + if (setting) + snprintf(s, len, "%08x", + *setting->value.target.unsigned_integer); +} + +void setting_get_string_representation_hex_and_uint(rarch_setting_t *setting, + char *s, size_t len) +{ + if (setting) + snprintf(s, len, "%u (%08X)", + *setting->value.target.unsigned_integer, *setting->value.target.unsigned_integer); +} + +void setting_get_string_representation_uint(rarch_setting_t *setting, + char *s, size_t len) +{ + if (setting) + snprintf(s, len, "%u", + *setting->value.target.unsigned_integer); +} + +void setting_get_string_representation_size(rarch_setting_t *setting, + char *s, size_t len) +{ + if (setting) + snprintf(s, len, "%" PRI_SIZET, + *setting->value.target.sizet); +} + +void setting_get_string_representation_size_in_mb(rarch_setting_t *setting, + char *s, size_t len) +{ + if (setting) + snprintf(s, len, "%" PRI_SIZET, + (*setting->value.target.sizet)/(1024*1024)); +} + +void setting_get_string_representation_uint_as_enum(rarch_setting_t *setting, + char *s, size_t len) +{ + if (setting) + snprintf(s, len, "%s", + msg_hash_to_str((enum msg_hash_enums)( + setting->index_offset+( + *setting->value.target.unsigned_integer)))); +} + +static float recalc_step_based_on_length_of_action(rarch_setting_t *setting) +{ + float step = setting->step; + global_t *global = global_get_ptr(); + + if ( global ) + { + if ( global->menu.action_press_time > _21_SECONDS) + step = setting->step*1000000.0f ; + else if ( global->menu.action_press_time > _18_SECONDS) + step = setting->step*100000.0f ; + else if ( global->menu.action_press_time > _15_SECONDS) + step = setting->step*10000.0f ; + else if ( global->menu.action_press_time > _12_SECONDS) + step = setting->step*1000.0f ; + else if ( global->menu.action_press_time > _9_SECONDS) + step = setting->step*100.0f ; + else if ( global->menu.action_press_time > _6_SECONDS) + step = setting->step*10.0f ; + else if ( global->menu.action_press_time > _3_SECONDS) + step = setting->step*5.0f ; + else + step = setting->step ; + } + return step < setting->step ? setting->step : step ; +} + +int setting_uint_action_left_default(rarch_setting_t *setting, bool wraparound) +{ + double min = 0.0f; + bool overflowed = false; + float step = 0.0f ; + + if (!setting) + return -1; + + min = setting->min; + + (void)wraparound; /* TODO/FIXME - handle this */ + + step = recalc_step_based_on_length_of_action(setting) ; + + overflowed = step > *setting->value.target.unsigned_integer; + + if (!overflowed) + *setting->value.target.unsigned_integer = *setting->value.target.unsigned_integer - step; + + if (setting->enforce_minrange) + { + if (overflowed || *setting->value.target.unsigned_integer < min) + { + settings_t *settings = config_get_ptr(); + + double max = setting->max; + + if (settings && settings->bools.menu_navigation_wraparound_enable) + *setting->value.target.unsigned_integer = max; + else + *setting->value.target.unsigned_integer = min; + } + } + + return 0; +} + +int setting_uint_action_right_default(rarch_setting_t *setting, bool wraparound) +{ + double max = 0.0f; + float step = 0.0f ; + + if (!setting) + return -1; + + max = setting->max; + + (void)wraparound; /* TODO/FIXME - handle this */ + + step = recalc_step_based_on_length_of_action(setting) ; + + *setting->value.target.unsigned_integer = + *setting->value.target.unsigned_integer + step; + + if (setting->enforce_maxrange) + { + if (*setting->value.target.unsigned_integer > max) + { + settings_t *settings = config_get_ptr(); + + double min = setting->min; + + if (settings && settings->bools.menu_navigation_wraparound_enable) + *setting->value.target.unsigned_integer = min; + else + *setting->value.target.unsigned_integer = max; + } + } + + return 0; +} + +int setting_uint_action_right_with_refresh(rarch_setting_t *setting, bool wraparound) +{ + int retval = setting_uint_action_right_default(setting, wraparound) ; + bool refresh = false; + + menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); + menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL); + + return retval ; +} + +int setting_uint_action_left_with_refresh(rarch_setting_t *setting, bool wraparound) +{ + int retval = setting_uint_action_left_default(setting, wraparound) ; + bool refresh = false; + + menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); + menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL); + + return retval ; + +} + +static int setting_size_action_left_default(rarch_setting_t *setting, bool wraparound) +{ + double min = 0.0f; + bool overflowed = false; + float step = 0.0f ; + + if (!setting) + return -1; + + min = setting->min; + + (void)wraparound; /* TODO/FIXME - handle this */ + + step = recalc_step_based_on_length_of_action(setting) ; + + overflowed = step > *setting->value.target.sizet; + + if (!overflowed) + *setting->value.target.sizet = *setting->value.target.sizet - step; + + if (setting->enforce_minrange) + { + if (overflowed || *setting->value.target.sizet < min) + { + settings_t *settings = config_get_ptr(); + + double max = setting->max; + + if (settings && settings->bools.menu_navigation_wraparound_enable) + *setting->value.target.sizet = max; + else + *setting->value.target.sizet = min; + } + } + + return 0; +} + +static int setting_size_action_right_default(rarch_setting_t *setting, bool wraparound) +{ + double max = 0.0f; + float step = 0.0f ; + + if (!setting) + return -1; + + max = setting->max; + + (void)wraparound; /* TODO/FIXME - handle this */ + + step = recalc_step_based_on_length_of_action(setting) ; + + *setting->value.target.sizet = + *setting->value.target.sizet + step; + + if (setting->enforce_maxrange) + { + if (*setting->value.target.sizet > max) + { + settings_t *settings = config_get_ptr(); + + double min = setting->min; + + if (settings && settings->bools.menu_navigation_wraparound_enable) + *setting->value.target.sizet = min; + else + *setting->value.target.sizet = max; + } + } + + return 0; +} + +int setting_generic_action_ok_default(rarch_setting_t *setting, bool wraparound) +{ + if (!setting) + return -1; + + (void)wraparound; /* TODO/FIXME - handle this */ + + if (setting->cmd_trigger.idx != CMD_EVENT_NONE) + setting->cmd_trigger.triggered = true; + + return 0; +} + +static void setting_get_string_representation_int(rarch_setting_t *setting, + char *s, size_t len) +{ + if (setting) + snprintf(s, len, "%d", *setting->value.target.integer); +} + +/** + * setting_set_with_string_representation: + * @setting : pointer to setting + * @value : value for the setting (string) + * + * Set a settings' value with a string. It is assumed + * that the string has been properly formatted. + **/ +int setting_set_with_string_representation(rarch_setting_t* setting, + const char* value) +{ + double min, max; + uint64_t flags; + if (!setting || !value) + return -1; + + min = setting->min; + max = setting->max; + flags = setting->flags; + + switch (setting_get_type(setting)) + { + case ST_INT: + sscanf(value, "%d", setting->value.target.integer); + if (flags & SD_FLAG_HAS_RANGE) + { + if (setting->enforce_minrange && *setting->value.target.integer < min) + *setting->value.target.integer = min; + if (setting->enforce_maxrange && *setting->value.target.integer > max) + { + settings_t *settings = config_get_ptr(); + if (settings && settings->bools.menu_navigation_wraparound_enable) + *setting->value.target.integer = min; + else + *setting->value.target.integer = max; + } + } + break; + case ST_UINT: + sscanf(value, "%u", setting->value.target.unsigned_integer); + if (flags & SD_FLAG_HAS_RANGE) + { + if (setting->enforce_minrange && *setting->value.target.unsigned_integer < min) + *setting->value.target.unsigned_integer = min; + if (setting->enforce_maxrange && *setting->value.target.unsigned_integer > max) + { + settings_t *settings = config_get_ptr(); + if (settings && settings->bools.menu_navigation_wraparound_enable) + *setting->value.target.unsigned_integer = min; + else + *setting->value.target.unsigned_integer = max; + } + } + break; + case ST_SIZE: + sscanf(value, "%" PRI_SIZET, setting->value.target.sizet); + if (flags & SD_FLAG_HAS_RANGE) + { + if (setting->enforce_minrange && *setting->value.target.sizet < min) + *setting->value.target.sizet = min; + if (setting->enforce_maxrange && *setting->value.target.sizet > max) + { + settings_t *settings = config_get_ptr(); + if (settings && settings->bools.menu_navigation_wraparound_enable) + *setting->value.target.sizet = min; + else + *setting->value.target.sizet = max; + } + } + break; + case ST_FLOAT: + sscanf(value, "%f", setting->value.target.fraction); + if (flags & SD_FLAG_HAS_RANGE) + { + if (setting->enforce_minrange && *setting->value.target.fraction < min) + *setting->value.target.fraction = min; + if (setting->enforce_maxrange && *setting->value.target.fraction > max) + { + settings_t *settings = config_get_ptr(); + if (settings && settings->bools.menu_navigation_wraparound_enable) + *setting->value.target.fraction = min; + else + *setting->value.target.fraction = max; + } + } + break; + case ST_PATH: + case ST_DIR: + case ST_STRING: + case ST_STRING_OPTIONS: + case ST_ACTION: + if ( setting->value.target.string != NULL) + strlcpy(setting->value.target.string, value, setting->size); + break; + case ST_BOOL: + if (string_is_equal(value, "true")) + *setting->value.target.boolean = true; + else if (string_is_equal(value, "false")) + *setting->value.target.boolean = false; + break; + default: + break; + } + + if (setting->change_handler) + setting->change_handler(setting); + + return 0; +} + +static int setting_fraction_action_left_default( + rarch_setting_t *setting, bool wraparound) +{ + double min = 0.0f; + + if (!setting) + return -1; + + min = setting->min; + + (void)wraparound; /* TODO/FIXME - handle this */ + + *setting->value.target.fraction = *setting->value.target.fraction - setting->step; + + if (setting->enforce_minrange) + { + if (*setting->value.target.fraction < min) + { + settings_t *settings = config_get_ptr(); + double max = setting->max; + + if (settings && settings->bools.menu_navigation_wraparound_enable) + *setting->value.target.fraction = max; + else + *setting->value.target.fraction = min; + } + } + + return 0; +} + +static int setting_fraction_action_right_default( + rarch_setting_t *setting, bool wraparound) +{ + double max = 0.0f; + + if (!setting) + return -1; + + max = setting->max; + + (void)wraparound; /* TODO/FIXME - handle this */ + + *setting->value.target.fraction = + *setting->value.target.fraction + setting->step; + + if (setting->enforce_maxrange) + { + if (*setting->value.target.fraction > max) + { + settings_t *settings = config_get_ptr(); + double min = setting->min; + + if (settings && settings->bools.menu_navigation_wraparound_enable) + *setting->value.target.fraction = min; + else + *setting->value.target.fraction = max; + } + } + + return 0; +} + +/** + * setting_reset_setting: + * @setting : pointer to setting + * + * Reset a setting's value to its defaults. + **/ +static void setting_reset_setting(rarch_setting_t* setting) +{ + if (!setting) + return; + + switch (setting_get_type(setting)) + { + case ST_BOOL: + *setting->value.target.boolean = setting->default_value.boolean; + break; + case ST_INT: + *setting->value.target.integer = setting->default_value.integer; + break; + case ST_UINT: + *setting->value.target.unsigned_integer = setting->default_value.unsigned_integer; + break; + case ST_SIZE: + *setting->value.target.sizet = setting->default_value.sizet; + break; + case ST_FLOAT: + *setting->value.target.fraction = setting->default_value.fraction; + break; + case ST_BIND: + *setting->value.target.keybind = *setting->default_value.keybind; + break; + case ST_STRING: + case ST_STRING_OPTIONS: + case ST_PATH: + case ST_DIR: + if (setting->default_value.string) + { + if (setting_get_type(setting) == ST_STRING) + setting_set_with_string_representation(setting, setting->default_value.string); + else + fill_pathname_expand_special(setting->value.target.string, + setting->default_value.string, setting->size); + } + break; + default: + break; + } + + if (setting->change_handler) + setting->change_handler(setting); +} + +int setting_generic_action_start_default(rarch_setting_t *setting) +{ + if (!setting) + return -1; + + setting_reset_setting(setting); + + return 0; +} + +static void setting_get_string_representation_default(rarch_setting_t *setting, + char *s, size_t len) +{ + strlcpy(s, "...", len); +} + +/** + * setting_get_string_representation_st_bool: + * @setting : pointer to setting + * @s : string for the type to be represented on-screen as + * a label. + * @len : size of @s + * + * Set a settings' label value. The setting is of type ST_BOOL. + **/ +static void setting_get_string_representation_st_bool(rarch_setting_t *setting, + char *s, size_t len) +{ + if (setting) + strlcpy(s, *setting->value.target.boolean ? setting->boolean.on_label : + setting->boolean.off_label, len); +} + +/** + * setting_get_string_representation_st_float: + * @setting : pointer to setting + * @s : string for the type to be represented on-screen as + * a label. + * @len : size of @s + * + * Set a settings' label value. The setting is of type ST_FLOAT. + **/ +static void setting_get_string_representation_st_float(rarch_setting_t *setting, + char *s, size_t len) +{ + if (setting) + snprintf(s, len, setting->rounding_fraction, + *setting->value.target.fraction); +} + +static void setting_get_string_representation_st_dir(rarch_setting_t *setting, + char *s, size_t len) +{ + if (setting) + strlcpy(s, + *setting->value.target.string ? + setting->value.target.string : setting->dir.empty_path, + len); +} + +static void setting_get_string_representation_st_path(rarch_setting_t *setting, + char *s, size_t len) +{ + if (setting) + fill_short_pathname_representation(s, setting->value.target.string, len); +} + +static void setting_get_string_representation_st_string(rarch_setting_t *setting, + char *s, size_t len) +{ + if (setting) + strlcpy(s, setting->value.target.string, len); +} + +static void setting_get_string_representation_st_bind(rarch_setting_t *setting, + char *s, size_t len) +{ + unsigned index_offset = 0; + const struct retro_keybind* keybind = NULL; + const struct retro_keybind* auto_bind = NULL; + + if (!setting) + return; + + index_offset = setting->index_offset; + keybind = (const struct retro_keybind*)setting->value.target.keybind; + auto_bind = (const struct retro_keybind*) + input_config_get_bind_auto(index_offset, keybind->id); + + input_config_get_bind_string(s, keybind, auto_bind, len); +} + +static int setting_action_action_ok(rarch_setting_t *setting, bool wraparound) +{ + if (!setting) + return -1; + + (void)wraparound; /* TODO/FIXME - handle this */ + + if (setting->cmd_trigger.idx != CMD_EVENT_NONE) + command_event(setting->cmd_trigger.idx, NULL); + + return 0; +} + +/** + * setting_action_setting: + * @name : Name of setting. + * @short_description : Short description of setting. + * @group : Group that the setting belongs to. + * @subgroup : Subgroup that the setting belongs to. + * + * Initializes a setting of type ST_ACTION. + * + * Returns: setting of type ST_ACTION. + **/ +static rarch_setting_t setting_action_setting(const char* name, + const char* short_description, + const char *group, const char *subgroup, + const char *parent_group, + bool dont_use_enum_idx) +{ + rarch_setting_t result; + + result.enum_idx = MSG_UNKNOWN; + result.type = ST_ACTION; + + result.size = 0; + + result.name = name; + result.short_description = short_description; + result.group = group; + result.subgroup = subgroup; + result.parent_group = parent_group; + result.values = NULL; + + result.index = 0; + result.index_offset = 0; + result.offset_by = 0; + + result.min = 0.0; + result.max = 0.0; + + result.flags = 0; + result.free_flags = 0; + + result.change_handler = NULL; + result.read_handler = NULL; + result.action_start = NULL; + result.action_left = NULL; + result.action_right = NULL; + result.action_up = NULL; + result.action_down = NULL; + result.action_cancel = NULL; + result.action_ok = setting_action_action_ok; + result.action_select = setting_action_action_ok; + result.get_string_representation = &setting_get_string_representation_default; + + result.bind_type = 0; + result.browser_selection_type = ST_NONE; + result.step = 0.0f; + result.rounding_fraction = NULL; + result.enforce_minrange = false; + result.enforce_maxrange = false; + + result.cmd_trigger.idx = CMD_EVENT_NONE; + result.cmd_trigger.triggered = false; + + result.dont_use_enum_idx_representation = dont_use_enum_idx; + + return result; +} + +/** + * setting_group_setting: + * @type : type of settting. + * @name : name of setting. + * + * Initializes a setting of type ST_GROUP. + * + * Returns: setting of type ST_GROUP. + **/ +static rarch_setting_t setting_group_setting( + enum setting_type type, const char* name, + const char *parent_group) +{ + rarch_setting_t result; + + result.enum_idx = MSG_UNKNOWN; + result.type = type; + + result.size = 0; + + result.name = name; + result.short_description = name; + result.group = NULL; + result.subgroup = NULL; + result.parent_group = parent_group; + result.values = NULL; + + result.index = 0; + result.index_offset = 0; + result.offset_by = 0; + + result.min = 0.0; + result.max = 0.0; + + result.flags = 0; + result.free_flags = 0; + + result.change_handler = NULL; + result.read_handler = NULL; + result.action_start = NULL; + result.action_left = NULL; + result.action_right = NULL; + result.action_up = NULL; + result.action_down = NULL; + result.action_cancel = NULL; + result.action_ok = NULL; + result.action_select = NULL; + result.get_string_representation = &setting_get_string_representation_default; + + result.bind_type = 0; + result.browser_selection_type = ST_NONE; + result.step = 0.0f; + result.rounding_fraction = NULL; + result.enforce_minrange = false; + result.enforce_maxrange = false; + + result.cmd_trigger.idx = CMD_EVENT_NONE; + result.cmd_trigger.triggered = false; + + result.dont_use_enum_idx_representation = false; + + return result; +} + +/** + * setting_float_setting: + * @name : name of setting. + * @short_description : Short description of setting. + * @target : Target of float setting. + * @default_value : Default value (in float). + * @rounding : Rounding (for float-to-string representation). + * @group : Group that the setting belongs to. + * @subgroup : Subgroup that the setting belongs to. + * @change_handler : Function callback for change handler function pointer. + * @read_handler : Function callback for read handler function pointer. + * + * Initializes a setting of type ST_FLOAT. + * + * Returns: setting of type ST_FLOAT. + **/ +static rarch_setting_t setting_float_setting(const char* name, + const char* short_description, float* target, float default_value, + const char *rounding, const char *group, const char *subgroup, + const char *parent_group, + change_handler_t change_handler, change_handler_t read_handler, + bool dont_use_enum_idx) +{ + rarch_setting_t result; + + result.enum_idx = MSG_UNKNOWN; + result.type = ST_FLOAT; + + result.size = sizeof(float); + + result.name = name; + result.short_description = short_description; + result.group = group; + result.subgroup = subgroup; + result.parent_group = parent_group; + result.values = NULL; + + result.index = 0; + result.index_offset = 0; + result.offset_by = 0; + + result.min = 0.0; + result.max = 0.0; + + result.flags = 0; + result.free_flags = 0; + + result.change_handler = change_handler; + result.read_handler = read_handler; + result.action_start = setting_generic_action_start_default; + result.action_left = setting_fraction_action_left_default; + result.action_right = setting_fraction_action_right_default; + result.action_up = NULL; + result.action_down = NULL; + result.action_cancel = NULL; + result.action_ok = setting_generic_action_ok_default; + result.action_select = setting_generic_action_ok_default; + result.get_string_representation = &setting_get_string_representation_st_float; + + result.bind_type = 0; + result.browser_selection_type = ST_NONE; + result.step = 0.0f; + result.rounding_fraction = rounding; + result.enforce_minrange = false; + result.enforce_maxrange = false; + + result.value.target.fraction = target; + result.original_value.fraction = *target; + result.default_value.fraction = default_value; + + result.cmd_trigger.idx = CMD_EVENT_NONE; + result.cmd_trigger.triggered = false; + + result.dont_use_enum_idx_representation = dont_use_enum_idx; + + return result; +} + +/** + * setting_uint_setting: + * @name : name of setting. + * @short_description : Short description of setting. + * @target : Target of unsigned integer setting. + * @default_value : Default value (in unsigned integer format). + * @group : Group that the setting belongs to. + * @subgroup : Subgroup that the setting belongs to. + * @change_handler : Function callback for change handler function pointer. + * @read_handler : Function callback for read handler function pointer. + * + * Initializes a setting of type ST_UINT. + * + * Returns: setting of type ST_UINT. + **/ +static rarch_setting_t setting_uint_setting(const char* name, + const char* short_description, unsigned int* target, + unsigned int default_value, + const char *group, const char *subgroup, const char *parent_group, + change_handler_t change_handler, change_handler_t read_handler, + bool dont_use_enum_idx) +{ + rarch_setting_t result; + + result.enum_idx = MSG_UNKNOWN; + result.type = ST_UINT; + + result.size = sizeof(unsigned int); + + result.name = name; + result.short_description = short_description; + result.group = group; + result.subgroup = subgroup; + result.parent_group = parent_group; + result.values = NULL; + + result.index = 0; + result.index_offset = 0; + result.offset_by = 0; + + result.min = 0.0; + result.max = 0.0; + + result.flags = 0; + result.free_flags = 0; + + result.change_handler = change_handler; + result.read_handler = read_handler; + result.action_start = setting_generic_action_start_default; + result.action_left = setting_uint_action_left_default; + result.action_right = setting_uint_action_right_default; + result.action_up = NULL; + result.action_down = NULL; + result.action_cancel = NULL; + result.action_ok = setting_generic_action_ok_default; + result.action_select = setting_generic_action_ok_default; + result.get_string_representation = &setting_get_string_representation_uint; + + result.bind_type = 0; + result.browser_selection_type = ST_NONE; + result.step = 0.0f; + result.rounding_fraction = NULL; + result.enforce_minrange = false; + result.enforce_maxrange = false; + + result.value.target.unsigned_integer = target; + result.original_value.unsigned_integer = *target; + result.default_value.unsigned_integer = default_value; + + result.cmd_trigger.idx = CMD_EVENT_NONE; + result.cmd_trigger.triggered = false; + + result.dont_use_enum_idx_representation = dont_use_enum_idx; + + return result; +} + +/** + * setting_size_setting: + * @name : name of setting. + * @short_description : Short description of setting. + * @target : Target of size_t setting. + * @default_value : Default value (in size_t format). + * @group : Group that the setting belongs to. + * @subgroup : Subgroup that the setting belongs to. + * @change_handler : Function callback for change handler function pointer. + * @read_handler : Function callback for read handler function pointer. + * @dont_use_enum_idx : Boolean indicating whether or not to use the enum idx + * @string_representation_handler : Function callback for converting the setting to a string + * + * Initializes a setting of type ST_SIZE. + * + * Returns: setting of type ST_SIZE. + **/ +static rarch_setting_t setting_size_setting(const char* name, + const char* short_description, size_t* target, + size_t default_value, + const char *group, const char *subgroup, const char *parent_group, + change_handler_t change_handler, change_handler_t read_handler, + bool dont_use_enum_idx, get_string_representation_t string_representation_handler) +{ + rarch_setting_t result; + + result.enum_idx = MSG_UNKNOWN; + result.type = ST_SIZE; + + result.size = sizeof(size_t); + + result.name = name; + result.short_description = short_description; + result.group = group; + result.subgroup = subgroup; + result.parent_group = parent_group; + result.values = NULL; + + result.index = 0; + result.index_offset = 0; + result.offset_by = 0; + + result.min = 0.0; + result.max = 0.0; + + result.flags = 0; + result.free_flags = 0; + + result.change_handler = change_handler; + result.read_handler = read_handler; + result.action_start = setting_generic_action_start_default; + result.action_left = setting_size_action_left_default; + result.action_right = setting_size_action_right_default; + result.action_up = NULL; + result.action_down = NULL; + result.action_cancel = NULL; + result.action_ok = setting_generic_action_ok_default; + result.action_select = setting_generic_action_ok_default; + result.get_string_representation = string_representation_handler; + + result.bind_type = 0; + result.browser_selection_type = ST_NONE; + result.step = 0.0f; + result.rounding_fraction = NULL; + result.enforce_minrange = false; + result.enforce_maxrange = false; + + result.value.target.sizet = target; + result.original_value.sizet = *target; + result.default_value.sizet = default_value; + + result.cmd_trigger.idx = CMD_EVENT_NONE; + result.cmd_trigger.triggered = false; + + result.dont_use_enum_idx_representation = dont_use_enum_idx; + + return result; +} + +/** + * setting_hex_setting: + * @name : name of setting. + * @short_description : Short description of setting. + * @target : Target of unsigned integer setting. + * @default_value : Default value (in unsigned integer format). + * @group : Group that the setting belongs to. + * @subgroup : Subgroup that the setting belongs to. + * @change_handler : Function callback for change handler function pointer. + * @read_handler : Function callback for read handler function pointer. + * + * Initializes a setting of type ST_HEX. + * + * Returns: setting of type ST_HEX. + **/ +static rarch_setting_t setting_hex_setting(const char* name, + const char* short_description, unsigned int* target, + unsigned int default_value, + const char *group, const char *subgroup, const char *parent_group, + change_handler_t change_handler, change_handler_t read_handler, + bool dont_use_enum_idx) +{ + rarch_setting_t result; + + result.enum_idx = MSG_UNKNOWN; + result.type = ST_HEX; + + result.size = sizeof(unsigned int); + + result.name = name; + result.short_description = short_description; + result.group = group; + result.subgroup = subgroup; + result.parent_group = parent_group; + result.values = NULL; + + result.index = 0; + result.index_offset = 0; + result.offset_by = 0; + + result.min = 0.0; + result.max = 0.0; + + result.flags = 0; + result.free_flags = 0; + + result.change_handler = change_handler; + result.read_handler = read_handler; + result.action_start = setting_generic_action_start_default; + result.action_left = NULL; + result.action_right = NULL; + result.action_up = NULL; + result.action_down = NULL; + result.action_cancel = NULL; + result.action_ok = setting_generic_action_ok_default; + result.action_select = setting_generic_action_ok_default; + result.get_string_representation = &setting_get_string_representation_hex; + + result.bind_type = 0; + result.browser_selection_type = ST_NONE; + result.step = 0.0f; + result.rounding_fraction = NULL; + result.enforce_minrange = false; + result.enforce_maxrange = false; + + result.value.target.unsigned_integer = target; + result.original_value.unsigned_integer = *target; + result.default_value.unsigned_integer = default_value; + + result.cmd_trigger.idx = CMD_EVENT_NONE; + result.cmd_trigger.triggered = false; + + result.dont_use_enum_idx_representation = dont_use_enum_idx; + + return result; +} + +/** + * setting_bind_setting: + * @name : name of setting. + * @short_description : Short description of setting. + * @target : Target of bind setting. + * @idx : Index of bind setting. + * @idx_offset : Index offset of bind setting. + * @default_value : Default value (in bind format). + * @group : Group that the setting belongs to. + * @subgroup : Subgroup that the setting belongs to. + * + * Initializes a setting of type ST_BIND. + * + * Returns: setting of type ST_BIND. + **/ +static rarch_setting_t setting_bind_setting(const char* name, + const char* short_description, struct retro_keybind* target, + uint32_t idx, uint32_t idx_offset, + const struct retro_keybind* default_value, + const char *group, const char *subgroup, + const char *parent_group, + bool dont_use_enum_idx) +{ + rarch_setting_t result; + + result.enum_idx = MSG_UNKNOWN; + result.type = ST_BIND; + + result.size = 0; + + result.name = name; + result.short_description = short_description; + result.group = group; + result.subgroup = subgroup; + result.parent_group = parent_group; + result.values = NULL; + + result.index = idx; + result.index_offset = idx_offset; + result.offset_by = 0; + + result.min = 0.0; + result.max = 0.0; + + result.flags = 0; + result.free_flags = 0; + + result.change_handler = NULL; + result.read_handler = NULL; + result.action_start = setting_bind_action_start; + result.action_left = NULL; + result.action_right = NULL; + result.action_up = NULL; + result.action_down = NULL; + result.action_cancel = NULL; + result.action_ok = setting_bind_action_ok; + result.action_select = setting_bind_action_ok; + result.get_string_representation = &setting_get_string_representation_st_bind; + + result.bind_type = 0; + result.browser_selection_type = ST_NONE; + result.step = 0.0f; + result.rounding_fraction = NULL; + result.enforce_minrange = false; + result.enforce_maxrange = false; + + result.value.target.keybind = target; + result.default_value.keybind = default_value; + + result.cmd_trigger.idx = CMD_EVENT_NONE; + result.cmd_trigger.triggered = false; + + result.dont_use_enum_idx_representation = dont_use_enum_idx; + + return result; +} + +static int setting_int_action_left_default(rarch_setting_t *setting, bool wraparound) +{ + double min = 0.0f; + + if (!setting) + return -1; + + min = setting->min; + + (void)wraparound; /* TODO/FIXME - handle this */ + + *setting->value.target.integer = *setting->value.target.integer - setting->step; + + if (setting->enforce_minrange) + { + if (*setting->value.target.integer < min) + { + settings_t *settings = config_get_ptr(); + double max = setting->max; + + if (settings && settings->bools.menu_navigation_wraparound_enable) + *setting->value.target.integer = max; + else + *setting->value.target.integer = min; + } + } + + return 0; +} + +static int setting_bool_action_ok_default(rarch_setting_t *setting, bool wraparound) +{ + if (!setting) + return -1; + + (void)wraparound; /* TODO/FIXME - handle this */ + + setting_set_with_string_representation(setting, + *setting->value.target.boolean ? "false" : "true"); + + return 0; +} + +static int setting_bool_action_toggle_default(rarch_setting_t *setting, bool wraparound) +{ + if (!setting) + return -1; + + (void)wraparound; /* TODO/FIXME - handle this */ + + setting_set_with_string_representation(setting, + *setting->value.target.boolean ? "false" : "true"); + + return 0; +} + +int setting_string_action_start_generic(rarch_setting_t *setting) +{ + if (!setting) + return -1; + + setting->value.target.string[0] = '\0'; + + return 0; +} + +/** + * setting_string_setting: + * @type : type of setting. + * @name : name of setting. + * @short_description : Short description of setting. + * @target : Target of string setting. + * @size : Size of string setting. + * @default_value : Default value (in string format). + * @empty : TODO/FIXME: ??? + * @group : Group that the setting belongs to. + * @subgroup : Subgroup that the setting belongs to. + * @change_handler : Function callback for change handler function pointer. + * @read_handler : Function callback for read handler function pointer. + * + * Initializes a string setting (of type @type). + * + * Returns: String setting of type @type. + **/ +static rarch_setting_t setting_string_setting(enum setting_type type, + const char* name, const char* short_description, char* target, + unsigned size, const char* default_value, const char *empty, + const char *group, const char *subgroup, const char *parent_group, + change_handler_t change_handler, + change_handler_t read_handler, + bool dont_use_enum_idx) +{ + rarch_setting_t result; + + result.enum_idx = MSG_UNKNOWN; + result.type = type; + + result.size = size; + + result.name = name; + result.short_description = short_description; + result.group = group; + result.subgroup = subgroup; + result.parent_group = parent_group; + result.values = NULL; + + result.index = 0; + result.index_offset = 0; + result.offset_by = 0; + + result.min = 0.0; + result.max = 0.0; + + result.flags = 0; + result.free_flags = 0; + + result.change_handler = change_handler; + result.read_handler = read_handler; + result.action_start = NULL; + result.action_left = NULL; + result.action_right = NULL; + result.action_up = NULL; + result.action_down = NULL; + result.action_cancel = NULL; + result.action_ok = NULL; + result.action_select = NULL; + result.get_string_representation = &setting_get_string_representation_st_string; + + result.bind_type = 0; + result.browser_selection_type = ST_NONE; + result.step = 0.0f; + result.rounding_fraction = NULL; + result.enforce_minrange = false; + result.enforce_maxrange = false; + + result.dir.empty_path = empty; + result.value.target.string = target; + result.default_value.string = default_value; + + result.cmd_trigger.idx = CMD_EVENT_NONE; + result.cmd_trigger.triggered = false; + + switch (type) + { + case ST_DIR: + result.action_start = setting_string_action_start_generic; + result.browser_selection_type = ST_DIR; + result.get_string_representation = &setting_get_string_representation_st_dir; + break; + case ST_PATH: + result.action_start = setting_string_action_start_generic; + result.browser_selection_type = ST_PATH; + result.get_string_representation = &setting_get_string_representation_st_path; + break; + default: + break; + } + + result.dont_use_enum_idx_representation = dont_use_enum_idx; + + return result; +} + +/** + * setting_string_setting_options: + * @type : type of settting. + * @name : name of setting. + * @short_description : Short description of setting. + * @target : Target of bind setting. + * @size : Size of string setting. + * @default_value : Default value. + * @empty : N/A. + * @values : Values, separated by a delimiter. + * @group : Group that the setting belongs to. + * @subgroup : Subgroup that the setting belongs to. + * @change_handler : Function callback for change handler function pointer. + * @read_handler : Function callback for read handler function pointer. + * + * Initializes a string options list setting. + * + * Returns: string option list setting. + **/ +static rarch_setting_t setting_string_setting_options(enum setting_type type, + const char* name, const char* short_description, char* target, + unsigned size, const char* default_value, + const char *empty, const char *values, + const char *group, const char *subgroup, const char *parent_group, + change_handler_t change_handler, change_handler_t read_handler, + bool dont_use_enum_idx) +{ + rarch_setting_t result = setting_string_setting(type, name, + short_description, target, size, default_value, empty, group, + subgroup, parent_group, change_handler, read_handler, + dont_use_enum_idx); + + result.parent_group = parent_group; + result.values = values; + return result; +} + +/** + * setting_subgroup_setting: + * @type : type of settting. + * @name : name of setting. + * @parent_name : group that the subgroup setting belongs to. + * + * Initializes a setting of type ST_SUBGROUP. + * + * Returns: setting of type ST_SUBGROUP. + **/ +static rarch_setting_t setting_subgroup_setting(enum setting_type type, + const char* name, const char *parent_name, const char *parent_group, + bool dont_use_enum_idx) +{ + rarch_setting_t result; + + result.enum_idx = MSG_UNKNOWN; + result.type = type; + + result.size = 0; + + result.name = name; + result.short_description = name; + result.group = parent_name; + result.parent_group = parent_group; + result.values = NULL; + result.subgroup = NULL; + + result.index = 0; + result.index_offset = 0; + result.offset_by = 0; + + result.min = 0.0; + result.max = 0.0; + + result.flags = 0; + result.free_flags = 0; + + result.change_handler = NULL; + result.read_handler = NULL; + result.action_start = NULL; + result.action_left = NULL; + result.action_right = NULL; + result.action_up = NULL; + result.action_down = NULL; + result.action_cancel = NULL; + result.action_ok = NULL; + result.action_select = NULL; + result.get_string_representation = &setting_get_string_representation_default; + + result.bind_type = 0; + result.browser_selection_type = ST_NONE; + result.step = 0.0f; + result.rounding_fraction = NULL; + result.enforce_minrange = false; + result.enforce_maxrange = false; + + result.cmd_trigger.idx = CMD_EVENT_NONE; + result.cmd_trigger.triggered = false; + + result.dont_use_enum_idx_representation = dont_use_enum_idx; + + return result; +} + +/** + * setting_bool_setting: + * @name : name of setting. + * @short_description : Short description of setting. + * @target : Target of bool setting. + * @default_value : Default value (in bool format). + * @off : String value for "Off" label. + * @on : String value for "On" label. + * @group : Group that the setting belongs to. + * @subgroup : Subgroup that the setting belongs to. + * @change_handler : Function callback for change handler function pointer. + * @read_handler : Function callback for read handler function pointer. + * + * Initializes a setting of type ST_BOOL. + * + * Returns: setting of type ST_BOOL. + **/ +static rarch_setting_t setting_bool_setting(const char* name, + const char* short_description, bool* target, bool default_value, + const char *off, const char *on, + const char *group, const char *subgroup, const char *parent_group, + change_handler_t change_handler, change_handler_t read_handler, + bool dont_use_enum_idx) +{ + rarch_setting_t result; + + result.enum_idx = MSG_UNKNOWN; + result.type = ST_BOOL; + + result.size = sizeof(bool); + + result.name = name; + result.short_description = short_description; + result.group = group; + result.subgroup = subgroup; + result.parent_group = parent_group; + result.values = NULL; + + result.index = 0; + result.index_offset = 0; + result.offset_by = 0; + + result.min = 0.0; + result.max = 0.0; + + result.flags = 0; + result.free_flags = 0; + + result.change_handler = change_handler; + result.read_handler = read_handler; + result.action_start = setting_generic_action_start_default; + result.action_left = setting_bool_action_toggle_default; + result.action_right = setting_bool_action_toggle_default; + result.action_up = NULL; + result.action_down = NULL; + result.action_cancel = NULL; + result.action_ok = setting_bool_action_ok_default; + result.action_select = setting_generic_action_ok_default; + result.get_string_representation = &setting_get_string_representation_st_bool; + + result.bind_type = 0; + result.browser_selection_type = ST_NONE; + result.step = 0.0f; + result.rounding_fraction = NULL; + result.enforce_minrange = false; + result.enforce_maxrange = false; + + result.value.target.boolean = target; + result.original_value.boolean = *target; + result.default_value.boolean = default_value; + result.boolean.off_label = off; + result.boolean.on_label = on; + + result.cmd_trigger.idx = CMD_EVENT_NONE; + result.cmd_trigger.triggered = false; + + result.dont_use_enum_idx_representation = dont_use_enum_idx; + + return result; +} + +/** + * setting_int_setting: + * @name : name of setting. + * @short_description : Short description of setting. + * @target : Target of signed integer setting. + * @default_value : Default value (in signed integer format). + * @group : Group that the setting belongs to. + * @subgroup : Subgroup that the setting belongs to. + * @change_handler : Function callback for change handler function pointer. + * @read_handler : Function callback for read handler function pointer. + * + * Initializes a setting of type ST_INT. + * + * Returns: setting of type ST_INT. + **/ +static rarch_setting_t setting_int_setting(const char* name, + const char* short_description, int* target, + int default_value, + const char *group, const char *subgroup, const char *parent_group, + change_handler_t change_handler, change_handler_t read_handler, + bool dont_use_enum_idx) +{ + rarch_setting_t result; + + result.enum_idx = MSG_UNKNOWN; + result.type = ST_INT; + + result.size = sizeof(int); + + result.name = name; + result.short_description = short_description; + result.group = group; + result.subgroup = subgroup; + result.parent_group = parent_group; + result.values = NULL; + + result.index = 0; + result.index_offset = 0; + result.offset_by = 0; + + result.min = 0.0; + result.max = 0.0; + + result.flags = 0; + result.free_flags = 0; + + result.change_handler = change_handler; + result.read_handler = read_handler; + result.action_start = setting_generic_action_start_default; + result.action_left = setting_int_action_left_default; + result.action_right = setting_int_action_right_default; + result.action_up = NULL; + result.action_down = NULL; + result.action_cancel = NULL; + result.action_ok = setting_generic_action_ok_default; + result.action_select = setting_generic_action_ok_default; + result.get_string_representation = &setting_get_string_representation_int; + + result.bind_type = 0; + result.browser_selection_type = ST_NONE; + result.step = 0.0f; + result.rounding_fraction = NULL; + result.enforce_minrange = false; + result.enforce_maxrange = false; + + result.value.target.integer = target; + result.original_value.integer = *target; + result.default_value.integer = default_value; + + result.cmd_trigger.idx = CMD_EVENT_NONE; + result.cmd_trigger.triggered = false; + + result.dont_use_enum_idx_representation = dont_use_enum_idx; + + return result; +} + +static void config_bool_alt( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + bool *target, + const char *name, const char *SHORT, + bool default_value, + enum msg_hash_enums off_enum_idx, + enum msg_hash_enums on_enum_idx, + rarch_setting_group_info_t *group_info, + rarch_setting_group_info_t *subgroup_info, + const char *parent_group, + change_handler_t change_handler, + change_handler_t read_handler, + uint32_t flags) +{ + (*list)[list_info->index++] = setting_bool_setting(name, SHORT, target, + default_value, + msg_hash_to_str(off_enum_idx), msg_hash_to_str(on_enum_idx), + group_info->name, subgroup_info->name, parent_group, + change_handler, read_handler, true); + if (flags != SD_FLAG_NONE) + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, flags); +} + +static void config_bool( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + bool *target, + enum msg_hash_enums name_enum_idx, + enum msg_hash_enums SHORT_enum_idx, + bool default_value, + enum msg_hash_enums off_enum_idx, + enum msg_hash_enums on_enum_idx, + rarch_setting_group_info_t *group_info, + rarch_setting_group_info_t *subgroup_info, + const char *parent_group, + change_handler_t change_handler, + change_handler_t read_handler, + uint32_t flags) +{ + (*list)[list_info->index++] = setting_bool_setting( + msg_hash_to_str(name_enum_idx), + msg_hash_to_str(SHORT_enum_idx), + target, + default_value, + msg_hash_to_str(off_enum_idx), + msg_hash_to_str(on_enum_idx), + group_info->name, subgroup_info->name, parent_group, + change_handler, read_handler, false); + (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_CHECKBOX; + if (flags != SD_FLAG_NONE) + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, flags); + + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, name_enum_idx); + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_VALUE_IDX(list, list_info, SHORT_enum_idx); +} + +static void config_int( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + int *target, + enum msg_hash_enums name_enum_idx, + enum msg_hash_enums SHORT_enum_idx, + int default_value, + rarch_setting_group_info_t *group_info, + rarch_setting_group_info_t *subgroup_info, + const char *parent_group, + change_handler_t change_handler, change_handler_t read_handler) +{ + (*list)[list_info->index++] = setting_int_setting( + msg_hash_to_str(name_enum_idx), + msg_hash_to_str(SHORT_enum_idx), + target, default_value, + group_info->name, subgroup_info->name, parent_group, + change_handler, read_handler, + false); + + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, name_enum_idx); + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_VALUE_IDX(list, list_info, SHORT_enum_idx); +} + +static void config_uint_alt( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + unsigned int *target, + const char *name, const char *SHORT, + unsigned int default_value, + rarch_setting_group_info_t *group_info, + rarch_setting_group_info_t *subgroup_info, + const char *parent_group, + change_handler_t change_handler, change_handler_t read_handler) +{ + (*list)[list_info->index++] = setting_uint_setting( + name, SHORT, target, default_value, + group_info->name, + subgroup_info->name, parent_group, change_handler, read_handler, + true); + (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_UINT_SPINBOX; +} + +static void config_uint( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + unsigned int *target, + enum msg_hash_enums name_enum_idx, + enum msg_hash_enums SHORT_enum_idx, + unsigned int default_value, + rarch_setting_group_info_t *group_info, + rarch_setting_group_info_t *subgroup_info, + const char *parent_group, + change_handler_t change_handler, change_handler_t read_handler) +{ + (*list)[list_info->index++] = setting_uint_setting ( + msg_hash_to_str(name_enum_idx), + msg_hash_to_str(SHORT_enum_idx), + target, default_value, + group_info->name, + subgroup_info->name, parent_group, + change_handler, read_handler, + false); + (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_UINT_SPINBOX; + + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, name_enum_idx); + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_VALUE_IDX(list, list_info, SHORT_enum_idx); +} + +static void config_size( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + size_t *target, + enum msg_hash_enums name_enum_idx, + enum msg_hash_enums SHORT_enum_idx, + size_t default_value, + rarch_setting_group_info_t *group_info, + rarch_setting_group_info_t *subgroup_info, + const char *parent_group, + change_handler_t change_handler, change_handler_t read_handler, + get_string_representation_t string_representation_handler) +{ + (*list)[list_info->index++] = setting_size_setting ( + msg_hash_to_str(name_enum_idx), + msg_hash_to_str(SHORT_enum_idx), + target, default_value, + group_info->name, + subgroup_info->name, parent_group, + change_handler, read_handler, + false, string_representation_handler); + (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_SIZE_SPINBOX; + + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, name_enum_idx); + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_VALUE_IDX(list, list_info, SHORT_enum_idx); +} + +static void config_float( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + float *target, + enum msg_hash_enums name_enum_idx, + enum msg_hash_enums SHORT_enum_idx, + float default_value, const char *rounding, + rarch_setting_group_info_t *group_info, + rarch_setting_group_info_t *subgroup_info, + const char *parent_group, + change_handler_t change_handler, change_handler_t read_handler) +{ + (*list)[list_info->index++] = setting_float_setting( + msg_hash_to_str(name_enum_idx), + msg_hash_to_str(SHORT_enum_idx), target, default_value, rounding, + group_info->name, subgroup_info->name, parent_group, + change_handler, read_handler, false); + (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_FLOAT_SPINBOX; + + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, name_enum_idx); + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_VALUE_IDX(list, list_info, SHORT_enum_idx); +} + +static void config_path( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + char *target, size_t len, + enum msg_hash_enums name_enum_idx, + enum msg_hash_enums SHORT_enum_idx, + const char *default_value, + rarch_setting_group_info_t *group_info, + rarch_setting_group_info_t *subgroup_info, + const char *parent_group, + change_handler_t change_handler, change_handler_t read_handler) +{ + (*list)[list_info->index++] = setting_string_setting(ST_PATH, + msg_hash_to_str(name_enum_idx), + msg_hash_to_str(SHORT_enum_idx), + target, (unsigned)len, default_value, "", + group_info->name, subgroup_info->name, parent_group, + change_handler, read_handler, + false); + (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_FILE_SELECTOR; + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_EMPTY); + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, name_enum_idx); + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_VALUE_IDX(list, list_info, SHORT_enum_idx); +} + +static void config_dir( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + char *target, size_t len, + enum msg_hash_enums name_enum_idx, + enum msg_hash_enums SHORT_enum_idx, + const char *default_value, + enum msg_hash_enums empty_enum_idx, + rarch_setting_group_info_t *group_info, + rarch_setting_group_info_t *subgroup_info, + const char *parent_group, + change_handler_t change_handler, change_handler_t read_handler) +{ + (*list)[list_info->index++] = setting_string_setting(ST_DIR, + msg_hash_to_str(name_enum_idx), + msg_hash_to_str(SHORT_enum_idx), + target, (unsigned)len, default_value, + msg_hash_to_str(empty_enum_idx), + group_info->name, subgroup_info->name, parent_group, + change_handler, read_handler, + false); + (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_DIRECTORY_SELECTOR; + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS( + list, + list_info, + SD_FLAG_ALLOW_EMPTY | SD_FLAG_PATH_DIR | SD_FLAG_BROWSER_ACTION); + + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, name_enum_idx); + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_VALUE_IDX(list, list_info, SHORT_enum_idx); +} + +static void config_string( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + char *target, size_t len, + enum msg_hash_enums name_enum_idx, + enum msg_hash_enums SHORT_enum_idx, + const char *default_value, + rarch_setting_group_info_t *group_info, + rarch_setting_group_info_t *subgroup_info, + const char *parent_group, + change_handler_t change_handler, change_handler_t read_handler) +{ + (*list)[list_info->index++] = setting_string_setting(ST_STRING, + msg_hash_to_str(name_enum_idx), + msg_hash_to_str(SHORT_enum_idx), + target, (unsigned)len, default_value, "", + group_info->name, subgroup_info->name, parent_group, + change_handler, read_handler, false); + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, name_enum_idx); + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_VALUE_IDX(list, list_info, SHORT_enum_idx); +} + +static void config_string_options( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + char *target, size_t len, + enum msg_hash_enums name_enum_idx, + enum msg_hash_enums SHORT_enum_idx, + const char *default_value, const char *values, + rarch_setting_group_info_t *group_info, + rarch_setting_group_info_t *subgroup_info, + const char *parent_group, + change_handler_t change_handler, change_handler_t read_handler) +{ + (*list)[list_info->index++] = setting_string_setting_options( + ST_STRING_OPTIONS, + msg_hash_to_str(name_enum_idx), + msg_hash_to_str(SHORT_enum_idx), + target, (unsigned)len, default_value, "", values, + group_info->name, subgroup_info->name, parent_group, + change_handler, read_handler, false); + (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_STRING_COMBOBOX; + + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, name_enum_idx); + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_VALUE_IDX(list, list_info, SHORT_enum_idx); + /* Request values to be freed later */ + SETTINGS_DATA_LIST_CURRENT_ADD_FREE_FLAGS(list, list_info, SD_FREE_FLAG_VALUES); +} + +static void config_hex( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + unsigned int *target, + enum msg_hash_enums name_enum_idx, + enum msg_hash_enums SHORT_enum_idx, + unsigned int default_value, + rarch_setting_group_info_t *group_info, + rarch_setting_group_info_t *subgroup_info, + const char *parent_group, + change_handler_t change_handler, change_handler_t read_handler) +{ + (*list)[list_info->index++] = setting_hex_setting( + msg_hash_to_str(name_enum_idx), + msg_hash_to_str(SHORT_enum_idx), + target, default_value, + group_info->name, subgroup_info->name, parent_group, + change_handler, read_handler, false); + + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, name_enum_idx); + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_VALUE_IDX(list, list_info, SHORT_enum_idx); +} + +/* Please strdup() NAME and SHORT */ +static void config_bind( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + struct retro_keybind *target, + uint32_t player, uint32_t player_offset, + const char *name, const char *SHORT, + const struct retro_keybind *default_value, + rarch_setting_group_info_t *group_info, + rarch_setting_group_info_t *subgroup_info, + const char *parent_group) +{ + (*list)[list_info->index++] = setting_bind_setting(name, SHORT, target, + player, player_offset, default_value, + group_info->name, subgroup_info->name, parent_group, + false); + /* Request name and short description to be freed later */ + SETTINGS_DATA_LIST_CURRENT_ADD_FREE_FLAGS(list, list_info, SD_FREE_FLAG_NAME | SD_FREE_FLAG_SHORT); +} + +/* Please strdup() NAME and SHORT */ +static void config_bind_alt( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + struct retro_keybind *target, + uint32_t player, uint32_t player_offset, + const char *name, const char *SHORT, + const struct retro_keybind *default_value, + rarch_setting_group_info_t *group_info, + rarch_setting_group_info_t *subgroup_info, + const char *parent_group) +{ + (*list)[list_info->index++] = setting_bind_setting(name, SHORT, target, + player, player_offset, default_value, + group_info->name, subgroup_info->name, parent_group, + true); + /* Request name and short description to be freed later */ + SETTINGS_DATA_LIST_CURRENT_ADD_FREE_FLAGS(list, list_info, SD_FREE_FLAG_NAME | SD_FREE_FLAG_SHORT); +} + +static void config_action_alt( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + const char *name, const char *SHORT, + rarch_setting_group_info_t *group_info, + rarch_setting_group_info_t *subgroup_info, + const char *parent_group) +{ + (*list)[list_info->index++] = setting_action_setting(name, SHORT, + group_info->name, subgroup_info->name, parent_group, + true); +} + +static void config_action( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + enum msg_hash_enums name_enum_idx, + enum msg_hash_enums SHORT_enum_idx, + rarch_setting_group_info_t *group_info, + rarch_setting_group_info_t *subgroup_info, + const char *parent_group) +{ + (*list)[list_info->index++] = setting_action_setting( + msg_hash_to_str(name_enum_idx), + msg_hash_to_str(SHORT_enum_idx), + group_info->name, + subgroup_info->name, parent_group, + false); + + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, name_enum_idx); + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_VALUE_IDX(list, list_info, SHORT_enum_idx); +} + +static void START_GROUP(rarch_setting_t **list, rarch_setting_info_t *list_info, + rarch_setting_group_info_t *group_info, + const char *name, const char *parent_group) +{ + group_info->name = name; + if (!settings_list_append(list, list_info)) + return; + (*list)[list_info->index++] = setting_group_setting (ST_GROUP, name, parent_group); +} + +static void end_group(rarch_setting_t **list, + rarch_setting_info_t *list_info, + const char *parent_group) +{ + (*list)[list_info->index++] = setting_group_setting (ST_END_GROUP, 0, parent_group); +} + +static bool start_sub_group(rarch_setting_t **list, + rarch_setting_info_t *list_info, const char *name, + rarch_setting_group_info_t *group_info, + rarch_setting_group_info_t *subgroup_info, + const char *parent_group) +{ + subgroup_info->name = name; + + if (!settings_list_append(list, list_info)) + return false; + (*list)[list_info->index++] = setting_subgroup_setting (ST_SUB_GROUP, + name, group_info->name, parent_group, false); + return true; +} + +static void end_sub_group( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + const char *parent_group) +{ + (*list)[list_info->index++] = setting_group_setting (ST_END_SUB_GROUP, 0, parent_group); +} + +/* MENU SETTINGS */ + static int setting_action_ok_bind_all(rarch_setting_t *setting, bool wraparound) { (void)wraparound; @@ -2599,24 +4880,6 @@ void menu_settings_list_current_add_cmd( (*list)[idx].cmd_trigger.idx = values; } -void menu_settings_list_current_add_enum_idx( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - enum msg_hash_enums enum_idx) -{ - unsigned idx = list_info->index - 1; - (*list)[idx].enum_idx = enum_idx; -} - -void menu_settings_list_current_add_enum_value_idx( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - enum msg_hash_enums enum_idx) -{ - unsigned idx = list_info->index - 1; - (*list)[idx].enum_value_idx = enum_idx; -} - int menu_setting_generic(rarch_setting_t *setting, bool wraparound) { uint64_t flags = setting->flags; @@ -3868,7 +6131,7 @@ static bool setting_append_list_input_player_options( (*list)[list_info->index - 1].action_start = &setting_action_start_libretro_device_type; (*list)[list_info->index - 1].get_string_representation = &setting_get_string_representation_uint_libretro_device; - menu_settings_list_current_add_enum_idx(list, list_info, + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, (enum msg_hash_enums)(MENU_ENUM_LABEL_INPUT_LIBRETRO_DEVICE + user)); CONFIG_UINT_ALT( @@ -3892,7 +6155,7 @@ static bool setting_append_list_input_player_options( (*list)[list_info->index - 1].get_string_representation = &setting_get_string_representation_uint_analog_dpad_mode; menu_settings_list_current_add_range(list, list_info, 0, 2, 1.0, true, true); - menu_settings_list_current_add_enum_idx(list, list_info, + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, (enum msg_hash_enums)(MENU_ENUM_LABEL_INPUT_PLAYER_ANALOG_DPAD_MODE + user)); #ifdef HAVE_LIBNX @@ -4107,7 +6370,7 @@ static bool setting_append_list( { case SETTINGS_LIST_MAIN_MENU: START_GROUP(list, list_info, &group_info, msg_hash_to_str(MENU_ENUM_LABEL_MAIN_MENU), parent_group); - menu_settings_list_current_add_enum_idx(list, list_info, MENU_ENUM_LABEL_MAIN_MENU); + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, MENU_ENUM_LABEL_MAIN_MENU); START_SUB_GROUP(list, list_info, "State", &group_info, &subgroup_info, parent_group); CONFIG_INT( @@ -4200,7 +6463,7 @@ static bool setting_append_list( (*list)[list_info->index - 1].value.target.string = path_get_ptr(RARCH_PATH_CORE); (*list)[list_info->index - 1].values = ext_name; menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_LOAD_CORE); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_BROWSER_ACTION); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_BROWSER_ACTION); } } @@ -4286,7 +6549,7 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_ACTION( list, list_info, @@ -4295,7 +6558,7 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_ACTION( list, list_info, @@ -4305,7 +6568,7 @@ static bool setting_append_list( &subgroup_info, parent_group); menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_MENU_RESET_TO_DEFAULT_CONFIG); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_ACTION( list, list_info, @@ -4315,7 +6578,7 @@ static bool setting_append_list( &subgroup_info, parent_group); menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_MENU_SAVE_CURRENT_CONFIG); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_ACTION( list, list_info, @@ -4325,7 +6588,7 @@ static bool setting_append_list( &subgroup_info, parent_group); menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_MENU_SAVE_CONFIG); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_ACTION( list, list_info, @@ -4335,7 +6598,7 @@ static bool setting_append_list( &subgroup_info, parent_group); menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_MENU_SAVE_CURRENT_CONFIG_OVERRIDE_CORE); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_ACTION( list, list_info, @@ -4345,7 +6608,7 @@ static bool setting_append_list( &subgroup_info, parent_group); menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_MENU_SAVE_CURRENT_CONFIG_OVERRIDE_CONTENT_DIR); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_ACTION( list, list_info, @@ -4355,7 +6618,7 @@ static bool setting_append_list( &subgroup_info, parent_group); menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_MENU_SAVE_CURRENT_CONFIG_OVERRIDE_GAME); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_ACTION( list, list_info, @@ -4364,7 +6627,7 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); #ifdef HAVE_QT CONFIG_ACTION( list, list_info, @@ -4441,7 +6704,7 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_ACTION( list, list_info, @@ -4474,7 +6737,7 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_ACTION( list, list_info, @@ -4499,7 +6762,7 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_ACTION( list, list_info, @@ -4508,7 +6771,7 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); CONFIG_ACTION( list, list_info, @@ -4517,7 +6780,7 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_ACTION( list, list_info, @@ -4526,7 +6789,7 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_ACTION( list, list_info, @@ -4535,7 +6798,7 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); CONFIG_ACTION( list, list_info, @@ -4544,7 +6807,7 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_ACTION( list, list_info, @@ -4553,7 +6816,7 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_ACTION( list, list_info, @@ -4580,7 +6843,7 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); } CONFIG_ACTION( @@ -4590,7 +6853,7 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); #ifdef HAVE_OVERLAY CONFIG_ACTION( @@ -4600,7 +6863,7 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); #endif CONFIG_ACTION( @@ -4610,7 +6873,7 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_ACTION( list, list_info, @@ -4651,7 +6914,7 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_ACTION( list, list_info, @@ -4660,7 +6923,7 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); #ifdef HAVE_CHEEVOS CONFIG_ACTION( @@ -4679,7 +6942,7 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); #ifdef HAVE_LAKKA if (string_is_not_equal(settings->arrays.wifi_driver, "null")) @@ -4701,7 +6964,7 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); #ifdef HAVE_LAKKA CONFIG_ACTION( @@ -4720,7 +6983,7 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_ACTION( list, list_info, @@ -4755,7 +7018,7 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); } for (user = 0; user < MAX_USERS; user++) @@ -4770,7 +7033,7 @@ static bool setting_append_list( struct string_options_entry string_options_entries[11]; START_GROUP(list, list_info, &group_info, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DRIVER_SETTINGS), parent_group); - menu_settings_list_current_add_enum_idx(list, list_info, MENU_ENUM_LABEL_DRIVER_SETTINGS); + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, MENU_ENUM_LABEL_DRIVER_SETTINGS); parent_group = msg_hash_to_str(MENU_ENUM_LABEL_SETTINGS); @@ -4869,7 +7132,7 @@ static bool setting_append_list( parent_group, general_read_handler, general_write_handler); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_IS_DRIVER); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_IS_DRIVER); (*list)[list_info->index - 1].action_ok = setting_action_ok_uint; (*list)[list_info->index - 1].action_left = setting_string_action_left_driver; (*list)[list_info->index - 1].action_right = setting_string_action_right_driver; @@ -4886,9 +7149,9 @@ static bool setting_append_list( START_GROUP(list, list_info, &group_info, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_SETTINGS), parent_group); - menu_settings_list_current_add_enum_idx(list, list_info, MENU_ENUM_LABEL_CORE_SETTINGS); + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, MENU_ENUM_LABEL_CORE_SETTINGS); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); parent_group = msg_hash_to_str(MENU_ENUM_LABEL_SETTINGS); @@ -5023,7 +7286,7 @@ static bool setting_append_list( START_GROUP(list, list_info, &group_info, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_LOGGING_SETTINGS), parent_group); parent_group = msg_hash_to_str(MENU_ENUM_LABEL_LOGGING_SETTINGS); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); START_SUB_GROUP(list, list_info, "State", &group_info, &subgroup_info, parent_group); @@ -5059,7 +7322,7 @@ static bool setting_append_list( menu_settings_list_current_add_range(list, list_info, 0, 3, 1.0, true, true); (*list)[list_info->index - 1].get_string_representation = &setting_get_string_representation_uint_libretro_log_level; - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); CONFIG_BOOL( list, list_info, @@ -5226,7 +7489,7 @@ static bool setting_append_list( (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_AUTOSAVE_INIT); menu_settings_list_current_add_range(list, list_info, 0, 0, 1, true, false); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_CMD_APPLY_AUTO); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_CMD_APPLY_AUTO); (*list)[list_info->index - 1].get_string_representation = &setting_get_string_representation_uint_autosave_interval; #endif @@ -5421,7 +7684,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT); CONFIG_STRING( list, list_info, @@ -5435,7 +7698,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT); config_uint_cbs(cheat_manager_state.working_cheat.handler, CHEAT_HANDLER, setting_uint_action_left_with_refresh,setting_uint_action_right_with_refresh, @@ -5766,7 +8029,7 @@ static bool setting_append_list( { struct video_viewport *custom_vp = video_viewport_get_custom(); START_GROUP(list, list_info, &group_info, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SETTINGS), parent_group); - menu_settings_list_current_add_enum_idx(list, list_info, MENU_ENUM_LABEL_VIDEO_SETTINGS); + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, MENU_ENUM_LABEL_VIDEO_SETTINGS); parent_group = msg_hash_to_str(MENU_ENUM_LABEL_SETTINGS); @@ -5787,7 +8050,7 @@ static bool setting_append_list( general_write_handler, general_read_handler, SD_FLAG_NONE); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); #endif CONFIG_BOOL( @@ -5893,7 +8156,7 @@ static bool setting_append_list( general_read_handler, SD_FLAG_CMD_APPLY_AUTO); menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_REINIT_FROM_TOGGLE); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); } if (video_driver_has_windowed()) { @@ -5911,7 +8174,7 @@ static bool setting_append_list( general_write_handler, general_read_handler, SD_FLAG_NONE); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_UINT( list, list_info, @@ -5926,7 +8189,7 @@ static bool setting_append_list( general_read_handler); (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint_special; menu_settings_list_current_add_range(list, list_info, 0, 7680, 8, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); CONFIG_UINT( list, list_info, @@ -5941,7 +8204,7 @@ static bool setting_append_list( general_read_handler); (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint_special; menu_settings_list_current_add_range(list, list_info, 0, 4320, 8, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); } CONFIG_FLOAT( list, list_info, @@ -5956,7 +8219,7 @@ static bool setting_append_list( general_write_handler, general_read_handler); menu_settings_list_current_add_range(list, list_info, 0, 0, 0.001, true, false); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_FLOAT( list, list_info, @@ -5975,7 +8238,7 @@ static bool setting_append_list( (*list)[list_info->index - 1].action_select = &setting_action_ok_video_refresh_rate_auto; (*list)[list_info->index - 1].get_string_representation = &setting_get_string_representation_st_float_video_refresh_rate_auto; - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); { float actual_refresh_rate = video_driver_get_refresh_rate(); @@ -5997,7 +8260,7 @@ static bool setting_append_list( (*list)[list_info->index - 1].action_select = &setting_action_ok_video_refresh_rate_polled; (*list)[list_info->index - 1].get_string_representation = &setting_get_string_representation_st_float_video_refresh_rate_polled; - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); } } @@ -6046,7 +8309,7 @@ static bool setting_append_list( 1, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_CMD_APPLY_AUTO); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_CMD_APPLY_AUTO); (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; (*list)[list_info->index - 1].get_string_representation = &setting_get_string_representation_uint_aspect_ratio_index; @@ -6068,7 +8331,7 @@ static bool setting_append_list( list_info, CMD_EVENT_VIDEO_SET_ASPECT_RATIO); menu_settings_list_current_add_range(list, list_info, 0.1, 16.0, 0.01, true, false); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); CONFIG_INT( list, list_info, @@ -6086,7 +8349,7 @@ static bool setting_append_list( list, list_info, CMD_EVENT_VIDEO_APPLY_STATE_CHANGES); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_INT( list, list_info, @@ -6104,7 +8367,7 @@ static bool setting_append_list( list, list_info, CMD_EVENT_VIDEO_APPLY_STATE_CHANGES); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); #if defined(GEKKO) || defined(__CELLOS_LV2__) if (true) @@ -6142,7 +8405,7 @@ static bool setting_append_list( list, list_info, CMD_EVENT_VIDEO_APPLY_STATE_CHANGES); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_UINT( list, list_info, @@ -6165,7 +8428,7 @@ static bool setting_append_list( list, list_info, CMD_EVENT_VIDEO_APPLY_STATE_CHANGES); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); END_SUB_GROUP(list, list_info, parent_group); START_SUB_GROUP(list, list_info, "Scaling", &group_info, &subgroup_info, parent_group); @@ -6186,7 +8449,7 @@ static bool setting_append_list( general_read_handler); (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; menu_settings_list_current_add_range(list, list_info, 1.0, 10.0, 1.0, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_UINT( list, list_info, &settings->uints.window_position_width, @@ -6200,7 +8463,7 @@ static bool setting_append_list( general_read_handler); (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint_special; menu_settings_list_current_add_range(list, list_info, 0, 7680, 8, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_UINT( list, list_info, &settings->uints.window_position_height, @@ -6214,7 +8477,7 @@ static bool setting_append_list( general_read_handler); (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint_special; menu_settings_list_current_add_range(list, list_info, 0, 4320, 8, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_UINT( list, list_info, &settings->uints.video_window_opacity, @@ -6229,7 +8492,7 @@ static bool setting_append_list( (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; (*list)[list_info->index - 1].offset_by = 1; menu_settings_list_current_add_range(list, list_info, 1, 100, 1, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); } CONFIG_BOOL( @@ -6345,7 +8608,7 @@ static bool setting_append_list( (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; (*list)[list_info->index - 1].get_string_representation = &setting_get_string_representation_uint_video_rotation; - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); CONFIG_UINT( list, list_info, @@ -6362,7 +8625,7 @@ static bool setting_append_list( (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; (*list)[list_info->index - 1].get_string_representation = &setting_get_string_representation_uint_screen_orientation; - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); END_SUB_GROUP(list, list_info, parent_group); START_SUB_GROUP( @@ -6423,8 +8686,8 @@ static bool setting_append_list( (*list)[list_info->index - 1].offset_by = 1; menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_VIDEO_SET_BLOCKING_STATE); menu_settings_list_current_add_range(list, list_info, 1, 4, 1, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_CMD_APPLY_AUTO); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_CMD_APPLY_AUTO); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); { gfx_ctx_flags_t flags; @@ -6443,7 +8706,7 @@ static bool setting_append_list( general_write_handler, general_read_handler); menu_settings_list_current_add_range(list, list_info, 1, 4, 1, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_CMD_APPLY_AUTO); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_CMD_APPLY_AUTO); } } @@ -6520,7 +8783,7 @@ static bool setting_append_list( general_read_handler); (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; menu_settings_list_current_add_range(list, list_info, 0, 15, 1, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); #if !defined(RARCH_MOBILE) { @@ -6543,7 +8806,7 @@ static bool setting_append_list( general_read_handler, SD_FLAG_NONE ); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); } } #endif @@ -6571,7 +8834,7 @@ static bool setting_append_list( general_read_handler, SD_FLAG_NONE ); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); CONFIG_BOOL( list, list_info, @@ -6588,7 +8851,7 @@ static bool setting_append_list( general_read_handler, SD_FLAG_NONE ); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_PATH( list, list_info, @@ -6606,7 +8869,7 @@ static bool setting_append_list( &setting_get_string_representation_video_filter; menu_settings_list_current_add_values(list, list_info, "filt"); menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_REINIT); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); END_SUB_GROUP(list, list_info, parent_group); END_GROUP(list, list_info, parent_group); @@ -6615,7 +8878,7 @@ static bool setting_append_list( case SETTINGS_LIST_CRT_SWITCHRES: START_GROUP(list, list_info, &group_info, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CRT_SWITCHRES_SETTINGS), parent_group); - menu_settings_list_current_add_enum_idx(list, list_info, MENU_ENUM_LABEL_CRT_SWITCHRES_SETTINGS); + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, MENU_ENUM_LABEL_CRT_SWITCHRES_SETTINGS); parent_group = msg_hash_to_str(MENU_ENUM_LABEL_SETTINGS); @@ -6636,7 +8899,7 @@ static bool setting_append_list( (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; (*list)[list_info->index - 1].get_string_representation = &setting_get_string_representation_uint_crt_switch_resolutions; - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); menu_settings_list_current_add_range(list, list_info, CRT_SWITCH_NONE, CRT_SWITCH_31KHZ, 1.0, true, true); CONFIG_UINT( @@ -6650,7 +8913,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); (*list)[list_info->index - 1].action_left = &setting_uint_action_left_crt_switch_resolution_super; (*list)[list_info->index - 1].action_right = &setting_uint_action_right_crt_switch_resolution_super; (*list)[list_info->index - 1].get_string_representation = @@ -6670,7 +8933,7 @@ static bool setting_append_list( (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_UINT_SPINBOX; (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; (*list)[list_info->index - 1].offset_by = -3; - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); menu_settings_list_current_add_range(list, list_info, -3, 4, 1.0, true, true); CONFIG_BOOL( @@ -6786,7 +9049,7 @@ static bool setting_append_list( case SETTINGS_LIST_AUDIO: START_GROUP(list, list_info, &group_info, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_AUDIO_SETTINGS), parent_group); - menu_settings_list_current_add_enum_idx(list, list_info, MENU_ENUM_LABEL_AUDIO_SETTINGS); + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, MENU_ENUM_LABEL_AUDIO_SETTINGS); parent_group = msg_hash_to_str(MENU_ENUM_LABEL_SETTINGS); @@ -6869,7 +9132,7 @@ static bool setting_append_list( general_read_handler); (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; menu_settings_list_current_add_range(list, list_info, -80, 12, 1.0, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); END_SUB_GROUP(list, list_info, parent_group); @@ -6898,7 +9161,7 @@ static bool setting_append_list( general_read_handler, SD_FLAG_NONE ); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_UINT( list, list_info, @@ -6914,7 +9177,7 @@ static bool setting_append_list( general_read_handler); (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; menu_settings_list_current_add_range(list, list_info, 0, 512, 1.0, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_UINT( list, list_info, @@ -6953,7 +9216,7 @@ static bool setting_append_list( 0.001, true, false); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); CONFIG_FLOAT( list, list_info, @@ -6976,7 +9239,7 @@ static bool setting_append_list( 0.01, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); #ifdef RARCH_MOBILE CONFIG_UINT( @@ -6990,7 +9253,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); #endif END_SUB_GROUP(list, list_info, parent_group); @@ -7018,7 +9281,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT); (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_STRING_LINE_EDIT; (*list)[list_info->index - 1].action_left = &setting_string_action_left_audio_device; (*list)[list_info->index - 1].action_right = &setting_string_action_right_audio_device; @@ -7037,7 +9300,7 @@ static bool setting_append_list( general_read_handler); (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint_special; menu_settings_list_current_add_range(list, list_info, 1000, 192000, 100.0, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); CONFIG_PATH( list, list_info, @@ -7053,7 +9316,7 @@ static bool setting_append_list( general_read_handler); menu_settings_list_current_add_values(list, list_info, "dsp"); menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_DSP_FILTER_INIT); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); #ifdef HAVE_WASAPI if (string_is_equal(settings->arrays.audio_driver, "wasapi")) @@ -7102,7 +9365,7 @@ static bool setting_append_list( general_write_handler, general_read_handler); menu_settings_list_current_add_range(list, list_info, -16.0f, 0.0f, 16.0f, true, false); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); (*list)[list_info->index - 1].get_string_representation = &setting_get_string_representation_int_audio_wasapi_sh_buffer_length; } @@ -7138,7 +9401,7 @@ static bool setting_append_list( &setting_get_string_representation_max_users; (*list)[list_info->index - 1].offset_by = 1; menu_settings_list_current_add_range(list, list_info, 1, MAX_USERS, 1, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_BOOL( list, list_info, @@ -7155,7 +9418,7 @@ static bool setting_append_list( general_read_handler, SD_FLAG_NONE ); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_BOOL( list, list_info, @@ -7221,7 +9484,7 @@ static bool setting_append_list( (*list)[list_info->index - 1].get_string_representation = &setting_get_string_representation_poll_type_behavior; menu_settings_list_current_add_range(list, list_info, 0, 2, 1, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); #ifdef VITA CONFIG_BOOL( @@ -7355,7 +9618,7 @@ static bool setting_append_list( general_read_handler, SD_FLAG_NONE ); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_BOOL( list, list_info, @@ -7447,7 +9710,7 @@ static bool setting_append_list( general_read_handler); (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; menu_settings_list_current_add_range(list, list_info, 0, 1.0, 0.01, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_FLOAT( list, list_info, @@ -7491,7 +9754,7 @@ static bool setting_append_list( general_write_handler, general_read_handler); menu_settings_list_current_add_range(list, list_info, 1, 0, 1, true, false); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); CONFIG_UINT( list, list_info, @@ -7505,7 +9768,7 @@ static bool setting_append_list( general_write_handler, general_read_handler); menu_settings_list_current_add_range(list, list_info, 1, 0, 1, true, false); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); CONFIG_UINT( list, list_info, @@ -7519,7 +9782,7 @@ static bool setting_append_list( general_write_handler, general_read_handler); menu_settings_list_current_add_range(list, list_info, 1, 0, 1, true, false); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); CONFIG_UINT( list, list_info, @@ -7533,7 +9796,7 @@ static bool setting_append_list( general_write_handler, general_read_handler); menu_settings_list_current_add_range(list, list_info, 1, 0, 1, true, false); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); END_SUB_GROUP(list, list_info, parent_group); @@ -7567,7 +9830,7 @@ static bool setting_append_list( (*list)[list_info->index - 1].index = user_value; (*list)[list_info->index - 1].index_offset = user; - menu_settings_list_current_add_enum_idx(list, list_info, (enum msg_hash_enums)(MENU_ENUM_LABEL_INPUT_USER_1_BINDS + user)); + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, (enum msg_hash_enums)(MENU_ENUM_LABEL_INPUT_USER_1_BINDS + user)); } END_SUB_GROUP(list, list_info, parent_group); @@ -7627,7 +9890,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT); (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_STRING_LINE_EDIT; CONFIG_UINT( @@ -7704,7 +9967,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT); (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_STRING_LINE_EDIT; CONFIG_UINT( @@ -7720,7 +9983,7 @@ static bool setting_append_list( general_read_handler); (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint_special; menu_settings_list_current_add_range(list, list_info, 1, 8, 1, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_UINT_COMBOBOX; CONFIG_DIR( @@ -7807,7 +10070,7 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_BIND_BUTTON; (*list)[list_info->index - 1].bind_type = i + MENU_SETTINGS_BIND_BEGIN; - menu_settings_list_current_add_enum_idx(list, list_info, + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, (enum msg_hash_enums)(MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN + i)); } @@ -8306,7 +10569,7 @@ static bool setting_append_list( (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_OVERLAY_SET_ALPHA_MOD); menu_settings_list_current_add_range(list, list_info, 0, 1, 0.01, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_CMD_APPLY_AUTO); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_CMD_APPLY_AUTO); CONFIG_FLOAT( list, list_info, @@ -8323,7 +10586,7 @@ static bool setting_append_list( (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_OVERLAY_SET_SCALE_FACTOR); menu_settings_list_current_add_range(list, list_info, 0, 2, 0.01, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_CMD_APPLY_AUTO); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_CMD_APPLY_AUTO); END_SUB_GROUP(list, list_info, parent_group); @@ -8337,7 +10600,7 @@ static bool setting_append_list( START_GROUP(list, list_info, &group_info, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_MENU_SETTINGS), parent_group); - menu_settings_list_current_add_enum_idx(list, list_info, MENU_ENUM_LABEL_MENU_SETTINGS); + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, MENU_ENUM_LABEL_MENU_SETTINGS); parent_group = msg_hash_to_str(MENU_ENUM_LABEL_MENU_SETTINGS); @@ -8373,7 +10636,7 @@ static bool setting_append_list( general_read_handler); (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; menu_settings_list_current_add_range(list, list_info, 0.0, 1.0, 0.010, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_FLOAT( list, list_info, @@ -8389,7 +10652,7 @@ static bool setting_append_list( general_read_handler); (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; menu_settings_list_current_add_range(list, list_info, 0.0, 1.0, 0.010, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); } if (string_is_equal(settings->arrays.menu_driver, "xmb")) @@ -8409,7 +10672,7 @@ static bool setting_append_list( general_read_handler, SD_FLAG_NONE ); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); } CONFIG_BOOL( @@ -8428,7 +10691,7 @@ static bool setting_append_list( SD_FLAG_CMD_APPLY_AUTO ); menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_MENU_PAUSE_LIBRETRO); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_BOOL( list, list_info, @@ -8562,7 +10825,7 @@ static bool setting_append_list( (*list)[list_info->index - 1].get_string_representation = &setting_get_string_representation_uint_rgui_internal_upscale_level; menu_settings_list_current_add_range(list, list_info, 0, RGUI_UPSCALE_LAST-1, 1, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_UINT_COMBOBOX; } @@ -8804,7 +11067,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT); (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_PASSWORD_LINE_EDIT; } @@ -8883,7 +11146,7 @@ static bool setting_append_list( general_read_handler); (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; menu_settings_list_current_add_range(list, list_info, 0, 100, 1, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_UINT( list, list_info, @@ -8899,7 +11162,7 @@ static bool setting_append_list( (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; (*list)[list_info->index - 1].offset_by = 20; menu_settings_list_current_add_range(list, list_info, (*list)[list_info->index -1].offset_by, 200, 1, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_PATH( list, list_info, @@ -8913,7 +11176,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_REINIT); (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_FONT_SELECTOR; @@ -8930,7 +11193,7 @@ static bool setting_append_list( general_read_handler); (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; menu_settings_list_current_add_range(list, list_info, 0, 255, 1, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); CONFIG_UINT( list, list_info, @@ -8945,7 +11208,7 @@ static bool setting_append_list( general_read_handler); (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; menu_settings_list_current_add_range(list, list_info, 0, 255, 1, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); CONFIG_UINT( list, list_info, @@ -8960,7 +11223,7 @@ static bool setting_append_list( general_read_handler); (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; menu_settings_list_current_add_range(list, list_info, 0, 255, 1, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); CONFIG_UINT( list, list_info, @@ -9253,7 +11516,7 @@ static bool setting_append_list( general_write_handler, general_read_handler, SD_FLAG_NONE); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_STRING( list, list_info, @@ -9267,7 +11530,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT | SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT | SD_FLAG_LAKKA_ADVANCED); (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_PASSWORD_LINE_EDIT; } #endif @@ -9383,7 +11646,7 @@ static bool setting_append_list( general_write_handler, general_read_handler, SD_FLAG_NONE); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); #endif CONFIG_BOOL( @@ -9897,7 +12160,7 @@ static bool setting_append_list( general_write_handler, general_read_handler, SD_FLAG_NONE); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); #if !defined(RARCH_MOBILE) CONFIG_BOOL( @@ -9915,7 +12178,7 @@ static bool setting_append_list( general_read_handler, SD_FLAG_CMD_APPLY_AUTO); menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_REINIT); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); #endif #if defined(_3DS) @@ -10328,7 +12591,7 @@ static bool setting_append_list( START_GROUP(list, list_info, &group_info, msg_hash_to_str(MENU_ENUM_LABEL_PLAYLIST_SETTINGS_BEGIN), parent_group); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); parent_group = msg_hash_to_str(MENU_ENUM_LABEL_SETTINGS); @@ -10627,7 +12890,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT); (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_STRING_LINE_EDIT; CONFIG_STRING( @@ -10642,7 +12905,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT); (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_STRING_LINE_EDIT; CONFIG_BOOL( @@ -10738,8 +13001,8 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_STRING_LINE_EDIT; CONFIG_UINT( @@ -10755,8 +13018,8 @@ static bool setting_append_list( general_read_handler); (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; menu_settings_list_current_add_range(list, list_info, 0, 65535, 1, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); CONFIG_STRING( list, list_info, @@ -10770,7 +13033,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT); (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_PASSWORD_LINE_EDIT; CONFIG_STRING( @@ -10785,7 +13048,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT); (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_PASSWORD_LINE_EDIT; CONFIG_BOOL( @@ -10817,7 +13080,7 @@ static bool setting_append_list( general_write_handler, general_read_handler, SD_FLAG_NONE); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); CONFIG_BOOL( list, list_info, @@ -10833,7 +13096,7 @@ static bool setting_append_list( general_write_handler, general_read_handler, SD_FLAG_NONE); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); CONFIG_BOOL( list, list_info, @@ -10849,7 +13112,7 @@ static bool setting_append_list( general_write_handler, general_read_handler, SD_FLAG_NONE); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); CONFIG_INT( list, list_info, @@ -10864,7 +13127,7 @@ static bool setting_append_list( general_read_handler); (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_UINT_SPINBOX; menu_settings_list_current_add_range(list, list_info, -600, 600, 1, false, false); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); CONFIG_INT( list, list_info, @@ -10910,7 +13173,7 @@ static bool setting_append_list( general_write_handler, general_read_handler, SD_FLAG_NONE); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); CONFIG_UINT( list, list_info, @@ -10966,8 +13229,8 @@ static bool setting_append_list( general_write_handler, general_read_handler, SD_FLAG_ADVANCED); - settings_data_list_current_add_free_flags(list, list_info, SD_FREE_FLAG_NAME | SD_FREE_FLAG_SHORT); - menu_settings_list_current_add_enum_idx(list, list_info, (enum msg_hash_enums)(MENU_ENUM_LABEL_NETPLAY_REQUEST_DEVICE_1 + user)); + SETTINGS_DATA_LIST_CURRENT_ADD_FREE_FLAGS(list, list_info, SD_FREE_FLAG_NAME | SD_FREE_FLAG_SHORT); + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, (enum msg_hash_enums)(MENU_ENUM_LABEL_NETPLAY_REQUEST_DEVICE_1 + user)); } END_SUB_GROUP(list, list_info, parent_group); @@ -11010,7 +13273,7 @@ static bool setting_append_list( (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; (*list)[list_info->index - 1].offset_by = 1; menu_settings_list_current_add_range(list, list_info, 1, 99999, 1, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); CONFIG_BOOL( list, list_info, @@ -11041,7 +13304,7 @@ static bool setting_append_list( (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; (*list)[list_info->index - 1].offset_by = 1; menu_settings_list_current_add_range(list, list_info, 1, 99999, 1, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED); /* TODO/FIXME - add enum_idx */ { @@ -11068,8 +13331,8 @@ static bool setting_append_list( general_write_handler, general_read_handler, SD_FLAG_ADVANCED); - settings_data_list_current_add_free_flags(list, list_info, SD_FREE_FLAG_NAME | SD_FREE_FLAG_SHORT); - menu_settings_list_current_add_enum_idx(list, list_info, (enum msg_hash_enums)(MENU_ENUM_LABEL_NETWORK_REMOTE_USER_1_ENABLE + user)); + SETTINGS_DATA_LIST_CURRENT_ADD_FREE_FLAGS(list, list_info, SD_FREE_FLAG_NAME | SD_FREE_FLAG_SHORT); + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, (enum msg_hash_enums)(MENU_ENUM_LABEL_NETWORK_REMOTE_USER_1_ENABLE + user)); } } @@ -11175,7 +13438,7 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); CONFIG_STRING( list, list_info, @@ -11189,7 +13452,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT); (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_STRING_LINE_EDIT; CONFIG_STRING( @@ -11204,7 +13467,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT); #ifdef HAVE_LANGEXTRA CONFIG_UINT( @@ -11296,7 +13559,7 @@ static bool setting_append_list( parent_group, update_streaming_url_write_handler, general_read_handler); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT); (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_STRING_LINE_EDIT; END_SUB_GROUP(list, list_info, parent_group); @@ -11323,7 +13586,7 @@ static bool setting_append_list( parent_group, update_streaming_url_write_handler, general_read_handler); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT); (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_STRING_LINE_EDIT; END_SUB_GROUP(list, list_info, parent_group); @@ -11351,7 +13614,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT); (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_STRING_LINE_EDIT; CONFIG_STRING( @@ -11368,7 +13631,7 @@ static bool setting_append_list( general_read_handler); (*list)[list_info->index - 1].get_string_representation = &setting_get_string_representation_cheevos_password; - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT); (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_PASSWORD_LINE_EDIT; #endif @@ -11379,7 +13642,7 @@ static bool setting_append_list( START_GROUP(list, list_info, &group_info, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DIRECTORY_SETTINGS), parent_group); - menu_settings_list_current_add_enum_idx(list, list_info, MENU_ENUM_LABEL_DIRECTORY_SETTINGS); + MENU_SETTINGS_LIST_CURRENT_ADD_ENUM_IDX_PTR(list, list_info, MENU_ENUM_LABEL_DIRECTORY_SETTINGS); parent_group = msg_hash_to_str(MENU_ENUM_LABEL_DIRECTORY_SETTINGS); @@ -11887,7 +14150,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT); (*list)[list_info->index - 1].action_left = setting_string_action_left_midi_input; (*list)[list_info->index - 1].action_right = setting_string_action_right_midi_input; @@ -11903,7 +14166,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT); + SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT); (*list)[list_info->index - 1].action_left = setting_string_action_left_midi_output; (*list)[list_info->index - 1].action_right = setting_string_action_right_midi_output; diff --git a/menu/menu_setting.h b/menu/menu_setting.h index f36739c33c..613cab34e0 100644 --- a/menu/menu_setting.h +++ b/menu/menu_setting.h @@ -145,31 +145,8 @@ void menu_settings_list_current_add_range( bool enforce_minrange_enable, bool enforce_maxrange_enable); -void settings_data_list_current_add_flags( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - unsigned values); - -void settings_data_list_current_add_free_flags( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - unsigned values); - -void menu_settings_list_current_add_enum_idx( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - enum msg_hash_enums enum_idx); - -void menu_settings_list_current_add_enum_value_idx( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - enum msg_hash_enums enum_idx); - void menu_setting_free(rarch_setting_t *setting); -bool settings_list_append(rarch_setting_t **list, - rarch_setting_info_t *list_info); - bool menu_setting_ctl( enum menu_setting_ctl_state state, void *data); diff --git a/setting_list.c b/setting_list.c deleted file mode 100644 index 836a76708a..0000000000 --- a/setting_list.c +++ /dev/null @@ -1,2395 +0,0 @@ -/* RetroArch - A frontend for libretro. - * Copyright (C) 2011-2017 - Daniel De Matteis - * - * RetroArch is free software: you can redistribute it and/or modify it under the terms - * of the GNU General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with RetroArch. - * If not, see . - */ - -#include - -#include -#include -#include - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "input/input_driver.h" -#include "config.def.keybinds.h" - -#ifdef HAVE_MENU -#include "menu/menu_driver.h" -#include "menu/widgets/menu_input_dialog.h" -#include "menu/widgets/menu_input_bind_dialog.h" -#endif - -#include "configuration.h" -#include "config.def.h" -#include "setting_list.h" -#include "retroarch.h" - -#define _3_SECONDS 3000000 -#define _6_SECONDS 6000000 -#define _9_SECONDS 9000000 -#define _12_SECONDS 12000000 -#define _15_SECONDS 15000000 -#define _18_SECONDS 18000000 -#define _21_SECONDS 21000000 - -bool settings_list_append(rarch_setting_t **list, - rarch_setting_info_t *list_info) -{ - if (!list || !*list || !list_info) - return false; - - if (list_info->index == list_info->size) - { - rarch_setting_t *list_settings = NULL; - - list_info->size *= 2; - list_settings = (rarch_setting_t*) - realloc(*list, sizeof(rarch_setting_t) * list_info->size); - - if (!list_settings) - return false; - *list = list_settings; - } - - return true; -} - -unsigned setting_get_bind_type(rarch_setting_t *setting) -{ - if (!setting) - return 0; - return setting->bind_type; -} - -static int setting_bind_action_ok(rarch_setting_t *setting, bool wraparound) -{ - (void)wraparound; /* TODO/FIXME - handle this */ - -#ifdef HAVE_MENU - /* TODO - get rid of menu dependency */ - if (!menu_input_key_bind_set_mode(MENU_INPUT_BINDS_CTL_BIND_SINGLE, setting)) - return -1; -#endif - return 0; -} - -static int setting_int_action_right_default(rarch_setting_t *setting, bool wraparound) -{ - double max = 0.0f; - - if (!setting) - return -1; - - max = setting->max; - - (void)wraparound; /* TODO/FIXME - handle this */ - - *setting->value.target.integer = - *setting->value.target.integer + setting->step; - - if (setting->enforce_maxrange) - { - if (*setting->value.target.integer > max) - { - settings_t *settings = config_get_ptr(); -#ifdef HAVE_MENU - double min = setting->min; - - if (settings && settings->bools.menu_navigation_wraparound_enable) - *setting->value.target.integer = min; - else -#endif - *setting->value.target.integer = max; - } - } - - return 0; -} - -#ifdef HAVE_MENU -static int setting_bind_action_start(rarch_setting_t *setting) -{ - unsigned bind_type; - struct retro_keybind *keybind = NULL; - struct retro_keybind *def_binds = (struct retro_keybind *)retro_keybinds_1; - - if (!setting) - return -1; - - keybind = (struct retro_keybind*)setting->value.target.keybind; - if (!keybind) - return -1; - - keybind->joykey = NO_BTN; - keybind->joyaxis = AXIS_NONE; - - if (setting->index_offset) - def_binds = (struct retro_keybind*)retro_keybinds_rest; - - bind_type = setting_get_bind_type(setting); - keybind->key = def_binds[bind_type - MENU_SETTINGS_BIND_BEGIN].key; - - keybind->mbutton = NO_BTN; - - return 0; -} -#endif - -static void setting_get_string_representation_hex(rarch_setting_t *setting, - char *s, size_t len) -{ - if (setting) - snprintf(s, len, "%08x", - *setting->value.target.unsigned_integer); -} - -void setting_get_string_representation_hex_and_uint(rarch_setting_t *setting, - char *s, size_t len) -{ - if (setting) - snprintf(s, len, "%u (%08X)", - *setting->value.target.unsigned_integer, *setting->value.target.unsigned_integer); -} - -void setting_get_string_representation_uint(rarch_setting_t *setting, - char *s, size_t len) -{ - if (setting) - snprintf(s, len, "%u", - *setting->value.target.unsigned_integer); -} - -void setting_get_string_representation_size(rarch_setting_t *setting, - char *s, size_t len) -{ - if (setting) - snprintf(s, len, "%" PRI_SIZET, - *setting->value.target.sizet); -} - -void setting_get_string_representation_size_in_mb(rarch_setting_t *setting, - char *s, size_t len) -{ - if (setting) - snprintf(s, len, "%" PRI_SIZET, - (*setting->value.target.sizet)/(1024*1024)); -} - -void setting_get_string_representation_uint_as_enum(rarch_setting_t *setting, - char *s, size_t len) -{ - if (setting) - snprintf(s, len, "%s", - msg_hash_to_str((enum msg_hash_enums)( - setting->index_offset+( - *setting->value.target.unsigned_integer)))); -} - -static float recalc_step_based_on_length_of_action(rarch_setting_t *setting) -{ - float step = setting->step; -#ifdef HAVE_MENU - global_t *global = global_get_ptr(); - if ( global ) - { - if ( global->menu.action_press_time > _21_SECONDS) - step = setting->step*1000000.0f ; - else if ( global->menu.action_press_time > _18_SECONDS) - step = setting->step*100000.0f ; - else if ( global->menu.action_press_time > _15_SECONDS) - step = setting->step*10000.0f ; - else if ( global->menu.action_press_time > _12_SECONDS) - step = setting->step*1000.0f ; - else if ( global->menu.action_press_time > _9_SECONDS) - step = setting->step*100.0f ; - else if ( global->menu.action_press_time > _6_SECONDS) - step = setting->step*10.0f ; - else if ( global->menu.action_press_time > _3_SECONDS) - step = setting->step*5.0f ; - else - step = setting->step ; - } -#endif - return step < setting->step ? setting->step : step ; -} - -int setting_uint_action_left_default(rarch_setting_t *setting, bool wraparound) -{ - double min = 0.0f; - bool overflowed = false; - float step = 0.0f ; - - if (!setting) - return -1; - - min = setting->min; - - (void)wraparound; /* TODO/FIXME - handle this */ - - step = recalc_step_based_on_length_of_action(setting) ; - - overflowed = step > *setting->value.target.unsigned_integer; - - if (!overflowed) - *setting->value.target.unsigned_integer = *setting->value.target.unsigned_integer - step; - - if (setting->enforce_minrange) - { - if (overflowed || *setting->value.target.unsigned_integer < min) - { - settings_t *settings = config_get_ptr(); - -#ifdef HAVE_MENU - double max = setting->max; - - if (settings && settings->bools.menu_navigation_wraparound_enable) - *setting->value.target.unsigned_integer = max; - else -#endif - *setting->value.target.unsigned_integer = min; - } - } - - return 0; -} - -int setting_uint_action_right_default(rarch_setting_t *setting, bool wraparound) -{ - double max = 0.0f; - float step = 0.0f ; - - if (!setting) - return -1; - - max = setting->max; - - (void)wraparound; /* TODO/FIXME - handle this */ - - step = recalc_step_based_on_length_of_action(setting) ; - - *setting->value.target.unsigned_integer = - *setting->value.target.unsigned_integer + step; - - if (setting->enforce_maxrange) - { - if (*setting->value.target.unsigned_integer > max) - { - settings_t *settings = config_get_ptr(); - -#ifdef HAVE_MENU - double min = setting->min; - - if (settings && settings->bools.menu_navigation_wraparound_enable) - *setting->value.target.unsigned_integer = min; - else -#endif - *setting->value.target.unsigned_integer = max; - } - } - - return 0; -} - -int setting_uint_action_right_with_refresh(rarch_setting_t *setting, bool wraparound) -{ - int retval = setting_uint_action_right_default(setting, wraparound) ; - bool refresh = false; - -#ifdef HAVE_MENU - menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); - menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL); -#endif - - return retval ; -} - -int setting_uint_action_left_with_refresh(rarch_setting_t *setting, bool wraparound) -{ - int retval = setting_uint_action_left_default(setting, wraparound) ; - bool refresh = false; - -#ifdef HAVE_MENU - menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); - menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL); -#endif - - return retval ; - -} - -static int setting_size_action_left_default(rarch_setting_t *setting, bool wraparound) -{ - double min = 0.0f; - bool overflowed = false; - float step = 0.0f ; - - if (!setting) - return -1; - - min = setting->min; - - (void)wraparound; /* TODO/FIXME - handle this */ - - step = recalc_step_based_on_length_of_action(setting) ; - - overflowed = step > *setting->value.target.sizet; - - if (!overflowed) - *setting->value.target.sizet = *setting->value.target.sizet - step; - - if (setting->enforce_minrange) - { - if (overflowed || *setting->value.target.sizet < min) - { - settings_t *settings = config_get_ptr(); - -#ifdef HAVE_MENU - double max = setting->max; - - if (settings && settings->bools.menu_navigation_wraparound_enable) - *setting->value.target.sizet = max; - else -#endif - *setting->value.target.sizet = min; - } - } - - return 0; -} - -static int setting_size_action_right_default(rarch_setting_t *setting, bool wraparound) -{ - double max = 0.0f; - float step = 0.0f ; - - if (!setting) - return -1; - - max = setting->max; - - (void)wraparound; /* TODO/FIXME - handle this */ - - step = recalc_step_based_on_length_of_action(setting) ; - - *setting->value.target.sizet = - *setting->value.target.sizet + step; - - if (setting->enforce_maxrange) - { - if (*setting->value.target.sizet > max) - { - settings_t *settings = config_get_ptr(); - -#ifdef HAVE_MENU - double min = setting->min; - - if (settings && settings->bools.menu_navigation_wraparound_enable) - *setting->value.target.sizet = min; - else -#endif - *setting->value.target.sizet = max; - } - } - - return 0; -} - -int setting_generic_action_ok_default(rarch_setting_t *setting, bool wraparound) -{ - if (!setting) - return -1; - - (void)wraparound; /* TODO/FIXME - handle this */ - - if (setting->cmd_trigger.idx != CMD_EVENT_NONE) - setting->cmd_trigger.triggered = true; - - return 0; -} - -static void setting_get_string_representation_int(rarch_setting_t *setting, - char *s, size_t len) -{ - if (setting) - snprintf(s, len, "%d", *setting->value.target.integer); -} - -/** - * setting_set_with_string_representation: - * @setting : pointer to setting - * @value : value for the setting (string) - * - * Set a settings' value with a string. It is assumed - * that the string has been properly formatted. - **/ -int setting_set_with_string_representation(rarch_setting_t* setting, - const char* value) -{ - double min, max; - uint64_t flags; - if (!setting || !value) - return -1; - - min = setting->min; - max = setting->max; - flags = setting->flags; - - switch (setting_get_type(setting)) - { - case ST_INT: - sscanf(value, "%d", setting->value.target.integer); - if (flags & SD_FLAG_HAS_RANGE) - { - if (setting->enforce_minrange && *setting->value.target.integer < min) - *setting->value.target.integer = min; - if (setting->enforce_maxrange && *setting->value.target.integer > max) - { -#ifdef HAVE_MENU - settings_t *settings = config_get_ptr(); - if (settings && settings->bools.menu_navigation_wraparound_enable) - *setting->value.target.integer = min; - else -#endif - *setting->value.target.integer = max; - } - } - break; - case ST_UINT: - sscanf(value, "%u", setting->value.target.unsigned_integer); - if (flags & SD_FLAG_HAS_RANGE) - { - if (setting->enforce_minrange && *setting->value.target.unsigned_integer < min) - *setting->value.target.unsigned_integer = min; - if (setting->enforce_maxrange && *setting->value.target.unsigned_integer > max) - { -#ifdef HAVE_MENU - settings_t *settings = config_get_ptr(); - if (settings && settings->bools.menu_navigation_wraparound_enable) - *setting->value.target.unsigned_integer = min; - else -#endif - *setting->value.target.unsigned_integer = max; - } - } - break; - case ST_SIZE: - sscanf(value, "%" PRI_SIZET, setting->value.target.sizet); - if (flags & SD_FLAG_HAS_RANGE) - { - if (setting->enforce_minrange && *setting->value.target.sizet < min) - *setting->value.target.sizet = min; - if (setting->enforce_maxrange && *setting->value.target.sizet > max) - { -#ifdef HAVE_MENU - settings_t *settings = config_get_ptr(); - if (settings && settings->bools.menu_navigation_wraparound_enable) - *setting->value.target.sizet = min; - else -#endif - *setting->value.target.sizet = max; - } - } - break; - case ST_FLOAT: - sscanf(value, "%f", setting->value.target.fraction); - if (flags & SD_FLAG_HAS_RANGE) - { - if (setting->enforce_minrange && *setting->value.target.fraction < min) - *setting->value.target.fraction = min; - if (setting->enforce_maxrange && *setting->value.target.fraction > max) - { -#ifdef HAVE_MENU - settings_t *settings = config_get_ptr(); - if (settings && settings->bools.menu_navigation_wraparound_enable) - *setting->value.target.fraction = min; - else -#endif - *setting->value.target.fraction = max; - } - } - break; - case ST_PATH: - case ST_DIR: - case ST_STRING: - case ST_STRING_OPTIONS: - case ST_ACTION: - if ( setting->value.target.string != NULL) - strlcpy(setting->value.target.string, value, setting->size); - break; - case ST_BOOL: - if (string_is_equal(value, "true")) - *setting->value.target.boolean = true; - else if (string_is_equal(value, "false")) - *setting->value.target.boolean = false; - break; - default: - break; - } - - if (setting->change_handler) - setting->change_handler(setting); - - return 0; -} - -static int setting_fraction_action_left_default( - rarch_setting_t *setting, bool wraparound) -{ - double min = 0.0f; - - if (!setting) - return -1; - - min = setting->min; - - (void)wraparound; /* TODO/FIXME - handle this */ - - *setting->value.target.fraction = *setting->value.target.fraction - setting->step; - - if (setting->enforce_minrange) - { - if (*setting->value.target.fraction < min) - { - settings_t *settings = config_get_ptr(); - -#ifdef HAVE_MENU - double max = setting->max; - - if (settings && settings->bools.menu_navigation_wraparound_enable) - *setting->value.target.fraction = max; - else -#endif - *setting->value.target.fraction = min; - } - } - - return 0; -} - -static int setting_fraction_action_right_default( - rarch_setting_t *setting, bool wraparound) -{ - double max = 0.0f; - - if (!setting) - return -1; - - max = setting->max; - - (void)wraparound; /* TODO/FIXME - handle this */ - - *setting->value.target.fraction = - *setting->value.target.fraction + setting->step; - - if (setting->enforce_maxrange) - { - if (*setting->value.target.fraction > max) - { -#ifdef HAVE_MENU - settings_t *settings = config_get_ptr(); - double min = setting->min; - - if (settings && settings->bools.menu_navigation_wraparound_enable) - *setting->value.target.fraction = min; - else -#endif - *setting->value.target.fraction = max; - } - } - - return 0; -} - -/** - * setting_reset_setting: - * @setting : pointer to setting - * - * Reset a setting's value to its defaults. - **/ -static void setting_reset_setting(rarch_setting_t* setting) -{ - if (!setting) - return; - - switch (setting_get_type(setting)) - { - case ST_BOOL: - *setting->value.target.boolean = setting->default_value.boolean; - break; - case ST_INT: - *setting->value.target.integer = setting->default_value.integer; - break; - case ST_UINT: - *setting->value.target.unsigned_integer = setting->default_value.unsigned_integer; - break; - case ST_SIZE: - *setting->value.target.sizet = setting->default_value.sizet; - break; - case ST_FLOAT: - *setting->value.target.fraction = setting->default_value.fraction; - break; - case ST_BIND: - *setting->value.target.keybind = *setting->default_value.keybind; - break; - case ST_STRING: - case ST_STRING_OPTIONS: - case ST_PATH: - case ST_DIR: - if (setting->default_value.string) - { - if (setting_get_type(setting) == ST_STRING) - setting_set_with_string_representation(setting, setting->default_value.string); - else - fill_pathname_expand_special(setting->value.target.string, - setting->default_value.string, setting->size); - } - break; - default: - break; - } - - if (setting->change_handler) - setting->change_handler(setting); -} - -int setting_generic_action_start_default(rarch_setting_t *setting) -{ - if (!setting) - return -1; - - setting_reset_setting(setting); - - return 0; -} - -static void setting_get_string_representation_default(rarch_setting_t *setting, - char *s, size_t len) -{ - strlcpy(s, "...", len); -} - -/** - * setting_get_string_representation_st_bool: - * @setting : pointer to setting - * @s : string for the type to be represented on-screen as - * a label. - * @len : size of @s - * - * Set a settings' label value. The setting is of type ST_BOOL. - **/ -static void setting_get_string_representation_st_bool(rarch_setting_t *setting, - char *s, size_t len) -{ - if (setting) - strlcpy(s, *setting->value.target.boolean ? setting->boolean.on_label : - setting->boolean.off_label, len); -} - -/** - * setting_get_string_representation_st_float: - * @setting : pointer to setting - * @s : string for the type to be represented on-screen as - * a label. - * @len : size of @s - * - * Set a settings' label value. The setting is of type ST_FLOAT. - **/ -static void setting_get_string_representation_st_float(rarch_setting_t *setting, - char *s, size_t len) -{ - if (setting) - snprintf(s, len, setting->rounding_fraction, - *setting->value.target.fraction); -} - -static void setting_get_string_representation_st_dir(rarch_setting_t *setting, - char *s, size_t len) -{ - if (setting) - strlcpy(s, - *setting->value.target.string ? - setting->value.target.string : setting->dir.empty_path, - len); -} - -static void setting_get_string_representation_st_path(rarch_setting_t *setting, - char *s, size_t len) -{ - if (setting) - fill_short_pathname_representation(s, setting->value.target.string, len); -} - -static void setting_get_string_representation_st_string(rarch_setting_t *setting, - char *s, size_t len) -{ - if (setting) - strlcpy(s, setting->value.target.string, len); -} - -static void setting_get_string_representation_st_bind(rarch_setting_t *setting, - char *s, size_t len) -{ - unsigned index_offset = 0; - const struct retro_keybind* keybind = NULL; - const struct retro_keybind* auto_bind = NULL; - - if (!setting) - return; - - index_offset = setting->index_offset; - keybind = (const struct retro_keybind*)setting->value.target.keybind; - auto_bind = (const struct retro_keybind*) - input_config_get_bind_auto(index_offset, keybind->id); - - input_config_get_bind_string(s, keybind, auto_bind, len); -} - -static int setting_action_action_ok(rarch_setting_t *setting, bool wraparound) -{ - if (!setting) - return -1; - - (void)wraparound; /* TODO/FIXME - handle this */ - - if (setting->cmd_trigger.idx != CMD_EVENT_NONE) - command_event(setting->cmd_trigger.idx, NULL); - - return 0; -} - -/** - * setting_action_setting: - * @name : Name of setting. - * @short_description : Short description of setting. - * @group : Group that the setting belongs to. - * @subgroup : Subgroup that the setting belongs to. - * - * Initializes a setting of type ST_ACTION. - * - * Returns: setting of type ST_ACTION. - **/ -static rarch_setting_t setting_action_setting(const char* name, - const char* short_description, - const char *group, const char *subgroup, - const char *parent_group, - bool dont_use_enum_idx) -{ - rarch_setting_t result; - - result.enum_idx = MSG_UNKNOWN; - result.type = ST_ACTION; - - result.size = 0; - - result.name = name; - result.short_description = short_description; - result.group = group; - result.subgroup = subgroup; - result.parent_group = parent_group; - result.values = NULL; - - result.index = 0; - result.index_offset = 0; - result.offset_by = 0; - - result.min = 0.0; - result.max = 0.0; - - result.flags = 0; - result.free_flags = 0; - - result.change_handler = NULL; - result.read_handler = NULL; - result.action_start = NULL; - result.action_left = NULL; - result.action_right = NULL; - result.action_up = NULL; - result.action_down = NULL; - result.action_cancel = NULL; - result.action_ok = setting_action_action_ok; - result.action_select = setting_action_action_ok; - result.get_string_representation = &setting_get_string_representation_default; - - result.bind_type = 0; - result.browser_selection_type = ST_NONE; - result.step = 0.0f; - result.rounding_fraction = NULL; - result.enforce_minrange = false; - result.enforce_maxrange = false; - - result.cmd_trigger.idx = CMD_EVENT_NONE; - result.cmd_trigger.triggered = false; - - result.dont_use_enum_idx_representation = dont_use_enum_idx; - - return result; -} - -/** - * setting_group_setting: - * @type : type of settting. - * @name : name of setting. - * - * Initializes a setting of type ST_GROUP. - * - * Returns: setting of type ST_GROUP. - **/ -static rarch_setting_t setting_group_setting(enum setting_type type, const char* name, - const char *parent_group) -{ - rarch_setting_t result; - - result.enum_idx = MSG_UNKNOWN; - result.type = type; - - result.size = 0; - - result.name = name; - result.short_description = name; - result.group = NULL; - result.subgroup = NULL; - result.parent_group = parent_group; - result.values = NULL; - - result.index = 0; - result.index_offset = 0; - result.offset_by = 0; - - result.min = 0.0; - result.max = 0.0; - - result.flags = 0; - result.free_flags = 0; - - result.change_handler = NULL; - result.read_handler = NULL; - result.action_start = NULL; - result.action_left = NULL; - result.action_right = NULL; - result.action_up = NULL; - result.action_down = NULL; - result.action_cancel = NULL; - result.action_ok = NULL; - result.action_select = NULL; - result.get_string_representation = &setting_get_string_representation_default; - - result.bind_type = 0; - result.browser_selection_type = ST_NONE; - result.step = 0.0f; - result.rounding_fraction = NULL; - result.enforce_minrange = false; - result.enforce_maxrange = false; - - result.cmd_trigger.idx = CMD_EVENT_NONE; - result.cmd_trigger.triggered = false; - - result.dont_use_enum_idx_representation = false; - - return result; -} - -/** - * setting_float_setting: - * @name : name of setting. - * @short_description : Short description of setting. - * @target : Target of float setting. - * @default_value : Default value (in float). - * @rounding : Rounding (for float-to-string representation). - * @group : Group that the setting belongs to. - * @subgroup : Subgroup that the setting belongs to. - * @change_handler : Function callback for change handler function pointer. - * @read_handler : Function callback for read handler function pointer. - * - * Initializes a setting of type ST_FLOAT. - * - * Returns: setting of type ST_FLOAT. - **/ -static rarch_setting_t setting_float_setting(const char* name, - const char* short_description, float* target, float default_value, - const char *rounding, const char *group, const char *subgroup, - const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler, - bool dont_use_enum_idx) -{ - rarch_setting_t result; - - result.enum_idx = MSG_UNKNOWN; - result.type = ST_FLOAT; - - result.size = sizeof(float); - - result.name = name; - result.short_description = short_description; - result.group = group; - result.subgroup = subgroup; - result.parent_group = parent_group; - result.values = NULL; - - result.index = 0; - result.index_offset = 0; - result.offset_by = 0; - - result.min = 0.0; - result.max = 0.0; - - result.flags = 0; - result.free_flags = 0; - - result.change_handler = change_handler; - result.read_handler = read_handler; - result.action_start = setting_generic_action_start_default; - result.action_left = setting_fraction_action_left_default; - result.action_right = setting_fraction_action_right_default; - result.action_up = NULL; - result.action_down = NULL; - result.action_cancel = NULL; - result.action_ok = setting_generic_action_ok_default; - result.action_select = setting_generic_action_ok_default; - result.get_string_representation = &setting_get_string_representation_st_float; - - result.bind_type = 0; - result.browser_selection_type = ST_NONE; - result.step = 0.0f; - result.rounding_fraction = rounding; - result.enforce_minrange = false; - result.enforce_maxrange = false; - - result.value.target.fraction = target; - result.original_value.fraction = *target; - result.default_value.fraction = default_value; - - result.cmd_trigger.idx = CMD_EVENT_NONE; - result.cmd_trigger.triggered = false; - - result.dont_use_enum_idx_representation = dont_use_enum_idx; - - return result; -} - -/** - * setting_uint_setting: - * @name : name of setting. - * @short_description : Short description of setting. - * @target : Target of unsigned integer setting. - * @default_value : Default value (in unsigned integer format). - * @group : Group that the setting belongs to. - * @subgroup : Subgroup that the setting belongs to. - * @change_handler : Function callback for change handler function pointer. - * @read_handler : Function callback for read handler function pointer. - * - * Initializes a setting of type ST_UINT. - * - * Returns: setting of type ST_UINT. - **/ -static rarch_setting_t setting_uint_setting(const char* name, - const char* short_description, unsigned int* target, - unsigned int default_value, - const char *group, const char *subgroup, const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler, - bool dont_use_enum_idx) -{ - rarch_setting_t result; - - result.enum_idx = MSG_UNKNOWN; - result.type = ST_UINT; - - result.size = sizeof(unsigned int); - - result.name = name; - result.short_description = short_description; - result.group = group; - result.subgroup = subgroup; - result.parent_group = parent_group; - result.values = NULL; - - result.index = 0; - result.index_offset = 0; - result.offset_by = 0; - - result.min = 0.0; - result.max = 0.0; - - result.flags = 0; - result.free_flags = 0; - - result.change_handler = change_handler; - result.read_handler = read_handler; - result.action_start = setting_generic_action_start_default; - result.action_left = setting_uint_action_left_default; - result.action_right = setting_uint_action_right_default; - result.action_up = NULL; - result.action_down = NULL; - result.action_cancel = NULL; - result.action_ok = setting_generic_action_ok_default; - result.action_select = setting_generic_action_ok_default; - result.get_string_representation = &setting_get_string_representation_uint; - - result.bind_type = 0; - result.browser_selection_type = ST_NONE; - result.step = 0.0f; - result.rounding_fraction = NULL; - result.enforce_minrange = false; - result.enforce_maxrange = false; - - result.value.target.unsigned_integer = target; - result.original_value.unsigned_integer = *target; - result.default_value.unsigned_integer = default_value; - - result.cmd_trigger.idx = CMD_EVENT_NONE; - result.cmd_trigger.triggered = false; - - result.dont_use_enum_idx_representation = dont_use_enum_idx; - - return result; -} - -/** - * setting_size_setting: - * @name : name of setting. - * @short_description : Short description of setting. - * @target : Target of size_t setting. - * @default_value : Default value (in size_t format). - * @group : Group that the setting belongs to. - * @subgroup : Subgroup that the setting belongs to. - * @change_handler : Function callback for change handler function pointer. - * @read_handler : Function callback for read handler function pointer. - * @dont_use_enum_idx : Boolean indicating whether or not to use the enum idx - * @string_representation_handler : Function callback for converting the setting to a string - * - * Initializes a setting of type ST_SIZE. - * - * Returns: setting of type ST_SIZE. - **/ -static rarch_setting_t setting_size_setting(const char* name, - const char* short_description, size_t* target, - size_t default_value, - const char *group, const char *subgroup, const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler, - bool dont_use_enum_idx, get_string_representation_t string_representation_handler) -{ - rarch_setting_t result; - - result.enum_idx = MSG_UNKNOWN; - result.type = ST_SIZE; - - result.size = sizeof(size_t); - - result.name = name; - result.short_description = short_description; - result.group = group; - result.subgroup = subgroup; - result.parent_group = parent_group; - result.values = NULL; - - result.index = 0; - result.index_offset = 0; - result.offset_by = 0; - - result.min = 0.0; - result.max = 0.0; - - result.flags = 0; - result.free_flags = 0; - - result.change_handler = change_handler; - result.read_handler = read_handler; - result.action_start = setting_generic_action_start_default; - result.action_left = setting_size_action_left_default; - result.action_right = setting_size_action_right_default; - result.action_up = NULL; - result.action_down = NULL; - result.action_cancel = NULL; - result.action_ok = setting_generic_action_ok_default; - result.action_select = setting_generic_action_ok_default; - result.get_string_representation = string_representation_handler; - - result.bind_type = 0; - result.browser_selection_type = ST_NONE; - result.step = 0.0f; - result.rounding_fraction = NULL; - result.enforce_minrange = false; - result.enforce_maxrange = false; - - result.value.target.sizet = target; - result.original_value.sizet = *target; - result.default_value.sizet = default_value; - - result.cmd_trigger.idx = CMD_EVENT_NONE; - result.cmd_trigger.triggered = false; - - result.dont_use_enum_idx_representation = dont_use_enum_idx; - - return result; -} - -/** - * setting_hex_setting: - * @name : name of setting. - * @short_description : Short description of setting. - * @target : Target of unsigned integer setting. - * @default_value : Default value (in unsigned integer format). - * @group : Group that the setting belongs to. - * @subgroup : Subgroup that the setting belongs to. - * @change_handler : Function callback for change handler function pointer. - * @read_handler : Function callback for read handler function pointer. - * - * Initializes a setting of type ST_HEX. - * - * Returns: setting of type ST_HEX. - **/ -static rarch_setting_t setting_hex_setting(const char* name, - const char* short_description, unsigned int* target, - unsigned int default_value, - const char *group, const char *subgroup, const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler, - bool dont_use_enum_idx) -{ - rarch_setting_t result; - - result.enum_idx = MSG_UNKNOWN; - result.type = ST_HEX; - - result.size = sizeof(unsigned int); - - result.name = name; - result.short_description = short_description; - result.group = group; - result.subgroup = subgroup; - result.parent_group = parent_group; - result.values = NULL; - - result.index = 0; - result.index_offset = 0; - result.offset_by = 0; - - result.min = 0.0; - result.max = 0.0; - - result.flags = 0; - result.free_flags = 0; - - result.change_handler = change_handler; - result.read_handler = read_handler; - result.action_start = setting_generic_action_start_default; - result.action_left = NULL; - result.action_right = NULL; - result.action_up = NULL; - result.action_down = NULL; - result.action_cancel = NULL; - result.action_ok = setting_generic_action_ok_default; - result.action_select = setting_generic_action_ok_default; - result.get_string_representation = &setting_get_string_representation_hex; - - result.bind_type = 0; - result.browser_selection_type = ST_NONE; - result.step = 0.0f; - result.rounding_fraction = NULL; - result.enforce_minrange = false; - result.enforce_maxrange = false; - - result.value.target.unsigned_integer = target; - result.original_value.unsigned_integer = *target; - result.default_value.unsigned_integer = default_value; - - result.cmd_trigger.idx = CMD_EVENT_NONE; - result.cmd_trigger.triggered = false; - - result.dont_use_enum_idx_representation = dont_use_enum_idx; - - return result; -} - -/** - * setting_bind_setting: - * @name : name of setting. - * @short_description : Short description of setting. - * @target : Target of bind setting. - * @idx : Index of bind setting. - * @idx_offset : Index offset of bind setting. - * @default_value : Default value (in bind format). - * @group : Group that the setting belongs to. - * @subgroup : Subgroup that the setting belongs to. - * - * Initializes a setting of type ST_BIND. - * - * Returns: setting of type ST_BIND. - **/ -static rarch_setting_t setting_bind_setting(const char* name, - const char* short_description, struct retro_keybind* target, - uint32_t idx, uint32_t idx_offset, - const struct retro_keybind* default_value, - const char *group, const char *subgroup, - const char *parent_group, - bool dont_use_enum_idx) -{ - rarch_setting_t result; - - result.enum_idx = MSG_UNKNOWN; - result.type = ST_BIND; - - result.size = 0; - - result.name = name; - result.short_description = short_description; - result.group = group; - result.subgroup = subgroup; - result.parent_group = parent_group; - result.values = NULL; - - result.index = idx; - result.index_offset = idx_offset; - result.offset_by = 0; - - result.min = 0.0; - result.max = 0.0; - - result.flags = 0; - result.free_flags = 0; - - result.change_handler = NULL; - result.read_handler = NULL; -#ifdef HAVE_MENU - result.action_start = setting_bind_action_start; -#else - result.action_start = NULL; -#endif - result.action_left = NULL; - result.action_right = NULL; - result.action_up = NULL; - result.action_down = NULL; - result.action_cancel = NULL; - result.action_ok = setting_bind_action_ok; - result.action_select = setting_bind_action_ok; - result.get_string_representation = &setting_get_string_representation_st_bind; - - result.bind_type = 0; - result.browser_selection_type = ST_NONE; - result.step = 0.0f; - result.rounding_fraction = NULL; - result.enforce_minrange = false; - result.enforce_maxrange = false; - - result.value.target.keybind = target; - result.default_value.keybind = default_value; - - result.cmd_trigger.idx = CMD_EVENT_NONE; - result.cmd_trigger.triggered = false; - - result.dont_use_enum_idx_representation = dont_use_enum_idx; - - return result; -} - -static int setting_int_action_left_default(rarch_setting_t *setting, bool wraparound) -{ - double min = 0.0f; - - if (!setting) - return -1; - - min = setting->min; - - (void)wraparound; /* TODO/FIXME - handle this */ - - *setting->value.target.integer = *setting->value.target.integer - setting->step; - - if (setting->enforce_minrange) - { - if (*setting->value.target.integer < min) - { - settings_t *settings = config_get_ptr(); - -#ifdef HAVE_MENU - double max = setting->max; - - if (settings && settings->bools.menu_navigation_wraparound_enable) - *setting->value.target.integer = max; - else -#endif - *setting->value.target.integer = min; - } - } - - return 0; -} - -static int setting_bool_action_ok_default(rarch_setting_t *setting, bool wraparound) -{ - if (!setting) - return -1; - - (void)wraparound; /* TODO/FIXME - handle this */ - - setting_set_with_string_representation(setting, - *setting->value.target.boolean ? "false" : "true"); - - return 0; -} - -static int setting_bool_action_toggle_default(rarch_setting_t *setting, bool wraparound) -{ - if (!setting) - return -1; - - (void)wraparound; /* TODO/FIXME - handle this */ - - setting_set_with_string_representation(setting, - *setting->value.target.boolean ? "false" : "true"); - - return 0; -} - -int setting_string_action_start_generic(rarch_setting_t *setting) -{ - if (!setting) - return -1; - - setting->value.target.string[0] = '\0'; - - return 0; -} - -/** - * setting_string_setting: - * @type : type of setting. - * @name : name of setting. - * @short_description : Short description of setting. - * @target : Target of string setting. - * @size : Size of string setting. - * @default_value : Default value (in string format). - * @empty : TODO/FIXME: ??? - * @group : Group that the setting belongs to. - * @subgroup : Subgroup that the setting belongs to. - * @change_handler : Function callback for change handler function pointer. - * @read_handler : Function callback for read handler function pointer. - * - * Initializes a string setting (of type @type). - * - * Returns: String setting of type @type. - **/ -static rarch_setting_t setting_string_setting(enum setting_type type, - const char* name, const char* short_description, char* target, - unsigned size, const char* default_value, const char *empty, - const char *group, const char *subgroup, const char *parent_group, - change_handler_t change_handler, - change_handler_t read_handler, - bool dont_use_enum_idx) -{ - rarch_setting_t result; - - result.enum_idx = MSG_UNKNOWN; - result.type = type; - - result.size = size; - - result.name = name; - result.short_description = short_description; - result.group = group; - result.subgroup = subgroup; - result.parent_group = parent_group; - result.values = NULL; - - result.index = 0; - result.index_offset = 0; - result.offset_by = 0; - - result.min = 0.0; - result.max = 0.0; - - result.flags = 0; - result.free_flags = 0; - - result.change_handler = change_handler; - result.read_handler = read_handler; - result.action_start = NULL; - result.action_left = NULL; - result.action_right = NULL; - result.action_up = NULL; - result.action_down = NULL; - result.action_cancel = NULL; - result.action_ok = NULL; - result.action_select = NULL; - result.get_string_representation = &setting_get_string_representation_st_string; - - result.bind_type = 0; - result.browser_selection_type = ST_NONE; - result.step = 0.0f; - result.rounding_fraction = NULL; - result.enforce_minrange = false; - result.enforce_maxrange = false; - - result.dir.empty_path = empty; - result.value.target.string = target; - result.default_value.string = default_value; - - result.cmd_trigger.idx = CMD_EVENT_NONE; - result.cmd_trigger.triggered = false; - - switch (type) - { - case ST_DIR: - result.action_start = setting_string_action_start_generic; - result.browser_selection_type = ST_DIR; - result.get_string_representation = &setting_get_string_representation_st_dir; - break; - case ST_PATH: - result.action_start = setting_string_action_start_generic; - result.browser_selection_type = ST_PATH; - result.get_string_representation = &setting_get_string_representation_st_path; - break; - default: - break; - } - - result.dont_use_enum_idx_representation = dont_use_enum_idx; - - return result; -} - -/** - * setting_string_setting_options: - * @type : type of settting. - * @name : name of setting. - * @short_description : Short description of setting. - * @target : Target of bind setting. - * @size : Size of string setting. - * @default_value : Default value. - * @empty : N/A. - * @values : Values, separated by a delimiter. - * @group : Group that the setting belongs to. - * @subgroup : Subgroup that the setting belongs to. - * @change_handler : Function callback for change handler function pointer. - * @read_handler : Function callback for read handler function pointer. - * - * Initializes a string options list setting. - * - * Returns: string option list setting. - **/ -static rarch_setting_t setting_string_setting_options(enum setting_type type, - const char* name, const char* short_description, char* target, - unsigned size, const char* default_value, - const char *empty, const char *values, - const char *group, const char *subgroup, const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler, - bool dont_use_enum_idx) -{ - rarch_setting_t result = setting_string_setting(type, name, - short_description, target, size, default_value, empty, group, - subgroup, parent_group, change_handler, read_handler, - dont_use_enum_idx); - - result.parent_group = parent_group; - result.values = values; - return result; -} - -/** - * setting_subgroup_setting: - * @type : type of settting. - * @name : name of setting. - * @parent_name : group that the subgroup setting belongs to. - * - * Initializes a setting of type ST_SUBGROUP. - * - * Returns: setting of type ST_SUBGROUP. - **/ -static rarch_setting_t setting_subgroup_setting(enum setting_type type, - const char* name, const char *parent_name, const char *parent_group, - bool dont_use_enum_idx) -{ - rarch_setting_t result; - - result.enum_idx = MSG_UNKNOWN; - result.type = type; - - result.size = 0; - - result.name = name; - result.short_description = name; - result.group = parent_name; - result.parent_group = parent_group; - result.values = NULL; - result.subgroup = NULL; - - result.index = 0; - result.index_offset = 0; - result.offset_by = 0; - - result.min = 0.0; - result.max = 0.0; - - result.flags = 0; - result.free_flags = 0; - - result.change_handler = NULL; - result.read_handler = NULL; - result.action_start = NULL; - result.action_left = NULL; - result.action_right = NULL; - result.action_up = NULL; - result.action_down = NULL; - result.action_cancel = NULL; - result.action_ok = NULL; - result.action_select = NULL; - result.get_string_representation = &setting_get_string_representation_default; - - result.bind_type = 0; - result.browser_selection_type = ST_NONE; - result.step = 0.0f; - result.rounding_fraction = NULL; - result.enforce_minrange = false; - result.enforce_maxrange = false; - - result.cmd_trigger.idx = CMD_EVENT_NONE; - result.cmd_trigger.triggered = false; - - result.dont_use_enum_idx_representation = dont_use_enum_idx; - - return result; -} - -/** - * setting_bool_setting: - * @name : name of setting. - * @short_description : Short description of setting. - * @target : Target of bool setting. - * @default_value : Default value (in bool format). - * @off : String value for "Off" label. - * @on : String value for "On" label. - * @group : Group that the setting belongs to. - * @subgroup : Subgroup that the setting belongs to. - * @change_handler : Function callback for change handler function pointer. - * @read_handler : Function callback for read handler function pointer. - * - * Initializes a setting of type ST_BOOL. - * - * Returns: setting of type ST_BOOL. - **/ -static rarch_setting_t setting_bool_setting(const char* name, - const char* short_description, bool* target, bool default_value, - const char *off, const char *on, - const char *group, const char *subgroup, const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler, - bool dont_use_enum_idx) -{ - rarch_setting_t result; - - result.enum_idx = MSG_UNKNOWN; - result.type = ST_BOOL; - - result.size = sizeof(bool); - - result.name = name; - result.short_description = short_description; - result.group = group; - result.subgroup = subgroup; - result.parent_group = parent_group; - result.values = NULL; - - result.index = 0; - result.index_offset = 0; - result.offset_by = 0; - - result.min = 0.0; - result.max = 0.0; - - result.flags = 0; - result.free_flags = 0; - - result.change_handler = change_handler; - result.read_handler = read_handler; - result.action_start = setting_generic_action_start_default; - result.action_left = setting_bool_action_toggle_default; - result.action_right = setting_bool_action_toggle_default; - result.action_up = NULL; - result.action_down = NULL; - result.action_cancel = NULL; - result.action_ok = setting_bool_action_ok_default; - result.action_select = setting_generic_action_ok_default; - result.get_string_representation = &setting_get_string_representation_st_bool; - - result.bind_type = 0; - result.browser_selection_type = ST_NONE; - result.step = 0.0f; - result.rounding_fraction = NULL; - result.enforce_minrange = false; - result.enforce_maxrange = false; - - result.value.target.boolean = target; - result.original_value.boolean = *target; - result.default_value.boolean = default_value; - result.boolean.off_label = off; - result.boolean.on_label = on; - - result.cmd_trigger.idx = CMD_EVENT_NONE; - result.cmd_trigger.triggered = false; - - result.dont_use_enum_idx_representation = dont_use_enum_idx; - - return result; -} - -/** - * setting_int_setting: - * @name : name of setting. - * @short_description : Short description of setting. - * @target : Target of signed integer setting. - * @default_value : Default value (in signed integer format). - * @group : Group that the setting belongs to. - * @subgroup : Subgroup that the setting belongs to. - * @change_handler : Function callback for change handler function pointer. - * @read_handler : Function callback for read handler function pointer. - * - * Initializes a setting of type ST_INT. - * - * Returns: setting of type ST_INT. - **/ -static rarch_setting_t setting_int_setting(const char* name, - const char* short_description, int* target, - int default_value, - const char *group, const char *subgroup, const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler, - bool dont_use_enum_idx) -{ - rarch_setting_t result; - - result.enum_idx = MSG_UNKNOWN; - result.type = ST_INT; - - result.size = sizeof(int); - - result.name = name; - result.short_description = short_description; - result.group = group; - result.subgroup = subgroup; - result.parent_group = parent_group; - result.values = NULL; - - result.index = 0; - result.index_offset = 0; - result.offset_by = 0; - - result.min = 0.0; - result.max = 0.0; - - result.flags = 0; - result.free_flags = 0; - - result.change_handler = change_handler; - result.read_handler = read_handler; - result.action_start = setting_generic_action_start_default; - result.action_left = setting_int_action_left_default; - result.action_right = setting_int_action_right_default; - result.action_up = NULL; - result.action_down = NULL; - result.action_cancel = NULL; - result.action_ok = setting_generic_action_ok_default; - result.action_select = setting_generic_action_ok_default; - result.get_string_representation = &setting_get_string_representation_int; - - result.bind_type = 0; - result.browser_selection_type = ST_NONE; - result.step = 0.0f; - result.rounding_fraction = NULL; - result.enforce_minrange = false; - result.enforce_maxrange = false; - - result.value.target.integer = target; - result.original_value.integer = *target; - result.default_value.integer = default_value; - - result.cmd_trigger.idx = CMD_EVENT_NONE; - result.cmd_trigger.triggered = false; - - result.dont_use_enum_idx_representation = dont_use_enum_idx; - - return result; -} - -bool CONFIG_BOOL_ALT( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - bool *target, - const char *name, const char *SHORT, - bool default_value, - enum msg_hash_enums off_enum_idx, - enum msg_hash_enums on_enum_idx, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group, - change_handler_t change_handler, - change_handler_t read_handler, - uint32_t flags) -{ - rarch_setting_t value = setting_bool_setting(name, SHORT, target, - default_value, - msg_hash_to_str(off_enum_idx), msg_hash_to_str(on_enum_idx), - group_info->name, subgroup_info->name, parent_group, - change_handler, read_handler, true); - - if (!settings_list_append(list, list_info)) - return false; - (*list)[list_info->index++] = value; - if (flags != SD_FLAG_NONE) - settings_data_list_current_add_flags(list, list_info, flags); - return true; -} - -bool CONFIG_BOOL( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - bool *target, - enum msg_hash_enums name_enum_idx, - enum msg_hash_enums SHORT_enum_idx, - bool default_value, - enum msg_hash_enums off_enum_idx, - enum msg_hash_enums on_enum_idx, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group, - change_handler_t change_handler, - change_handler_t read_handler, - uint32_t flags) -{ - rarch_setting_t value = setting_bool_setting( - msg_hash_to_str(name_enum_idx), - msg_hash_to_str(SHORT_enum_idx), - target, - default_value, - msg_hash_to_str(off_enum_idx), - msg_hash_to_str(on_enum_idx), - group_info->name, subgroup_info->name, parent_group, - change_handler, read_handler, false); - - if (!settings_list_append(list, list_info)) - return false; - (*list)[list_info->index++] = value; - (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_CHECKBOX; - if (flags != SD_FLAG_NONE) - settings_data_list_current_add_flags(list, list_info, flags); - -#ifdef HAVE_MENU - menu_settings_list_current_add_enum_idx(list, list_info, name_enum_idx); - menu_settings_list_current_add_enum_value_idx(list, list_info, SHORT_enum_idx); -#endif - - return true; -} - -bool CONFIG_INT( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - int *target, - enum msg_hash_enums name_enum_idx, - enum msg_hash_enums SHORT_enum_idx, - int default_value, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler) -{ - rarch_setting_t value = setting_int_setting( - msg_hash_to_str(name_enum_idx), - msg_hash_to_str(SHORT_enum_idx), - target, default_value, - group_info->name, subgroup_info->name, parent_group, - change_handler, read_handler, - false); - if (!(settings_list_append(list, list_info))) - return false; - (*list)[list_info->index++] = value; - -#ifdef HAVE_MENU - menu_settings_list_current_add_enum_idx(list, list_info, name_enum_idx); - menu_settings_list_current_add_enum_value_idx(list, list_info, SHORT_enum_idx); -#endif - - return true; -} - -bool CONFIG_UINT_ALT( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - unsigned int *target, - const char *name, const char *SHORT, - unsigned int default_value, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler) -{ - rarch_setting_t value = setting_uint_setting(name, SHORT, target, default_value, - group_info->name, - subgroup_info->name, parent_group, change_handler, read_handler, - true); - if (!(settings_list_append(list, list_info))) - return false; - (*list)[list_info->index++] = value; - (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_UINT_SPINBOX; - return true; -} - -bool CONFIG_UINT( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - unsigned int *target, - enum msg_hash_enums name_enum_idx, - enum msg_hash_enums SHORT_enum_idx, - unsigned int default_value, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler) -{ - rarch_setting_t value = setting_uint_setting ( - msg_hash_to_str(name_enum_idx), - msg_hash_to_str(SHORT_enum_idx), - target, default_value, - group_info->name, - subgroup_info->name, parent_group, - change_handler, read_handler, - false); - if (!(settings_list_append(list, list_info))) - return false; - (*list)[list_info->index++] = value; - (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_UINT_SPINBOX; - -#ifdef HAVE_MENU - menu_settings_list_current_add_enum_idx(list, list_info, name_enum_idx); - menu_settings_list_current_add_enum_value_idx(list, list_info, SHORT_enum_idx); -#endif - - return true; -} - -bool CONFIG_SIZE( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - size_t *target, - enum msg_hash_enums name_enum_idx, - enum msg_hash_enums SHORT_enum_idx, - size_t default_value, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler, - get_string_representation_t string_representation_handler) -{ - rarch_setting_t value = setting_size_setting ( - msg_hash_to_str(name_enum_idx), - msg_hash_to_str(SHORT_enum_idx), - target, default_value, - group_info->name, - subgroup_info->name, parent_group, - change_handler, read_handler, - false, string_representation_handler); - if (!(settings_list_append(list, list_info))) - return false; - (*list)[list_info->index++] = value; - (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_SIZE_SPINBOX; - -#ifdef HAVE_MENU - menu_settings_list_current_add_enum_idx(list, list_info, name_enum_idx); - menu_settings_list_current_add_enum_value_idx(list, list_info, SHORT_enum_idx); -#endif - - return true; -} - -bool CONFIG_FLOAT( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - float *target, - enum msg_hash_enums name_enum_idx, - enum msg_hash_enums SHORT_enum_idx, - float default_value, const char *rounding, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler) -{ - rarch_setting_t value = setting_float_setting(msg_hash_to_str(name_enum_idx), - msg_hash_to_str(SHORT_enum_idx), target, default_value, rounding, - group_info->name, subgroup_info->name, parent_group, change_handler, read_handler, - false); - if (!(settings_list_append(list, list_info))) - return false; - (*list)[list_info->index++] = value; - (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_FLOAT_SPINBOX; - -#ifdef HAVE_MENU - menu_settings_list_current_add_enum_idx(list, list_info, name_enum_idx); - menu_settings_list_current_add_enum_value_idx(list, list_info, SHORT_enum_idx); -#endif - - return true; -} - -bool CONFIG_PATH( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - char *target, size_t len, - enum msg_hash_enums name_enum_idx, - enum msg_hash_enums SHORT_enum_idx, - const char *default_value, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler) -{ - rarch_setting_t value = setting_string_setting(ST_PATH, - msg_hash_to_str(name_enum_idx), - msg_hash_to_str(SHORT_enum_idx), - target, (unsigned)len, default_value, "", - group_info->name, subgroup_info->name, parent_group, - change_handler, read_handler, - false); - if (!(settings_list_append(list, list_info))) - return false; - (*list)[list_info->index++] = value; - (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_FILE_SELECTOR; - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_EMPTY); -#ifdef HAVE_MENU - menu_settings_list_current_add_enum_idx(list, list_info, name_enum_idx); - menu_settings_list_current_add_enum_value_idx(list, list_info, SHORT_enum_idx); -#endif - return true; -} - -bool CONFIG_DIR( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - char *target, size_t len, - enum msg_hash_enums name_enum_idx, - enum msg_hash_enums SHORT_enum_idx, - const char *default_value, - enum msg_hash_enums empty_enum_idx, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler) -{ - rarch_setting_t value = setting_string_setting(ST_DIR, - msg_hash_to_str(name_enum_idx), - msg_hash_to_str(SHORT_enum_idx), - target, (unsigned)len, default_value, - msg_hash_to_str(empty_enum_idx), - group_info->name, subgroup_info->name, parent_group, - change_handler, read_handler, - false); - if (!(settings_list_append(list, list_info))) - return false; - (*list)[list_info->index++] = value; - (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_DIRECTORY_SELECTOR; - settings_data_list_current_add_flags( - list, - list_info, - SD_FLAG_ALLOW_EMPTY | SD_FLAG_PATH_DIR | SD_FLAG_BROWSER_ACTION); - -#ifdef HAVE_MENU - menu_settings_list_current_add_enum_idx(list, list_info, name_enum_idx); - menu_settings_list_current_add_enum_value_idx(list, list_info, SHORT_enum_idx); -#endif - return true; -} - -bool CONFIG_STRING( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - char *target, size_t len, - enum msg_hash_enums name_enum_idx, - enum msg_hash_enums SHORT_enum_idx, - const char *default_value, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler) -{ - rarch_setting_t value = setting_string_setting(ST_STRING, - msg_hash_to_str(name_enum_idx), - msg_hash_to_str(SHORT_enum_idx), - target, (unsigned)len, default_value, "", - group_info->name, subgroup_info->name, parent_group, - change_handler, read_handler, false); - if (!(settings_list_append(list, list_info))) - return false; - (*list)[list_info->index++] = value; -#ifdef HAVE_MENU - menu_settings_list_current_add_enum_idx(list, list_info, name_enum_idx); - menu_settings_list_current_add_enum_value_idx(list, list_info, SHORT_enum_idx); -#endif - return true; -} - -bool CONFIG_STRING_OPTIONS( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - char *target, size_t len, - enum msg_hash_enums name_enum_idx, - enum msg_hash_enums SHORT_enum_idx, - const char *default_value, const char *values, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler) -{ - rarch_setting_t value = setting_string_setting_options(ST_STRING_OPTIONS, - msg_hash_to_str(name_enum_idx), - msg_hash_to_str(SHORT_enum_idx), - target, (unsigned)len, default_value, "", values, - group_info->name, subgroup_info->name, parent_group, - change_handler, read_handler, false); - if (!(settings_list_append(list, list_info))) - return false; - - (*list)[list_info->index++] = value; - (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_STRING_COMBOBOX; - -#ifdef HAVE_MENU - menu_settings_list_current_add_enum_idx(list, list_info, name_enum_idx); - menu_settings_list_current_add_enum_value_idx(list, list_info, SHORT_enum_idx); -#endif - /* Request values to be freed later */ - settings_data_list_current_add_free_flags(list, list_info, SD_FREE_FLAG_VALUES); - - return true; -} - -bool CONFIG_HEX( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - unsigned int *target, - enum msg_hash_enums name_enum_idx, - enum msg_hash_enums SHORT_enum_idx, - unsigned int default_value, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler) -{ - rarch_setting_t value = setting_hex_setting( - msg_hash_to_str(name_enum_idx), - msg_hash_to_str(SHORT_enum_idx), - target, default_value, - group_info->name, subgroup_info->name, parent_group, - change_handler, read_handler, false); - if (!(settings_list_append(list, list_info))) - return false; - (*list)[list_info->index++] = value; - -#ifdef HAVE_MENU - menu_settings_list_current_add_enum_idx(list, list_info, name_enum_idx); - menu_settings_list_current_add_enum_value_idx(list, list_info, SHORT_enum_idx); -#endif - - return true; -} - -/* Please strdup() NAME and SHORT */ -bool CONFIG_BIND( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - struct retro_keybind *target, - uint32_t player, uint32_t player_offset, - const char *name, const char *SHORT, - const struct retro_keybind *default_value, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group) -{ - rarch_setting_t value = setting_bind_setting(name, SHORT, target, - player, player_offset, default_value, - group_info->name, subgroup_info->name, parent_group, - false); - if (!(settings_list_append(list, list_info))) - return false; - - (*list)[list_info->index++] = value; - /* Request name and short description to be freed later */ - settings_data_list_current_add_free_flags(list, list_info, SD_FREE_FLAG_NAME | SD_FREE_FLAG_SHORT); - - return true; -} - -bool CONFIG_BIND_ALT( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - struct retro_keybind *target, - uint32_t player, uint32_t player_offset, - const char *name, const char *SHORT, - const struct retro_keybind *default_value, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group) -{ - rarch_setting_t value = setting_bind_setting(name, SHORT, target, - player, player_offset, default_value, - group_info->name, subgroup_info->name, parent_group, - true); - if (!(settings_list_append(list, list_info))) - return false; - - (*list)[list_info->index++] = value; - /* Request name and short description to be freed later */ - settings_data_list_current_add_free_flags(list, list_info, SD_FREE_FLAG_NAME | SD_FREE_FLAG_SHORT); - - return true; -} - -bool CONFIG_ACTION_ALT( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - const char *name, const char *SHORT, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group) -{ - rarch_setting_t value = setting_action_setting(name, SHORT, - group_info->name, subgroup_info->name, parent_group, - true); - - if (!settings_list_append(list, list_info)) - return false; - (*list)[list_info->index++] = value; - return true; -} - -bool CONFIG_ACTION( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - enum msg_hash_enums name_enum_idx, - enum msg_hash_enums SHORT_enum_idx, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group) -{ - rarch_setting_t value = setting_action_setting( - msg_hash_to_str(name_enum_idx), - msg_hash_to_str(SHORT_enum_idx), - group_info->name, - subgroup_info->name, parent_group, - false); - - if (!settings_list_append(list, list_info)) - return false; - (*list)[list_info->index++] = value; - -#ifdef HAVE_MENU - menu_settings_list_current_add_enum_idx(list, list_info, name_enum_idx); - menu_settings_list_current_add_enum_value_idx(list, list_info, SHORT_enum_idx); -#endif - - return true; -} - -bool START_GROUP(rarch_setting_t **list, rarch_setting_info_t *list_info, - rarch_setting_group_info_t *group_info, - const char *name, const char *parent_group) -{ - rarch_setting_t value = setting_group_setting (ST_GROUP, name, parent_group); - group_info->name = name; - if (!(settings_list_append(list, list_info))) - return false; - - (*list)[list_info->index++] = value; - return true; -} - -bool END_GROUP(rarch_setting_t **list, rarch_setting_info_t *list_info, - const char *parent_group) -{ - rarch_setting_t value = setting_group_setting (ST_END_GROUP, 0, parent_group); - if (!(settings_list_append(list, list_info))) - return false; - (*list)[list_info->index++] = value; - return true; -} - -bool START_SUB_GROUP(rarch_setting_t **list, - rarch_setting_info_t *list_info, const char *name, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group) -{ - rarch_setting_t value = setting_subgroup_setting (ST_SUB_GROUP, - name, group_info->name, parent_group, false); - - subgroup_info->name = name; - - if (!(settings_list_append(list, list_info))) - return false; - (*list)[list_info->index++] = value; - return true; -} - -bool END_SUB_GROUP( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - const char *parent_group) -{ - rarch_setting_t value = setting_group_setting (ST_END_SUB_GROUP, 0, parent_group); - if (!(settings_list_append(list, list_info))) - return false; - (*list)[list_info->index++] = value; - return true; -} - -#ifdef HAVE_MENU -static void menu_input_st_string_cb(void *userdata, const char *str) -{ - if (str && *str) - { - rarch_setting_t *setting = NULL; - const char *label = menu_input_dialog_get_label_setting_buffer(); - - if (!string_is_empty(label)) - setting = menu_setting_find(label); - - if (setting) - { - setting_set_with_string_representation(setting, str); - menu_setting_generic(setting, false); - } - } - - menu_input_dialog_end(); -} - -static void menu_input_st_uint_cb(void *userdata, const char *str) -{ - if (str && *str) - { - const char *label = menu_input_dialog_get_label_setting_buffer(); - rarch_setting_t *setting = menu_setting_find(label); - - setting_set_with_string_representation(setting, str); - } - - menu_input_dialog_end(); -} - -static void menu_input_st_hex_cb(void *userdata, const char *str) -{ - if (str && *str) - { - const char *label = menu_input_dialog_get_label_setting_buffer(); - rarch_setting_t *setting = menu_setting_find(label); - - if (setting) - { - unsigned *ptr = (unsigned*)setting_get_ptr(setting); - if (str[0] == '#') - str++; - if (ptr) - *ptr = (unsigned)strtoul(str, NULL, 16); - } - } - - menu_input_dialog_end(); -} - -static int setting_generic_action_ok_linefeed(rarch_setting_t *setting, bool wraparound) -{ - menu_input_ctx_line_t line; - input_keyboard_line_complete_t cb = NULL; - - if (!setting) - return -1; - - (void)wraparound; - - switch (setting_get_type(setting)) - { - case ST_SIZE: - case ST_UINT: - cb = menu_input_st_uint_cb; - break; - case ST_HEX: - cb = menu_input_st_hex_cb; - break; - case ST_STRING: - case ST_STRING_OPTIONS: - cb = menu_input_st_string_cb; - break; - default: - break; - } - - line.label = setting->short_description; - line.label_setting = setting->name; - line.type = 0; - line.idx = 0; - line.cb = cb; - - if (!menu_input_dialog_start(&line)) - return -1; - - return 0; -} -#endif - -static void setting_add_special_callbacks( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - unsigned values) -{ - unsigned idx = list_info->index - 1; - - if (values & SD_FLAG_ALLOW_INPUT) - { -#ifdef HAVE_MENU - (*list)[idx].action_ok = setting_generic_action_ok_linefeed; - (*list)[idx].action_select = setting_generic_action_ok_linefeed; -#else - (*list)[idx].action_ok = NULL; - (*list)[idx].action_select = NULL; -#endif - - switch ((*list)[idx].type) - { - case ST_SIZE: - case ST_UINT: - (*list)[idx].action_cancel = NULL; - break; - case ST_HEX: - (*list)[idx].action_cancel = NULL; - break; - case ST_STRING: - (*list)[idx].action_start = setting_string_action_start_generic; - (*list)[idx].action_cancel = NULL; - break; - default: - break; - } - } -} - -void settings_data_list_current_add_flags( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - unsigned values) -{ - (*list)[list_info->index - 1].flags |= values; - setting_add_special_callbacks(list, list_info, values); -} - -void settings_data_list_current_add_free_flags( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - unsigned values) -{ - (*list)[list_info->index - 1].free_flags |= values; -} diff --git a/setting_list.h b/setting_list.h index 334312c361..b3dd0efb44 100644 --- a/setting_list.h +++ b/setting_list.h @@ -216,216 +216,6 @@ struct rarch_setting_info int size; }; -bool START_GROUP(rarch_setting_t **list, rarch_setting_info_t *list_info, - rarch_setting_group_info_t *group_info, - const char *name, const char *parent_group); - -bool END_GROUP(rarch_setting_t **list, rarch_setting_info_t *list_info, - const char *parent_group); - -bool START_SUB_GROUP(rarch_setting_t **list, - rarch_setting_info_t *list_info, const char *name, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group); - -bool END_SUB_GROUP( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - const char *parent_group); - -bool CONFIG_ACTION_ALT( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - const char *name, const char *SHORT, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group); - -bool CONFIG_ACTION( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - enum msg_hash_enums name_enum_idx, - enum msg_hash_enums SHORT_enum_idx, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group); - -bool CONFIG_BOOL_ALT( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - bool *target, - const char *name, const char *SHORT, - bool default_value, - enum msg_hash_enums off_enum_idx, - enum msg_hash_enums on_enum_idx, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group, - change_handler_t change_handler, - change_handler_t read_handler, - uint32_t flags); - -bool CONFIG_BOOL( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - bool *target, - enum msg_hash_enums name_enum_idx, - enum msg_hash_enums SHORT_enum_idx, - bool default_value, - enum msg_hash_enums off_enum_idx, - enum msg_hash_enums on_enum_idx, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group, - change_handler_t change_handler, - change_handler_t read_handler, - uint32_t flags); - -bool CONFIG_INT( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - int *target, - enum msg_hash_enums name_enum_idx, - enum msg_hash_enums SHORT_enum_idx, - int default_value, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler); - -bool CONFIG_UINT_ALT( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - unsigned int *target, - const char *name, const char *SHORT, - unsigned int default_value, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler); - -bool CONFIG_UINT( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - unsigned int *target, - enum msg_hash_enums name_enum_idx, - enum msg_hash_enums SHORT_enum_idx, - unsigned int default_value, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler); - -bool CONFIG_SIZE( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - size_t *target, - enum msg_hash_enums name_enum_idx, - enum msg_hash_enums SHORT_enum_idx, - size_t default_value, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler, - get_string_representation_t string_representation_handler); - -bool CONFIG_FLOAT( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - float *target, - enum msg_hash_enums name_enum_idx, - enum msg_hash_enums SHORT_enum_idx, - float default_value, const char *rounding, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler); - -bool CONFIG_PATH( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - char *target, size_t len, - enum msg_hash_enums name_enum_idx, - enum msg_hash_enums SHORT_enum_idx, - const char *default_value, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler); - -bool CONFIG_DIR( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - char *target, size_t len, - enum msg_hash_enums name_enum_idx, - enum msg_hash_enums SHORT_enum_idx, - const char *default_value, - enum msg_hash_enums empty_enum_idx, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler); - -bool CONFIG_STRING( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - char *target, size_t len, - enum msg_hash_enums name_enum_idx, - enum msg_hash_enums SHORT_enum_idx, - const char *default_value, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler); - -bool CONFIG_STRING_OPTIONS( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - char *target, size_t len, - enum msg_hash_enums name_enum_idx, - enum msg_hash_enums SHORT_enum_idx, - const char *default_value, const char *values, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler); - -bool CONFIG_HEX( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - unsigned int *target, - enum msg_hash_enums name_enum_idx, - enum msg_hash_enums SHORT_enum_idx, - unsigned int default_value, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group, - change_handler_t change_handler, change_handler_t read_handler); - -/* Please strdup() NAME and SHORT */ -bool CONFIG_BIND( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - struct retro_keybind *target, - uint32_t player, uint32_t player_offset, - const char *name, const char *SHORT, - const struct retro_keybind *default_value, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group); - -bool CONFIG_BIND_ALT( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - struct retro_keybind *target, - uint32_t player, uint32_t player_offset, - const char *name, const char *SHORT, - const struct retro_keybind *default_value, - rarch_setting_group_info_t *group_info, - rarch_setting_group_info_t *subgroup_info, - const char *parent_group); - /** * setting_set_with_string_representation: * @setting : pointer to setting