mirror of
https://github.com/libretro/RetroArch
synced 2025-03-01 16:13:40 +00:00
Add Input Remapping Save As option
This commit is contained in:
parent
019d24102d
commit
6bbc7196a3
@ -460,6 +460,17 @@ static int action_ok_shader_preset_save_as(const char *path,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int action_ok_remap_file_save_as(const char *path,
|
||||||
|
const char *label, unsigned type, size_t idx)
|
||||||
|
{
|
||||||
|
if (!driver.menu)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
menu_input_key_start_line(driver.menu, "Remapping Filename",
|
||||||
|
label, type, idx, menu_input_st_string_callback);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int action_ok_path_use_directory(const char *path,
|
static int action_ok_path_use_directory(const char *path,
|
||||||
const char *label, unsigned type, size_t idx)
|
const char *label, unsigned type, size_t idx)
|
||||||
{
|
{
|
||||||
@ -2114,12 +2125,8 @@ static int deferred_push_core_input_remapping_options(void *data, void *userdata
|
|||||||
menu_list_clear(list);
|
menu_list_clear(list);
|
||||||
menu_list_push(list, "Remap File Load", "remap_file_load",
|
menu_list_push(list, "Remap File Load", "remap_file_load",
|
||||||
MENU_SETTING_ACTION, 0);
|
MENU_SETTING_ACTION, 0);
|
||||||
#if 0
|
menu_list_push(list, "Remap File Save As",
|
||||||
menu_list_push(list, "Cheat Passes", "cheat_num_passes",
|
"remap_file_save_as", MENU_SETTING_ACTION, 0);
|
||||||
0, 0);
|
|
||||||
menu_list_push(list, "Apply Cheat Changes", "cheat_apply_changes",
|
|
||||||
MENU_SETTING_ACTION, 0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for (p = 0; p < g_settings.input.max_users; p++)
|
for (p = 0; p < g_settings.input.max_users; p++)
|
||||||
{
|
{
|
||||||
@ -2692,6 +2699,8 @@ static void menu_entries_cbs_init_bind_ok(menu_file_list_cbs_t *cbs,
|
|||||||
cbs->action_ok = action_ok_cheat_apply_changes;
|
cbs->action_ok = action_ok_cheat_apply_changes;
|
||||||
else if (!strcmp(label, "video_shader_preset_save_as"))
|
else if (!strcmp(label, "video_shader_preset_save_as"))
|
||||||
cbs->action_ok = action_ok_shader_preset_save_as;
|
cbs->action_ok = action_ok_shader_preset_save_as;
|
||||||
|
else if (!strcmp(label, "remap_file_save_as"))
|
||||||
|
cbs->action_ok = action_ok_remap_file_save_as;
|
||||||
else if (!strcmp(label, "core_list"))
|
else if (!strcmp(label, "core_list"))
|
||||||
cbs->action_ok = action_ok_core_list;
|
cbs->action_ok = action_ok_core_list;
|
||||||
else if (!strcmp(label, "core_manager_list"))
|
else if (!strcmp(label, "core_manager_list"))
|
||||||
|
@ -32,6 +32,53 @@
|
|||||||
#include "../settings_data.h"
|
#include "../settings_data.h"
|
||||||
#include "../input/input_joypad.h"
|
#include "../input/input_joypad.h"
|
||||||
|
|
||||||
|
#include <file/config_file.h>
|
||||||
|
#include <file/file_path.h>
|
||||||
|
|
||||||
|
static void menu_input_remapping_save_file(const char *path)
|
||||||
|
{
|
||||||
|
unsigned i, j;
|
||||||
|
char buf[PATH_MAX_LENGTH];
|
||||||
|
char remap_file[PATH_MAX_LENGTH];
|
||||||
|
config_file_t *conf = NULL;
|
||||||
|
|
||||||
|
fill_pathname_join(buf, g_settings.input_remapping_directory,
|
||||||
|
path, sizeof(buf));
|
||||||
|
|
||||||
|
fill_pathname_noext(remap_file, buf, ".rmp", sizeof(remap_file));
|
||||||
|
|
||||||
|
conf = config_file_new(remap_file);
|
||||||
|
|
||||||
|
if (!conf)
|
||||||
|
conf = config_file_new(NULL);
|
||||||
|
|
||||||
|
if (!conf)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (i = 0; i < g_settings.input.max_users; i++)
|
||||||
|
{
|
||||||
|
char buf[64];
|
||||||
|
char key_ident[RARCH_FIRST_META_KEY][128];
|
||||||
|
char key_strings[RARCH_FIRST_META_KEY][128] = { "b", "y", "select", "start",
|
||||||
|
"up", "down", "left", "right", "a", "x", "l", "r", "l2", "r2", "l3", "r3"};
|
||||||
|
|
||||||
|
snprintf(buf, sizeof(buf), "input_player%u", i + 1);
|
||||||
|
|
||||||
|
for (j = 0; j < RARCH_FIRST_META_KEY; j++)
|
||||||
|
{
|
||||||
|
snprintf(key_ident[j], sizeof(key_ident[j]), "%s_%s", buf, key_strings[j]);
|
||||||
|
config_set_int(conf, key_ident[j], g_settings.input.remap_ids[i][j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!config_file_write(conf, remap_file))
|
||||||
|
{
|
||||||
|
RARCH_ERR("Could not write remapping file to disk.\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
config_file_free(conf);
|
||||||
|
}
|
||||||
|
|
||||||
void menu_input_key_start_line(void *data, const char *label,
|
void menu_input_key_start_line(void *data, const char *label,
|
||||||
const char *label_setting, unsigned type, unsigned idx,
|
const char *label_setting, unsigned type, unsigned idx,
|
||||||
input_keyboard_line_complete_t cb)
|
input_keyboard_line_complete_t cb)
|
||||||
@ -90,6 +137,7 @@ void menu_input_st_uint_callback(void *userdata, const char *str)
|
|||||||
menu_input_key_end_line(menu);
|
menu_input_key_end_line(menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void menu_input_st_string_callback(void *userdata, const char *str)
|
void menu_input_st_string_callback(void *userdata, const char *str)
|
||||||
{
|
{
|
||||||
menu_handle_t *menu = (menu_handle_t*)userdata;
|
menu_handle_t *menu = (menu_handle_t*)userdata;
|
||||||
@ -105,6 +153,8 @@ void menu_input_st_string_callback(void *userdata, const char *str)
|
|||||||
{
|
{
|
||||||
if (!strcmp(menu->keyboard.label_setting, "video_shader_preset_save_as"))
|
if (!strcmp(menu->keyboard.label_setting, "video_shader_preset_save_as"))
|
||||||
menu_shader_manager_save_preset(str, false);
|
menu_shader_manager_save_preset(str, false);
|
||||||
|
else if (!strcmp(menu->keyboard.label_setting, "remap_file_save_as"))
|
||||||
|
menu_input_remapping_save_file(str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user