Add 'Save As' option for remaps and overrides (#15630)

This commit is contained in:
sonninnos 2023-08-22 02:11:48 +03:00 committed by GitHub
parent a6435775e4
commit 12136ad516
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 288 additions and 47 deletions

View File

@ -1850,7 +1850,7 @@ void command_event_save_current_config(enum override_type type)
case OVERRIDE_CORE:
case OVERRIDE_CONTENT_DIR:
{
int8_t ret = config_save_overrides(type, &runloop_st->system, false);
int8_t ret = config_save_overrides(type, &runloop_st->system, false, NULL);
char msg[256];
msg[0] = '\0';
@ -1904,7 +1904,7 @@ void command_event_remove_current_config(enum override_type type)
msg[0] = '\0';
if (config_save_overrides(type, &runloop_st->system, true))
if (config_save_overrides(type, &runloop_st->system, true, NULL))
strlcpy(msg, msg_hash_to_str(MSG_OVERRIDES_REMOVED_SUCCESSFULLY), sizeof(msg));
else
strlcpy(msg, msg_hash_to_str(MSG_OVERRIDES_ERROR_REMOVING), sizeof(msg));

View File

@ -5222,7 +5222,8 @@ bool config_save_file(const char *path)
*
* Returns: true (1) on success, (-1) if nothing to write, otherwise returns false (0).
**/
int8_t config_save_overrides(enum override_type type, void *data, bool remove)
int8_t config_save_overrides(enum override_type type,
void *data, bool remove, const char *path)
{
int tmp_i = 0;
unsigned i = 0;
@ -5507,6 +5508,13 @@ int8_t config_save_overrides(enum override_type type, void *data, bool remove)
FILE_PATH_CONFIG_EXTENSION,
sizeof(override_path));
break;
case OVERRIDE_AS:
fill_pathname_join_special_ext(override_path,
config_directory, core_name,
path,
FILE_PATH_CONFIG_EXTENSION,
sizeof(override_path));
break;
case OVERRIDE_NONE:
default:
break;
@ -5758,11 +5766,15 @@ bool input_remapping_save_file(const char *path)
bool ret;
unsigned i, j;
char remap_file_dir[PATH_MAX_LENGTH];
char key_strings[RARCH_FIRST_CUSTOM_BIND + 8][8] = {
"b", "y", "select", "start",
"up", "down", "left", "right",
"a", "x", "l", "r", "l2", "r2",
"l3", "r3", "l_x+", "l_x-", "l_y+", "l_y-", "r_x+", "r_x-", "r_y+", "r_y-" };
char key_strings[RARCH_FIRST_CUSTOM_BIND + 8][8] =
{
"b", "y", "select", "start",
"up", "down", "left", "right",
"a", "x", "l", "r",
"l2", "r2", "l3", "r3",
"l_x+", "l_x-", "l_y+", "l_y-",
"r_x+", "r_x-", "r_y+", "r_y-"
};
config_file_t *conf = NULL;
runloop_state_t *runloop_st = runloop_state_get_ptr();
settings_t *settings = config_st;

View File

@ -82,6 +82,7 @@ enum crt_switch_type
enum override_type
{
OVERRIDE_NONE = 0,
OVERRIDE_AS,
OVERRIDE_CORE,
OVERRIDE_CONTENT_DIR,
OVERRIDE_GAME
@ -1202,7 +1203,8 @@ bool config_save_file(const char *path);
*
* Returns: true (1) on success, (-1) if nothing to write, otherwise returns false (0).
**/
int8_t config_save_overrides(enum override_type type, void *data, bool remove);
int8_t config_save_overrides(enum override_type type,
void *data, bool remove, const char *path);
/* Replaces currently loaded configuration file with
* another one. Will load a dummy core to flush state

View File

@ -3237,6 +3237,10 @@ MSG_HASH(
MENU_ENUM_LABEL_REMAP_FILE_LOAD,
"remap_file_load"
)
MSG_HASH(
MENU_ENUM_LABEL_REMAP_FILE_SAVE_AS,
"remap_file_save_as"
)
MSG_HASH(
MENU_ENUM_LABEL_REMAP_FILE_SAVE_CORE,
"remap_file_save_core"
@ -3427,6 +3431,10 @@ MSG_HASH(
MENU_ENUM_LABEL_OVERRIDE_FILE_LOAD,
"override_file_load"
)
MSG_HASH(
MENU_ENUM_LABEL_OVERRIDE_FILE_SAVE_AS,
"override_file_save_as"
)
MSG_HASH(
MENU_ENUM_LABEL_OVERRIDE_UNLOAD,
"override_unload"

View File

@ -8742,29 +8742,65 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_REMAP_FILE_LOAD,
"Load Remap File"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_REMAP_FILE_LOAD,
"Load and replace current input mappings."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_AS,
"Save Remap File As"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_REMAP_FILE_SAVE_AS,
"Save current input mappings as a new remap file."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_CORE,
"Save Core Remap File"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_REMAP_FILE_SAVE_CORE,
"Save a remap file which will apply for all content loaded with this core."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_REMAP_FILE_REMOVE_CORE,
"Delete Core Remap File"
"Remove Core Remap File"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_REMAP_FILE_REMOVE_CORE,
"Delete the remap file which will apply for all content loaded with this core."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_CONTENT_DIR,
"Save Content Directory Remap File"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_REMAP_FILE_SAVE_CONTENT_DIR,
"Save a remap file which will apply for all content loaded from the same directory as the current file."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_REMAP_FILE_REMOVE_CONTENT_DIR,
"Delete Game Content Directory Remap File"
"Remove Game Content Directory Remap File"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_REMAP_FILE_REMOVE_CONTENT_DIR,
"Delete the remap file which will apply for all content loaded from the same directory as the current file."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_GAME,
"Save Game Remap File"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_REMAP_FILE_SAVE_GAME,
"Save a remap file which will apply for the current content only."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_REMAP_FILE_REMOVE_GAME,
"Delete Game Remap File"
"Remove Game Remap File"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_REMAP_FILE_REMOVE_GAME,
"Delete the remap file which will apply for the current content only."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_REMAP_FILE_RESET,
@ -9468,6 +9504,14 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_OVERRIDE_FILE_LOAD,
"Load and replace current configuration."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_OVERRIDE_FILE_SAVE_AS,
"Save Overrides As"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_OVERRIDE_FILE_SAVE_AS,
"Save the current configuration as a new override file."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG_OVERRIDE_CORE,
"Save Core Overrides"
@ -14004,6 +14048,14 @@ MSG_HASH(
MSG_INPUT_PRESET_FILENAME,
"Input Preset Filename"
)
MSG_HASH(
MSG_INPUT_OVERRIDE_FILENAME,
"Input Override Filename"
)
MSG_HASH(
MSG_INPUT_REMAP_FILENAME,
"Input Remap Filename"
)
MSG_HASH(
MSG_INPUT_RENAME_ENTRY,
"Rename Title"

View File

@ -134,7 +134,8 @@ enum
enum
{
ACTION_OK_REMAP_FILE_SAVE_CORE = 0,
ACTION_OK_REMAP_FILE_SAVE_AS = 0,
ACTION_OK_REMAP_FILE_SAVE_CORE,
ACTION_OK_REMAP_FILE_SAVE_CONTENT_DIR,
ACTION_OK_REMAP_FILE_SAVE_GAME,
ACTION_OK_REMAP_FILE_REMOVE_CORE,
@ -2386,7 +2387,7 @@ static int generic_action_ok(const char *path,
static int default_action_ok_load_content_with_core_from_menu(const char *_path, unsigned _type)
{
content_ctx_info_t content_info;
struct menu_state *menu_st = menu_state_get_ptr();
struct menu_state *menu_st = menu_state_get_ptr();
content_info.argc = 0;
content_info.argv = NULL;
content_info.args = NULL;
@ -3606,6 +3607,13 @@ static int generic_action_ok_remap_file_operation(const char *path,
switch (action_type)
{
case ACTION_OK_REMAP_FILE_SAVE_AS:
fill_pathname_join_special_ext(remap_file_path,
directory_input_remapping, core_name,
path,
FILE_PATH_REMAP_EXTENSION,
sizeof(remap_file_path));
break;
case ACTION_OK_REMAP_FILE_SAVE_CORE:
case ACTION_OK_REMAP_FILE_REMOVE_CORE:
fill_pathname_join_special_ext(remap_file_path,
@ -3714,6 +3722,44 @@ static int generic_action_ok_remap_file_operation(const char *path,
return 0;
}
static void menu_input_st_string_cb_remap_file_save_as(
void *userdata, const char *str)
{
#ifdef HAVE_CONFIGFILE
if (str && *str)
{
rarch_setting_t *setting = NULL;
settings_t *settings = config_get_ptr();
struct menu_state *menu_st = menu_state_get_ptr();
const char *label = menu_st->input_dialog_kb_label;
const char *msg_str = NULL;
int ret = false;
if (!string_is_empty(label))
setting = menu_setting_find(label);
if (setting)
{
if (setting->value.target.string)
strlcpy(setting->value.target.string, str, setting->size);
if (setting->change_handler)
setting->change_handler(setting);
menu_setting_generic(setting, 0, false);
}
else if (!string_is_empty(label))
generic_action_ok_remap_file_operation(str, label, 0,
0, 0, ACTION_OK_REMAP_FILE_SAVE_AS);
}
menu_input_dialog_end();
#endif
}
DEFAULT_ACTION_DIALOG_START(action_ok_remap_file_save_as,
msg_hash_to_str(MSG_INPUT_REMAP_FILENAME),
(unsigned)idx,
menu_input_st_string_cb_remap_file_save_as)
static int action_ok_remap_file_save_core(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
@ -3819,6 +3865,65 @@ static int action_ok_remap_file_flush(const char *path,
return 0;
}
static void menu_input_st_string_cb_override_file_save_as(
void *userdata, const char *str)
{
#ifdef HAVE_CONFIGFILE
if (str && *str)
{
rarch_setting_t *setting = NULL;
settings_t *settings = config_get_ptr();
struct menu_state *menu_st = menu_state_get_ptr();
const char *label = menu_st->input_dialog_kb_label;
const char *msg_str = NULL;
int ret = false;
if (!string_is_empty(label))
setting = menu_setting_find(label);
if (setting)
{
if (setting->value.target.string)
strlcpy(setting->value.target.string, str, setting->size);
if (setting->change_handler)
setting->change_handler(setting);
menu_setting_generic(setting, 0, false);
}
else if (!string_is_empty(label))
{
runloop_state_t *runloop_st = runloop_state_get_ptr();
ret = config_save_overrides(OVERRIDE_AS, &runloop_st->system, false, str);
}
switch (ret)
{
case 1:
msg_str = msg_hash_to_str(MSG_OVERRIDES_SAVED_SUCCESSFULLY);
break;
case -1:
msg_str = msg_hash_to_str(MSG_OVERRIDES_NOT_SAVED);
break;
default:
case 0:
msg_str = msg_hash_to_str(MSG_OVERRIDES_ERROR_SAVING);
break;
}
runloop_msg_queue_push(
msg_str,
1, 100, true,
NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
}
menu_input_dialog_end();
#endif
}
DEFAULT_ACTION_DIALOG_START(action_ok_override_file_save_as,
msg_hash_to_str(MSG_INPUT_OVERRIDE_FILENAME),
(unsigned)idx,
menu_input_st_string_cb_override_file_save_as)
static int action_ok_override_unload(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
@ -4054,7 +4159,7 @@ static int action_ok_file_load_ffmpeg(const char *path,
menu_path = menu_stack->list[menu_stack->size - 1].path;
if (string_is_empty(menu_path))
return -1;
return -1;
fill_pathname_join_special(new_path, menu_path, path,
sizeof(new_path));
@ -8325,7 +8430,7 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL)
{MENU_ENUM_LABEL_VIDEO_SHADER_PASS, action_ok_shader_pass},
{MENU_ENUM_LABEL_VIDEO_SHADER_PRESET, action_ok_shader_preset},
{MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_PREPEND, action_ok_shader_preset_prepend},
{MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_PREPEND, action_ok_shader_preset_prepend},
{MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_APPEND, action_ok_shader_preset_append},
{MENU_ENUM_LABEL_VIDEO_SHADER_PARAMETERS, action_ok_shader_parameters},
{MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_PARAMETERS, action_ok_shader_parameters},
@ -8384,7 +8489,7 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
{MENU_ENUM_LABEL_GOTO_CONTENTLESS_CORES, action_ok_goto_contentless_cores},
{MENU_ENUM_LABEL_BROWSE_START, action_ok_browse_url_start},
{MENU_ENUM_LABEL_FILE_BROWSER_CORE, action_ok_load_core},
{MENU_ENUM_LABEL_FILE_BROWSER_CORE_SELECT_FROM_COLLECTION, action_ok_core_deferred_set},
{MENU_ENUM_LABEL_FILE_BROWSER_CORE_SELECT_FROM_COLLECTION,action_ok_core_deferred_set},
{MENU_ENUM_LABEL_FILE_BROWSER_CORE_SELECT_FROM_COLLECTION_CURRENT_CORE,action_ok_core_deferred_set},
{MENU_ENUM_LABEL_START_CORE, action_ok_start_core},
{MENU_ENUM_LABEL_START_NET_RETROPAD, action_ok_start_net_retropad_core},
@ -8398,9 +8503,9 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
{MENU_ENUM_LABEL_LOAD_STATE, action_ok_load_state},
{MENU_ENUM_LABEL_UNDO_LOAD_STATE, action_ok_undo_load_state},
{MENU_ENUM_LABEL_UNDO_SAVE_STATE, action_ok_undo_save_state},
{MENU_ENUM_LABEL_RECORD_REPLAY, action_ok_record_replay},
{MENU_ENUM_LABEL_PLAY_REPLAY, action_ok_play_replay},
{MENU_ENUM_LABEL_HALT_REPLAY, action_ok_halt_replay},
{MENU_ENUM_LABEL_RECORD_REPLAY, action_ok_record_replay},
{MENU_ENUM_LABEL_PLAY_REPLAY, action_ok_play_replay},
{MENU_ENUM_LABEL_HALT_REPLAY, action_ok_halt_replay},
{MENU_ENUM_LABEL_RESUME_CONTENT, action_ok_resume_content},
{MENU_ENUM_LABEL_ADD_TO_FAVORITES_PLAYLIST, action_ok_add_to_favorites_playlist},
{MENU_ENUM_LABEL_SET_CORE_ASSOCIATION, action_ok_set_core_association},
@ -8508,7 +8613,7 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
{MENU_ENUM_LABEL_PLAYLIST_MANAGER_CLEAN_PLAYLIST, action_ok_playlist_clean},
{MENU_ENUM_LABEL_PLAYLIST_MANAGER_REFRESH_PLAYLIST, action_ok_playlist_refresh},
{MENU_ENUM_LABEL_RECORDING_SETTINGS, action_ok_push_recording_settings_list},
{MENU_ENUM_LABEL_INPUT_RETROPAD_BINDS, action_ok_push_input_retropad_binds_list},
{MENU_ENUM_LABEL_INPUT_RETROPAD_BINDS, action_ok_push_input_retropad_binds_list},
{MENU_ENUM_LABEL_INPUT_HOTKEY_BINDS, action_ok_push_input_hotkey_binds_list},
{MENU_ENUM_LABEL_ACCOUNTS_RETRO_ACHIEVEMENTS, action_ok_push_accounts_cheevos_list},
{MENU_ENUM_LABEL_ACCOUNTS_YOUTUBE, action_ok_push_accounts_youtube_list},
@ -8560,6 +8665,7 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
{MENU_ENUM_LABEL_CHEAT_FILE_SAVE_AS, action_ok_cheat_file_save_as},
#endif
{MENU_ENUM_LABEL_REMAP_FILE_LOAD, action_ok_remap_file},
{MENU_ENUM_LABEL_REMAP_FILE_SAVE_AS, action_ok_remap_file_save_as},
{MENU_ENUM_LABEL_REMAP_FILE_SAVE_CORE, action_ok_remap_file_save_core},
{MENU_ENUM_LABEL_REMAP_FILE_SAVE_CONTENT_DIR, action_ok_remap_file_save_content_dir},
{MENU_ENUM_LABEL_REMAP_FILE_SAVE_GAME, action_ok_remap_file_save_game},
@ -8569,6 +8675,7 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
{MENU_ENUM_LABEL_REMAP_FILE_RESET, action_ok_remap_file_reset},
{MENU_ENUM_LABEL_REMAP_FILE_FLUSH, action_ok_remap_file_flush},
{MENU_ENUM_LABEL_OVERRIDE_FILE_LOAD, action_ok_override_file},
{MENU_ENUM_LABEL_OVERRIDE_FILE_SAVE_AS, action_ok_override_file_save_as},
{MENU_ENUM_LABEL_OVERRIDE_UNLOAD, action_ok_override_unload},
{MENU_ENUM_LABEL_PLAYLISTS_TAB, action_ok_content_collection_list},
{MENU_ENUM_LABEL_BROWSE_URL_LIST, action_ok_browse_url_list},
@ -8586,7 +8693,7 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
{MENU_ENUM_LABEL_REWIND_SETTINGS, action_ok_rewind_list},
{MENU_ENUM_LABEL_ONSCREEN_DISPLAY_SETTINGS, action_ok_onscreen_display_list},
{MENU_ENUM_LABEL_ONSCREEN_NOTIFICATIONS_SETTINGS, action_ok_onscreen_notifications_list},
{MENU_ENUM_LABEL_ONSCREEN_NOTIFICATIONS_VIEWS_SETTINGS, action_ok_onscreen_notifications_views_list},
{MENU_ENUM_LABEL_ONSCREEN_NOTIFICATIONS_VIEWS_SETTINGS,action_ok_onscreen_notifications_views_list},
{MENU_ENUM_LABEL_ONSCREEN_OVERLAY_SETTINGS, action_ok_onscreen_overlay_list},
{MENU_ENUM_LABEL_OSK_OVERLAY_SETTINGS, action_ok_osk_overlay_list},
{MENU_ENUM_LABEL_MENU_SETTINGS, action_ok_menu_list},
@ -8696,12 +8803,12 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
{MENU_ENUM_LABEL_SCREEN_RESOLUTION, action_ok_video_resolution},
{MENU_ENUM_LABEL_PLAYLIST_MANAGER_DEFAULT_CORE, action_ok_playlist_default_core},
{MENU_ENUM_LABEL_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE, action_ok_playlist_label_display_mode},
{MENU_ENUM_LABEL_PLAYLIST_MANAGER_RIGHT_THUMBNAIL_MODE, action_ok_playlist_right_thumbnail_mode},
{MENU_ENUM_LABEL_PLAYLIST_MANAGER_LEFT_THUMBNAIL_MODE, action_ok_playlist_left_thumbnail_mode},
{MENU_ENUM_LABEL_PLAYLIST_MANAGER_RIGHT_THUMBNAIL_MODE,action_ok_playlist_right_thumbnail_mode},
{MENU_ENUM_LABEL_PLAYLIST_MANAGER_LEFT_THUMBNAIL_MODE,action_ok_playlist_left_thumbnail_mode},
{MENU_ENUM_LABEL_PLAYLIST_MANAGER_SORT_MODE, action_ok_playlist_sort_mode},
{MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_SYSTEM_NAME, action_ok_manual_content_scan_system_name},
{MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_CORE_NAME, action_ok_manual_content_scan_core_name},
{MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_DAT_FILE, action_ok_manual_content_scan_dat_file},
{MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_SYSTEM_NAME, action_ok_manual_content_scan_system_name},
{MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_CORE_NAME, action_ok_manual_content_scan_core_name},
{MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_DAT_FILE, action_ok_manual_content_scan_dat_file},
};
for (i = 0; i < ARRAY_SIZE(ok_list); i++)

View File

@ -943,6 +943,10 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_accounts_retro_achievements,
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_accounts_list, MENU_ENUM_SUBLABEL_ACCOUNTS_LIST)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_input_meta_rewind, MENU_ENUM_SUBLABEL_INPUT_META_REWIND)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_restart_content, MENU_ENUM_SUBLABEL_RESTART_CONTENT)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_override_file_info, MENU_ENUM_SUBLABEL_OVERRIDE_FILE_INFO)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_override_file_load, MENU_ENUM_SUBLABEL_OVERRIDE_FILE_LOAD)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_override_file_save_as, MENU_ENUM_SUBLABEL_OVERRIDE_FILE_SAVE_AS)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_override_unload, MENU_ENUM_SUBLABEL_OVERRIDE_UNLOAD)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_save_current_config_override_core, MENU_ENUM_SUBLABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CORE)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_save_current_config_override_content_dir,
MENU_ENUM_SUBLABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CONTENT_DIR)
@ -951,15 +955,19 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_remove_current_config_override_core,
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_remove_current_config_override_content_dir,
MENU_ENUM_SUBLABEL_REMOVE_CURRENT_CONFIG_OVERRIDE_CONTENT_DIR)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_remove_current_config_override_game, MENU_ENUM_SUBLABEL_REMOVE_CURRENT_CONFIG_OVERRIDE_GAME)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_shader_options, MENU_ENUM_SUBLABEL_SHADER_OPTIONS)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_core_input_remapping_options, MENU_ENUM_SUBLABEL_CORE_INPUT_REMAPPING_OPTIONS)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_remap_file_manager_list, MENU_ENUM_SUBLABEL_REMAP_FILE_MANAGER_LIST)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_remap_file_info, MENU_ENUM_SUBLABEL_REMAP_FILE_INFO)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_remap_file_load, MENU_ENUM_SUBLABEL_REMAP_FILE_LOAD)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_remap_file_save_as, MENU_ENUM_SUBLABEL_REMAP_FILE_SAVE_AS)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_remap_file_save_core, MENU_ENUM_SUBLABEL_REMAP_FILE_SAVE_CORE)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_remap_file_save_content_dir, MENU_ENUM_SUBLABEL_REMAP_FILE_SAVE_CONTENT_DIR)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_remap_file_save_game, MENU_ENUM_SUBLABEL_REMAP_FILE_SAVE_GAME)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_remap_file_remove_core, MENU_ENUM_SUBLABEL_REMAP_FILE_REMOVE_CORE)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_remap_file_remove_content_dir, MENU_ENUM_SUBLABEL_REMAP_FILE_REMOVE_CONTENT_DIR)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_remap_file_remove_game, MENU_ENUM_SUBLABEL_REMAP_FILE_REMOVE_GAME)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_remap_file_reset, MENU_ENUM_SUBLABEL_REMAP_FILE_RESET)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_remap_file_flush, MENU_ENUM_SUBLABEL_REMAP_FILE_FLUSH)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_override_file_info, MENU_ENUM_SUBLABEL_OVERRIDE_FILE_INFO)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_override_file_load, MENU_ENUM_SUBLABEL_OVERRIDE_FILE_LOAD)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_override_unload, MENU_ENUM_SUBLABEL_OVERRIDE_UNLOAD)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_core_option_override_list, MENU_ENUM_SUBLABEL_CORE_OPTION_OVERRIDE_LIST)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_core_option_override_info, MENU_ENUM_SUBLABEL_CORE_OPTION_OVERRIDE_INFO)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_core_options_reset, MENU_ENUM_SUBLABEL_CORE_OPTIONS_RESET)
@ -1129,6 +1137,7 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_recording_output_directory,
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_recording_config_directory, MENU_ENUM_SUBLABEL_RECORDING_CONFIG_DIRECTORY)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_font_path, MENU_ENUM_SUBLABEL_VIDEO_FONT_PATH)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_shaders_enable, MENU_ENUM_SUBLABEL_VIDEO_SHADERS_ENABLE)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_shader_options, MENU_ENUM_SUBLABEL_SHADER_OPTIONS)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_shader_apply_changes, MENU_ENUM_SUBLABEL_SHADER_APPLY_CHANGES)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_shader_watch_for_changes, MENU_ENUM_SUBLABEL_SHADER_WATCH_FOR_CHANGES)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_shader_remember_last_dir, MENU_ENUM_SUBLABEL_VIDEO_SHADER_REMEMBER_LAST_DIR)
@ -3210,6 +3219,30 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_REMAP_FILE_INFO:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_remap_file_info);
break;
case MENU_ENUM_LABEL_REMAP_FILE_LOAD:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_remap_file_load);
break;
case MENU_ENUM_LABEL_REMAP_FILE_SAVE_AS:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_remap_file_save_as);
break;
case MENU_ENUM_LABEL_REMAP_FILE_SAVE_GAME:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_remap_file_save_game);
break;
case MENU_ENUM_LABEL_REMAP_FILE_SAVE_CONTENT_DIR:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_remap_file_save_content_dir);
break;
case MENU_ENUM_LABEL_REMAP_FILE_SAVE_CORE:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_remap_file_save_core);
break;
case MENU_ENUM_LABEL_REMAP_FILE_REMOVE_GAME:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_remap_file_remove_game);
break;
case MENU_ENUM_LABEL_REMAP_FILE_REMOVE_CONTENT_DIR:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_remap_file_remove_content_dir);
break;
case MENU_ENUM_LABEL_REMAP_FILE_REMOVE_CORE:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_remap_file_remove_core);
break;
case MENU_ENUM_LABEL_REMAP_FILE_RESET:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_remap_file_reset);
break;
@ -3222,6 +3255,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_OVERRIDE_FILE_LOAD:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_override_file_load);
break;
case MENU_ENUM_LABEL_OVERRIDE_FILE_SAVE_AS:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_override_file_save_as);
break;
case MENU_ENUM_LABEL_OVERRIDE_UNLOAD:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_override_unload);
break;
@ -3248,21 +3284,21 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_GAME:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_save_current_config_override_game);
break;
case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CORE:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_save_current_config_override_core);
break;
case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CONTENT_DIR:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_save_current_config_override_content_dir);
break;
case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CORE:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_save_current_config_override_core);
break;
case MENU_ENUM_LABEL_REMOVE_CURRENT_CONFIG_OVERRIDE_GAME:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_remove_current_config_override_game);
break;
case MENU_ENUM_LABEL_REMOVE_CURRENT_CONFIG_OVERRIDE_CORE:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_remove_current_config_override_core);
break;
case MENU_ENUM_LABEL_REMOVE_CURRENT_CONFIG_OVERRIDE_CONTENT_DIR:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_remove_current_config_override_content_dir);
break;
case MENU_ENUM_LABEL_REMOVE_CURRENT_CONFIG_OVERRIDE_CORE:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_remove_current_config_override_core);
break;
case MENU_ENUM_LABEL_RESTART_CONTENT:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_restart_content);
break;

View File

@ -10364,7 +10364,6 @@ static void materialui_list_insert(
break;
case MENU_SETTING_ACTION_CORE_OPTION_OVERRIDE_LIST:
case MENU_SETTING_ACTION_REMAP_FILE_MANAGER_LIST:
case MENU_SETTING_ACTION_REMAP_FILE_LOAD:
node->icon_texture_index = MUI_TEXTURE_SETTINGS;
node->icon_type = MUI_ICON_TYPE_INTERNAL;
break;
@ -10455,6 +10454,7 @@ static void materialui_list_insert(
case MENU_SETTING_ACTION_CORE_CREATE_BACKUP:
case MENU_SETTING_ACTION_GAME_SPECIFIC_CORE_OPTIONS_CREATE:
case MENU_SETTING_ACTION_FOLDER_SPECIFIC_CORE_OPTIONS_CREATE:
case MENU_SETTING_ACTION_REMAP_FILE_SAVE_AS:
case MENU_SETTING_ACTION_REMAP_FILE_SAVE_CORE:
case MENU_SETTING_ACTION_REMAP_FILE_SAVE_CONTENT_DIR:
case MENU_SETTING_ACTION_REMAP_FILE_SAVE_GAME:
@ -10462,6 +10462,7 @@ static void materialui_list_insert(
node->icon_type = MUI_ICON_TYPE_INTERNAL;
break;
case MENU_SETTING_ACTION_CORE_RESTORE_BACKUP:
case MENU_SETTING_ACTION_REMAP_FILE_LOAD:
node->icon_texture_index = MUI_TEXTURE_LOAD_STATE;
node->icon_type = MUI_ICON_TYPE_INTERNAL;
break;
@ -10665,6 +10666,7 @@ static void materialui_list_insert(
node->icon_type = MUI_ICON_TYPE_INTERNAL;
}
else if ( string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_LOAD_STATE))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_OVERRIDE_FILE_LOAD))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SWITCH_INSTALLED_CORES_PFD)))
{
node->icon_texture_index = MUI_TEXTURE_LOAD_STATE;
@ -10711,6 +10713,7 @@ static void materialui_list_insert(
else if (
string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SAVESTATE_LIST))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SAVE_STATE))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_OVERRIDE_FILE_SAVE_AS))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CORE))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CONTENT_DIR))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_GAME))
@ -10919,11 +10922,6 @@ static void materialui_list_insert(
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_NETPLAY_ENABLE_HOST))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_NETPLAY_KICK))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_NETPLAY_BAN))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_LOAD))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_SAVE_CORE))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_SAVE_CONTENT_DIR))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_SAVE_GAME))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_OVERRIDE_FILE_LOAD))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_INPUT_META_CHEAT_SEARCH))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_CHEAT_SEARCH_SETTINGS))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_CHEAT_START_OR_CONT))

View File

@ -1990,6 +1990,8 @@ static uintptr_t ozone_entries_icon_get_texture(
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE:
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_AS:
case MENU_ENUM_LABEL_CHEAT_FILE_SAVE_AS:
case MENU_ENUM_LABEL_OVERRIDE_FILE_SAVE_AS:
case MENU_ENUM_LABEL_REMAP_FILE_SAVE_AS:
case MENU_ENUM_LABEL_QUICK_MENU_SHOW_SAVESTATE_SUBMENU:
case MENU_ENUM_LABEL_QUICK_MENU_SHOW_SAVE_LOAD_STATE:
case MENU_ENUM_LABEL_QUICK_MENU_SHOW_REPLAY:

View File

@ -3140,6 +3140,8 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE:
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_AS:
case MENU_ENUM_LABEL_CHEAT_FILE_SAVE_AS:
case MENU_ENUM_LABEL_OVERRIDE_FILE_SAVE_AS:
case MENU_ENUM_LABEL_REMAP_FILE_SAVE_AS:
case MENU_ENUM_LABEL_QUICK_MENU_SHOW_SAVESTATE_SUBMENU:
case MENU_ENUM_LABEL_QUICK_MENU_SHOW_SAVE_LOAD_STATE:
case MENU_ENUM_LABEL_QUICK_MENU_SHOW_REPLAY:

View File

@ -1368,6 +1368,14 @@ static unsigned menu_displaylist_parse_remap_file_manager_list(file_list_t *list
MENU_SETTING_ACTION_REMAP_FILE_LOAD, 0, 0, NULL))
count++;
/* Save as */
if (menu_entries_append(list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_AS),
msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_SAVE_AS),
MENU_ENUM_LABEL_REMAP_FILE_SAVE_AS,
MENU_SETTING_ACTION_REMAP_FILE_SAVE_AS, 0, 0, NULL))
count++;
if (!game_remap_active)
{
/* Save remap files */
@ -6543,6 +6551,15 @@ unsigned menu_displaylist_build_list(
if (!settings->bools.kiosk_mode_enable)
{
/* Save as */
if (menu_entries_append(list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_OVERRIDE_FILE_SAVE_AS),
msg_hash_to_str(MENU_ENUM_LABEL_OVERRIDE_FILE_SAVE_AS),
MENU_ENUM_LABEL_OVERRIDE_FILE_SAVE_AS,
MENU_SETTING_ACTION, 0, 0, NULL))
count++;
/* Save/Remove game/content_dir/core */
if (has_content)
{
if (settings->bools.quick_menu_show_save_game_overrides)

View File

@ -294,6 +294,7 @@ enum menu_settings_type
MENU_SETTING_ACTION_CORE_OPTIONS_FLUSH,
MENU_SETTING_ACTION_REMAP_FILE_LOAD,
MENU_SETTING_ACTION_REMAP_FILE_SAVE_AS,
MENU_SETTING_ACTION_REMAP_FILE_SAVE_CORE,
MENU_SETTING_ACTION_REMAP_FILE_SAVE_CONTENT_DIR,
MENU_SETTING_ACTION_REMAP_FILE_SAVE_GAME,

View File

@ -379,8 +379,10 @@ enum msg_hash_enums
MSG_APPLYING_CHEAT,
MSG_APPLYING_PATCH,
MSG_INPUT_CHEAT,
MSG_INPUT_PRESET_FILENAME,
MSG_INPUT_CHEAT_FILENAME,
MSG_INPUT_PRESET_FILENAME,
MSG_INPUT_OVERRIDE_FILENAME,
MSG_INPUT_REMAP_FILENAME,
MSG_INPUT_RENAME_ENTRY,
MSG_INPUT_ENABLE_SETTINGS_PASSWORD,
MSG_INPUT_ENABLE_SETTINGS_PASSWORD_OK,
@ -634,10 +636,9 @@ enum msg_hash_enums
MENU_ENUM_LABEL_DISCORD_STATUS_PAUSED,
MENU_ENUM_LABEL_VALUE_DISCORD_STATUS_PAUSED,
MENU_ENUM_LABEL_VALUE_REMAP_FILE,
MENU_ENUM_LABEL_VALUE_CHEAT_FILE,
MENU_ENUM_LABEL_VALUE_CHEAT_FILE_APPEND,
MENU_ENUM_LABEL_HELP_INPUT_RETROPAD_BINDS,
MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN,
MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_END = MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN + RARCH_BIND_LIST_END,
@ -2996,6 +2997,7 @@ enum msg_hash_enums
MENU_LABEL(VIDEO_SHADER_PRESET_APPEND),
MENU_LABEL(CHEAT_FILE_LOAD),
MENU_LABEL(CHEAT_FILE_LOAD_APPEND),
MENU_LABEL(CHEAT_FILE_SAVE_AS),
MENU_ENUM_LABEL_MESSAGE,
MENU_ENUM_LABEL_INFO_SCREEN,
@ -3171,9 +3173,11 @@ enum msg_hash_enums
MENU_ENUM_LABEL_EXIT_EMULATOR,
MENU_ENUM_LABEL_OSK_ENABLE,
MENU_ENUM_LABEL_VALUE_REMAP_FILE,
MENU_LABEL(REMAP_FILE_MANAGER_LIST),
MENU_LABEL(REMAP_FILE_INFO),
MENU_LABEL(REMAP_FILE_LOAD),
MENU_LABEL(REMAP_FILE_SAVE_AS),
MENU_LABEL(REMAP_FILE_SAVE_CORE),
MENU_LABEL(REMAP_FILE_SAVE_CONTENT_DIR),
MENU_LABEL(REMAP_FILE_SAVE_GAME),
@ -3185,13 +3189,13 @@ enum msg_hash_enums
MENU_LABEL(OVERRIDE_FILE_INFO),
MENU_LABEL(OVERRIDE_FILE_LOAD),
MENU_LABEL(OVERRIDE_FILE_SAVE_AS),
MENU_LABEL(OVERRIDE_UNLOAD),
MENU_LABEL(RESTART_CONTENT),
MENU_LABEL(RESUME),
MENU_LABEL(RESUME_CONTENT),
MENU_LABEL(CHEAT_FILE_SAVE_AS),
MENU_LABEL(DELETE_ENTRY),
MENU_LABEL(RENAME_ENTRY),