Create 'Content Settings'

This commit is contained in:
twinaphex 2015-06-22 22:10:14 +02:00
parent d9504d73bd
commit f71c27af65
9 changed files with 104 additions and 180 deletions

View File

@ -191,6 +191,11 @@ static int deferred_push_options(menu_displaylist_info_t *info)
return menu_displaylist_push_list(info, DISPLAYLIST_OPTIONS);
}
static int deferred_push_content_settings(menu_displaylist_info_t *info)
{
return menu_displaylist_push_list(info, DISPLAYLIST_CONTENT_SETTINGS);
}
static int deferred_push_load_content_list(menu_displaylist_info_t *info)
{
return menu_displaylist_push_list(info, DISPLAYLIST_LOAD_CONTENT_LIST);
@ -500,6 +505,9 @@ static int menu_cbs_init_bind_deferred_push_compare_label(menu_file_list_cbs_t *
case MENU_LABEL_OPTIONS:
cbs->action_deferred_push = deferred_push_options;
break;
case MENU_LABEL_CONTENT_SETTINGS:
cbs->action_deferred_push = deferred_push_content_settings;
break;
case MENU_LABEL_LOAD_CONTENT_LIST:
cbs->action_deferred_push = deferred_push_load_content_list;
break;

View File

@ -490,6 +490,24 @@ static void menu_action_setting_disp_set_label_menu_more(
strlcpy(s2, path, len2);
}
static void menu_action_setting_disp_set_label_state(
file_list_t* list,
unsigned *w, unsigned type, unsigned i,
const char *label,
char *s, size_t len,
const char *entry_label,
const char *path,
char *s2, size_t len2)
{
settings_t *settings = config_get_ptr();
strlcpy(s2, path, len2);
*w = 16;
snprintf(s, len, "%d", settings->state_slot);
if (settings->state_slot == -1)
strlcat(s, " (Auto)", len);
}
static void menu_action_setting_disp_set_label_menu_disk_index(
file_list_t* list,
@ -808,6 +826,11 @@ static int menu_cbs_init_bind_get_string_representation_compare_label(
{
switch (label_hash)
{
case MENU_LABEL_SAVE_STATE:
case MENU_LABEL_LOAD_STATE:
cbs->action_get_value =
menu_action_setting_disp_set_label_state;
break;
case MENU_LABEL_CHEAT_NUM_PASSES:
cbs->action_get_value =
menu_action_setting_disp_set_label_cheat_num_passes;
@ -860,6 +883,9 @@ static int menu_cbs_init_bind_get_string_representation_compare_label(
case MENU_LABEL_CORE_COUNTERS:
case MENU_LABEL_DATABASE_MANAGER_LIST:
case MENU_LABEL_CURSOR_MANAGER_LIST:
case MENU_LABEL_RESTART_CONTENT:
case MENU_LABEL_RESUME_CONTENT:
case MENU_LABEL_TAKE_SCREENSHOT:
cbs->action_get_value =
menu_action_setting_disp_set_label_menu_more;
break;

View File

@ -1553,6 +1553,7 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
case MENU_LABEL_MANAGEMENT:
case MENU_LABEL_OPTIONS:
case MENU_LABEL_LOAD_CONTENT_LIST:
case MENU_LABEL_CONTENT_SETTINGS:
cbs->action_ok = action_ok_push_default;
break;
case MENU_LABEL_LOAD_CONTENT:

View File

@ -681,6 +681,7 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs,
case MENU_LABEL_CURSOR_MANAGER_LIST:
case MENU_LABEL_DEFERRED_CORE_UPDATER_LIST:
case MENU_LABEL_LOAD_CONTENT_LIST:
case MENU_LABEL_CONTENT_SETTINGS:
cbs->action_get_title = action_get_title_action_generic;
break;
case MENU_LABEL_DISK_IMAGE_APPEND:

View File

@ -1430,10 +1430,52 @@ static int menu_displaylist_parse_horizontal_list(menu_displaylist_info_t *info)
return 0;
}
static int menu_displaylist_parse_load_content_settings(menu_displaylist_info_t *info)
{
menu_handle_t *menu = menu_driver_get_ptr();
global_t *global = global_get_ptr();
if (!menu)
return -1;
if (global->main_is_init && (global->core_type != CORE_TYPE_DUMMY))
{
menu_list_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_RESUME_CONTENT),
menu_hash_to_str(MENU_LABEL_RESUME_CONTENT),
MENU_SETTING_ACTION_RUN, 0, 0);
menu_list_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_RESTART_CONTENT),
menu_hash_to_str(MENU_LABEL_RESTART_CONTENT),
MENU_SETTING_ACTION_RUN, 0, 0);
menu_list_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_TAKE_SCREENSHOT),
menu_hash_to_str(MENU_LABEL_TAKE_SCREENSHOT),
MENU_SETTING_ACTION_SCREENSHOT, 0, 0);
menu_list_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_SAVE_STATE),
menu_hash_to_str(MENU_LABEL_SAVE_STATE),
MENU_SETTING_ACTION_SAVESTATE, 0, 0);
menu_list_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_LOAD_STATE),
menu_hash_to_str(MENU_LABEL_LOAD_STATE),
MENU_SETTING_ACTION_LOADSTATE, 0, 0);
}
else
menu_list_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_NO_ITEMS),
"", 0, 0, 0);
return 0;
}
static int menu_displaylist_parse_load_core_list(menu_displaylist_info_t *info)
{
global_t *global = global_get_ptr();
settings_t *settings = config_get_ptr();
settings_t *settings = config_get_ptr();
menu_list_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_LOAD_CONTENT),
@ -1505,55 +1547,6 @@ static int menu_displaylist_parse_options(menu_displaylist_info_t *info)
return 0;
}
static int menu_displaylist_parse_horizontal_content_actions(menu_displaylist_info_t *info)
{
menu_handle_t *menu = menu_driver_get_ptr();
global_t *global = global_get_ptr();
if (!menu)
return -1;
if (global->main_is_init && (global->core_type != CORE_TYPE_DUMMY) &&
!strcmp(menu->deferred_path, global->fullpath))
{
menu_list_push(info->list,
menu_hash_to_str(MENU_LABEL_RESUME_CONTENT),
"file_load_or_resume",
MENU_SETTING_ACTION_RUN, 0, 0);
menu_list_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_SAVE_STATE),
menu_hash_to_str(MENU_LABEL_SAVE_STATE),
MENU_SETTING_ACTION_SAVESTATE, 0, 0);
menu_list_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_LOAD_STATE),
menu_hash_to_str(MENU_LABEL_LOAD_STATE),
MENU_SETTING_ACTION_LOADSTATE, 0, 0);
menu_list_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_CORE_INFORMATION),
menu_hash_to_str(MENU_LABEL_CORE_INFORMATION),
MENU_SETTING_ACTION_CORE_INFORMATION, 0, 0);
menu_list_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_OPTIONS),
menu_hash_to_str(MENU_LABEL_OPTIONS),
MENU_SETTING_ACTION_CORE_OPTIONS, 0, 0);
menu_list_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_TAKE_SCREENSHOT),
menu_hash_to_str(MENU_LABEL_TAKE_SCREENSHOT),
MENU_SETTING_ACTION_SCREENSHOT, 0, 0);
menu_list_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_RESTART_CONTENT),
menu_hash_to_str(MENU_LABEL_RESTART_CONTENT),
MENU_SETTING_ACTION_RESET, 0, 0);
}
else
menu_list_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_RUN),
"file_load_or_resume",
MENU_SETTING_ACTION_RUN,
0, 0);
return 0;
}
static int menu_displaylist_parse_options_cheats(menu_displaylist_info_t *info)
{
unsigned i;
@ -1902,6 +1895,14 @@ int menu_displaylist_push_list(menu_displaylist_info_t *info, unsigned type)
ret = menu_displaylist_parse_horizontal_list(info);
need_sort = true;
need_refresh = true;
need_push = true;
break;
case DISPLAYLIST_HORIZONTAL_CONTENT_ACTIONS:
case DISPLAYLIST_CONTENT_SETTINGS:
menu_list_clear(info->list);
ret = menu_displaylist_parse_load_content_settings(info);
need_refresh = true;
need_push = true;
break;
@ -1915,12 +1916,6 @@ int menu_displaylist_push_list(menu_displaylist_info_t *info, unsigned type)
menu_list_clear(info->list);
ret = menu_displaylist_parse_options(info);
need_push = true;
break;
case DISPLAYLIST_HORIZONTAL_CONTENT_ACTIONS:
menu_list_clear(info->list);
ret = menu_displaylist_parse_horizontal_content_actions(info);
need_refresh = true;
need_push = true;
break;
case DISPLAYLIST_OPTIONS_CHEATS:

View File

@ -73,6 +73,7 @@ enum
DISPLAYLIST_SHADER_PARAMETERS_PRESET,
DISPLAYLIST_SYSTEM_INFO,
DISPLAYLIST_LOAD_CONTENT_LIST,
DISPLAYLIST_CONTENT_SETTINGS,
DISPLAYLIST_OPTIONS,
DISPLAYLIST_OPTIONS_CHEATS,
DISPLAYLIST_OPTIONS_REMAPPINGS,

View File

@ -1572,6 +1572,10 @@ static const char *menu_hash_to_str_english(uint32_t hash)
{
switch (hash)
{
case MENU_LABEL_CONTENT_SETTINGS:
return "content_settings";
case MENU_LABEL_VALUE_CONTENT_SETTINGS:
return "Content Settings";
case MENU_LABEL_VALUE_RDB_ENTRY_CRC32:
return "CRC32";
case MENU_LABEL_VALUE_RDB_ENTRY_MD5:

View File

@ -35,6 +35,9 @@ extern "C" {
#define MENU_VALUE_OPEN_ARCHIVE 0x96da22b9U
#define MENU_VALUE_ASK_ARCHIVE 0x0b87d6a4U
#define MENU_LABEL_CONTENT_SETTINGS 0xf31dcaf0U
#define MENU_LABEL_VALUE_CONTENT_SETTINGS 0x399ea371U
#define MENU_LABEL_LOAD_CONTENT_LIST 0x5745de1fU
#define MENU_LABEL_VALUE_LOAD_CONTENT_LIST 0x55ff08eaU
@ -102,10 +105,10 @@ extern "C" {
#define MENU_LABEL_VALUE_NO_CORE_INFORMATION_AVAILABLE 0x2a11fe80U
#define MENU_LABEL_VALUE_NO_CORES_AVAILABLE 0xe16bfd0dU
#define MENU_LABEL_VALUE_NO_PLAYLIST_ENTRIES_AVAILABLE 0xea82695dU
#define MENU_LABEL_SAVE_STATE 0x54a257f4U
#define MENU_LABEL_SAVE_STATE 0x3a4849b5U
#define MENU_LABEL_VALUE_LOAD_STATE 0xd23ba706U
#define MENU_LABEL_VALUE_SAVE_STATE 0x3e182415U
#define MENU_LABEL_LOAD_STATE 0xe8c5dae5U
#define MENU_LABEL_LOAD_STATE 0xa39eb286U
#define MENU_LABEL_REWIND 0x1931d5aeU
#define MENU_LABEL_NETPLAY_FLIP_PLAYERS 0x801425abU
#define MENU_LABEL_CHEAT_INDEX_MINUS 0x57f58b6cU

View File

@ -605,19 +605,6 @@ void setting_get_string_representation(void *data, char *s, size_t len)
*
* Returns: 0 on success, -1 on error.
**/
static int setting_action_start_savestates(void *data)
{
rarch_setting_t *setting = (rarch_setting_t*)data;
settings_t *settings = config_get_ptr();
if (!setting)
return -1;
settings->state_slot = 0;
return 0;
}
static int setting_action_start_bind_device(void *data)
{
rarch_setting_t *setting = (rarch_setting_t*)data;
@ -907,36 +894,6 @@ static int setting_action_right_libretro_device_type(
return 0;
}
static int setting_action_left_savestates(
void *data, bool wraparound)
{
rarch_setting_t *setting = (rarch_setting_t*)data;
settings_t *settings = config_get_ptr();
if (!setting)
return -1;
/* Slot -1 is (auto) slot. */
if (settings->state_slot >= 0)
settings->state_slot--;
return 0;
}
static int setting_action_right_savestates(
void *data, bool wraparound)
{
rarch_setting_t *setting = (rarch_setting_t*)data;
settings_t *settings = config_get_ptr();
if (!setting)
return -1;
settings->state_slot++;
return 0;
}
static int setting_action_left_bind_device(void *data, bool wraparound)
{
unsigned *p = NULL;
@ -1179,17 +1136,6 @@ static int setting_action_ok_bind_defaults(void *data, bool wraparound)
return 0;
}
static int setting_bool_action_ok_exit(void *data, bool wraparound)
{
if (setting_generic_action_ok_default(data, wraparound) != 0)
return -1;
event_command(EVENT_CMD_RESUME);
return 0;
}
static int setting_action_ok_video_refresh_rate_auto(void *data, bool wraparound)
{
double video_refresh_rate = 0.0;
@ -3074,16 +3020,6 @@ static void get_string_representation_bind_device(void * data, char *s,
}
static void get_string_representation_savestate(void * data, char *s,
size_t len)
{
settings_t *settings = config_get_ptr();
snprintf(s, len, "%d", settings->state_slot);
if (settings->state_slot == -1)
strlcat(s, " (Auto)", len);
}
/**
* setting_get_label:
* @list : File list on which to perform the search
@ -3535,6 +3471,13 @@ static bool setting_append_list_main_menu_options(
parent_group);
settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED);
CONFIG_ACTION(
menu_hash_to_str(MENU_LABEL_CONTENT_SETTINGS),
menu_hash_to_str(MENU_LABEL_VALUE_CONTENT_SETTINGS),
group_info.name,
subgroup_info.name,
parent_group);
CONFIG_ACTION(
menu_hash_to_str(MENU_LABEL_OPTIONS),
menu_hash_to_str(MENU_LABEL_VALUE_OPTIONS),
@ -3579,64 +3522,6 @@ static bool setting_append_list_main_menu_options(
settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED);
}
if (global->main_is_init && (global->core_type != CORE_TYPE_DUMMY))
{
CONFIG_ACTION(
menu_hash_to_str(MENU_LABEL_SAVE_STATE),
menu_hash_to_str(MENU_LABEL_VALUE_SAVE_STATE),
group_info.name,
subgroup_info.name,
menu_hash_to_str(MENU_VALUE_NOT_AVAILABLE));
(*list)[list_info->index - 1].action_left = &setting_action_left_savestates;
(*list)[list_info->index - 1].action_right = &setting_action_right_savestates;
(*list)[list_info->index - 1].action_start = &setting_action_start_savestates;
(*list)[list_info->index - 1].action_ok = &setting_bool_action_ok_exit;
(*list)[list_info->index - 1].action_select = &setting_bool_action_ok_exit;
(*list)[list_info->index - 1].get_string_representation = &get_string_representation_savestate;
menu_settings_list_current_add_cmd (list, list_info, EVENT_CMD_SAVE_STATE);
CONFIG_ACTION(
menu_hash_to_str(MENU_LABEL_LOAD_STATE),
menu_hash_to_str(MENU_LABEL_VALUE_LOAD_STATE),
group_info.name,
subgroup_info.name,
menu_hash_to_str(MENU_VALUE_NOT_AVAILABLE));
(*list)[list_info->index - 1].action_left = &setting_action_left_savestates;
(*list)[list_info->index - 1].action_right = &setting_action_left_savestates;
(*list)[list_info->index - 1].action_start = &setting_action_start_savestates;
(*list)[list_info->index - 1].action_ok = &setting_bool_action_ok_exit;
(*list)[list_info->index - 1].action_select = &setting_bool_action_ok_exit;
(*list)[list_info->index - 1].get_string_representation = &get_string_representation_savestate;
menu_settings_list_current_add_cmd (list, list_info, EVENT_CMD_LOAD_STATE);
CONFIG_ACTION(
menu_hash_to_str(MENU_LABEL_TAKE_SCREENSHOT),
menu_hash_to_str(MENU_LABEL_VALUE_TAKE_SCREENSHOT),
group_info.name,
subgroup_info.name,
parent_group);
menu_settings_list_current_add_cmd (list, list_info, EVENT_CMD_TAKE_SCREENSHOT);
CONFIG_ACTION(
menu_hash_to_str(MENU_LABEL_RESUME_CONTENT),
menu_hash_to_str(MENU_LABEL_VALUE_RESUME_CONTENT),
group_info.name,
subgroup_info.name,
parent_group);
menu_settings_list_current_add_cmd (list, list_info, EVENT_CMD_RESUME);
(*list)[list_info->index - 1].action_ok = &setting_bool_action_ok_exit;
(*list)[list_info->index - 1].action_select = &setting_bool_action_ok_exit;
CONFIG_ACTION(
menu_hash_to_str(MENU_LABEL_RESTART_CONTENT),
menu_hash_to_str(MENU_LABEL_VALUE_RESTART_CONTENT),
group_info.name,
subgroup_info.name,
parent_group);
menu_settings_list_current_add_cmd(list, list_info, EVENT_CMD_RESET);
(*list)[list_info->index - 1].action_ok =
(*list)[list_info->index - 1].action_select = &setting_bool_action_ok_exit;
}
#ifndef HAVE_DYNAMIC
CONFIG_ACTION(
menu_hash_to_str(MENU_LABEL_RESTART_RETROARCH),