mirror of
https://github.com/CTCaer/RetroArch.git
synced 2024-12-24 19:56:06 +00:00
1487 lines
42 KiB
C
1487 lines
42 KiB
C
/* RetroArch - A frontend for libretro.
|
|
* Copyright (C) 2011-2015 - 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 <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include <file/file_path.h>
|
|
#include "menu.h"
|
|
#include "menu_entries_cbs.h"
|
|
#include "menu_setting.h"
|
|
#include "menu_entries.h"
|
|
#include "menu_shader.h"
|
|
#include "menu_navigation.h"
|
|
|
|
#include "../retroarch.h"
|
|
#include "../runloop_data.h"
|
|
|
|
#include "../input/input_remapping.h"
|
|
|
|
/* FIXME - Global variables, refactor */
|
|
unsigned rdb_entry_start_game_selection_ptr;
|
|
size_t hack_shader_pass = 0;
|
|
#ifdef HAVE_NETWORKING
|
|
char core_updater_path[PATH_MAX_LENGTH];
|
|
#endif
|
|
|
|
static int menu_action_setting_set_current_string_path(
|
|
rarch_setting_t *setting, const char *dir, const char *path)
|
|
{
|
|
fill_pathname_join(setting->value.string, dir, path, setting->size);
|
|
return menu_setting_generic(setting);
|
|
}
|
|
|
|
static int action_ok_rdb_playlist_entry(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
if (!menu)
|
|
return -1;
|
|
|
|
rarch_playlist_load_content(menu->db_playlist,
|
|
rdb_entry_start_game_selection_ptr);
|
|
return -1;
|
|
}
|
|
|
|
static int action_ok_playlist_entry(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
if (!menu)
|
|
return -1;
|
|
|
|
rarch_playlist_load_content(g_defaults.history,
|
|
menu->navigation.selection_ptr);
|
|
menu_list_flush_stack(menu->menu_list, MENU_SETTINGS);
|
|
return -1;
|
|
}
|
|
|
|
|
|
|
|
static int action_ok_cheat_apply_changes(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
global_t *global = global_get_ptr();
|
|
cheat_manager_t *cheat = global->cheat;
|
|
|
|
if (!cheat)
|
|
return -1;
|
|
|
|
cheat_manager_apply_cheats(cheat);
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
static int action_ok_shader_pass_load(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
const char *menu_path = NULL;
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
if (!menu)
|
|
return -1;
|
|
|
|
(void)menu_path;
|
|
|
|
#ifdef HAVE_SHADER_MANAGER
|
|
menu_list_get_last_stack(menu->menu_list, &menu_path, NULL,
|
|
NULL);
|
|
|
|
fill_pathname_join(menu->shader->pass[hack_shader_pass].source.path,
|
|
menu_path, path,
|
|
sizeof(menu->shader->pass[hack_shader_pass].source.path));
|
|
|
|
/* This will reset any changed parameters. */
|
|
video_shader_resolve_parameters(NULL, menu->shader);
|
|
menu_list_flush_stack_by_needle(menu->menu_list, "shader_options");
|
|
return 0;
|
|
#else
|
|
return -1;
|
|
#endif
|
|
}
|
|
|
|
#ifdef HAVE_SHADER_MANAGER
|
|
extern size_t hack_shader_pass;
|
|
#endif
|
|
|
|
static int action_ok_shader_pass(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
hack_shader_pass = type - MENU_SETTINGS_SHADER_PASS_0;
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
settings_t *settings = config_get_ptr();
|
|
if (!menu)
|
|
return -1;
|
|
|
|
return menu_list_push_stack_refresh(
|
|
menu->menu_list,
|
|
settings->video.shader_dir,
|
|
label,
|
|
type,
|
|
idx);
|
|
}
|
|
|
|
static int action_ok_shader_parameters(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
if (!menu)
|
|
return -1;
|
|
return menu_list_push_stack_refresh(
|
|
menu->menu_list,
|
|
"", label, MENU_SETTING_ACTION,
|
|
idx);
|
|
}
|
|
|
|
static int action_ok_push_generic_list(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
if (!menu)
|
|
return -1;
|
|
|
|
if (path)
|
|
strlcpy(menu->deferred_path, path,
|
|
sizeof(menu->deferred_path));
|
|
|
|
return menu_list_push_stack_refresh(
|
|
menu->menu_list,
|
|
"", label, type, idx);
|
|
}
|
|
|
|
static int action_ok_push_default(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
if (!menu)
|
|
return -1;
|
|
return menu_list_push_stack_refresh(
|
|
menu->menu_list,
|
|
label, label, type, idx);
|
|
}
|
|
|
|
static int action_ok_shader_preset(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
settings_t *settings = config_get_ptr();
|
|
|
|
if (!menu)
|
|
return -1;
|
|
|
|
return menu_list_push_stack_refresh(
|
|
menu->menu_list,
|
|
settings->video.shader_dir,
|
|
label, type, idx);
|
|
}
|
|
|
|
static int action_ok_push_content_list(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
settings_t *settings = config_get_ptr();
|
|
|
|
if (!menu)
|
|
return -1;
|
|
|
|
return menu_list_push_stack_refresh(
|
|
menu->menu_list,
|
|
settings->menu_content_directory,
|
|
label, MENU_FILE_DIRECTORY, idx);
|
|
}
|
|
|
|
static int action_ok_disk_image_append_list(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
settings_t *settings = config_get_ptr();
|
|
|
|
if (!menu)
|
|
return -1;
|
|
return menu_list_push_stack_refresh(
|
|
menu->menu_list,
|
|
settings->menu_content_directory, label, type,
|
|
idx);
|
|
}
|
|
|
|
static int action_ok_configurations_list(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
settings_t *settings = config_get_ptr();
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
const char *dir = settings->menu_config_directory;
|
|
if (!menu)
|
|
return -1;
|
|
|
|
return menu_list_push_stack_refresh(
|
|
menu->menu_list,
|
|
dir ? dir : label, label, type,
|
|
idx);
|
|
}
|
|
|
|
static int action_ok_cheat_file(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
settings_t *settings = config_get_ptr();
|
|
if (!menu)
|
|
return -1;
|
|
|
|
return menu_list_push_stack_refresh(
|
|
menu->menu_list,
|
|
settings->cheat_database,
|
|
label, type, idx);
|
|
}
|
|
|
|
static int action_ok_audio_dsp_plugin(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
settings_t *settings = config_get_ptr();
|
|
if (!menu)
|
|
return -1;
|
|
|
|
return menu_list_push_stack_refresh(
|
|
menu->menu_list,
|
|
settings->audio.filter_dir,
|
|
"audio_dsp_plugin",
|
|
0, idx);
|
|
}
|
|
|
|
static int action_ok_video_filter(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
settings_t *settings = config_get_ptr();
|
|
if (!menu)
|
|
return -1;
|
|
|
|
return menu_list_push_stack_refresh(
|
|
menu->menu_list,
|
|
settings->video.filter_dir,
|
|
"deferred_video_filter",
|
|
0, idx);
|
|
}
|
|
|
|
static int action_ok_core_updater_list(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
char url_path[PATH_MAX_LENGTH];
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
driver_t *driver = driver_get_ptr();
|
|
settings_t *settings = config_get_ptr();
|
|
if (!menu)
|
|
return -1;
|
|
|
|
driver->menu->nonblocking_refresh = true;
|
|
|
|
(void)url_path;
|
|
|
|
if (settings->network.buildbot_url[0] == '\0')
|
|
return -1;
|
|
|
|
#ifdef HAVE_NETWORKING
|
|
event_command(EVENT_CMD_NETWORK_INIT);
|
|
|
|
fill_pathname_join(url_path, settings->network.buildbot_url,
|
|
".index", sizeof(url_path));
|
|
|
|
rarch_main_data_msg_queue_push(DATA_TYPE_HTTP, url_path, "cb_core_updater_list", 0, 1,
|
|
true);
|
|
#endif
|
|
|
|
return menu_list_push_stack_refresh(
|
|
menu->menu_list,
|
|
path, "deferred_core_updater_list", type, idx);
|
|
}
|
|
|
|
static int action_ok_remap_file(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
settings_t *settings = config_get_ptr();
|
|
|
|
if (!menu)
|
|
return -1;
|
|
|
|
return menu_list_push_stack_refresh(
|
|
menu->menu_list,
|
|
settings->input_remapping_directory,
|
|
label, type, idx);
|
|
}
|
|
|
|
static int action_ok_record_configfile(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
global_t *global = global_get_ptr();
|
|
|
|
if (!menu)
|
|
return -1;
|
|
|
|
return menu_list_push_stack_refresh(
|
|
menu->menu_list,
|
|
global->record.config_dir,
|
|
label, type, idx);
|
|
}
|
|
|
|
static int action_ok_core_list(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
settings_t *settings = config_get_ptr();
|
|
|
|
if (!menu)
|
|
return -1;
|
|
|
|
return menu_list_push_stack_refresh(
|
|
menu->menu_list,
|
|
settings->libretro_directory,
|
|
label, type, idx);
|
|
}
|
|
|
|
static int action_ok_record_configfile_load(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
const char *menu_path = NULL;
|
|
global_t *global = global_get_ptr();
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
if (!menu || !global)
|
|
return -1;
|
|
|
|
menu_list_get_last_stack(menu->menu_list, &menu_path, NULL,
|
|
NULL);
|
|
|
|
fill_pathname_join(global->record.config, menu_path, path, sizeof(global->record.config));
|
|
|
|
menu_list_flush_stack_by_needle(menu->menu_list, "Recording Settings");
|
|
return 0;
|
|
}
|
|
|
|
static int action_ok_remap_file_load(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
const char *menu_path = NULL;
|
|
char remap_path[PATH_MAX_LENGTH];
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
if (!menu)
|
|
return -1;
|
|
|
|
(void)remap_path;
|
|
(void)menu_path;
|
|
|
|
menu_list_get_last_stack(menu->menu_list, &menu_path, NULL,
|
|
NULL);
|
|
|
|
fill_pathname_join(remap_path, menu_path, path, sizeof(remap_path));
|
|
input_remapping_load_file(remap_path);
|
|
|
|
menu_list_flush_stack_by_needle(menu->menu_list, "core_input_remapping_options");
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int action_ok_video_filter_file_load(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
char filter_path[PATH_MAX_LENGTH];
|
|
const char *menu_path = NULL;
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
settings_t *settings = config_get_ptr();
|
|
|
|
if (!menu)
|
|
return -1;
|
|
|
|
(void)filter_path;
|
|
(void)menu_path;
|
|
|
|
menu_list_get_last_stack(menu->menu_list, &menu_path, NULL,
|
|
NULL);
|
|
|
|
fill_pathname_join(filter_path, menu_path, path, sizeof(filter_path));
|
|
|
|
strlcpy(settings->video.softfilter_plugin, filter_path,
|
|
sizeof(settings->video.softfilter_plugin));
|
|
|
|
event_command(EVENT_CMD_REINIT);
|
|
|
|
menu_list_flush_stack_by_needle(menu->menu_list, "video_options");
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int action_ok_cheat_file_load(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
const char *menu_path = NULL;
|
|
char cheat_path[PATH_MAX_LENGTH];
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
global_t *global = global_get_ptr();
|
|
if (!menu)
|
|
return -1;
|
|
|
|
(void)cheat_path;
|
|
(void)menu_path;
|
|
menu_list_get_last_stack(menu->menu_list, &menu_path, NULL,
|
|
NULL);
|
|
|
|
fill_pathname_join(cheat_path, menu_path, path, sizeof(cheat_path));
|
|
|
|
if (global->cheat)
|
|
cheat_manager_free(global->cheat);
|
|
|
|
global->cheat = cheat_manager_load(cheat_path);
|
|
|
|
if (!global->cheat)
|
|
return -1;
|
|
|
|
menu_list_flush_stack_by_needle(menu->menu_list, "core_cheat_options");
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int action_ok_menu_wallpaper_load(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
char wallpaper_path[PATH_MAX_LENGTH];
|
|
const char *menu_label = NULL;
|
|
const char *menu_path = NULL;
|
|
rarch_setting_t *setting = NULL;
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
settings_t *settings = config_get_ptr();
|
|
if (!menu)
|
|
return -1;
|
|
|
|
menu_list_get_last_stack(menu->menu_list, &menu_path, &menu_label,
|
|
NULL);
|
|
|
|
setting = menu_setting_find(menu_label);
|
|
|
|
if (!setting)
|
|
return -1;
|
|
|
|
fill_pathname_join(wallpaper_path, menu_path, path, sizeof(wallpaper_path));
|
|
|
|
if (path_file_exists(wallpaper_path))
|
|
{
|
|
strlcpy(settings->menu.wallpaper, wallpaper_path, sizeof(settings->menu.wallpaper));
|
|
|
|
rarch_main_data_msg_queue_push(DATA_TYPE_IMAGE, wallpaper_path, "cb_menu_wallpaper", 0, 1,
|
|
true);
|
|
}
|
|
|
|
menu_list_pop_stack_by_needle(menu->menu_list, setting->name);
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int action_ok_shader_preset_load(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
const char *menu_path = NULL;
|
|
char shader_path[PATH_MAX_LENGTH];
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
if (!menu)
|
|
return -1;
|
|
|
|
(void)shader_path;
|
|
(void)menu_path;
|
|
#ifdef HAVE_SHADER_MANAGER
|
|
menu_list_get_last_stack(menu->menu_list, &menu_path, NULL,
|
|
NULL);
|
|
|
|
fill_pathname_join(shader_path, menu_path, path, sizeof(shader_path));
|
|
menu_shader_manager_set_preset(menu->shader,
|
|
video_shader_parse_type(shader_path, RARCH_SHADER_NONE),
|
|
shader_path);
|
|
menu_list_flush_stack_by_needle(menu->menu_list, "shader_options");
|
|
return 0;
|
|
#else
|
|
return -1;
|
|
#endif
|
|
}
|
|
|
|
static int action_ok_cheat(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
menu_input_key_start_line("Input Cheat",
|
|
label, type, idx, menu_input_st_cheat_callback);
|
|
return 0;
|
|
}
|
|
|
|
static int action_ok_shader_preset_save_as(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
menu_input_key_start_line("Preset Filename",
|
|
label, type, idx, menu_input_st_string_callback);
|
|
return 0;
|
|
}
|
|
|
|
static int action_ok_cheat_file_save_as(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
menu_input_key_start_line("Cheat Filename",
|
|
label, type, idx, menu_input_st_string_callback);
|
|
return 0;
|
|
}
|
|
|
|
static int action_ok_remap_file_save_as(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
menu_input_key_start_line("Remapping Filename",
|
|
label, type, idx, menu_input_st_string_callback);
|
|
return 0;
|
|
}
|
|
|
|
static int action_ok_remap_file_save_core(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
global_t *global = global_get_ptr();
|
|
settings_t *settings = config_get_ptr();
|
|
|
|
const char *core_name;
|
|
core_name = global->system.info.library_name;
|
|
|
|
char directory[PATH_MAX_LENGTH];
|
|
char file[PATH_MAX_LENGTH];
|
|
|
|
fill_pathname_join(directory,settings->input_remapping_directory,core_name,PATH_MAX_LENGTH);
|
|
fill_pathname_join(file,core_name,core_name,PATH_MAX_LENGTH);
|
|
|
|
if(!path_file_exists(directory))
|
|
path_mkdir(directory);
|
|
|
|
if(input_remapping_save_file(file))
|
|
rarch_main_msg_queue_push("Remap file saved successfully", 1, 100, true);
|
|
else
|
|
rarch_main_msg_queue_push("Error saving remap file", 1, 100, true);
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int action_ok_remap_file_save_game(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
global_t *global = global_get_ptr();
|
|
settings_t *settings = config_get_ptr();
|
|
|
|
const char *core_name;
|
|
core_name = global->system.info.library_name;
|
|
|
|
const char *game_name;
|
|
game_name = path_basename(global->basename);
|
|
|
|
char directory[PATH_MAX_LENGTH];
|
|
char file[PATH_MAX_LENGTH];
|
|
|
|
fill_pathname_join(directory,settings->input_remapping_directory,core_name,PATH_MAX_LENGTH);
|
|
fill_pathname_join(file,core_name,game_name,PATH_MAX_LENGTH);
|
|
|
|
if(!path_file_exists(directory))
|
|
path_mkdir(directory);
|
|
|
|
if(input_remapping_save_file(file))
|
|
rarch_main_msg_queue_push("Remap file saved successfully", 1, 100, true);
|
|
else
|
|
rarch_main_msg_queue_push("Error saving remap file", 1, 100, true);
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int action_ok_path_use_directory(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
const char *menu_label = NULL;
|
|
const char *menu_path = NULL;
|
|
rarch_setting_t *setting = NULL;
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
if (!menu)
|
|
return -1;
|
|
|
|
menu_list_get_last_stack(menu->menu_list,
|
|
&menu_path, &menu_label, NULL);
|
|
|
|
setting = menu_setting_find(menu_label);
|
|
|
|
if (!setting)
|
|
return -1;
|
|
|
|
if (setting->type != ST_DIR)
|
|
return -1;
|
|
|
|
strlcpy(setting->value.string, menu_path, setting->size);
|
|
menu_setting_generic(setting);
|
|
menu_list_pop_stack_by_needle(menu->menu_list, setting->name);
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int action_ok_core_load_deferred(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
settings_t *settings = config_get_ptr();
|
|
global_t *global = global_get_ptr();
|
|
|
|
if (!menu)
|
|
return -1;
|
|
|
|
if (path)
|
|
strlcpy(settings->libretro, path, sizeof(settings->libretro));
|
|
strlcpy(global->fullpath, menu->deferred_path,
|
|
sizeof(global->fullpath));
|
|
|
|
menu_entries_common_load_content(false);
|
|
|
|
return -1;
|
|
}
|
|
|
|
static int action_ok_database_manager_list_deferred(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int action_ok_rdb_entry(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
char tmp[PATH_MAX_LENGTH];
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
if (!menu)
|
|
return -1;
|
|
|
|
strlcpy(tmp, "deferred_rdb_entry_detail|", sizeof(tmp));
|
|
strlcat(tmp, path, sizeof(tmp));
|
|
|
|
return menu_list_push_stack_refresh(
|
|
menu->menu_list,
|
|
label,
|
|
tmp,
|
|
0, idx);
|
|
}
|
|
|
|
static int action_ok_cursor_manager_list_deferred(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int action_ok_core_load(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
const char *menu_path = NULL;
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
settings_t *settings = config_get_ptr();
|
|
global_t *global = global_get_ptr();
|
|
|
|
if (!menu)
|
|
return -1;
|
|
|
|
(void)global;
|
|
|
|
menu_list_get_last_stack(menu->menu_list,
|
|
&menu_path, NULL, NULL);
|
|
|
|
fill_pathname_join(settings->libretro, menu_path, path,
|
|
sizeof(settings->libretro));
|
|
event_command(EVENT_CMD_LOAD_CORE);
|
|
menu_list_flush_stack(menu->menu_list, MENU_SETTINGS);
|
|
#if defined(HAVE_DYNAMIC)
|
|
/* No content needed for this core, load core immediately. */
|
|
|
|
if (menu->load_no_content && settings->core.set_supports_no_game_enable)
|
|
{
|
|
*global->fullpath = '\0';
|
|
|
|
menu_entries_common_load_content(false);
|
|
return -1;
|
|
}
|
|
|
|
return 0;
|
|
/* Core selection on non-console just updates directory listing.
|
|
* Will take effect on new content load. */
|
|
#elif defined(RARCH_CONSOLE)
|
|
event_command(EVENT_CMD_RESTART_RETROARCH);
|
|
return -1;
|
|
#endif
|
|
}
|
|
|
|
static int action_ok_core_download(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int action_ok_compressed_archive_push(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
if (!menu)
|
|
return -1;
|
|
|
|
menu_list_push_stack(
|
|
menu->menu_list,
|
|
path,
|
|
"load_open_zip",
|
|
0,
|
|
idx);
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int action_ok_directory_push(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
const char *menu_path = NULL;
|
|
const char *menu_label = NULL;
|
|
char cat_path[PATH_MAX_LENGTH];
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
if (!menu)
|
|
return -1;
|
|
|
|
if (!path)
|
|
return -1;
|
|
|
|
menu_list_get_last_stack(menu->menu_list,
|
|
&menu_path, &menu_label, NULL);
|
|
|
|
fill_pathname_join(cat_path, menu_path, path, sizeof(cat_path));
|
|
|
|
return menu_list_push_stack_refresh(menu->menu_list,
|
|
cat_path, menu_label, type, idx);
|
|
}
|
|
|
|
static int action_ok_database_manager_list(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
char rdb_path[PATH_MAX_LENGTH];
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
settings_t *settings = config_get_ptr();
|
|
|
|
if (!menu)
|
|
return -1;
|
|
if (!path)
|
|
return -1;
|
|
if (!label)
|
|
return -1;
|
|
|
|
fill_pathname_join(rdb_path, settings->content_database,
|
|
path, sizeof(rdb_path));
|
|
|
|
return menu_list_push_stack_refresh(
|
|
menu->menu_list,
|
|
rdb_path,
|
|
"deferred_database_manager_list",
|
|
0, idx);
|
|
}
|
|
|
|
static int action_ok_cursor_manager_list(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
char cursor_path[PATH_MAX_LENGTH];
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
settings_t *settings = config_get_ptr();
|
|
|
|
if (!menu)
|
|
return -1;
|
|
|
|
fill_pathname_join(cursor_path, settings->cursor_directory,
|
|
path, sizeof(cursor_path));
|
|
|
|
return menu_list_push_stack_refresh(
|
|
menu->menu_list,
|
|
cursor_path,
|
|
"deferred_cursor_manager_list",
|
|
0, idx);
|
|
}
|
|
|
|
static int action_ok_config_load(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
const char *menu_path = NULL;
|
|
char config[PATH_MAX_LENGTH];
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
|
|
if (!menu)
|
|
return -1;
|
|
|
|
menu_list_get_last_stack(menu->menu_list,
|
|
&menu_path, NULL, NULL);
|
|
|
|
fill_pathname_join(config, menu_path, path, sizeof(config));
|
|
menu_list_flush_stack(menu->menu_list, MENU_SETTINGS);
|
|
menu->msg_force = true;
|
|
if (rarch_replace_config(config))
|
|
{
|
|
menu_navigation_clear(&menu->navigation, false);
|
|
return -1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int action_ok_disk_image_append(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
char image[PATH_MAX_LENGTH];
|
|
const char *menu_path = NULL;
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
|
|
if (!menu)
|
|
return -1;
|
|
|
|
menu_list_get_last_stack(menu->menu_list,
|
|
&menu_path, NULL, NULL);
|
|
|
|
fill_pathname_join(image, menu_path, path, sizeof(image));
|
|
event_disk_control_append_image(image);
|
|
|
|
event_command(EVENT_CMD_RESUME);
|
|
|
|
menu_list_flush_stack(menu->menu_list, MENU_SETTINGS);
|
|
return -1;
|
|
}
|
|
|
|
static int action_ok_file_load_with_detect_core(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
int ret;
|
|
const char *menu_path = NULL;
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
settings_t *settings = config_get_ptr();
|
|
global_t *global = global_get_ptr();
|
|
|
|
if (!menu)
|
|
return -1;
|
|
|
|
menu_list_get_last_stack(menu->menu_list,
|
|
&menu_path, NULL, NULL);
|
|
|
|
ret = rarch_defer_core(global->core_info,
|
|
menu_path, path, label, menu->deferred_path,
|
|
sizeof(menu->deferred_path));
|
|
|
|
if (ret == -1)
|
|
{
|
|
event_command(EVENT_CMD_LOAD_CORE);
|
|
menu_entries_common_load_content(false);
|
|
return -1;
|
|
}
|
|
|
|
if (ret == 0)
|
|
menu_list_push_stack_refresh(
|
|
menu->menu_list,
|
|
settings->libretro_directory,
|
|
"deferred_core_list",
|
|
0, idx);
|
|
|
|
return ret;
|
|
}
|
|
|
|
static int action_ok_file_load(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
const char *menu_label = NULL;
|
|
const char *menu_path = NULL;
|
|
rarch_setting_t *setting = NULL;
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
global_t *global = global_get_ptr();
|
|
|
|
if (!menu)
|
|
return -1;
|
|
|
|
menu_list_get_last(menu->menu_list->menu_stack,
|
|
&menu_path, &menu_label, NULL);
|
|
|
|
setting = menu_setting_find(menu_label);
|
|
|
|
if (setting && setting->type == ST_PATH)
|
|
{
|
|
menu_action_setting_set_current_string_path(setting, menu_path, path);
|
|
menu_list_pop_stack_by_needle(menu->menu_list, setting->name);
|
|
}
|
|
else
|
|
{
|
|
if (type == MENU_FILE_IN_CARCHIVE)
|
|
fill_pathname_join_delim(global->fullpath, menu_path, path,
|
|
'#',sizeof(global->fullpath));
|
|
else
|
|
fill_pathname_join(global->fullpath, menu_path, path,
|
|
sizeof(global->fullpath));
|
|
|
|
menu_entries_common_load_content(true);
|
|
|
|
return -1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int action_ok_set_path(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
const char *menu_path = NULL;
|
|
const char *menu_label = NULL;
|
|
rarch_setting_t *setting = NULL;
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
|
|
if (!menu)
|
|
return -1;
|
|
|
|
menu_list_get_last_stack(menu->menu_list,
|
|
&menu_path, &menu_label, NULL);
|
|
|
|
setting = menu_setting_find(menu_label);
|
|
|
|
if (!setting)
|
|
return -1;
|
|
|
|
menu_action_setting_set_current_string_path(setting, menu_path, path);
|
|
menu_list_pop_stack_by_needle(menu->menu_list, setting->name);
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int action_ok_custom_viewport(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
/* Start with something sane. */
|
|
global_t *global = global_get_ptr();
|
|
video_viewport_t *custom = &global->console.screen.viewports.custom_vp;
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
settings_t *settings = config_get_ptr();
|
|
|
|
if (!menu)
|
|
return -1;
|
|
|
|
|
|
menu_list_push_stack(
|
|
menu->menu_list,
|
|
"",
|
|
"custom_viewport_1",
|
|
MENU_SETTINGS_CUSTOM_VIEWPORT,
|
|
idx);
|
|
|
|
video_driver_viewport_info(custom);
|
|
|
|
aspectratio_lut[ASPECT_RATIO_CUSTOM].value =
|
|
(float)custom->width / custom->height;
|
|
|
|
settings->video.aspect_ratio_idx = ASPECT_RATIO_CUSTOM;
|
|
|
|
event_command(EVENT_CMD_VIDEO_SET_ASPECT_RATIO);
|
|
return 0;
|
|
}
|
|
|
|
|
|
static int generic_action_ok_command(enum event_command cmd)
|
|
{
|
|
if (!event_command(cmd))
|
|
return -1;
|
|
return 0;
|
|
}
|
|
|
|
static int action_ok_load_state(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
if (generic_action_ok_command(EVENT_CMD_LOAD_STATE) == -1)
|
|
return -1;
|
|
return generic_action_ok_command(EVENT_CMD_RESUME);
|
|
}
|
|
|
|
|
|
static int action_ok_save_state(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
if (generic_action_ok_command(EVENT_CMD_SAVE_STATE) == -1)
|
|
return -1;
|
|
return generic_action_ok_command(EVENT_CMD_RESUME);
|
|
}
|
|
|
|
static int action_ok_core_updater_download(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
#ifdef HAVE_NETWORKING
|
|
char core_path[PATH_MAX_LENGTH], msg[PATH_MAX_LENGTH];
|
|
settings_t *settings = config_get_ptr();
|
|
|
|
fill_pathname_join(core_path, settings->network.buildbot_url,
|
|
path, sizeof(core_path));
|
|
|
|
strlcpy(core_updater_path, path, sizeof(core_updater_path));
|
|
snprintf(msg, sizeof(msg), "Starting download: %s.", path);
|
|
|
|
rarch_main_msg_queue_push(msg, 1, 90, true);
|
|
|
|
rarch_main_data_msg_queue_push(DATA_TYPE_HTTP, core_path,
|
|
"cb_core_updater_download", 0, 1, true);
|
|
#endif
|
|
return 0;
|
|
}
|
|
|
|
static int action_ok_disk_cycle_tray_status(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
return generic_action_ok_command(EVENT_CMD_DISK_EJECT_TOGGLE);
|
|
}
|
|
|
|
static int action_ok_unload_core(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
return generic_action_ok_command(EVENT_CMD_UNLOAD_CORE);
|
|
}
|
|
|
|
static int action_ok_quit(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
return generic_action_ok_command(EVENT_CMD_QUIT);
|
|
}
|
|
|
|
static int action_ok_save_new_config(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
return generic_action_ok_command(EVENT_CMD_MENU_SAVE_CONFIG);
|
|
}
|
|
|
|
static int action_ok_resume_content(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
return generic_action_ok_command(EVENT_CMD_RESUME);
|
|
}
|
|
|
|
static int action_ok_restart_content(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
return generic_action_ok_command(EVENT_CMD_RESET);
|
|
}
|
|
|
|
static int action_ok_screenshot(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
return generic_action_ok_command(EVENT_CMD_TAKE_SCREENSHOT);
|
|
}
|
|
|
|
static int action_ok_file_load_or_resume(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
global_t *global = global_get_ptr();
|
|
|
|
if (!menu)
|
|
return -1;
|
|
|
|
if (!strcmp(menu->deferred_path, global->fullpath))
|
|
return generic_action_ok_command(EVENT_CMD_RESUME);
|
|
else
|
|
{
|
|
strlcpy(global->fullpath,
|
|
menu->deferred_path, sizeof(global->fullpath));
|
|
event_command(EVENT_CMD_LOAD_CORE);
|
|
rarch_main_set_state(RARCH_ACTION_STATE_LOAD_CONTENT);
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
static int action_ok_shader_apply_changes(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
return generic_action_ok_command(EVENT_CMD_SHADERS_APPLY_CHANGES);
|
|
}
|
|
|
|
static int action_ok_lookup_setting(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
return menu_setting_set(type, label, MENU_ACTION_OK, false);
|
|
}
|
|
|
|
static int action_ok_rdb_entry_submenu(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
int ret;
|
|
union string_list_elem_attr attr;
|
|
char new_label[PATH_MAX_LENGTH];
|
|
char *rdb = NULL;
|
|
int len = 0;
|
|
struct string_list *str_list = NULL;
|
|
struct string_list *str_list2 = NULL;
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
|
|
if (!menu)
|
|
return -1;
|
|
|
|
if (!label)
|
|
return -1;
|
|
|
|
str_list = string_split(label, "|");
|
|
|
|
if (!str_list)
|
|
return -1;
|
|
|
|
str_list2 = string_list_new();
|
|
if (!str_list2)
|
|
{
|
|
string_list_free(str_list);
|
|
return -1;
|
|
}
|
|
|
|
/* element 0 : label
|
|
* element 1 : value
|
|
* element 2 : database path
|
|
*/
|
|
|
|
attr.i = 0;
|
|
|
|
len += strlen(str_list->elems[1].data) + 1;
|
|
string_list_append(str_list2, str_list->elems[1].data, attr);
|
|
|
|
len += strlen(str_list->elems[2].data) + 1;
|
|
string_list_append(str_list2, str_list->elems[2].data, attr);
|
|
|
|
rdb = (char*)calloc(len, sizeof(char));
|
|
|
|
if (!rdb)
|
|
{
|
|
string_list_free(str_list);
|
|
string_list_free(str_list2);
|
|
return -1;
|
|
}
|
|
|
|
string_list_join_concat(rdb, len, str_list2, "|");
|
|
|
|
strlcpy(new_label, "deferred_cursor_manager_list_", sizeof(new_label));
|
|
strlcat(new_label, str_list->elems[0].data, sizeof(new_label));
|
|
|
|
ret = menu_list_push_stack_refresh(
|
|
menu->menu_list,
|
|
rdb,
|
|
new_label,
|
|
0, idx);
|
|
|
|
string_list_free(str_list);
|
|
string_list_free(str_list2);
|
|
|
|
return ret;
|
|
}
|
|
|
|
static int action_ok_help(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
if (!menu)
|
|
return -1;
|
|
|
|
menu_list_push_stack(
|
|
menu->menu_list,
|
|
"",
|
|
"help",
|
|
0,
|
|
0);
|
|
menu->push_start_screen = false;
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int action_ok_video_resolution(const char *path,
|
|
const char *label, unsigned type, size_t idx)
|
|
{
|
|
unsigned width = 0, height = 0;
|
|
global_t *global = global_get_ptr();
|
|
|
|
(void)global;
|
|
(void)width;
|
|
(void)height;
|
|
|
|
#ifdef __CELLOS_LV2__
|
|
if (global->console.screen.resolutions.list[
|
|
global->console.screen.resolutions.current.idx] ==
|
|
CELL_VIDEO_OUT_RESOLUTION_576)
|
|
{
|
|
if (global->console.screen.pal_enable)
|
|
global->console.screen.pal60_enable = true;
|
|
}
|
|
else
|
|
{
|
|
global->console.screen.pal_enable = false;
|
|
global->console.screen.pal60_enable = false;
|
|
}
|
|
|
|
event_command(EVENT_CMD_REINIT);
|
|
#else
|
|
if (video_driver_get_video_output_size(&width, &height))
|
|
video_driver_set_video_mode(width, height, true);
|
|
#endif
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int is_rdb_entry(const char *label)
|
|
{
|
|
return (
|
|
!(strcmp(label, "rdb_entry_publisher")) ||
|
|
!(strcmp(label, "rdb_entry_developer")) ||
|
|
!(strcmp(label, "rdb_entry_origin")) ||
|
|
!(strcmp(label, "rdb_entry_franchise")) ||
|
|
!(strcmp(label, "rdb_entry_enhancement_hw")) ||
|
|
!(strcmp(label, "rdb_entry_esrb_rating")) ||
|
|
!(strcmp(label, "rdb_entry_bbfc_rating")) ||
|
|
!(strcmp(label, "rdb_entry_elspa_rating")) ||
|
|
!(strcmp(label, "rdb_entry_pegi_rating")) ||
|
|
!(strcmp(label, "rdb_entry_cero_rating")) ||
|
|
!(strcmp(label, "rdb_entry_edge_magazine_rating")) ||
|
|
!(strcmp(label, "rdb_entry_edge_magazine_issue")) ||
|
|
!(strcmp(label, "rdb_entry_famitsu_magazine_rating")) ||
|
|
!(strcmp(label, "rdb_entry_releasemonth")) ||
|
|
!(strcmp(label, "rdb_entry_releaseyear")) ||
|
|
!(strcmp(label, "rdb_entry_max_users"))
|
|
);
|
|
}
|
|
|
|
void menu_entries_cbs_init_bind_ok(menu_file_list_cbs_t *cbs,
|
|
const char *path, const char *label, unsigned type, size_t idx,
|
|
const char *elem0, const char *elem1, const char *menu_label)
|
|
{
|
|
rarch_setting_t *setting = menu_setting_find(label);
|
|
menu_handle_t *menu = menu_driver_get_ptr();
|
|
|
|
if (!cbs)
|
|
return;
|
|
if (!menu)
|
|
return;
|
|
|
|
#if 0
|
|
RARCH_LOG("path: %s, label: %s, elem0 : %s, elem1: %s\n", path, label, elem0, elem1);
|
|
#endif
|
|
|
|
cbs->action_ok = action_ok_lookup_setting;
|
|
|
|
if (elem0[0] != '\0' && is_rdb_entry(elem0))
|
|
{
|
|
cbs->action_ok = action_ok_rdb_entry_submenu;
|
|
return;
|
|
}
|
|
|
|
if (!strcmp(label, "custom_bind_all"))
|
|
cbs->action_ok = action_ok_lookup_setting;
|
|
else if (type == MENU_SETTINGS_CUSTOM_BIND_KEYBOARD ||
|
|
type == MENU_SETTINGS_CUSTOM_BIND)
|
|
cbs->action_ok = action_ok_lookup_setting;
|
|
else if (type >= MENU_SETTINGS_SHADER_PARAMETER_0
|
|
&& type <= MENU_SETTINGS_SHADER_PARAMETER_LAST)
|
|
cbs->action_ok = NULL;
|
|
else if (type >= MENU_SETTINGS_SHADER_PRESET_PARAMETER_0
|
|
&& type <= MENU_SETTINGS_SHADER_PRESET_PARAMETER_LAST)
|
|
cbs->action_ok = NULL;
|
|
else if (type >= MENU_SETTINGS_CHEAT_BEGIN
|
|
&& type <= MENU_SETTINGS_CHEAT_END)
|
|
cbs->action_ok = action_ok_cheat;
|
|
else if (!strcmp(label, "savestate"))
|
|
cbs->action_ok = action_ok_save_state;
|
|
else if (!strcmp(label, "loadstate"))
|
|
cbs->action_ok = action_ok_load_state;
|
|
else if (!strcmp(label, "resume_content"))
|
|
cbs->action_ok = action_ok_resume_content;
|
|
else if (!strcmp(label, "restart_content"))
|
|
cbs->action_ok = action_ok_restart_content;
|
|
else if (!strcmp(label, "take_screenshot"))
|
|
cbs->action_ok = action_ok_screenshot;
|
|
else if (!strcmp(label, "file_load_or_resume"))
|
|
cbs->action_ok = action_ok_file_load_or_resume;
|
|
else if (!strcmp(label, "quit_retroarch"))
|
|
cbs->action_ok = action_ok_quit;
|
|
else if (!strcmp(label, "unload_core"))
|
|
cbs->action_ok = action_ok_unload_core;
|
|
else if (!strcmp(label, "save_new_config"))
|
|
cbs->action_ok = action_ok_save_new_config;
|
|
else if (!strcmp(label, "help"))
|
|
cbs->action_ok = action_ok_help;
|
|
else if (!strcmp(label, "video_shader_pass"))
|
|
cbs->action_ok = action_ok_shader_pass;
|
|
else if (!strcmp(label, "video_shader_preset"))
|
|
cbs->action_ok = action_ok_shader_preset;
|
|
else if (!strcmp(label, "cheat_file_load"))
|
|
cbs->action_ok = action_ok_cheat_file;
|
|
else if (!strcmp(label, "audio_dsp_plugin"))
|
|
cbs->action_ok = action_ok_audio_dsp_plugin;
|
|
else if (!strcmp(label, "video_filter"))
|
|
cbs->action_ok = action_ok_video_filter;
|
|
else if (!strcmp(label, "remap_file_load"))
|
|
cbs->action_ok = action_ok_remap_file;
|
|
else if (!strcmp(label, "record_config"))
|
|
cbs->action_ok = action_ok_record_configfile;
|
|
else if (!strcmp(label, "core_updater_list"))
|
|
cbs->action_ok = action_ok_core_updater_list;
|
|
else if (!strcmp(label, "video_shader_parameters") ||
|
|
!strcmp(label, "video_shader_preset_parameters")
|
|
)
|
|
cbs->action_ok = action_ok_shader_parameters;
|
|
else if (
|
|
!strcmp(label, "shader_options") ||
|
|
!strcmp(label, "video_options") ||
|
|
!strcmp(label, "Input Settings") ||
|
|
!strcmp(label, "core_options") ||
|
|
!strcmp(label, "core_cheat_options") ||
|
|
!strcmp(label, "core_input_remapping_options") ||
|
|
!strcmp(label, "core_information") ||
|
|
!strcmp(label, "system_information") ||
|
|
!strcmp(label, "disk_options") ||
|
|
!strcmp(label, "settings") ||
|
|
!strcmp(label, "performance_counters") ||
|
|
!strcmp(label, "frontend_counters") ||
|
|
!strcmp(label, "core_counters") ||
|
|
!strcmp(label, "management") ||
|
|
!strcmp(label, "options")
|
|
)
|
|
cbs->action_ok = action_ok_push_default;
|
|
else if (
|
|
!strcmp(label, "load_content") ||
|
|
!strcmp(label, "detect_core_list")
|
|
)
|
|
cbs->action_ok = action_ok_push_content_list;
|
|
else if (!strcmp(label, "history_list") ||
|
|
!strcmp(label, "cursor_manager_list") ||
|
|
!strcmp(label, "database_manager_list") ||
|
|
(setting && setting->browser_selection_type == ST_DIR)
|
|
)
|
|
cbs->action_ok = action_ok_push_generic_list;
|
|
else if (!strcmp(label, "shader_apply_changes"))
|
|
cbs->action_ok = action_ok_shader_apply_changes;
|
|
else if (!strcmp(label, "cheat_apply_changes"))
|
|
cbs->action_ok = action_ok_cheat_apply_changes;
|
|
else if (!strcmp(label, "video_shader_preset_save_as"))
|
|
cbs->action_ok = action_ok_shader_preset_save_as;
|
|
else if (!strcmp(label, "cheat_file_save_as"))
|
|
cbs->action_ok = action_ok_cheat_file_save_as;
|
|
else if (!strcmp(label, "remap_file_save_as"))
|
|
cbs->action_ok = action_ok_remap_file_save_as;
|
|
else if (!strcmp(label, "remap_file_save_core"))
|
|
cbs->action_ok = action_ok_remap_file_save_core;
|
|
else if (!strcmp(label, "remap_file_save_game"))
|
|
cbs->action_ok = action_ok_remap_file_save_game;
|
|
else if (!strcmp(label, "core_list"))
|
|
cbs->action_ok = action_ok_core_list;
|
|
else if (!strcmp(label, "disk_image_append"))
|
|
cbs->action_ok = action_ok_disk_image_append_list;
|
|
else if (!strcmp(label, "configurations"))
|
|
cbs->action_ok = action_ok_configurations_list;
|
|
else
|
|
switch (type)
|
|
{
|
|
case MENU_SETTINGS_VIDEO_RESOLUTION:
|
|
cbs->action_ok = action_ok_video_resolution;
|
|
break;
|
|
case MENU_FILE_PLAYLIST_ENTRY:
|
|
if (!strcmp(label, "rdb_entry_start_game"))
|
|
cbs->action_ok = action_ok_rdb_playlist_entry;
|
|
else
|
|
cbs->action_ok = action_ok_playlist_entry;
|
|
break;
|
|
case MENU_FILE_CONTENTLIST_ENTRY:
|
|
cbs->action_ok = action_ok_push_generic_list;
|
|
break;
|
|
case MENU_FILE_CHEAT:
|
|
cbs->action_ok = action_ok_cheat_file_load;
|
|
break;
|
|
case MENU_FILE_RECORD_CONFIG:
|
|
cbs->action_ok = action_ok_record_configfile_load;
|
|
break;
|
|
case MENU_FILE_REMAP:
|
|
cbs->action_ok = action_ok_remap_file_load;
|
|
break;
|
|
case MENU_FILE_SHADER_PRESET:
|
|
cbs->action_ok = action_ok_shader_preset_load;
|
|
break;
|
|
case MENU_FILE_SHADER:
|
|
cbs->action_ok = action_ok_shader_pass_load;
|
|
break;
|
|
case MENU_FILE_IMAGE:
|
|
cbs->action_ok = action_ok_menu_wallpaper_load;
|
|
break;
|
|
case MENU_FILE_USE_DIRECTORY:
|
|
cbs->action_ok = action_ok_path_use_directory;
|
|
break;
|
|
case MENU_FILE_CONFIG:
|
|
cbs->action_ok = action_ok_config_load;
|
|
break;
|
|
case MENU_FILE_DIRECTORY:
|
|
cbs->action_ok = action_ok_directory_push;
|
|
break;
|
|
case MENU_FILE_CARCHIVE:
|
|
cbs->action_ok = action_ok_compressed_archive_push;
|
|
break;
|
|
case MENU_FILE_CORE:
|
|
if (!strcmp(menu_label, "deferred_core_list"))
|
|
cbs->action_ok = action_ok_core_load_deferred;
|
|
else if (!strcmp(menu_label, "core_list"))
|
|
cbs->action_ok = action_ok_core_load;
|
|
else if (!strcmp(menu_label, "core_updater_list"))
|
|
cbs->action_ok = action_ok_core_download;
|
|
else
|
|
return;
|
|
break;
|
|
case MENU_FILE_DOWNLOAD_CORE:
|
|
cbs->action_ok = action_ok_core_updater_download;
|
|
break;
|
|
case MENU_FILE_DOWNLOAD_CORE_INFO:
|
|
break;
|
|
case MENU_FILE_RDB:
|
|
if (!strcmp(menu_label, "deferred_database_manager_list"))
|
|
cbs->action_ok = action_ok_database_manager_list_deferred;
|
|
else if (!strcmp(menu_label, "database_manager_list")
|
|
|| !strcmp(menu_label, "Horizontal Menu"))
|
|
cbs->action_ok = action_ok_database_manager_list;
|
|
else
|
|
return;
|
|
break;
|
|
case MENU_FILE_RDB_ENTRY:
|
|
cbs->action_ok = action_ok_rdb_entry;
|
|
break;
|
|
case MENU_FILE_CURSOR:
|
|
if (!strcmp(menu_label, "deferred_database_manager_list"))
|
|
cbs->action_ok = action_ok_cursor_manager_list_deferred;
|
|
else if (!strcmp(menu_label, "cursor_manager_list"))
|
|
cbs->action_ok = action_ok_cursor_manager_list;
|
|
break;
|
|
case MENU_FILE_FONT:
|
|
case MENU_FILE_OVERLAY:
|
|
case MENU_FILE_AUDIOFILTER:
|
|
cbs->action_ok = action_ok_set_path;
|
|
break;
|
|
case MENU_FILE_VIDEOFILTER:
|
|
cbs->action_ok = action_ok_video_filter_file_load;
|
|
break;
|
|
#ifdef HAVE_COMPRESSION
|
|
case MENU_FILE_IN_CARCHIVE:
|
|
#endif
|
|
case MENU_FILE_PLAIN:
|
|
if (!strcmp(menu_label, "detect_core_list"))
|
|
cbs->action_ok = action_ok_file_load_with_detect_core;
|
|
else if (!strcmp(menu_label, "disk_image_append"))
|
|
cbs->action_ok = action_ok_disk_image_append;
|
|
else
|
|
cbs->action_ok = action_ok_file_load;
|
|
break;
|
|
case MENU_SETTINGS_CUSTOM_VIEWPORT:
|
|
cbs->action_ok = action_ok_custom_viewport;
|
|
break;
|
|
case MENU_SETTINGS:
|
|
case MENU_SETTING_GROUP:
|
|
case MENU_SETTING_SUBGROUP:
|
|
cbs->action_ok = action_ok_push_default;
|
|
break;
|
|
case MENU_SETTINGS_CORE_DISK_OPTIONS_DISK_CYCLE_TRAY_STATUS:
|
|
cbs->action_ok = action_ok_disk_cycle_tray_status;
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
}
|