From 39c45133a28417c28c9d5a6650e4c81192421be3 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 23 Oct 2014 01:53:24 +0200 Subject: [PATCH] Reimplement Save State options in main menu --- settings_data.c | 76 ++++++++++++++++++++++--------------------------- settings_list.h | 10 ++++--- 2 files changed, 40 insertions(+), 46 deletions(-) diff --git a/settings_data.c b/settings_data.c index ede076df27..b31c9cd354 100644 --- a/settings_data.c +++ b/settings_data.c @@ -489,22 +489,9 @@ void setting_data_set_with_string_representation(rarch_setting_t* setting, static void menu_common_setting_set_label_st_bool(rarch_setting_t *setting, char *type_str, size_t type_str_size) { - if (!setting) - return; - - if (!strcmp(setting->name, "savestate") || - !strcmp(setting->name, "loadstate")) - { - if (g_settings.state_slot < 0) - strlcpy(type_str, "-1 (auto)", type_str_size); - else - snprintf(type_str, type_str_size, "%d", g_settings.state_slot); - - return; - } - - strlcpy(type_str, *setting->value.boolean ? setting->boolean.on_label : - setting->boolean.off_label, type_str_size); + if (setting) + strlcpy(type_str, *setting->value.boolean ? setting->boolean.on_label : + setting->boolean.off_label, type_str_size); } static void menu_common_setting_set_label_st_uint(rarch_setting_t *setting, @@ -680,8 +667,11 @@ void setting_data_get_string_representation(rarch_setting_t* setting, input_get_bind_string(buf, keybind, auto_bind, sizeof_buf); } break; - /* TODO */ case ST_ACTION: + if (setting->get_string_representation) + setting->get_string_representation(setting, buf, sizeof_buf); + break; + /* TODO */ case ST_HEX: break; case ST_GROUP: @@ -802,15 +792,15 @@ static int setting_data_bool_action_toggle_savestates(void *data, unsigned actio static int setting_data_bool_action_ok_savestates(void *data, unsigned action) { + unsigned rarch_cmd = RARCH_CMD_NONE; rarch_setting_t *setting = (rarch_setting_t*)data; if (!setting) return -1; - *setting->value.boolean = !(*setting->value.boolean); - - if (setting->cmd_trigger.idx != RARCH_CMD_NONE) - setting->cmd_trigger.triggered = true; + rarch_cmd = setting->cmd_trigger.idx; + rarch_main_command(rarch_cmd); + rarch_main_command(RARCH_CMD_RESUME); return 0; } @@ -1127,9 +1117,10 @@ rarch_setting_t setting_data_action_setting(const char* name, result.deferred_handler = NULL; result.read_handler = NULL; - result.action_start = NULL; - result.action_toggle = NULL; - result.action_ok = setting_data_action_action_ok; + result.get_string_representation = NULL; + result.action_start = NULL; + result.action_toggle = NULL; + result.action_ok = setting_data_action_action_ok; return result; } @@ -2359,6 +2350,19 @@ static int get_fallback_label(char *type_str, return ret; } +static void get_string_representation_savestate(void * data, char *type_str, + size_t type_str_size) +{ + rarch_setting_t *setting = (rarch_setting_t*)data; + + if (!setting || !type_str || !type_str_size) + return; + + snprintf(type_str, type_str_size, "%d", g_settings.state_slot); + if (g_settings.state_slot == -1) + strlcat(type_str, " (Auto)", type_str_size); +} + void setting_data_get_label(char *type_str, size_t type_str_size, unsigned *w, unsigned type, const char *menu_label, const char *label, unsigned idx) @@ -2915,39 +2919,27 @@ static bool setting_data_append_list_main_menu_options( } if (g_extern.main_is_init && !g_extern.libretro_dummy) { - CONFIG_BOOL( - lists[9], + CONFIG_ACTION( "savestate", "Save State", - false, - "", - "", group_info.name, - subgroup_info.name, - general_write_handler, - general_read_handler); + subgroup_info.name); (*list)[list_info->index - 1].action_toggle = &setting_data_bool_action_toggle_savestates; (*list)[list_info->index - 1].action_start = &setting_data_bool_action_start_savestates; (*list)[list_info->index - 1].action_ok = &setting_data_bool_action_ok_savestates; + (*list)[list_info->index - 1].get_string_representation = &get_string_representation_savestate; settings_list_current_add_cmd (list, list_info, RARCH_CMD_SAVE_STATE); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_EXIT); - CONFIG_BOOL( - lists[10], + CONFIG_ACTION( "loadstate", "Load State", - false, - "", - "", group_info.name, - subgroup_info.name, - general_write_handler, - general_read_handler); + subgroup_info.name); (*list)[list_info->index - 1].action_toggle = &setting_data_bool_action_toggle_savestates; (*list)[list_info->index - 1].action_start = &setting_data_bool_action_start_savestates; (*list)[list_info->index - 1].action_ok = &setting_data_bool_action_ok_savestates; + (*list)[list_info->index - 1].get_string_representation = &get_string_representation_savestate; settings_list_current_add_cmd (list, list_info, RARCH_CMD_LOAD_STATE); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_EXIT); CONFIG_BOOL( lists[11], diff --git a/settings_list.h b/settings_list.h index 53842444ca..02b3d4ce14 100644 --- a/settings_list.h +++ b/settings_list.h @@ -82,10 +82,11 @@ enum setting_list_flags #define SL_FLAG_ALL_SETTINGS (SL_FLAG_ALL - SL_FLAG_MAIN_MENU) -typedef void (*change_handler_t )(void *data); -typedef int (*action_toggle_handler_t)(void *data, unsigned action); -typedef int (*action_start_handler_t )(void *data); -typedef int (*action_ok_handler_t )(void *data, unsigned action); +typedef void (*change_handler_t )(void *data); +typedef int (*action_toggle_handler_t )(void *data, unsigned action); +typedef int (*action_start_handler_t )(void *data); +typedef int (*action_ok_handler_t )(void *data, unsigned action); +typedef void (*get_string_representation_t )(void *data, char *buf, size_t sizeof_buf); typedef struct rarch_setting_info { @@ -124,6 +125,7 @@ typedef struct rarch_setting action_start_handler_t action_start; action_toggle_handler_t action_toggle; action_ok_handler_t action_ok; + get_string_representation_t get_string_representation; union {