RetroArch/menu/menu_displaylist.c
Gregor Richards 816d7786ac Re-adding the option to start in spectator mode
This used to be a configuration option because spectator mode and "net"
mode were incompatible. When the ability to switch between player and
spectator was added, the configuration option was removed, since it was
no longer a mode toggle. This re-adds it, mainly so that I can use it to
implement regression tests.
2017-02-16 19:17:06 -05:00

6391 lines
228 KiB
C

/* RetroArch - A frontend for libretro.
* Copyright (C) 2011-2017 - Daniel De Matteis
* Copyright (C) 2014-2017 - Jean-André Santoni
* Copyright (C) 2016-2017 - Brad Parker
*
* 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 <stddef.h>
#include <compat/strl.h>
#include <compat/strcasestr.h>
#include <lists/file_list.h>
#include <lists/dir_list.h>
#include <file/file_path.h>
#include <file/archive_file.h>
#include <retro_stat.h>
#include <string/stdstring.h>
#include <features/features_cpu.h>
#ifdef HAVE_CONFIG_H
#include "../config.h"
#endif
#ifdef HAVE_LIBRETRODB
#include "../database_info.h"
#endif
#ifdef HAVE_CHEEVOS
#include "../cheevos/cheevos.h"
#endif
#ifdef HAVE_NETWORKING
#include <net/net_http_parse.h>
#include "../network/netplay/netplay_discovery.h"
#endif
#ifdef __linux__
#include "../frontend/drivers/platform_linux.h"
#endif
#include "menu_content.h"
#include "menu_driver.h"
#include "menu_navigation.h"
#include "menu_shader.h"
#include "widgets/menu_dialog.h"
#include "widgets/menu_list.h"
#include "widgets/menu_filebrowser.h"
#include "menu_cbs.h"
#include "../configuration.h"
#include "../file_path_special.h"
#include "../defaults.h"
#include "../managers/cheat_manager.h"
#include "../managers/core_option_manager.h"
#include "../paths.h"
#include "../retroarch.h"
#include "../runloop.h"
#include "../core.h"
#include "../frontend/frontend_driver.h"
#include "../ui/ui_companion_driver.h"
#include "../gfx/video_shader_driver.h"
#include "../config.features.h"
#include "../version_git.h"
#include "../input/input_config.h"
#include "../list_special.h"
#include "../performance_counters.h"
#include "../core_info.h"
#include "../wifi/wifi_driver.h"
#include "../tasks/tasks_internal.h"
static char new_path_entry[4096] = {0};
static char new_lbl_entry[4096] = {0};
static char new_entry[4096] = {0};
static enum msg_hash_enums new_type = MSG_UNKNOWN;
#ifdef HAVE_NETWORKING
static void print_buf_lines(file_list_t *list, char *buf,
const char *label, int buf_size,
enum msg_file_type type, bool append, bool extended)
{
char c;
int i, j = 0;
char *line_start = buf;
if (!buf || !buf_size)
{
menu_entries_append_enum(list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_ENTRIES_TO_DISPLAY),
msg_hash_to_str(MENU_ENUM_LABEL_NO_ENTRIES_TO_DISPLAY),
MENU_ENUM_LABEL_NO_ENTRIES_TO_DISPLAY,
FILE_TYPE_NONE, 0, 0);
return;
}
for (i = 0; i < buf_size; i++)
{
size_t ln;
const char *core_date = NULL;
const char *core_crc = NULL;
const char *core_pathname = NULL;
struct string_list *str_list = NULL;
/* The end of the buffer, print the last bit */
if (*(buf + i) == '\0')
break;
if (*(buf + i) != '\n')
continue;
/* Found a line ending, print the line and compute new line_start */
/* Save the next char */
c = *(buf + i + 1);
/* replace with \0 */
*(buf + i + 1) = '\0';
/* We need to strip the newline. */
ln = strlen(line_start) - 1;
if (line_start[ln] == '\n')
line_start[ln] = '\0';
str_list = string_split(line_start, " ");
if (str_list->elems[0].data)
core_date = str_list->elems[0].data;
if (str_list->elems[1].data)
core_crc = str_list->elems[1].data;
if (str_list->elems[2].data)
core_pathname = str_list->elems[2].data;
(void)core_date;
(void)core_crc;
if (extended)
{
if (append)
menu_entries_append_enum(list, core_pathname, "",
MENU_ENUM_LABEL_URL_ENTRY, type, 0, 0);
else
menu_entries_prepend(list, core_pathname, "",
MENU_ENUM_LABEL_URL_ENTRY, type, 0, 0);
}
else
{
if (append)
menu_entries_append_enum(list, line_start, label,
MENU_ENUM_LABEL_URL_ENTRY, type, 0, 0);
else
menu_entries_prepend(list, line_start, label,
MENU_ENUM_LABEL_URL_ENTRY, type, 0, 0);
}
switch (type)
{
case FILE_TYPE_DOWNLOAD_CORE:
{
settings_t *settings = config_get_ptr();
if (settings)
{
char display_name[255];
char core_path[PATH_MAX_LENGTH];
char *last = NULL;
display_name[0] = core_path[0] = '\0';
fill_pathname_join_noext(
core_path,
settings->path.libretro_info,
(extended && !string_is_empty(core_pathname))
? core_pathname : line_start,
sizeof(core_path));
path_remove_extension(core_path);
last = (char*)strrchr(core_path, '_');
if (!string_is_empty(last))
{
if (!string_is_equal(last, "_libretro"))
*last = '\0';
}
strlcat(core_path,
file_path_str(FILE_PATH_CORE_INFO_EXTENSION),
sizeof(core_path));
if (
path_file_exists(core_path)
&& core_info_get_display_name(
core_path, display_name, sizeof(display_name)))
menu_entries_set_alt_at_offset(list, j, display_name);
}
}
break;
default:
case FILE_TYPE_NONE:
break;
}
j++;
string_list_free(str_list);
/* Restore the saved char */
*(buf + i + 1) = c;
line_start = buf + i + 1;
}
if (append)
file_list_sort_on_alt(list);
/* If the buffer was completely full, and didn't end
* with a newline, just ignore the partial last line. */
}
static int menu_displaylist_parse_netplay(
menu_displaylist_info_t *info)
{
settings_t *settings = config_get_ptr();
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE_HOST),
msg_hash_to_str(MENU_ENUM_LABEL_NETPLAY_ENABLE_HOST),
MENU_ENUM_LABEL_NETPLAY_ENABLE_HOST,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE_CLIENT),
msg_hash_to_str(MENU_ENUM_LABEL_NETPLAY_ENABLE_CLIENT),
MENU_ENUM_LABEL_NETPLAY_ENABLE_CLIENT,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NETPLAY_DISCONNECT),
msg_hash_to_str(MENU_ENUM_LABEL_NETPLAY_DISCONNECT),
MENU_ENUM_LABEL_NETPLAY_DISCONNECT,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NETPLAY_LAN_SCAN_SETTINGS),
msg_hash_to_str(MENU_ENUM_LABEL_NETPLAY_LAN_SCAN_SETTINGS),
MENU_ENUM_LABEL_NETPLAY_LAN_SCAN_SETTINGS, MENU_SETTING_GROUP, 0, 0);
if (!string_is_equal(settings->menu.driver, "xmb"))
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NETPLAY_TAB),
msg_hash_to_str(MENU_ENUM_LABEL_NETPLAY_TAB),
MENU_ENUM_LABEL_NETPLAY_TAB, MENU_SETTING_GROUP, 0, 0);
return 0;
}
#ifndef HAVE_SOCKET_LEGACY
#include <net/net_ifinfo.h>
static int menu_displaylist_parse_network_info(menu_displaylist_info_t *info)
{
unsigned k = 0;
net_ifinfo_t list;
if (!net_ifinfo_new(&list))
return -1;
for (k = 0; k < list.size; k++)
{
char tmp[255];
tmp[0] = '\0';
snprintf(tmp, sizeof(tmp), "%s (%s) : %s\n",
msg_hash_to_str(MSG_INTERFACE),
list.entries[k].name, list.entries[k].host);
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_NETWORK_INFO_ENTRY,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
}
net_ifinfo_free(&list);
return 0;
}
#endif
#endif
static void menu_displaylist_push_perfcounter(
menu_displaylist_info_t *info,
struct retro_perf_counter **counters,
unsigned num, unsigned id)
{
unsigned i;
if (!counters || num == 0)
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_PERFORMANCE_COUNTERS),
msg_hash_to_str(MENU_ENUM_LABEL_NO_PERFORMANCE_COUNTERS),
MENU_ENUM_LABEL_NO_PERFORMANCE_COUNTERS,
0, 0, 0);
return;
}
for (i = 0; i < num; i++)
if (counters[i] && counters[i]->ident)
menu_entries_append_enum(info->list,
counters[i]->ident, "",
(enum msg_hash_enums)(id + i),
id + i , 0, 0);
}
static int menu_displaylist_parse_core_info(menu_displaylist_info_t *info)
{
unsigned i;
char tmp[PATH_MAX_LENGTH];
core_info_t *core_info = NULL;
tmp[0] = '\0';
core_info_get_current_core(&core_info);
if (!core_info || !core_info->config_data)
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_CORE_INFORMATION_AVAILABLE),
msg_hash_to_str(MENU_ENUM_LABEL_NO_CORE_INFORMATION_AVAILABLE),
MENU_ENUM_LABEL_NO_CORE_INFORMATION_AVAILABLE,
0, 0, 0);
return 0;
}
fill_pathname_noext(tmp,
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NAME),
": ",
sizeof(tmp));
if (core_info->core_name)
strlcat(tmp, core_info->core_name, sizeof(tmp));
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_CORE_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
fill_pathname_noext(tmp,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_LABEL),
": ",
sizeof(tmp));
if (core_info->display_name)
strlcat(tmp, core_info->display_name, sizeof(tmp));
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_CORE_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
if (core_info->systemname)
{
fill_pathname_noext(tmp,
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_NAME),
": ",
sizeof(tmp));
strlcat(tmp, core_info->systemname, sizeof(tmp));
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_CORE_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
}
if (core_info->system_manufacturer)
{
fill_pathname_noext(tmp,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_MANUFACTURER),
": ",
sizeof(tmp));
strlcat(tmp, core_info->system_manufacturer, sizeof(tmp));
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_CORE_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
}
if (core_info->categories_list)
{
fill_pathname_noext(tmp,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_INFO_CATEGORIES),
": ",
sizeof(tmp));
string_list_join_concat(tmp, sizeof(tmp),
core_info->categories_list, ", ");
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_CORE_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
}
if (core_info->authors_list)
{
fill_pathname_noext(tmp,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_INFO_AUTHORS),
": ",
sizeof(tmp));
string_list_join_concat(tmp, sizeof(tmp),
core_info->authors_list, ", ");
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_CORE_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
}
if (core_info->permissions_list)
{
fill_pathname_noext(tmp,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_INFO_PERMISSIONS),
": ",
sizeof(tmp));
string_list_join_concat(tmp, sizeof(tmp),
core_info->permissions_list, ", ");
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_CORE_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
}
if (core_info->licenses_list)
{
fill_pathname_noext(tmp,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_INFO_LICENSES),
": ",
sizeof(tmp));
string_list_join_concat(tmp, sizeof(tmp),
core_info->licenses_list, ", ");
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_CORE_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
}
if (core_info->supported_extensions_list)
{
fill_pathname_noext(tmp,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_INFO_SUPPORTED_EXTENSIONS),
": ",
sizeof(tmp));
string_list_join_concat(tmp, sizeof(tmp),
core_info->supported_extensions_list, ", ");
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_CORE_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
}
if (core_info->firmware_count > 0)
{
core_info_ctx_firmware_t firmware_info;
settings_t *settings = config_get_ptr();
firmware_info.path = core_info->path;
firmware_info.directory.system = settings->directory.system;
if (core_info_list_update_missing_firmware(&firmware_info))
{
fill_pathname_noext(tmp,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_INFO_FIRMWARE),
": ",
sizeof(tmp));
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_CORE_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
/* FIXME: This looks hacky and probably
* needs to be improved for good translation support. */
for (i = 0; i < core_info->firmware_count; i++)
{
if (core_info->firmware[i].desc)
{
snprintf(tmp, sizeof(tmp), "(!) %s, %s: %s",
core_info->firmware[i].missing ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_MISSING) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_PRESENT),
core_info->firmware[i].optional ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_OPTIONAL) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REQUIRED),
core_info->firmware[i].desc ?
core_info->firmware[i].desc :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_NAME)
);
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_CORE_INFO_ENTRY,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
}
}
}
}
if (core_info->notes)
{
for (i = 0; i < core_info->note_list->size; i++)
{
strlcpy(tmp,
core_info->note_list->elems[i].data, sizeof(tmp));
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_CORE_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
}
}
return 0;
}
static uint64_t bytes_to_kb(uint64_t bytes)
{
return bytes / 1024;
}
static uint64_t bytes_to_mb(uint64_t bytes)
{
return bytes / 1024 / 1024;
}
static uint64_t bytes_to_gb(uint64_t bytes)
{
return bytes_to_kb(bytes) / 1024 / 1024;
}
static int menu_displaylist_parse_system_info(menu_displaylist_info_t *info)
{
int controller;
#if defined(HAVE_OPENGL) || defined(HAVE_OPENGLES)
gfx_ctx_ident_t ident_info;
#endif
char tmp[PATH_MAX_LENGTH];
char feat_str[255];
#ifdef ANDROID
bool perms = false;
#endif
const char *tmp_string = NULL;
const frontend_ctx_driver_t *frontend = frontend_get_ptr();
settings_t *settings = config_get_ptr();
tmp[0] = feat_str[0] = '\0';
snprintf(tmp, sizeof(tmp), "%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_BUILD_DATE), __DATE__);
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
(void)tmp_string;
#ifdef HAVE_GIT_VERSION
fill_pathname_noext(tmp,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GIT_VERSION),
": ",
sizeof(tmp));
strlcat(tmp, retroarch_git_version, sizeof(tmp));
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
#endif
retroarch_get_capabilities(RARCH_CAPABILITIES_COMPILER, tmp, sizeof(tmp));
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
#ifdef ANDROID
perms = test_permissions(internal_storage_path);
snprintf(tmp, sizeof(tmp), "%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INTERNAL_STORAGE_STATUS),
perms ? "read-write" : "read-only");
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
#endif
{
char cpu_str[255];
cpu_str[0] = '\0';
fill_pathname_noext(cpu_str,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CPU_FEATURES),
": ",
sizeof(cpu_str));
retroarch_get_capabilities(RARCH_CAPABILITIES_CPU,
cpu_str, sizeof(cpu_str));
menu_entries_append_enum(info->list, cpu_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
}
{
char cpu_str[255];
char cpu_arch_str[PATH_MAX_LENGTH];
char cpu_text_str[PATH_MAX_LENGTH];
enum frontend_architecture arch = frontend_driver_get_cpu_architecture();
cpu_str[0] = cpu_arch_str[0] = cpu_text_str[0] = '\0';
strlcpy(cpu_text_str,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CPU_ARCHITECTURE),
sizeof(cpu_text_str));
switch (arch)
{
case FRONTEND_ARCH_X86:
strlcpy(cpu_arch_str, "x86", sizeof(cpu_arch_str));
break;
case FRONTEND_ARCH_X86_64:
strlcpy(cpu_arch_str, "x86-64", sizeof(cpu_arch_str));
break;
case FRONTEND_ARCH_PPC:
strlcpy(cpu_arch_str, "PPC", sizeof(cpu_arch_str));
break;
case FRONTEND_ARCH_ARM:
strlcpy(cpu_arch_str, "ARM", sizeof(cpu_arch_str));
break;
case FRONTEND_ARCH_ARMV7:
strlcpy(cpu_arch_str, "ARMv7", sizeof(cpu_arch_str));
break;
case FRONTEND_ARCH_ARMV8:
strlcpy(cpu_arch_str, "ARMv8", sizeof(cpu_arch_str));
break;
case FRONTEND_ARCH_MIPS:
strlcpy(cpu_arch_str, "MIPS", sizeof(cpu_arch_str));
break;
case FRONTEND_ARCH_TILE:
strlcpy(cpu_arch_str, "Tilera", sizeof(cpu_arch_str));
break;
case FRONTEND_ARCH_NONE:
default:
strlcpy(cpu_arch_str,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE),
sizeof(cpu_arch_str));
break;
}
snprintf(cpu_str, sizeof(cpu_str), "%s %s", cpu_text_str, cpu_arch_str);
menu_entries_append_enum(info->list, cpu_str,
msg_hash_to_str(MENU_ENUM_LABEL_CPU_ARCHITECTURE),
MENU_ENUM_LABEL_CPU_ARCHITECTURE, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
}
{
char cpu_str[PATH_MAX_LENGTH];
unsigned amount_cores = cpu_features_get_core_amount();
cpu_str[0] = '\0';
snprintf(cpu_str, sizeof(cpu_str),
"%s %d\n", msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CPU_CORES), amount_cores);
menu_entries_append_enum(info->list, cpu_str,
msg_hash_to_str(MENU_ENUM_LABEL_CPU_CORES),
MENU_ENUM_LABEL_CPU_CORES, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
}
for(controller = 0; controller < MAX_USERS; controller++)
{
if (settings->input.autoconfigured[controller])
{
snprintf(tmp, sizeof(tmp), "Port #%d device name: %s (#%d)",
controller, settings->input.device_names[controller],
settings->input.device_name_index[controller]);
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(tmp, sizeof(tmp), "Port #%d device VID/PID: %d/%d",
controller, settings->input.vid[controller],
settings->input.pid[controller]);
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
}
}
if (frontend)
{
char tmp2[PATH_MAX_LENGTH];
int major = 0;
int minor = 0;
tmp2[0] = '\0';
fill_pathname_noext(tmp,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_IDENTIFIER),
": ",
sizeof(tmp));
strlcat(tmp, frontend->ident, sizeof(tmp));
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
if (frontend->get_name)
{
frontend->get_name(tmp2, sizeof(tmp2));
fill_pathname_noext(tmp,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_NAME),
": ",
sizeof(tmp));
strlcat(tmp, frontend->get_name ?
tmp2 : msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE),
sizeof(tmp));
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
}
if (frontend->get_os)
{
frontend->get_os(tmp2, sizeof(tmp2), &major, &minor);
snprintf(tmp, sizeof(tmp), "%s : %s %d.%d",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_OS),
frontend->get_os
? tmp2 : msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE),
major, minor);
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
}
snprintf(tmp, sizeof(tmp), "%s : %d",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RETRORATING_LEVEL),
frontend->get_rating ? frontend->get_rating() : -1);
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
{
char tmp[PATH_MAX_LENGTH];
char tmp2[PATH_MAX_LENGTH];
char tmp3[PATH_MAX_LENGTH];
uint64_t memory_used = frontend_driver_get_used_memory();
uint64_t memory_total = frontend_driver_get_total_memory();
tmp[0] = tmp2[0] = tmp3[0] = '\0';
if (memory_used != 0 && memory_total != 0)
{
#ifdef _WIN32
snprintf(tmp, sizeof(tmp),
"%s %s: %Iu/%Iu B",
msg_hash_to_str(MSG_MEMORY),
msg_hash_to_str(MSG_IN_BYTES),
memory_used,
memory_total
);
snprintf(tmp2, sizeof(tmp2),
"%s %s: %Iu/%Iu MB",
msg_hash_to_str(MSG_MEMORY),
msg_hash_to_str(MSG_IN_MEGABYTES),
bytes_to_mb(memory_used),
bytes_to_mb(memory_total)
);
snprintf(tmp3, sizeof(tmp3),
"%s %s: %Iu/%Iu GB",
msg_hash_to_str(MSG_MEMORY),
msg_hash_to_str(MSG_IN_GIGABYTES),
bytes_to_gb(memory_used),
bytes_to_gb(memory_total)
);
#elif defined(__STDC_VERSION__) && __STDC_VERSION__>=199901L
snprintf(tmp, sizeof(tmp),
"%s %s : %llu/%llu B",
msg_hash_to_str(MSG_MEMORY),
msg_hash_to_str(MSG_IN_BYTES),
(unsigned long long)memory_used,
(unsigned long long)memory_total
);
snprintf(tmp2, sizeof(tmp2),
"%s %s : %llu/%llu MB",
msg_hash_to_str(MSG_MEMORY),
msg_hash_to_str(MSG_IN_MEGABYTES),
(unsigned long long)bytes_to_mb(memory_used),
(unsigned long long)bytes_to_mb(memory_total)
);
snprintf(tmp3, sizeof(tmp3),
"%s %s: %llu/%llu GB",
msg_hash_to_str(MSG_MEMORY),
msg_hash_to_str(MSG_IN_GIGABYTES),
(unsigned long long)bytes_to_gb(memory_used),
(unsigned long long)bytes_to_gb(memory_total)
);
#else
snprintf(tmp, sizeof(tmp),
"%s %s: %lu/%lu B",
msg_hash_to_str(MSG_MEMORY),
msg_hash_to_str(MSG_IN_BYTES),
memory_used,
memory_total
);
snprintf(tmp2, sizeof(tmp2),
"%s %s : %lu/%lu MB",
msg_hash_to_str(MSG_MEMORY),
msg_hash_to_str(MSG_IN_MEGABYTES),
bytes_to_mb(memory_used),
bytes_to_mb(memory_total)
);
snprintf(tmp3, sizeof(tmp3),
"%s %s : %lu/%lu GB",
msg_hash_to_str(MSG_MEMORY),
msg_hash_to_str(MSG_IN_GIGABYTES),
bytes_to_gb(memory_used),
bytes_to_gb(memory_total)
);
#endif
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
menu_entries_append_enum(info->list, tmp2, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
menu_entries_append_enum(info->list, tmp3, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
}
}
if (frontend->get_powerstate)
{
int seconds = 0, percent = 0;
enum frontend_powerstate state =
frontend->get_powerstate(&seconds, &percent);
tmp2[0] = '\0';
if (percent != 0)
snprintf(tmp2, sizeof(tmp2), "%d%%", percent);
switch (state)
{
case FRONTEND_POWERSTATE_NONE:
strlcat(tmp2, " ", sizeof(tmp));
strlcat(tmp2,
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE), sizeof(tmp));
break;
case FRONTEND_POWERSTATE_NO_SOURCE:
strlcat(tmp2, " (", sizeof(tmp));
strlcat(tmp2,
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_NO_SOURCE),
sizeof(tmp));
strlcat(tmp2, ")", sizeof(tmp));
break;
case FRONTEND_POWERSTATE_CHARGING:
strlcat(tmp2, " (", sizeof(tmp));
strlcat(tmp2,
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_CHARGING),
sizeof(tmp));
strlcat(tmp2, ")", sizeof(tmp));
break;
case FRONTEND_POWERSTATE_CHARGED:
strlcat(tmp2, " (", sizeof(tmp));
strlcat(tmp2,
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_CHARGED),
sizeof(tmp));
strlcat(tmp2, ")", sizeof(tmp));
break;
case FRONTEND_POWERSTATE_ON_POWER_SOURCE:
strlcat(tmp2, " (", sizeof(tmp));
strlcat(tmp2,
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_DISCHARGING),
sizeof(tmp));
strlcat(tmp2, ")", sizeof(tmp));
break;
}
fill_pathname_noext(tmp,
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE),
": ",
sizeof(tmp));
strlcat(tmp, tmp2, sizeof(tmp));
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
}
}
#if defined(HAVE_OPENGL) || defined(HAVE_OPENGLES)
video_context_driver_get_ident(&ident_info);
tmp_string = ident_info.ident;
fill_pathname_noext(tmp,
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_VIDEO_CONTEXT_DRIVER),
": ",
sizeof(tmp));
strlcat(tmp, tmp_string ? tmp_string
: msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE),
sizeof(tmp));
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
{
gfx_ctx_metrics_t metrics;
float val = 0.0f;
metrics.type = DISPLAY_METRIC_MM_WIDTH;
metrics.value = &val;
if (video_context_driver_get_metrics(&metrics))
{
snprintf(tmp, sizeof(tmp), "%s: %.2f",
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_WIDTH),
val);
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
}
metrics.type = DISPLAY_METRIC_MM_HEIGHT;
if (video_context_driver_get_metrics(&metrics))
{
snprintf(tmp, sizeof(tmp), "%s: %.2f",
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_HEIGHT),
val);
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
}
metrics.type = DISPLAY_METRIC_DPI;
if (video_context_driver_get_metrics(&metrics))
{
snprintf(tmp, sizeof(tmp), "%s: %.2f",
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_DPI),
val);
menu_entries_append_enum(info->list, tmp, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
}
}
#endif
fill_pathname_noext(feat_str,
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBRETRODB_SUPPORT),
": ",
sizeof(feat_str));
strlcat(feat_str,
_libretrodb_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO),
sizeof(feat_str));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
fill_pathname_noext(feat_str,
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OVERLAY_SUPPORT),
": ",
sizeof(feat_str));
strlcat(feat_str, _overlay_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO),
sizeof(feat_str));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
fill_pathname_noext(feat_str,
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COMMAND_IFACE_SUPPORT),
": ",
sizeof(feat_str));
strlcat(feat_str, _command_supp
? msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES)
: msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO),
sizeof(feat_str));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s : %s",
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETWORK_COMMAND_IFACE_SUPPORT),
_network_command_supp
? msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES)
: msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s : %s",
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETWORK_REMOTE_SUPPORT),
_network_gamepad_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES)
: msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COCOA_SUPPORT),
_cocoa_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RPNG_SUPPORT),
_rpng_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RJPEG_SUPPORT),
_rjpeg_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RBMP_SUPPORT),
_rbmp_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RTGA_SUPPORT),
_rtga_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL_SUPPORT),
_sdl_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL2_SUPPORT),
_sdl2_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_VULKAN_SUPPORT),
_vulkan_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENGL_SUPPORT),
_opengl_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENGLES_SUPPORT),
_opengles_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_THREADING_SUPPORT),
_thread_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_KMS_SUPPORT),
_kms_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_UDEV_SUPPORT),
_udev_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENVG_SUPPORT),
_vg_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_EGL_SUPPORT),
_egl_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_X11_SUPPORT),
_x11_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_WAYLAND_SUPPORT),
_wayland_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_XVIDEO_SUPPORT),
_xvideo_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ALSA_SUPPORT),
_alsa_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OSS_SUPPORT),
_oss_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENAL_SUPPORT),
_al_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENSL_SUPPORT),
_sl_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RSOUND_SUPPORT),
_rsound_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ROARAUDIO_SUPPORT),
_roar_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_JACK_SUPPORT),
_jack_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PULSEAUDIO_SUPPORT),
_pulse_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DSOUND_SUPPORT),
_dsound_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_XAUDIO2_SUPPORT),
_xaudio_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ZLIB_SUPPORT),
_zlib_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_7ZIP_SUPPORT),
_7zip_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DYLIB_SUPPORT),
_dylib_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DYNAMIC_SUPPORT),
_dynamic_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CG_SUPPORT),
_cg_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GLSL_SUPPORT),
_glsl_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_HLSL_SUPPORT),
_hlsl_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBXML2_SUPPORT),
_libxml2_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL_IMAGE_SUPPORT),
_sdl_image_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FBO_SUPPORT),
_fbo_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FFMPEG_SUPPORT),
_ffmpeg_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CORETEXT_SUPPORT),
_coretext_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FREETYPE_SUPPORT),
_freetype_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETPLAY_SUPPORT),
_netplay_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES)
: msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PYTHON_SUPPORT),
_python_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES)
: msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT),
_v4l2_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES)
: msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
snprintf(feat_str, sizeof(feat_str),
"%s: %s",
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT),
_libusb_supp ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_YES)
: msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO));
menu_entries_append_enum(info->list, feat_str, "",
MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
return 0;
}
static int menu_displaylist_parse_playlist(menu_displaylist_info_t *info,
playlist_t *playlist, const char *path_playlist, bool is_history)
{
unsigned i;
size_t list_size = 0;
if (!playlist)
return -1;
list_size = playlist_size(playlist);
if (list_size == 0)
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_PLAYLIST_ENTRIES_AVAILABLE),
msg_hash_to_str(MENU_ENUM_LABEL_NO_PLAYLIST_ENTRIES_AVAILABLE),
MENU_ENUM_LABEL_NO_PLAYLIST_ENTRIES_AVAILABLE,
MENU_INFO_MESSAGE, 0, 0);
return 0;
}
for (i = 0; i < list_size; i++)
{
char fill_buf[PATH_MAX_LENGTH];
char path_copy[PATH_MAX_LENGTH];
const char *core_name = NULL;
const char *path = NULL;
const char *label = NULL;
fill_buf[0] = path_copy[0] = '\0';
strlcpy(path_copy, info->path, sizeof(path_copy));
path = path_copy;
playlist_get_index(playlist, i,
&path, &label, NULL, &core_name, NULL, NULL);
if (core_name)
strlcpy(fill_buf, core_name, sizeof(fill_buf));
if (path)
{
char path_short[PATH_MAX_LENGTH];
path_short[0] = '\0';
fill_short_pathname_representation(path_short, path,
sizeof(path_short));
strlcpy(fill_buf,
(!string_is_empty(label)) ? label : path_short,
sizeof(fill_buf));
if (!string_is_empty(core_name))
{
if (!string_is_equal(core_name,
file_path_str(FILE_PATH_DETECT)))
{
char tmp[PATH_MAX_LENGTH];
tmp[0] = '\0';
snprintf(tmp, sizeof(tmp), " (%s)", core_name);
strlcat(fill_buf, tmp, sizeof(fill_buf));
}
}
}
if (!path)
menu_entries_append_enum(info->list, fill_buf, path_playlist,
MENU_ENUM_LABEL_PLAYLIST_ENTRY, FILE_TYPE_PLAYLIST_ENTRY, 0, i);
else if (is_history)
menu_entries_append_enum(info->list, fill_buf,
path, MENU_ENUM_LABEL_PLAYLIST_ENTRY, FILE_TYPE_RPL_ENTRY, 0, i);
else
menu_entries_append_enum(info->list, label,
path, MENU_ENUM_LABEL_PLAYLIST_ENTRY, FILE_TYPE_RPL_ENTRY, 0, i);
}
return 0;
}
static int menu_displaylist_parse_shader_options(menu_displaylist_info_t *info)
{
unsigned i;
unsigned pass_count = menu_shader_manager_get_amount_passes();
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SHADER_APPLY_CHANGES),
msg_hash_to_str(MENU_ENUM_LABEL_SHADER_APPLY_CHANGES),
MENU_ENUM_LABEL_SHADER_APPLY_CHANGES,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET),
msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET),
MENU_ENUM_LABEL_VIDEO_SHADER_PRESET,
FILE_TYPE_PATH, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS),
msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_AS),
MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_AS,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE),
msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_AS),
MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_CORE,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_GAME),
msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_AS),
MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_GAME,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS),
msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_PARAMETERS),
MENU_ENUM_LABEL_VIDEO_SHADER_PARAMETERS,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS),
msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_PARAMETERS),
MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_PARAMETERS,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_NUM_PASSES),
msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_NUM_PASSES),
MENU_ENUM_LABEL_VIDEO_SHADER_NUM_PASSES,
0, 0, 0);
for (i = 0; i < pass_count; i++)
{
char buf_tmp[64];
char buf[64];
buf[0] = buf_tmp[0] = '\0';
snprintf(buf_tmp, sizeof(buf_tmp),
"%s #%u", msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SHADER), i);
menu_entries_append_enum(info->list, buf_tmp,
msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_PASS),
MENU_ENUM_LABEL_VIDEO_SHADER_PASS,
MENU_SETTINGS_SHADER_PASS_0 + i, 0, 0);
snprintf(buf, sizeof(buf), "%s %s", buf_tmp, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_FILTER));
menu_entries_append_enum(info->list, buf,
msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_FILTER_PASS),
MENU_ENUM_LABEL_VIDEO_SHADER_FILTER_PASS,
MENU_SETTINGS_SHADER_PASS_FILTER_0 + i, 0, 0);
snprintf(buf, sizeof(buf), "%s %s", buf_tmp, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SCALE));
menu_entries_append_enum(info->list, buf,
msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_SCALE_PASS),
MENU_ENUM_LABEL_VIDEO_SHADER_SCALE_PASS,
MENU_SETTINGS_SHADER_PASS_SCALE_0 + i, 0, 0);
}
return 0;
}
#ifdef HAVE_LIBRETRODB
static int create_string_list_rdb_entry_string(
enum msg_hash_enums enum_idx,
const char *desc, const char *label,
const char *actual_string, const char *path,
file_list_t *list)
{
char tmp[PATH_MAX_LENGTH];
union string_list_elem_attr attr;
char *output_label = NULL;
int str_len = 0;
struct string_list *str_list = string_list_new();
if (!str_list)
return -1;
attr.i = 0;
tmp[0] = '\0';
str_len += strlen(label) + 1;
string_list_append(str_list, label, attr);
str_len += strlen(actual_string) + 1;
string_list_append(str_list, actual_string, attr);
str_len += strlen(path) + 1;
string_list_append(str_list, path, attr);
output_label = (char*)calloc(str_len, sizeof(char));
if (!output_label)
{
string_list_free(str_list);
return -1;
}
string_list_join_concat(output_label, str_len, str_list, "|");
fill_pathname_noext(tmp, desc, ": ", sizeof(tmp));
strlcat(tmp, actual_string, sizeof(tmp));
menu_entries_append_enum(list, tmp, output_label,
enum_idx,
0, 0, 0);
if (output_label)
free(output_label);
string_list_free(str_list);
str_list = NULL;
return 0;
}
static int create_string_list_rdb_entry_int(
enum msg_hash_enums enum_idx,
const char *desc, const char *label,
int actual_int, const char *path, file_list_t *list)
{
char tmp[PATH_MAX_LENGTH];
char str[PATH_MAX_LENGTH];
union string_list_elem_attr attr;
char *output_label = NULL;
int str_len = 0;
struct string_list *str_list = string_list_new();
if (!str_list)
return -1;
attr.i = 0;
tmp[0] = str[0] = '\0';
str_len += strlen(label) + 1;
string_list_append(str_list, label, attr);
snprintf(str, sizeof(str), "%d", actual_int);
str_len += strlen(str) + 1;
string_list_append(str_list, str, attr);
str_len += strlen(path) + 1;
string_list_append(str_list, path, attr);
output_label = (char*)calloc(str_len, sizeof(char));
if (!output_label)
{
string_list_free(str_list);
return -1;
}
string_list_join_concat(output_label, str_len, str_list, "|");
snprintf(tmp, sizeof(tmp), "%s : %d", desc, actual_int);
menu_entries_append_enum(list, tmp, output_label,
enum_idx,
0, 0, 0);
if (output_label)
free(output_label);
string_list_free(str_list);
str_list = NULL;
return 0;
}
static int menu_displaylist_parse_database_entry(menu_displaylist_info_t *info)
{
unsigned i, j, k;
char path_playlist[PATH_MAX_LENGTH];
char path_base[PATH_MAX_LENGTH];
char query[PATH_MAX_LENGTH];
playlist_t *playlist = NULL;
database_info_list_t *db_info = NULL;
menu_handle_t *menu = NULL;
settings_t *settings = config_get_ptr();
path_playlist[0] = path_base[0] = query[0] = '\0';
if (!menu_driver_ctl(RARCH_MENU_CTL_DRIVER_DATA_GET, &menu))
goto error;
database_info_build_query_enum(query, sizeof(query),
DATABASE_QUERY_ENTRY, info->path_b);
db_info = database_info_list_new(info->path, query);
if (!db_info)
goto error;
fill_short_pathname_representation_noext(path_base, info->path,
sizeof(path_base));
strlcat(path_base,
file_path_str(FILE_PATH_LPL_EXTENSION),
sizeof(path_base));
fill_pathname_join(path_playlist, settings->directory.playlist, path_base,
sizeof(path_playlist));
playlist = playlist_init(path_playlist, COLLECTION_SIZE);
if (playlist)
strlcpy(menu->db_playlist_file, path_playlist,
sizeof(menu->db_playlist_file));
for (i = 0; i < db_info->count; i++)
{
char tmp[PATH_MAX_LENGTH];
char crc_str[20];
database_info_t *db_info_entry = &db_info->list[i];
bool show_advanced_settings = settings->menu.show_advanced_settings;
crc_str[0] = tmp[0] = '\0';
snprintf(crc_str, sizeof(crc_str), "%08X", db_info_entry->crc32);
if (playlist)
{
for (j = 0; j < playlist_size(playlist); j++)
{
char elem0[PATH_MAX_LENGTH];
char elem1[PATH_MAX_LENGTH];
const char *crc32 = NULL;
bool match_found = false;
struct string_list *tmp_str_list = NULL;
elem0[0] = elem1[0] = '\0';
playlist_get_index(playlist, j,
NULL, NULL, NULL, NULL,
NULL, &crc32);
tmp_str_list = string_split(crc32, "|");
if (!tmp_str_list)
continue;
if (tmp_str_list->size > 0)
strlcpy(elem0, tmp_str_list->elems[0].data, sizeof(elem0));
if (tmp_str_list->size > 1)
strlcpy(elem1, tmp_str_list->elems[1].data, sizeof(elem1));
switch (msg_hash_to_file_type(msg_hash_calculate(elem1)))
{
case FILE_TYPE_CRC:
if (string_is_equal(crc_str, elem0))
match_found = true;
break;
case FILE_TYPE_SHA1:
if (string_is_equal(db_info_entry->sha1, elem0))
match_found = true;
break;
case FILE_TYPE_MD5:
if (string_is_equal(db_info_entry->md5, elem0))
match_found = true;
break;
default:
break;
}
string_list_free(tmp_str_list);
if (!match_found)
continue;
rdb_entry_start_game_selection_ptr = j;
}
}
if (db_info_entry->name)
{
fill_pathname_noext(tmp,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_NAME),
": ",
sizeof(tmp));
strlcat(tmp, db_info_entry->name, sizeof(tmp));
menu_entries_append_enum(info->list, tmp,
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_NAME),
MENU_ENUM_LABEL_RDB_ENTRY_NAME,
0, 0, 0);
}
if (db_info_entry->description)
{
fill_pathname_noext(tmp,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DESCRIPTION),
": ",
sizeof(tmp));
strlcat(tmp, db_info_entry->description, sizeof(tmp));
menu_entries_append_enum(info->list, tmp,
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_DESCRIPTION),
MENU_ENUM_LABEL_RDB_ENTRY_DESCRIPTION,
0, 0, 0);
}
if (db_info_entry->genre)
{
fill_pathname_noext(tmp,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_GENRE),
": ",
sizeof(tmp));
strlcat(tmp, db_info_entry->genre, sizeof(tmp));
menu_entries_append_enum(info->list, tmp,
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_GENRE),
MENU_ENUM_LABEL_RDB_ENTRY_GENRE,
0, 0, 0);
}
if (db_info_entry->publisher)
{
if (create_string_list_rdb_entry_string(
MENU_ENUM_LABEL_RDB_ENTRY_PUBLISHER,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_PUBLISHER),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_PUBLISHER),
db_info_entry->publisher, info->path, info->list) == -1)
goto error;
}
if (db_info_entry->developer)
{
for (k = 0; k < db_info_entry->developer->size; k++)
{
if (db_info_entry->developer->elems[k].data)
{
if (create_string_list_rdb_entry_string(
MENU_ENUM_LABEL_RDB_ENTRY_DEVELOPER,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DEVELOPER),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_DEVELOPER),
db_info_entry->developer->elems[k].data,
info->path, info->list) == -1)
goto error;
}
}
}
if (db_info_entry->origin)
{
if (create_string_list_rdb_entry_string(
MENU_ENUM_LABEL_RDB_ENTRY_ORIGIN,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ORIGIN),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_ORIGIN),
db_info_entry->origin, info->path, info->list) == -1)
goto error;
}
if (db_info_entry->franchise)
{
if (create_string_list_rdb_entry_string(
MENU_ENUM_LABEL_RDB_ENTRY_FRANCHISE,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_FRANCHISE),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_FRANCHISE),
db_info_entry->franchise, info->path, info->list) == -1)
goto error;
}
if (db_info_entry->max_users)
{
if (create_string_list_rdb_entry_int(
MENU_ENUM_LABEL_RDB_ENTRY_MAX_USERS,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INPUT_MAX_USERS),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_MAX_USERS),
db_info_entry->max_users,
info->path, info->list) == -1)
goto error;
}
if (db_info_entry->tgdb_rating)
{
if (create_string_list_rdb_entry_int(
MENU_ENUM_LABEL_RDB_ENTRY_TGDB_RATING,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_TGDB_RATING),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_TGDB_RATING),
db_info_entry->tgdb_rating,
info->path, info->list) == -1)
goto error;
}
if (db_info_entry->famitsu_magazine_rating)
{
if (create_string_list_rdb_entry_int(
MENU_ENUM_LABEL_RDB_ENTRY_FAMITSU_MAGAZINE_RATING,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_FAMITSU_MAGAZINE_RATING),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_FAMITSU_MAGAZINE_RATING),
db_info_entry->famitsu_magazine_rating,
info->path, info->list) == -1)
goto error;
}
if (db_info_entry->edge_magazine_review)
{
if (create_string_list_rdb_entry_string(
MENU_ENUM_LABEL_RDB_ENTRY_EDGE_MAGAZINE_REVIEW,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_REVIEW),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_EDGE_MAGAZINE_REVIEW),
db_info_entry->edge_magazine_review, info->path, info->list) == -1)
goto error;
}
if (db_info_entry->edge_magazine_rating)
{
if (create_string_list_rdb_entry_int(
MENU_ENUM_LABEL_RDB_ENTRY_EDGE_MAGAZINE_RATING,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_RATING),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_EDGE_MAGAZINE_RATING),
db_info_entry->edge_magazine_rating,
info->path, info->list) == -1)
goto error;
}
if (db_info_entry->edge_magazine_issue)
{
if (create_string_list_rdb_entry_int(
MENU_ENUM_LABEL_RDB_ENTRY_EDGE_MAGAZINE_ISSUE,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_ISSUE),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_EDGE_MAGAZINE_ISSUE),
db_info_entry->edge_magazine_issue,
info->path, info->list) == -1)
goto error;
}
if (db_info_entry->releasemonth)
{
if (create_string_list_rdb_entry_int(
MENU_ENUM_LABEL_RDB_ENTRY_RELEASE_MONTH,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_MONTH),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_RELEASE_MONTH),
db_info_entry->releasemonth,
info->path, info->list) == -1)
goto error;
}
if (db_info_entry->releaseyear)
{
if (create_string_list_rdb_entry_int(
MENU_ENUM_LABEL_RDB_ENTRY_RELEASE_YEAR,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_YEAR),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_RELEASE_YEAR),
db_info_entry->releaseyear,
info->path, info->list) == -1)
goto error;
}
if (db_info_entry->bbfc_rating)
{
if (create_string_list_rdb_entry_string(
MENU_ENUM_LABEL_RDB_ENTRY_BBFC_RATING,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_BBFC_RATING),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_BBFC_RATING),
db_info_entry->bbfc_rating, info->path, info->list) == -1)
goto error;
}
if (db_info_entry->esrb_rating)
{
if (create_string_list_rdb_entry_string(
MENU_ENUM_LABEL_RDB_ENTRY_ESRB_RATING,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ESRB_RATING),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_ESRB_RATING),
db_info_entry->esrb_rating, info->path, info->list) == -1)
goto error;
}
if (db_info_entry->elspa_rating)
{
if (create_string_list_rdb_entry_string(
MENU_ENUM_LABEL_RDB_ENTRY_ELSPA_RATING,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ELSPA_RATING),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_ELSPA_RATING),
db_info_entry->elspa_rating, info->path, info->list) == -1)
goto error;
}
if (db_info_entry->pegi_rating)
{
if (create_string_list_rdb_entry_string(
MENU_ENUM_LABEL_RDB_ENTRY_PEGI_RATING,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_PEGI_RATING),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_PEGI_RATING),
db_info_entry->pegi_rating, info->path, info->list) == -1)
goto error;
}
if (db_info_entry->enhancement_hw)
{
if (create_string_list_rdb_entry_string(
MENU_ENUM_LABEL_RDB_ENTRY_ENHANCEMENT_HW,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ENHANCEMENT_HW),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_ENHANCEMENT_HW),
db_info_entry->enhancement_hw, info->path, info->list) == -1)
goto error;
}
if (db_info_entry->cero_rating)
{
if (create_string_list_rdb_entry_string(
MENU_ENUM_LABEL_RDB_ENTRY_CERO_RATING,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_CERO_RATING),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_CERO_RATING),
db_info_entry->cero_rating, info->path, info->list) == -1)
goto error;
}
if (db_info_entry->serial)
{
if (create_string_list_rdb_entry_string(
MENU_ENUM_LABEL_RDB_ENTRY_SERIAL,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_SERIAL),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_SERIAL),
db_info_entry->serial, info->path, info->list) == -1)
goto error;
}
if (db_info_entry->analog_supported == 1)
{
if (create_string_list_rdb_entry_string(
MENU_ENUM_LABEL_RDB_ENTRY_ANALOG,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ANALOG),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_ANALOG),
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_TRUE), info->path, info->list) == -1)
goto error;
}
if (db_info_entry->rumble_supported == 1)
{
if (create_string_list_rdb_entry_string(
MENU_ENUM_LABEL_RDB_ENTRY_RUMBLE,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RUMBLE),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_RUMBLE),
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_TRUE), info->path, info->list) == -1)
goto error;
}
if (db_info_entry->coop_supported == 1)
{
if (create_string_list_rdb_entry_string(
MENU_ENUM_LABEL_RDB_ENTRY_COOP,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_COOP),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_COOP),
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_TRUE), info->path, info->list) == -1)
goto error;
}
if (!show_advanced_settings)
continue;
if (db_info_entry->crc32)
{
if (create_string_list_rdb_entry_string(
MENU_ENUM_LABEL_RDB_ENTRY_CRC32,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_CRC32),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_CRC32),
crc_str,
info->path, info->list) == -1)
goto error;
}
if (db_info_entry->sha1)
{
if (create_string_list_rdb_entry_string(
MENU_ENUM_LABEL_RDB_ENTRY_SHA1,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_SHA1),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_SHA1),
db_info_entry->sha1,
info->path, info->list) == -1)
goto error;
}
if (db_info_entry->md5)
{
if (create_string_list_rdb_entry_string(
MENU_ENUM_LABEL_RDB_ENTRY_MD5,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_MD5),
msg_hash_to_str(MENU_ENUM_LABEL_RDB_ENTRY_MD5),
db_info_entry->md5,
info->path, info->list) == -1)
goto error;
}
}
if (db_info->count < 1)
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_PLAYLIST_ENTRIES_AVAILABLE),
msg_hash_to_str(MENU_ENUM_LABEL_NO_PLAYLIST_ENTRIES_AVAILABLE),
MENU_ENUM_LABEL_NO_PLAYLIST_ENTRIES_AVAILABLE,
0, 0, 0);
playlist_free(playlist);
database_info_list_free(db_info);
free(db_info);
return 0;
error:
if (db_info)
{
database_info_list_free(db_info);
free(db_info);
}
playlist_free(playlist);
return -1;
}
static int menu_database_parse_query(file_list_t *list, const char *path,
const char *query)
{
unsigned i;
database_info_list_t *db_list = database_info_list_new(path, query);
if (!db_list)
return -1;
for (i = 0; i < db_list->count; i++)
{
if (!string_is_empty(db_list->list[i].name))
menu_entries_append_enum(list, db_list->list[i].name,
path, MENU_ENUM_LABEL_RDB_ENTRY, FILE_TYPE_RDB_ENTRY, 0, 0);
}
database_info_list_free(db_list);
free(db_list);
return 0;
}
#endif
#ifdef HAVE_SHADER_MANAGER
static int deferred_push_video_shader_parameters_common(
menu_displaylist_info_t *info,
struct video_shader *shader, unsigned base_parameter)
{
unsigned i;
size_t list_size = shader->num_parameters;
if (list_size == 0)
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_SHADER_PARAMETERS),
msg_hash_to_str(MENU_ENUM_LABEL_NO_SHADER_PARAMETERS),
MENU_ENUM_LABEL_NO_SHADER_PARAMETERS,
0, 0, 0);
return 0;
}
for (i = 0; i < list_size; i++)
menu_entries_append_enum(info->list, shader->parameters[i].desc,
info->label, MENU_ENUM_LABEL_SHADER_PARAMETERS_ENTRY,
base_parameter + i, 0, 0);
return 0;
}
#endif
static int menu_displaylist_parse_settings_internal(void *data,
menu_displaylist_info_t *info,
enum menu_displaylist_parse_type parse_type,
bool add_empty_entry,
rarch_setting_t *setting
)
{
enum setting_type precond;
size_t count = 0;
uint64_t flags = 0;
settings_t *settings = config_get_ptr();
if (!setting)
return -1;
flags = setting->flags;
switch (parse_type)
{
case PARSE_GROUP:
case PARSE_SUB_GROUP:
precond = ST_NONE;
break;
case PARSE_ACTION:
precond = ST_ACTION;
break;
case PARSE_ONLY_INT:
precond = ST_INT;
break;
case PARSE_ONLY_UINT:
precond = ST_UINT;
break;
case PARSE_ONLY_BIND:
precond = ST_BIND;
break;
case PARSE_ONLY_BOOL:
precond = ST_BOOL;
break;
case PARSE_ONLY_FLOAT:
precond = ST_FLOAT;
break;
case PARSE_ONLY_HEX:
precond = ST_HEX;
break;
case PARSE_ONLY_STRING:
precond = ST_STRING;
break;
case PARSE_ONLY_PATH:
precond = ST_PATH;
break;
case PARSE_ONLY_DIR:
precond = ST_DIR;
break;
case PARSE_ONLY_STRING_OPTIONS:
precond = ST_STRING_OPTIONS;
break;
case PARSE_ONLY_GROUP:
default:
precond = ST_END_GROUP;
break;
}
for (;;)
{
bool time_to_exit = false;
const char *short_description = setting->short_description;
const char *name = setting->name;
enum setting_type type = setting_get_type(setting);
rarch_setting_t **list = &setting;
switch (parse_type)
{
case PARSE_NONE:
switch (type)
{
case ST_GROUP:
case ST_END_GROUP:
case ST_SUB_GROUP:
case ST_END_SUB_GROUP:
goto loop;
default:
break;
}
break;
case PARSE_GROUP:
case PARSE_ONLY_GROUP:
if (type == ST_GROUP)
break;
goto loop;
case PARSE_SUB_GROUP:
break;
case PARSE_ACTION:
if (type == ST_ACTION)
break;
goto loop;
case PARSE_ONLY_INT:
if (type == ST_INT)
break;
goto loop;
case PARSE_ONLY_UINT:
if (type == ST_UINT)
break;
goto loop;
case PARSE_ONLY_BIND:
if (type == ST_BIND)
break;
goto loop;
case PARSE_ONLY_BOOL:
if (type == ST_BOOL)
break;
goto loop;
case PARSE_ONLY_FLOAT:
if (type == ST_FLOAT)
break;
goto loop;
case PARSE_ONLY_HEX:
if (type == ST_HEX)
break;
goto loop;
case PARSE_ONLY_STRING:
if (type == ST_STRING)
break;
goto loop;
case PARSE_ONLY_PATH:
if (type == ST_PATH)
break;
goto loop;
case PARSE_ONLY_DIR:
if (type == ST_DIR)
break;
goto loop;
case PARSE_ONLY_STRING_OPTIONS:
if (type == ST_STRING_OPTIONS)
break;
goto loop;
}
if (flags & SD_FLAG_ADVANCED &&
!settings->menu.show_advanced_settings)
goto loop;
menu_entries_append(info->list, short_description,
name, menu_setting_set_flags(setting), 0, 0);
count++;
loop:
switch (parse_type)
{
case PARSE_NONE:
case PARSE_GROUP:
case PARSE_ONLY_GROUP:
case PARSE_SUB_GROUP:
if (setting_get_type(setting) == precond)
time_to_exit = true;
break;
case PARSE_ONLY_BIND:
case PARSE_ONLY_FLOAT:
case PARSE_ONLY_HEX:
case PARSE_ONLY_BOOL:
case PARSE_ONLY_INT:
case PARSE_ONLY_UINT:
case PARSE_ONLY_STRING:
case PARSE_ONLY_PATH:
case PARSE_ONLY_DIR:
case PARSE_ONLY_STRING_OPTIONS:
case PARSE_ACTION:
time_to_exit = true;
break;
}
if (time_to_exit)
break;
(*list = *list + 1);
}
if (count == 0 && add_empty_entry)
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_SETTINGS_FOUND),
msg_hash_to_str(MENU_ENUM_LABEL_NO_SETTINGS_FOUND),
MENU_ENUM_LABEL_NO_SETTINGS_FOUND,
0, 0, 0);
return 0;
}
static int menu_displaylist_parse_settings_internal_enum(void *data,
menu_displaylist_info_t *info,
enum menu_displaylist_parse_type parse_type,
bool add_empty_entry,
rarch_setting_t *setting,
enum msg_hash_enums enum_idx
)
{
enum setting_type precond;
size_t count = 0;
uint64_t flags = 0;
settings_t *settings = config_get_ptr();
if (!setting)
return -1;
flags = setting->flags;
switch (parse_type)
{
case PARSE_GROUP:
case PARSE_SUB_GROUP:
precond = ST_NONE;
break;
case PARSE_ACTION:
precond = ST_ACTION;
break;
case PARSE_ONLY_INT:
precond = ST_INT;
break;
case PARSE_ONLY_UINT:
precond = ST_UINT;
break;
case PARSE_ONLY_BIND:
precond = ST_BIND;
break;
case PARSE_ONLY_BOOL:
precond = ST_BOOL;
break;
case PARSE_ONLY_FLOAT:
precond = ST_FLOAT;
break;
case PARSE_ONLY_HEX:
precond = ST_HEX;
break;
case PARSE_ONLY_STRING:
precond = ST_STRING;
break;
case PARSE_ONLY_PATH:
precond = ST_PATH;
break;
case PARSE_ONLY_DIR:
precond = ST_DIR;
break;
case PARSE_ONLY_STRING_OPTIONS:
precond = ST_STRING_OPTIONS;
break;
case PARSE_ONLY_GROUP:
default:
precond = ST_END_GROUP;
break;
}
for (;;)
{
bool time_to_exit = false;
const char *short_description = setting->short_description;
const char *name = setting->name;
enum setting_type type = setting_get_type(setting);
rarch_setting_t **list = &setting;
switch (parse_type)
{
case PARSE_NONE:
switch (type)
{
case ST_GROUP:
case ST_END_GROUP:
case ST_SUB_GROUP:
case ST_END_SUB_GROUP:
goto loop;
default:
break;
}
break;
case PARSE_GROUP:
case PARSE_ONLY_GROUP:
if (type == ST_GROUP)
break;
goto loop;
case PARSE_SUB_GROUP:
break;
case PARSE_ACTION:
if (type == ST_ACTION)
break;
goto loop;
case PARSE_ONLY_INT:
if (type == ST_INT)
break;
goto loop;
case PARSE_ONLY_UINT:
if (type == ST_UINT)
break;
goto loop;
case PARSE_ONLY_BIND:
if (type == ST_BIND)
break;
goto loop;
case PARSE_ONLY_BOOL:
if (type == ST_BOOL)
break;
goto loop;
case PARSE_ONLY_FLOAT:
if (type == ST_FLOAT)
break;
goto loop;
case PARSE_ONLY_HEX:
if (type == ST_HEX)
break;
goto loop;
case PARSE_ONLY_STRING:
if (type == ST_STRING)
break;
goto loop;
case PARSE_ONLY_PATH:
if (type == ST_PATH)
break;
goto loop;
case PARSE_ONLY_DIR:
if (type == ST_DIR)
break;
goto loop;
case PARSE_ONLY_STRING_OPTIONS:
if (type == ST_STRING_OPTIONS)
break;
goto loop;
}
if (flags & SD_FLAG_ADVANCED &&
!settings->menu.show_advanced_settings)
goto loop;
menu_entries_append_enum(info->list, short_description,
name, enum_idx, menu_setting_set_flags(setting), 0, 0);
count++;
loop:
switch (parse_type)
{
case PARSE_NONE:
case PARSE_GROUP:
case PARSE_ONLY_GROUP:
case PARSE_SUB_GROUP:
if (setting_get_type(setting) == precond)
time_to_exit = true;
break;
case PARSE_ONLY_BIND:
case PARSE_ONLY_FLOAT:
case PARSE_ONLY_HEX:
case PARSE_ONLY_BOOL:
case PARSE_ONLY_INT:
case PARSE_ONLY_UINT:
case PARSE_ONLY_PATH:
case PARSE_ONLY_DIR:
case PARSE_ONLY_STRING:
case PARSE_ONLY_STRING_OPTIONS:
case PARSE_ACTION:
time_to_exit = true;
break;
}
if (time_to_exit)
break;
(*list = *list + 1);
}
if (count == 0)
{
if (add_empty_entry)
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_SETTINGS_FOUND),
msg_hash_to_str(MENU_ENUM_LABEL_NO_SETTINGS_FOUND),
MENU_ENUM_LABEL_NO_SETTINGS_FOUND,
0, 0, 0);
return -1;
}
return 0;
}
static int menu_displaylist_parse_settings(void *data,
menu_displaylist_info_t *info,
const char *info_label,
enum menu_displaylist_parse_type parse_type,
bool add_empty_entry)
{
return menu_displaylist_parse_settings_internal(data,
info,
parse_type,
add_empty_entry,
menu_setting_find(info_label)
);
}
static int menu_displaylist_parse_settings_enum(void *data,
menu_displaylist_info_t *info,
enum msg_hash_enums label,
enum menu_displaylist_parse_type parse_type,
bool add_empty_entry)
{
return menu_displaylist_parse_settings_internal_enum(data,
info,
parse_type,
add_empty_entry,
menu_setting_find_enum(label),
label
);
}
static int menu_displaylist_parse_horizontal_list(
menu_displaylist_info_t *info)
{
menu_ctx_list_t list_info;
menu_ctx_list_t list_horiz_info;
char lpl_basename[PATH_MAX_LENGTH];
char path_playlist[PATH_MAX_LENGTH];
bool is_historylist = false;
playlist_t *playlist = NULL;
menu_handle_t *menu = NULL;
struct item_file *item = NULL;
settings_t *settings = config_get_ptr();
lpl_basename[0] = path_playlist[0] = '\0';
menu_driver_ctl(RARCH_MENU_CTL_LIST_GET_SELECTION, &list_info);
list_info.type = MENU_LIST_TABS;
menu_driver_ctl(RARCH_MENU_CTL_LIST_GET_SIZE, &list_info);
list_horiz_info.type = MENU_LIST_HORIZONTAL;
list_horiz_info.idx = list_info.selection - (list_info.size +1);
menu_driver_ctl(RARCH_MENU_CTL_LIST_GET_ENTRY, &list_horiz_info);
item = (struct item_file*)list_horiz_info.entry;
if (!menu_driver_ctl(RARCH_MENU_CTL_DRIVER_DATA_GET, &menu))
return -1;
if (!item)
return -1;
fill_pathname_base_noext(lpl_basename, item->path, sizeof(lpl_basename));
menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_FREE, NULL);
fill_pathname_join(
path_playlist,
settings->directory.playlist,
item->path,
sizeof(path_playlist));
menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_INIT, (void*)path_playlist);
strlcpy(menu->db_playlist_file,
path_playlist, sizeof(menu->db_playlist_file));
strlcpy(path_playlist,
msg_hash_to_str(MENU_ENUM_LABEL_COLLECTION),
sizeof(path_playlist));
menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_GET, &playlist);
playlist_qsort(playlist);
if (string_is_equal(lpl_basename, "content_history"))
is_historylist = true;
menu_displaylist_parse_playlist(info,
playlist, path_playlist, is_historylist);
return 0;
}
static int menu_displaylist_parse_load_content_settings(
menu_displaylist_info_t *info)
{
menu_handle_t *menu = NULL;
settings_t *settings = config_get_ptr();
if (!menu_driver_ctl(RARCH_MENU_CTL_DRIVER_DATA_GET, &menu))
return -1;
if (!rarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL))
{
bool show_advanced_settings = settings->menu.show_advanced_settings;
rarch_system_info_t *system = NULL;
runloop_ctl(RUNLOOP_CTL_SYSTEM_INFO_GET, &system);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RESUME_CONTENT),
msg_hash_to_str(MENU_ENUM_LABEL_RESUME_CONTENT),
MENU_ENUM_LABEL_RESUME_CONTENT,
MENU_SETTING_ACTION_RUN, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RESTART_CONTENT),
msg_hash_to_str(MENU_ENUM_LABEL_RESTART_CONTENT),
MENU_ENUM_LABEL_RESTART_CONTENT,
MENU_SETTING_ACTION_RUN, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CLOSE_CONTENT),
msg_hash_to_str(MENU_ENUM_LABEL_CLOSE_CONTENT),
MENU_ENUM_LABEL_CLOSE_CONTENT,
MENU_SETTING_ACTION_CLOSE, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_TAKE_SCREENSHOT),
msg_hash_to_str(MENU_ENUM_LABEL_TAKE_SCREENSHOT),
MENU_ENUM_LABEL_TAKE_SCREENSHOT,
MENU_SETTING_ACTION_SCREENSHOT, 0, 0);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_STATE_SLOT, PARSE_ONLY_INT, true);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SAVE_STATE),
msg_hash_to_str(MENU_ENUM_LABEL_SAVE_STATE),
MENU_ENUM_LABEL_SAVE_STATE,
MENU_SETTING_ACTION_SAVESTATE, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_LOAD_STATE),
msg_hash_to_str(MENU_ENUM_LABEL_LOAD_STATE),
MENU_ENUM_LABEL_LOAD_STATE,
MENU_SETTING_ACTION_LOADSTATE, 0, 0);
if (show_advanced_settings)
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_UNDO_LOAD_STATE),
msg_hash_to_str(MENU_ENUM_LABEL_UNDO_LOAD_STATE),
MENU_ENUM_LABEL_UNDO_LOAD_STATE,
MENU_SETTING_ACTION_LOADSTATE, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_UNDO_SAVE_STATE),
msg_hash_to_str(MENU_ENUM_LABEL_UNDO_SAVE_STATE),
MENU_ENUM_LABEL_UNDO_SAVE_STATE,
MENU_SETTING_ACTION_LOADSTATE, 0, 0);
}
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_OPTIONS),
msg_hash_to_str(MENU_ENUM_LABEL_CORE_OPTIONS),
MENU_ENUM_LABEL_CORE_OPTIONS,
MENU_SETTING_ACTION, 0, 0);
if (core_has_set_input_descriptor())
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_INPUT_REMAPPING_OPTIONS),
msg_hash_to_str(MENU_ENUM_LABEL_CORE_INPUT_REMAPPING_OPTIONS),
MENU_ENUM_LABEL_CORE_INPUT_REMAPPING_OPTIONS,
MENU_SETTING_ACTION, 0, 0);
#ifdef HAVE_NETWORKING
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_NETPLAY,
PARSE_ACTION, false);
#endif
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_CHEAT_OPTIONS),
msg_hash_to_str(MENU_ENUM_LABEL_CORE_CHEAT_OPTIONS),
MENU_ENUM_LABEL_CORE_CHEAT_OPTIONS,
MENU_SETTING_ACTION, 0, 0);
if ( (!rarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL))
&& system && system->disk_control_cb.get_num_images)
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DISK_OPTIONS),
msg_hash_to_str(MENU_ENUM_LABEL_DISK_OPTIONS),
MENU_ENUM_LABEL_DISK_OPTIONS,
MENU_SETTING_ACTION_CORE_DISK_OPTIONS, 0, 0);
#ifdef HAVE_SHADER_MANAGER
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SHADER_OPTIONS),
msg_hash_to_str(MENU_ENUM_LABEL_SHADER_OPTIONS),
MENU_ENUM_LABEL_SHADER_OPTIONS,
MENU_SETTING_ACTION, 0, 0);
#endif
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG_OVERRIDE_CORE),
msg_hash_to_str(MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CORE),
MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CORE,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG_OVERRIDE_GAME),
msg_hash_to_str(MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_GAME),
MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_GAME,
MENU_SETTING_ACTION, 0, 0);
#ifdef HAVE_CHEEVOS
if(settings->cheevos.enable)
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_LIST),
msg_hash_to_str(MENU_ENUM_LABEL_ACHIEVEMENT_LIST),
MENU_ENUM_LABEL_ACHIEVEMENT_LIST,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_LIST_HARDCORE),
msg_hash_to_str(MENU_ENUM_LABEL_ACHIEVEMENT_LIST_HARDCORE),
MENU_ENUM_LABEL_ACHIEVEMENT_LIST_HARDCORE,
MENU_SETTING_ACTION, 0, 0);
}
#endif
}
else
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_ITEMS),
msg_hash_to_str(MENU_ENUM_LABEL_NO_ITEMS),
MENU_ENUM_LABEL_NO_ITEMS,
MENU_SETTING_NO_ITEM, 0, 0);
return 0;
}
static int menu_displaylist_parse_horizontal_content_actions(
menu_displaylist_info_t *info)
{
unsigned idx = rpl_entry_selection_ptr;
menu_handle_t *menu = NULL;
const char *label = NULL;
const char *core_path = NULL;
const char *core_name = NULL;
const char *db_name = NULL;
playlist_t *playlist = NULL;
settings_t *settings = config_get_ptr();
const char *fullpath = path_get(RARCH_PATH_CONTENT);
if (!menu_driver_ctl(RARCH_MENU_CTL_DRIVER_DATA_GET, &menu))
return -1;
if (!rarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL)
&& string_is_equal(menu->deferred_path, fullpath))
menu_displaylist_parse_load_content_settings(info);
else
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RUN),
msg_hash_to_str(MENU_ENUM_LABEL_RUN),
MENU_ENUM_LABEL_RUN, FILE_TYPE_PLAYLIST_ENTRY, 0, idx);
if (settings->playlist_entry_remove)
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DELETE_ENTRY),
msg_hash_to_str(MENU_ENUM_LABEL_DELETE_ENTRY),
MENU_ENUM_LABEL_DELETE_ENTRY,
MENU_SETTING_ACTION_DELETE_ENTRY, 0, 0);
}
menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_GET, &playlist);
playlist_get_index(playlist, idx,
NULL, &label, &core_path, &core_name, NULL, &db_name);
if (!string_is_empty(db_name))
{
char db_path[PATH_MAX_LENGTH];
db_path[0] = '\0';
fill_pathname_join_noext(db_path, settings->path.content_database,
db_name, sizeof(db_path));
strlcat(db_path, file_path_str(FILE_PATH_RDB_EXTENSION),
sizeof(db_path));
if (path_file_exists(db_path))
menu_entries_append_enum(info->list, label,
db_path,
MENU_ENUM_LABEL_INFORMATION, FILE_TYPE_RDB_ENTRY, 0, idx);
}
return 0;
}
static int menu_displaylist_parse_information_list(
menu_displaylist_info_t *info)
{
core_info_t *core_info = NULL;
core_info_get_current_core(&core_info);
if (core_info && core_info->config_data)
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_INFORMATION),
msg_hash_to_str(MENU_ENUM_LABEL_CORE_INFORMATION),
MENU_ENUM_LABEL_CORE_INFORMATION,
MENU_SETTING_ACTION, 0, 0);
#ifdef HAVE_NETWORKING
#ifndef HAVE_SOCKET_LEGACY
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NETWORK_INFORMATION),
msg_hash_to_str(MENU_ENUM_LABEL_NETWORK_INFORMATION),
MENU_ENUM_LABEL_NETWORK_INFORMATION,
MENU_SETTING_ACTION, 0, 0);
#endif
#endif
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFORMATION),
msg_hash_to_str(MENU_ENUM_LABEL_SYSTEM_INFORMATION),
MENU_ENUM_LABEL_SYSTEM_INFORMATION,
MENU_SETTING_ACTION, 0, 0);
#ifdef HAVE_LIBRETRODB
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DATABASE_MANAGER),
msg_hash_to_str(MENU_ENUM_LABEL_DATABASE_MANAGER_LIST),
MENU_ENUM_LABEL_DATABASE_MANAGER_LIST,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CURSOR_MANAGER),
msg_hash_to_str(MENU_ENUM_LABEL_CURSOR_MANAGER_LIST),
MENU_ENUM_LABEL_CURSOR_MANAGER_LIST,
MENU_SETTING_ACTION, 0, 0);
#endif
if (runloop_ctl(RUNLOOP_CTL_IS_PERFCNT_ENABLE, NULL))
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_FRONTEND_COUNTERS),
msg_hash_to_str(MENU_ENUM_LABEL_FRONTEND_COUNTERS),
MENU_ENUM_LABEL_FRONTEND_COUNTERS,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_COUNTERS),
msg_hash_to_str(MENU_ENUM_LABEL_CORE_COUNTERS),
MENU_ENUM_LABEL_CORE_COUNTERS,
MENU_SETTING_ACTION, 0, 0);
}
return 0;
}
static int menu_displaylist_parse_configurations_list(
menu_displaylist_info_t *info)
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CONFIGURATIONS),
msg_hash_to_str(MENU_ENUM_LABEL_CONFIGURATIONS),
MENU_ENUM_LABEL_CONFIGURATIONS,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG),
msg_hash_to_str(MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG),
MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SAVE_NEW_CONFIG),
msg_hash_to_str(MENU_ENUM_LABEL_SAVE_NEW_CONFIG),
MENU_ENUM_LABEL_SAVE_NEW_CONFIG,
MENU_SETTING_ACTION, 0, 0);
return 0;
}
static int menu_displaylist_parse_add_content_list(
menu_displaylist_info_t *info)
{
#ifdef HAVE_LIBRETRODB
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SCAN_DIRECTORY),
msg_hash_to_str(MENU_ENUM_LABEL_SCAN_DIRECTORY),
MENU_ENUM_LABEL_SCAN_DIRECTORY,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SCAN_FILE),
msg_hash_to_str(MENU_ENUM_LABEL_SCAN_FILE),
MENU_ENUM_LABEL_SCAN_FILE,
MENU_SETTING_ACTION, 0, 0);
#endif
#if !defined(HAVE_NETWORKING) && !defined(HAVE_LIBRETRODB)
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_ENTRIES_TO_DISPLAY),
msg_hash_to_str(MENU_ENUM_LABEL_NO_ENTRIES_TO_DISPLAY),
MENU_ENUM_LABEL_NO_ENTRIES_TO_DISPLAY,
FILE_TYPE_NONE, 0, 0);
#endif
return 0;
}
static int menu_displaylist_parse_scan_directory_list(
menu_displaylist_info_t *info)
{
#ifdef HAVE_LIBRETRODB
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SCAN_DIRECTORY),
msg_hash_to_str(MENU_ENUM_LABEL_SCAN_DIRECTORY),
MENU_ENUM_LABEL_SCAN_DIRECTORY,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SCAN_FILE),
msg_hash_to_str(MENU_ENUM_LABEL_SCAN_FILE),
MENU_ENUM_LABEL_SCAN_FILE,
MENU_SETTING_ACTION, 0, 0);
#endif
return 0;
}
static int menu_displaylist_parse_netplay_room_list(
menu_displaylist_info_t *info)
{
#ifdef HAVE_NETWORKING
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE_HOST),
msg_hash_to_str(MENU_ENUM_LABEL_NETPLAY_ENABLE_HOST),
MENU_ENUM_LABEL_NETPLAY_ENABLE_HOST,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NETPLAY_REFRESH_ROOMS),
msg_hash_to_str(MENU_ENUM_LABEL_NETPLAY_REFRESH_ROOMS),
MENU_ENUM_LABEL_NETPLAY_REFRESH_ROOMS,
MENU_SETTING_ACTION, 0, 0);
if (netplay_room_count > 0)
{
unsigned i;
for (i = 0; i < netplay_room_count; i++)
{
char s[PATH_MAX_LENGTH];
s[0] = '\0';
snprintf(s, sizeof(s),
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NETPLAY_ROOM_NICKNAME), netplay_room_list[i].nickname);
menu_entries_append_enum(info->list,
s,
msg_hash_to_str(MENU_ENUM_LABEL_CONNECT_NETPLAY_ROOM),
MENU_ENUM_LABEL_CONNECT_NETPLAY_ROOM,
MENU_WIFI, 0, 0);
}
}
#endif
return 0;
}
static int menu_displaylist_parse_options(
menu_displaylist_info_t *info)
{
#ifdef HAVE_NETWORKING
#ifdef HAVE_LAKKA
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_UPDATE_LAKKA),
msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_LAKKA),
MENU_ENUM_LABEL_UPDATE_LAKKA,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_THUMBNAILS_UPDATER_LIST),
msg_hash_to_str(MENU_ENUM_LABEL_THUMBNAILS_UPDATER_LIST),
MENU_ENUM_LABEL_THUMBNAILS_UPDATER_LIST,
MENU_SETTING_ACTION, 0, 0);
#else
#if !defined(VITA)
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_LIST),
msg_hash_to_str(MENU_ENUM_LABEL_CORE_UPDATER_LIST),
MENU_ENUM_LABEL_CORE_UPDATER_LIST,
MENU_SETTING_ACTION, 0, 0);
#endif
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_THUMBNAILS_UPDATER_LIST),
msg_hash_to_str(MENU_ENUM_LABEL_THUMBNAILS_UPDATER_LIST),
MENU_ENUM_LABEL_THUMBNAILS_UPDATER_LIST,
MENU_SETTING_ACTION, 0, 0);
#ifdef HAVE_NETWORKING
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE_CONTENT),
msg_hash_to_str(MENU_ENUM_LABEL_DOWNLOAD_CORE_CONTENT_DIRS),
MENU_ENUM_LABEL_DOWNLOAD_CORE_CONTENT_DIRS,
MENU_SETTING_ACTION, 0, 0);
#endif
#if !defined(VITA)
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_UPDATE_CORE_INFO_FILES),
msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_CORE_INFO_FILES),
MENU_ENUM_LABEL_UPDATE_CORE_INFO_FILES,
MENU_SETTING_ACTION, 0, 0);
#endif
#ifdef HAVE_UPDATE_ASSETS
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_UPDATE_ASSETS),
msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_ASSETS),
MENU_ENUM_LABEL_UPDATE_ASSETS,
MENU_SETTING_ACTION, 0, 0);
#endif
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_UPDATE_AUTOCONFIG_PROFILES),
msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_AUTOCONFIG_PROFILES),
MENU_ENUM_LABEL_UPDATE_AUTOCONFIG_PROFILES,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_UPDATE_CHEATS),
msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_CHEATS),
MENU_ENUM_LABEL_UPDATE_CHEATS,
MENU_SETTING_ACTION, 0, 0);
#ifdef HAVE_LIBRETRODB
#if !defined(VITA)
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_UPDATE_DATABASES),
msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_DATABASES),
MENU_ENUM_LABEL_UPDATE_DATABASES,
MENU_SETTING_ACTION, 0, 0);
#endif
#endif
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_UPDATE_OVERLAYS),
msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_OVERLAYS),
MENU_ENUM_LABEL_UPDATE_OVERLAYS,
MENU_SETTING_ACTION, 0, 0);
#ifdef HAVE_CG
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_UPDATE_CG_SHADERS),
msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_CG_SHADERS),
MENU_ENUM_LABEL_UPDATE_CG_SHADERS,
MENU_SETTING_ACTION, 0, 0);
#endif
#ifdef HAVE_GLSL
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_UPDATE_GLSL_SHADERS),
msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_GLSL_SHADERS),
MENU_ENUM_LABEL_UPDATE_GLSL_SHADERS,
MENU_SETTING_ACTION, 0, 0);
#endif
#ifdef HAVE_VULKAN
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_UPDATE_SLANG_SHADERS),
msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_SLANG_SHADERS),
MENU_ENUM_LABEL_UPDATE_SLANG_SHADERS,
MENU_SETTING_ACTION, 0, 0);
#endif
#endif
#else
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_ITEMS),
msg_hash_to_str(MENU_ENUM_LABEL_NO_ITEMS),
MENU_ENUM_LABEL_NO_ITEMS,
MENU_SETTING_NO_ITEM, 0, 0);
#endif
return 0;
}
static int menu_displaylist_parse_options_cheats(
menu_displaylist_info_t *info)
{
unsigned i;
if (!cheat_manager_alloc_if_empty())
return -1;
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CHEAT_APPLY_CHANGES),
msg_hash_to_str(MENU_ENUM_LABEL_CHEAT_APPLY_CHANGES),
MENU_ENUM_LABEL_CHEAT_APPLY_CHANGES,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CHEAT_FILE_LOAD),
msg_hash_to_str(MENU_ENUM_LABEL_CHEAT_FILE_LOAD),
MENU_ENUM_LABEL_CHEAT_FILE_LOAD,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CHEAT_FILE_SAVE_AS),
msg_hash_to_str(MENU_ENUM_LABEL_CHEAT_FILE_SAVE_AS),
MENU_ENUM_LABEL_CHEAT_FILE_SAVE_AS,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CHEAT_NUM_PASSES),
msg_hash_to_str(MENU_ENUM_LABEL_CHEAT_NUM_PASSES),
MENU_ENUM_LABEL_CHEAT_NUM_PASSES,
0, 0, 0);
for (i = 0; i < cheat_manager_get_size(); i++)
{
char cheat_label[64];
cheat_label[0] = '\0';
snprintf(cheat_label, sizeof(cheat_label),
"%s #%u: ", msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CHEAT), i);
if (cheat_manager_get_desc(i))
strlcat(cheat_label, cheat_manager_get_desc(i), sizeof(cheat_label));
menu_entries_append_enum(info->list,
cheat_label, "", MSG_UNKNOWN,
MENU_SETTINGS_CHEAT_BEGIN + i, 0, 0);
}
return 0;
}
static int menu_displaylist_parse_options_remappings(
menu_displaylist_info_t *info)
{
unsigned p, retro_id;
rarch_system_info_t *system = NULL;
menu_handle_t *menu = NULL;
settings_t *settings = config_get_ptr();
if (!menu_driver_ctl(RARCH_MENU_CTL_DRIVER_DATA_GET, &menu))
return -1;
for (p = 0; p < settings->input.max_users; p++)
{
char key_type[PATH_MAX_LENGTH];
char key_analog[PATH_MAX_LENGTH];
unsigned val = p + 1;
key_type[0] = key_analog[0] = '\0';
snprintf(key_type, sizeof(key_type),
msg_hash_to_str(MENU_ENUM_LABEL_INPUT_LIBRETRO_DEVICE), val);
snprintf(key_analog, sizeof(key_analog),
msg_hash_to_str(MENU_ENUM_LABEL_INPUT_PLAYER_ANALOG_DPAD_MODE), val);
menu_displaylist_parse_settings(menu, info,
key_type, PARSE_ONLY_UINT, true);
menu_displaylist_parse_settings(menu, info,
key_analog, PARSE_ONLY_UINT, true);
}
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REMAP_FILE_LOAD),
msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_LOAD),
MENU_ENUM_LABEL_REMAP_FILE_LOAD,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_CORE),
msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_SAVE_CORE),
MENU_ENUM_LABEL_REMAP_FILE_SAVE_CORE,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_GAME),
msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_SAVE_GAME),
MENU_ENUM_LABEL_REMAP_FILE_SAVE_GAME,
MENU_SETTING_ACTION, 0, 0);
runloop_ctl(RUNLOOP_CTL_SYSTEM_INFO_GET, &system);
if (system)
{
for (p = 0; p < settings->input.max_users; p++)
{
for (retro_id = 0; retro_id < RARCH_FIRST_CUSTOM_BIND + 4; retro_id++)
{
char desc_label[64];
unsigned user = p + 1;
unsigned desc_offset = retro_id;
const char *description = NULL;
desc_label[0] = '\0';
if (desc_offset >= RARCH_FIRST_CUSTOM_BIND)
desc_offset = RARCH_FIRST_CUSTOM_BIND
+ (desc_offset - RARCH_FIRST_CUSTOM_BIND) * 2;
description = system->input_desc_btn[p][desc_offset];
if (!description)
continue;
snprintf(desc_label, sizeof(desc_label),
"%s %u %s : ", msg_hash_to_str(MENU_ENUM_LABEL_VALUE_USER),
user, description);
menu_entries_append_enum(info->list, desc_label, "",
MSG_UNKNOWN,
MENU_SETTINGS_INPUT_DESC_BEGIN +
(p * (RARCH_FIRST_CUSTOM_BIND + 4)) + retro_id, 0, 0);
}
}
}
return 0;
}
static int menu_displaylist_parse_playlists(
menu_displaylist_info_t *info, bool horizontal)
{
size_t i, list_size;
struct string_list *str_list = NULL;
unsigned items_found = 0;
settings_t *settings = config_get_ptr();
if (string_is_empty(info->path))
{
if (frontend_driver_parse_drive_list(info->list) != 0)
menu_entries_append_enum(info->list, "/", "",
MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
return 0;
}
str_list = dir_list_new(info->path, NULL, true, settings->show_hidden_files, true, false);
if (!str_list)
{
const char *str = msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DIRECTORY_NOT_FOUND);
(void)str;
return 0;
}
dir_list_sort(str_list, true);
list_size = str_list->size;
#ifdef HAVE_LIBRETRODB
if (!horizontal)
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SCAN_DIRECTORY),
msg_hash_to_str(MENU_ENUM_LABEL_SCAN_DIRECTORY),
MENU_ENUM_LABEL_SCAN_DIRECTORY,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SCAN_FILE),
msg_hash_to_str(MENU_ENUM_LABEL_SCAN_FILE),
MENU_ENUM_LABEL_SCAN_FILE,
MENU_SETTING_ACTION, 0, 0);
}
#endif
if (list_size == 0)
{
string_list_free(str_list);
if (!horizontal)
goto no_playlists;
return 0;
}
for (i = 0; i < list_size; i++)
{
char label[PATH_MAX_LENGTH];
const char *path = NULL;
enum msg_file_type file_type = FILE_TYPE_NONE;
label[0] = '\0';
switch (str_list->elems[i].attr.i)
{
case RARCH_DIRECTORY:
file_type = FILE_TYPE_DIRECTORY;
break;
case RARCH_PLAIN_FILE:
default:
file_type = (enum msg_file_type)info->type_default;
break;
}
if (file_type == FILE_TYPE_DIRECTORY)
continue;
/* Need to preserve slash first time. */
path = str_list->elems[i].data;
if (!strstr(path, file_path_str(FILE_PATH_LPL_EXTENSION)) ||
((strcasestr(path, "content") && strcasestr(path, "history"))))
continue;
file_type = FILE_TYPE_PLAYLIST_COLLECTION;
if (!string_is_empty(info->path))
path = path_basename(path);
items_found++;
menu_entries_append_enum(info->list, path, label,
MENU_ENUM_LABEL_PLAYLIST_COLLECTION_ENTRY,
file_type, 0, 0);
}
string_list_free(str_list);
if (items_found == 0 && !horizontal)
goto no_playlists;
return 0;
no_playlists:
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_PLAYLISTS),
msg_hash_to_str(MENU_ENUM_LABEL_NO_PLAYLISTS),
MENU_ENUM_LABEL_NO_PLAYLISTS,
MENU_SETTING_NO_ITEM, 0, 0);
return 0;
}
static int menu_displaylist_parse_cores(
menu_handle_t *menu,
menu_displaylist_info_t *info,
enum menu_displaylist_ctl_state type)
{
size_t i, list_size;
struct string_list *str_list = NULL;
unsigned items_found = 0;
settings_t *settings = config_get_ptr();
if (string_is_empty(info->path))
{
if (frontend_driver_parse_drive_list(info->list) != 0)
menu_entries_append_enum(info->list, "/", "",
MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
return 0;
}
str_list = dir_list_new(info->path, info->exts,
true, settings->show_hidden_files, true, false);
{
char out_dir[PATH_MAX_LENGTH];
out_dir[0] = '\0';
fill_pathname_parent_dir(out_dir, info->path, sizeof(out_dir));
if (string_is_empty(out_dir))
{
menu_entries_prepend(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_PARENT_DIRECTORY),
info->path,
MENU_ENUM_LABEL_PARENT_DIRECTORY,
FILE_TYPE_PARENT_DIRECTORY, 0, 0);
}
}
if (!str_list)
{
const char *str = msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DIRECTORY_NOT_FOUND);
menu_entries_append_enum(info->list, str, "",
MENU_ENUM_LABEL_VALUE_DIRECTORY_NOT_FOUND, 0, 0, 0);
return 0;
}
info->download_core = true;
dir_list_sort(str_list, true);
list_size = str_list->size;
if (list_size == 0)
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_ITEMS),
msg_hash_to_str(MENU_ENUM_LABEL_NO_ITEMS),
MENU_ENUM_LABEL_NO_ITEMS,
MENU_SETTING_NO_ITEM, 0, 0);
string_list_free(str_list);
return 0;
}
for (i = 0; i < list_size; i++)
{
bool is_dir;
char label[PATH_MAX_LENGTH];
const char *path = NULL;
enum msg_hash_enums enum_idx = MSG_UNKNOWN;
enum msg_file_type file_type = FILE_TYPE_NONE;
label[0] = '\0';
switch (str_list->elems[i].attr.i)
{
case RARCH_DIRECTORY:
file_type = FILE_TYPE_DIRECTORY;
break;
case RARCH_COMPRESSED_ARCHIVE:
file_type = FILE_TYPE_CARCHIVE;
break;
case RARCH_COMPRESSED_FILE_IN_ARCHIVE:
file_type = FILE_TYPE_IN_CARCHIVE;
break;
case RARCH_PLAIN_FILE:
default:
file_type = (enum msg_file_type)info->type_default;
break;
}
is_dir = (file_type == FILE_TYPE_DIRECTORY);
/* Need to preserve slash first time. */
path = str_list->elems[i].data;
if (!string_is_empty(info->path))
path = path_basename(path);
#ifndef HAVE_DYNAMIC
if (frontend_driver_has_fork())
{
char salamander_name[PATH_MAX_LENGTH];
salamander_name[0] = '\0';
if (frontend_driver_get_salamander_basename(
salamander_name, sizeof(salamander_name)))
{
if (string_is_equal_noncase(path, salamander_name))
continue;
}
if (is_dir)
continue;
}
#endif
/* Compressed cores are unsupported */
if (file_type == FILE_TYPE_CARCHIVE)
continue;
if (is_dir)
{
file_type = FILE_TYPE_DIRECTORY;
enum_idx = MENU_ENUM_LABEL_FILE_BROWSER_DIRECTORY;
}
else
{
file_type = FILE_TYPE_CORE;
enum_idx = MENU_ENUM_LABEL_FILE_BROWSER_CORE;
}
items_found++;
menu_entries_append_enum(info->list, path, label,
enum_idx,
file_type, 0, 0);
}
string_list_free(str_list);
if (items_found == 0)
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_ITEMS),
msg_hash_to_str(MENU_ENUM_LABEL_NO_ITEMS),
MENU_ENUM_LABEL_NO_ITEMS,
MENU_SETTING_NO_ITEM, 0, 0);
return 0;
}
{
enum msg_hash_enums enum_idx = MSG_UNKNOWN;
core_info_list_t *list = NULL;
const char *dir = NULL;
core_info_get_list(&list);
menu_entries_get_last_stack(&dir, NULL, NULL, &enum_idx, NULL);
list_size = file_list_get_size(info->list);
for (i = 0; i < list_size; i++)
{
char core_path[PATH_MAX_LENGTH];
char display_name[PATH_MAX_LENGTH];
unsigned type = 0;
const char *path = NULL;
core_path[0] = display_name[0] = '\0';
menu_entries_get_at_offset(info->list,
i, &path, NULL, &type, NULL,
NULL);
if (type != FILE_TYPE_CORE)
continue;
fill_pathname_join(core_path, dir, path, sizeof(core_path));
if (core_info_list_get_display_name(list,
core_path, display_name, sizeof(display_name)))
menu_entries_set_alt_at_offset(info->list, i, display_name);
}
info->need_sort = true;
}
return 0;
}
static void menu_displaylist_parse_playlist_associations(
menu_displaylist_info_t *info)
{
settings_t *settings = config_get_ptr();
struct string_list *str_list = dir_list_new_special(settings->directory.playlist,
DIR_LIST_COLLECTIONS, NULL);
if (str_list && str_list->size)
{
unsigned i;
char new_playlist_names[PATH_MAX_LENGTH];
char new_playlist_cores[PATH_MAX_LENGTH];
struct string_list *stnames = string_split(settings->playlist_names, ";");
struct string_list *stcores = string_split(settings->playlist_cores, ";");
new_playlist_names[0] = new_playlist_cores[0] = '\0';
for (i = 0; i < str_list->size; i++)
{
char path_base[PATH_MAX_LENGTH];
char core_path[PATH_MAX_LENGTH];
union string_list_elem_attr attr;
unsigned found = 0;
const char *path =
path_basename(str_list->elems[i].data);
attr.i = 0;
path_base[0] = core_path[0] = '\0';
if (!menu_content_playlist_find_associated_core(
path, core_path, sizeof(core_path)))
strlcpy(core_path, file_path_str(FILE_PATH_DETECT), sizeof(core_path));
strlcpy(path_base, path, sizeof(path_base));
found = string_list_find_elem(stnames, path_base);
if (found)
string_list_set(stcores, found-1, core_path);
else
{
string_list_append(stnames, path_base, attr);
string_list_append(stcores, core_path, attr);
}
path_remove_extension(path_base);
menu_entries_append_enum(info->list,
path_base,
path,
MENU_ENUM_LABEL_PLAYLIST_ENTRY,
MENU_SETTINGS_PLAYLIST_ASSOCIATION_START + i,
0, 0);
}
string_list_join_concat(new_playlist_names,
sizeof(new_playlist_names), stnames, ";");
string_list_join_concat(new_playlist_cores,
sizeof(new_playlist_cores), stcores, ";");
strlcpy(settings->playlist_names,
new_playlist_names, sizeof(settings->playlist_names));
strlcpy(settings->playlist_cores,
new_playlist_cores, sizeof(settings->playlist_cores));
string_list_free(stnames);
string_list_free(stcores);
}
string_list_free(str_list);
}
static bool menu_displaylist_push_list_process(menu_displaylist_info_t *info)
{
size_t idx = 0;
if (!info)
return false;
if (info->need_navigation_clear)
{
bool pending_push = true;
menu_navigation_ctl(MENU_NAVIGATION_CTL_CLEAR, &pending_push);
}
if (info->need_entries_refresh)
{
bool refresh = false;
menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh);
}
if (info->need_sort)
file_list_sort_on_alt(info->list);
#ifdef HAVE_NETWORKING
if (info->download_core)
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE),
msg_hash_to_str(MENU_ENUM_LABEL_CORE_UPDATER_LIST),
MENU_ENUM_LABEL_CORE_UPDATER_LIST,
MENU_SETTING_ACTION, 0, 0);
}
#endif
if (info->push_builtin_cores)
{
#if defined(HAVE_VIDEO_PROCESSOR)
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_START_VIDEO_PROCESSOR),
msg_hash_to_str(MENU_ENUM_LABEL_START_VIDEO_PROCESSOR),
MENU_ENUM_LABEL_START_VIDEO_PROCESSOR,
MENU_SETTING_ACTION, 0, 0);
#endif
#if defined(HAVE_NETWORKING) && defined(HAVE_NETWORKGAMEPAD) && defined(HAVE_NETWORKGAMEPAD_CORE)
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_START_NET_RETROPAD),
msg_hash_to_str(MENU_ENUM_LABEL_START_NET_RETROPAD),
MENU_ENUM_LABEL_START_NET_RETROPAD,
MENU_SETTING_ACTION, 0, 0);
#endif
}
if (!string_is_empty(new_entry))
{
menu_entries_prepend(info->list,
new_path_entry,
new_lbl_entry,
new_type,
FILE_TYPE_CORE, 0, 0);
menu_entries_set_alt_at_offset(info->list, 0,
new_entry);
new_type = MSG_UNKNOWN;
new_lbl_entry[0] = '\0';
new_path_entry[0] = '\0';
new_entry[0] = '\0';
}
if (info->need_refresh)
menu_entries_ctl(MENU_ENTRIES_CTL_REFRESH, info->list);
if (info->need_clear)
menu_navigation_ctl(MENU_NAVIGATION_CTL_SET_SELECTION, &idx);
if (info->need_push)
{
info->label_hash = msg_hash_calculate(info->label);
menu_driver_ctl(RARCH_MENU_CTL_POPULATE_ENTRIES, info);
ui_companion_driver_notify_list_loaded(info->list, info->menu_list);
}
return true;
}
static bool menu_displaylist_push_internal(
const char *label,
menu_displaylist_ctx_entry_t *entry,
menu_displaylist_info_t *info)
{
if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_HISTORY_TAB)))
{
if (!menu_displaylist_ctl(DISPLAYLIST_HISTORY, info))
return false;
return true;
}
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SETTINGS_TAB)))
{
if (!menu_displaylist_ctl(DISPLAYLIST_SETTINGS_ALL, info))
return false;
return true;
}
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_MUSIC_TAB)))
{
filebrowser_clear_type();
info->type = 42;
strlcpy(info->exts,
file_path_str(FILE_PATH_LPL_EXTENSION_NO_DOT),
sizeof(info->exts));
strlcpy(info->label,
msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST),
sizeof(info->label));
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
menu_displaylist_ctl(DISPLAYLIST_MUSIC_HISTORY, info);
return true;
}
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_TAB)))
{
filebrowser_clear_type();
info->type = 42;
strlcpy(info->exts,
file_path_str(FILE_PATH_LPL_EXTENSION_NO_DOT),
sizeof(info->exts));
strlcpy(info->label,
msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST),
sizeof(info->label));
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
menu_displaylist_ctl(DISPLAYLIST_VIDEO_HISTORY, info);
return true;
}
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_IMAGES_TAB)))
{
filebrowser_clear_type();
info->type = 42;
strlcpy(info->exts,
file_path_str(FILE_PATH_LPL_EXTENSION_NO_DOT),
sizeof(info->exts));
strlcpy(info->label,
msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST),
sizeof(info->label));
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
#if 0
if (!rarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL))
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_TAKE_SCREENSHOT),
msg_hash_to_str(MENU_ENUM_LABEL_TAKE_SCREENSHOT),
MENU_ENUM_LABEL_TAKE_SCREENSHOT,
MENU_SETTING_ACTION_SCREENSHOT, 0, 0);
else
menu_entries_append_enum(info->list,
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_NO_PLAYLIST_ENTRIES_AVAILABLE),
msg_hash_to_str(
MENU_ENUM_LABEL_NO_PLAYLIST_ENTRIES_AVAILABLE),
MENU_ENUM_LABEL_NO_PLAYLIST_ENTRIES_AVAILABLE,
MENU_INFO_MESSAGE, 0, 0);
#endif
menu_displaylist_ctl(DISPLAYLIST_IMAGES_HISTORY, info);
return true;
}
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_PLAYLISTS_TAB)))
{
settings_t *settings = config_get_ptr();
filebrowser_clear_type();
info->type = 42;
strlcpy(info->exts,
file_path_str(FILE_PATH_LPL_EXTENSION_NO_DOT),
sizeof(info->exts));
strlcpy(info->label,
msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST),
sizeof(info->label));
if (string_is_empty(settings->directory.playlist))
{
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
menu_entries_append_enum(info->list,
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_NO_PLAYLIST_ENTRIES_AVAILABLE),
msg_hash_to_str(
MENU_ENUM_LABEL_NO_PLAYLIST_ENTRIES_AVAILABLE),
MENU_ENUM_LABEL_NO_PLAYLIST_ENTRIES_AVAILABLE,
MENU_INFO_MESSAGE, 0, 0);
info->need_refresh = true;
info->need_push = true;
}
else
{
strlcpy(
info->path,
settings->directory.playlist,
sizeof(info->path));
if (!menu_displaylist_ctl(
DISPLAYLIST_DATABASE_PLAYLISTS, info))
return false;
}
return true;
}
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_ADD_TAB)))
{
if (!menu_displaylist_ctl(DISPLAYLIST_SCAN_DIRECTORY_LIST, info))
return false;
return true;
}
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_NETPLAY_TAB)))
{
if (!menu_displaylist_ctl(DISPLAYLIST_NETPLAY_ROOM_LIST, info))
return false;
return true;
}
else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_HORIZONTAL_MENU)))
{
if (!menu_displaylist_ctl(DISPLAYLIST_HORIZONTAL, info))
return false;
return true;
}
return false;
}
static bool menu_displaylist_push(menu_displaylist_ctx_entry_t *entry)
{
menu_file_list_cbs_t *cbs = NULL;
const char *path = NULL;
const char *label = NULL;
unsigned type = 0;
enum msg_hash_enums enum_idx = MSG_UNKNOWN;
menu_displaylist_info_t info = {0};
if (!entry)
return false;
menu_entries_get_last_stack(&path, &label, &type, &enum_idx, NULL);
info.list = entry->list;
info.menu_list = entry->stack;
info.type = type;
info.enum_idx = enum_idx;
strlcpy(info.path, path, sizeof(info.path));
strlcpy(info.label, label, sizeof(info.label));
if (!info.list)
return false;
if (menu_displaylist_push_internal(label, entry, &info))
return menu_displaylist_push_list_process(&info);
cbs = menu_entries_get_last_stack_actiondata();
if (cbs && cbs->action_deferred_push)
{
if (cbs->action_deferred_push(&info) != 0)
return -1;
}
return true;
}
static void menu_displaylist_parse_playlist_history(
menu_handle_t *menu,
menu_displaylist_info_t *info,
playlist_t *playlist,
const char *playlist_name,
const char *playlist_path,
int *ret)
{
char path_playlist[PATH_MAX_LENGTH];
path_playlist[0] = '\0';
if (!playlist)
command_event(CMD_EVENT_HISTORY_INIT, NULL);
strlcpy(path_playlist, playlist_name, sizeof(path_playlist));
*ret = menu_displaylist_parse_playlist(info,
playlist, path_playlist, true);
strlcpy(
menu->db_playlist_file,
playlist_path,
sizeof(menu->db_playlist_file));
menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_FREE, NULL);
menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_INIT,
(void*)menu->db_playlist_file);
}
bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
{
size_t i;
menu_ctx_displaylist_t disp_list;
#ifdef HAVE_SHADER_MANAGER
video_shader_ctx_t shader_info;
#endif
int ret = 0;
core_info_list_t *list = NULL;
menu_handle_t *menu = NULL;
settings_t *settings = NULL;
menu_displaylist_info_t *info = (menu_displaylist_info_t*)data;
switch (type)
{
case DISPLAYLIST_PROCESS:
return menu_displaylist_push_list_process(info);
case DISPLAYLIST_PUSH_ONTO_STACK:
return menu_displaylist_push((menu_displaylist_ctx_entry_t*)data);
default:
break;
}
if (!info)
goto error;
if (!menu_driver_ctl(RARCH_MENU_CTL_DRIVER_DATA_GET, &menu))
goto error;
settings = config_get_ptr();
core_info_get_list(&list);
disp_list.info = info;
disp_list.type = type;
if (menu_driver_ctl(RARCH_MENU_CTL_LIST_PUSH, &disp_list))
return true;
switch (type)
{
case DISPLAYLIST_BROWSE_URL_LIST:
case DISPLAYLIST_BROWSE_URL_START:
case DISPLAYLIST_HELP_SCREEN_LIST:
case DISPLAYLIST_MAIN_MENU:
case DISPLAYLIST_SETTINGS_ALL:
case DISPLAYLIST_HORIZONTAL:
case DISPLAYLIST_HORIZONTAL_CONTENT_ACTIONS:
case DISPLAYLIST_CONTENT_SETTINGS:
case DISPLAYLIST_INFORMATION_LIST:
case DISPLAYLIST_ADD_CONTENT_LIST:
case DISPLAYLIST_CONFIGURATIONS_LIST:
case DISPLAYLIST_SCAN_DIRECTORY_LIST:
case DISPLAYLIST_NETPLAY_ROOM_LIST:
case DISPLAYLIST_LOAD_CONTENT_LIST:
case DISPLAYLIST_USER_BINDS_LIST:
case DISPLAYLIST_ACCOUNTS_LIST:
case DISPLAYLIST_ACCOUNTS_CHEEVOS_LIST:
case DISPLAYLIST_OPTIONS:
case DISPLAYLIST_OPTIONS_CHEATS:
case DISPLAYLIST_OPTIONS_REMAPPINGS:
case DISPLAYLIST_SHADER_PARAMETERS:
case DISPLAYLIST_SHADER_PARAMETERS_PRESET:
case DISPLAYLIST_PERFCOUNTERS_CORE:
case DISPLAYLIST_PERFCOUNTERS_FRONTEND:
case DISPLAYLIST_DATABASE_ENTRY:
case DISPLAYLIST_DATABASE_QUERY:
case DISPLAYLIST_OPTIONS_SHADERS:
case DISPLAYLIST_NETPLAY:
case DISPLAYLIST_CORE_CONTENT:
case DISPLAYLIST_CORE_CONTENT_DIRS:
case DISPLAYLIST_PLAYLIST_COLLECTION:
case DISPLAYLIST_HISTORY:
case DISPLAYLIST_OPTIONS_DISK:
case DISPLAYLIST_NETWORK_INFO:
case DISPLAYLIST_SYSTEM_INFO:
case DISPLAYLIST_ACHIEVEMENT_LIST:
case DISPLAYLIST_ACHIEVEMENT_LIST_HARDCORE:
case DISPLAYLIST_CORES:
case DISPLAYLIST_CORES_DETECTED:
case DISPLAYLIST_CORES_UPDATER:
case DISPLAYLIST_THUMBNAILS_UPDATER:
case DISPLAYLIST_LAKKA:
case DISPLAYLIST_CORES_SUPPORTED:
case DISPLAYLIST_CORES_COLLECTION_SUPPORTED:
case DISPLAYLIST_CORE_INFO:
case DISPLAYLIST_CORE_OPTIONS:
case DISPLAYLIST_DEFAULT:
case DISPLAYLIST_SHADER_PASS:
case DISPLAYLIST_SHADER_PRESET:
case DISPLAYLIST_DATABASES:
case DISPLAYLIST_DATABASE_CURSORS:
case DISPLAYLIST_DATABASE_PLAYLISTS:
case DISPLAYLIST_DATABASE_PLAYLISTS_HORIZONTAL:
case DISPLAYLIST_VIDEO_FILTERS:
case DISPLAYLIST_INPUT_HOTKEY_BINDS_LIST:
case DISPLAYLIST_DRIVER_SETTINGS_LIST:
case DISPLAYLIST_VIDEO_SETTINGS_LIST:
case DISPLAYLIST_CONFIGURATION_SETTINGS_LIST:
case DISPLAYLIST_LOGGING_SETTINGS_LIST:
case DISPLAYLIST_SAVING_SETTINGS_LIST:
case DISPLAYLIST_FRAME_THROTTLE_SETTINGS_LIST:
case DISPLAYLIST_REWIND_SETTINGS_LIST:
case DISPLAYLIST_ONSCREEN_DISPLAY_SETTINGS_LIST:
case DISPLAYLIST_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST:
case DISPLAYLIST_ONSCREEN_OVERLAY_SETTINGS_LIST:
case DISPLAYLIST_MENU_FILE_BROWSER_SETTINGS_LIST:
case DISPLAYLIST_MENU_SETTINGS_LIST:
case DISPLAYLIST_USER_INTERFACE_SETTINGS_LIST:
case DISPLAYLIST_RETRO_ACHIEVEMENTS_SETTINGS_LIST:
case DISPLAYLIST_UPDATER_SETTINGS_LIST:
case DISPLAYLIST_WIFI_SETTINGS_LIST:
case DISPLAYLIST_NETWORK_SETTINGS_LIST:
case DISPLAYLIST_NETPLAY_LAN_SCAN_SETTINGS_LIST:
case DISPLAYLIST_LAKKA_SERVICES_LIST:
case DISPLAYLIST_USER_SETTINGS_LIST:
case DISPLAYLIST_DIRECTORY_SETTINGS_LIST:
case DISPLAYLIST_PRIVACY_SETTINGS_LIST:
case DISPLAYLIST_AUDIO_SETTINGS_LIST:
case DISPLAYLIST_CORE_SETTINGS_LIST:
case DISPLAYLIST_INPUT_SETTINGS_LIST:
case DISPLAYLIST_PLAYLIST_SETTINGS_LIST:
case DISPLAYLIST_RECORDING_SETTINGS_LIST:
case DISPLAYLIST_AUDIO_FILTERS:
case DISPLAYLIST_IMAGES:
case DISPLAYLIST_OVERLAYS:
case DISPLAYLIST_FONTS:
case DISPLAYLIST_CHEAT_FILES:
case DISPLAYLIST_REMAP_FILES:
case DISPLAYLIST_RECORD_CONFIG_FILES:
case DISPLAYLIST_CONFIG_FILES:
case DISPLAYLIST_CONTENT_HISTORY:
case DISPLAYLIST_ARCHIVE_ACTION:
case DISPLAYLIST_ARCHIVE_ACTION_DETECT_CORE:
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
break;
default:
break;
}
switch (type)
{
case DISPLAYLIST_NONE:
break;
case DISPLAYLIST_INFO:
menu_entries_append_enum(info->list, info->path,
info->label, MSG_UNKNOWN, info->type, info->directory_ptr, 0);
break;
case DISPLAYLIST_FILE_BROWSER_SCAN_DIR:
case DISPLAYLIST_FILE_BROWSER_SELECT_DIR:
case DISPLAYLIST_FILE_BROWSER_SELECT_FILE:
case DISPLAYLIST_FILE_BROWSER_SELECT_CORE:
case DISPLAYLIST_FILE_BROWSER_SELECT_COLLECTION:
case DISPLAYLIST_GENERIC:
{
menu_ctx_list_t list_info;
list_info.type = MENU_LIST_PLAIN;
list_info.action = 0;
menu_driver_ctl(RARCH_MENU_CTL_LIST_CACHE, &list_info);
menu_entries_append_enum(info->list, info->path,
info->label, MSG_UNKNOWN, info->type, info->directory_ptr, 0);
info->need_navigation_clear = true;
info->need_entries_refresh = true;
}
break;
case DISPLAYLIST_PENDING_CLEAR:
{
menu_ctx_list_t list_info;
list_info.type = MENU_LIST_PLAIN;
list_info.action = 0;
menu_driver_ctl(RARCH_MENU_CTL_LIST_CACHE, &list_info);
menu_entries_append_enum(info->list, info->path,
info->label, MSG_UNKNOWN, info->type, info->directory_ptr, 0);
info->need_entries_refresh = true;
}
break;
case DISPLAYLIST_USER_BINDS_LIST:
{
char lbl[PATH_MAX_LENGTH];
unsigned val = atoi(info->path);
const char *temp_val = msg_hash_to_str(
(enum msg_hash_enums)(MENU_ENUM_LABEL_INPUT_USER_1_BINDS + (val-1)));
lbl[0] = '\0';
strlcpy(lbl, temp_val, sizeof(lbl));
ret = menu_displaylist_parse_settings(menu, info,
lbl, PARSE_NONE, true);
info->need_refresh = true;
info->need_push = true;
}
break;
case DISPLAYLIST_ACCOUNTS_LIST:
#ifdef HAVE_CHEEVOS
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_ACCOUNTS_RETRO_ACHIEVEMENTS,
PARSE_ACTION, false);
#else
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_ITEMS),
msg_hash_to_str(MENU_ENUM_LABEL_NO_ITEMS),
MENU_ENUM_LABEL_NO_ITEMS,
MENU_SETTING_NO_ITEM, 0, 0);
ret = 0;
#endif
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_ACCOUNTS_CHEEVOS_LIST:
#ifdef HAVE_CHEEVOS
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CHEEVOS_USERNAME,
PARSE_ONLY_STRING, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CHEEVOS_PASSWORD,
PARSE_ONLY_STRING, false);
#else
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_ITEMS),
msg_hash_to_str(MENU_ENUM_LABEL_NO_ITEMS),
MENU_ENUM_LABEL_NO_ITEMS,
MENU_SETTING_NO_ITEM, 0, 0);
ret = 0;
#endif
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_BROWSE_URL_START:
#ifdef HAVE_NETWORKING
{
char link[1024];
char name[1024];
const char *line = "<a href=\"http://www.test.com/somefile.zip\">Test</a>\n";
link[0] = name[0] = '\0';
string_parse_html_anchor(line, link, name, sizeof(link), sizeof(name));
menu_entries_append_enum(info->list,
link,
name,
MSG_UNKNOWN,
0, 0, 0);
}
#endif
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_BROWSE_URL_LIST:
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_BROWSE_URL),
msg_hash_to_str(MENU_ENUM_LABEL_BROWSE_URL),
MENU_ENUM_LABEL_BROWSE_URL,
0, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_BROWSE_START),
msg_hash_to_str(MENU_ENUM_LABEL_BROWSE_START),
MENU_ENUM_LABEL_BROWSE_START,
0, 0, 0);
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_HELP_SCREEN_LIST:
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_HELP_CONTROLS),
msg_hash_to_str(MENU_ENUM_LABEL_HELP_CONTROLS),
MENU_ENUM_LABEL_HELP_CONTROLS,
0, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_HELP_WHAT_IS_A_CORE),
msg_hash_to_str(MENU_ENUM_LABEL_HELP_WHAT_IS_A_CORE),
MENU_ENUM_LABEL_HELP_WHAT_IS_A_CORE,
0, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_HELP_LOADING_CONTENT),
msg_hash_to_str(MENU_ENUM_LABEL_HELP_LOADING_CONTENT),
MENU_ENUM_LABEL_HELP_LOADING_CONTENT,
0, 0, 0);
#ifdef HAVE_LIBRETRODB
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_HELP_SCANNING_CONTENT),
msg_hash_to_str(MENU_ENUM_LABEL_HELP_SCANNING_CONTENT),
MENU_ENUM_LABEL_HELP_SCANNING_CONTENT,
0, 0, 0);
#endif
#ifdef HAVE_OVERLAY
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_HELP_CHANGE_VIRTUAL_GAMEPAD),
msg_hash_to_str(MENU_ENUM_LABEL_HELP_CHANGE_VIRTUAL_GAMEPAD),
MENU_ENUM_LABEL_HELP_CHANGE_VIRTUAL_GAMEPAD,
0, 0, 0);
#endif
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_HELP_AUDIO_VIDEO_TROUBLESHOOTING),
msg_hash_to_str(MENU_ENUM_LABEL_HELP_AUDIO_VIDEO_TROUBLESHOOTING),
MENU_ENUM_LABEL_HELP_AUDIO_VIDEO_TROUBLESHOOTING,
0, 0, 0);
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_HELP:
menu_entries_append_enum(info->list, info->path,
info->label, MSG_UNKNOWN, info->type, info->directory_ptr, 0);
menu_dialog_unset_pending_push();
break;
case DISPLAYLIST_SETTING_ENUM:
{
menu_displaylist_ctx_parse_entry_t *entry =
(menu_displaylist_ctx_parse_entry_t*)data;
if (menu_displaylist_parse_settings_enum(entry->data,
entry->info,
entry->enum_idx,
entry->parse_type,
entry->add_empty_entry) == -1)
goto error;
}
return true;
case DISPLAYLIST_MAIN_MENU:
{
rarch_system_info_t *system = NULL;
runloop_ctl(RUNLOOP_CTL_SYSTEM_INFO_GET, &system);
if (!rarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL))
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CONTENT_SETTINGS,
PARSE_ACTION, false);
if (menu_driver_ctl(RARCH_MENU_CTL_HAS_LOAD_NO_CONTENT, NULL))
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_START_CORE, PARSE_ACTION, false);
#ifndef HAVE_DYNAMIC
if (frontend_driver_has_fork())
#endif
{
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CORE_LIST, PARSE_ACTION, false);
}
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_LOAD_CONTENT_LIST,
PARSE_ACTION, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_LOAD_CONTENT_HISTORY,
PARSE_ACTION, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_ADD_CONTENT_LIST,
PARSE_ACTION, false);
#ifdef HAVE_NETWORKING
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_NETPLAY,
PARSE_ACTION, false);
#endif
#if defined(HAVE_NETWORKING)
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_ONLINE_UPDATER,
PARSE_ACTION, false);
#endif
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SETTINGS, PARSE_ACTION, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INFORMATION_LIST,
PARSE_ACTION, false);
#ifndef HAVE_DYNAMIC
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_RESTART_RETROARCH,
PARSE_ACTION, false);
#endif
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CONFIGURATIONS_LIST,
PARSE_ACTION, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_HELP_LIST,
PARSE_ACTION, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_QUIT_RETROARCH,
PARSE_ACTION, false);
#if defined(HAVE_LAKKA)
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SHUTDOWN,
PARSE_ACTION, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_REBOOT,
PARSE_ACTION, false);
#endif
info->need_push = true;
}
break;
case DISPLAYLIST_RECORDING_SETTINGS_LIST:
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_RECORD_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_RECORD_CONFIG,
PARSE_ONLY_PATH, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_RECORD_PATH,
PARSE_ONLY_STRING, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_RECORD_USE_OUTPUT_DIRECTORY,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_GPU_RECORD,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_POST_FILTER_RECORD,
PARSE_ONLY_BOOL, false);
info->need_push = true;
break;
case DISPLAYLIST_PLAYLIST_SETTINGS_LIST:
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_HISTORY_LIST_ENABLE,
PARSE_ONLY_BOOL, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CONTENT_HISTORY_SIZE,
PARSE_ONLY_UINT, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_PLAYLIST_ENTRY_REMOVE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_playlist_associations(info);
info->need_push = true;
break;
case DISPLAYLIST_INPUT_HOTKEY_BINDS_LIST:
{
unsigned i;
for (i = 0; i < RARCH_BIND_LIST_END; i++)
{
ret = menu_displaylist_parse_settings_enum(menu, info,
(enum msg_hash_enums)(MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN + i),
PARSE_ONLY_BIND, false);
(void)ret;
}
}
info->need_push = true;
break;
case DISPLAYLIST_DRIVER_SETTINGS_LIST:
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_DRIVER,
PARSE_ONLY_STRING_OPTIONS, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_JOYPAD_DRIVER,
PARSE_ONLY_STRING_OPTIONS, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_DRIVER,
PARSE_ONLY_STRING_OPTIONS, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_AUDIO_DRIVER,
PARSE_ONLY_STRING_OPTIONS, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_AUDIO_RESAMPLER_DRIVER,
PARSE_ONLY_STRING_OPTIONS, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CAMERA_DRIVER,
PARSE_ONLY_STRING_OPTIONS, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_LOCATION_DRIVER,
PARSE_ONLY_STRING_OPTIONS, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_MENU_DRIVER,
PARSE_ONLY_STRING_OPTIONS, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_RECORD_DRIVER,
PARSE_ONLY_STRING_OPTIONS, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_WIFI_DRIVER,
PARSE_ONLY_STRING_OPTIONS, false);
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_CONFIGURATION_SETTINGS_LIST:
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CONFIG_SAVE_ON_EXIT,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_GAME_SPECIFIC_OPTIONS,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_AUTO_OVERRIDES_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_AUTO_REMAPS_ENABLE,
PARSE_ONLY_BOOL, false);
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_SAVING_SETTINGS_LIST:
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SORT_SAVEFILES_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SORT_SAVESTATES_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_BLOCK_SRAM_OVERWRITE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_AUTOSAVE_INTERVAL,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SAVESTATE_AUTO_INDEX,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SAVESTATE_AUTO_SAVE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SAVESTATE_AUTO_LOAD,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SAVESTATE_THUMBNAIL_ENABLE,
PARSE_ONLY_BOOL, false);
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_LOGGING_SETTINGS_LIST:
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_LOG_VERBOSITY,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_LIBRETRO_LOG_LEVEL,
PARSE_ONLY_UINT, false);
if (settings->menu.show_advanced_settings)
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_PERFCNT_ENABLE,
PARSE_ONLY_BOOL, false);
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_FRAME_THROTTLE_SETTINGS_LIST:
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_REWIND_SETTINGS, PARSE_ACTION, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_FASTFORWARD_RATIO,
PARSE_ONLY_FLOAT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SLOWMOTION_RATIO,
PARSE_ONLY_FLOAT, false);
if (settings->menu.show_advanced_settings)
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_MENU_THROTTLE_FRAMERATE,
PARSE_ONLY_BOOL, false);
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_REWIND_SETTINGS_LIST:
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_REWIND_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_REWIND_GRANULARITY,
PARSE_ONLY_UINT, false);
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_ONSCREEN_DISPLAY_SETTINGS_LIST:
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_ONSCREEN_OVERLAY_SETTINGS, PARSE_ACTION, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_ONSCREEN_NOTIFICATIONS_SETTINGS, PARSE_ACTION, false);
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST:
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_FONT_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_FONT_PATH,
PARSE_ONLY_PATH, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_FONT_SIZE,
PARSE_ONLY_FLOAT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_MESSAGE_POS_X,
PARSE_ONLY_FLOAT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_MESSAGE_POS_Y,
PARSE_ONLY_FLOAT, false);
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_ONSCREEN_OVERLAY_SETTINGS_LIST:
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_OVERLAY_ENABLE,
PARSE_ONLY_BOOL, false);
#if 0
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_OVERLAY_AUTOLOAD_PREFERRED,
PARSE_ONLY_BOOL, false);
#endif
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_OVERLAY_HIDE_IN_MENU,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_OVERLAY_PRESET,
PARSE_ONLY_PATH, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_OVERLAY_OPACITY,
PARSE_ONLY_FLOAT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_OVERLAY_SCALE,
PARSE_ONLY_FLOAT, false);
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_MENU_FILE_BROWSER_SETTINGS_LIST:
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SHOW_HIDDEN_FILES,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_NAVIGATION_BROWSER_FILTER_SUPPORTED_EXTENSIONS_ENABLE,
PARSE_ONLY_BOOL, false);
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_MENU_SETTINGS_LIST:
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_MENU_WALLPAPER,
PARSE_ONLY_PATH, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_DYNAMIC_WALLPAPER,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_MENU_WALLPAPER_OPACITY,
PARSE_ONLY_FLOAT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_PAUSE_LIBRETRO,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_MOUSE_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_POINTER_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_MENU_LINEAR_FILTER,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_NAVIGATION_WRAPAROUND,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_ENTRY_NORMAL_COLOR,
PARSE_ONLY_HEX, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_ENTRY_HOVER_COLOR,
PARSE_ONLY_HEX, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_TITLE_COLOR,
PARSE_ONLY_HEX, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_DPI_OVERRIDE_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_DPI_OVERRIDE_VALUE,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_XMB_ALPHA_FACTOR,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_XMB_SCALE_FACTOR,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_XMB_FONT,
PARSE_ONLY_PATH, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_XMB_THEME,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_XMB_SHADOWS_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_XMB_RIBBON_ENABLE,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_XMB_MENU_COLOR_THEME,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_XMB_SHOW_SETTINGS,
PARSE_ONLY_BOOL, false);
#ifdef HAVE_IMAGEVIEWER
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_XMB_SHOW_IMAGES,
PARSE_ONLY_BOOL, false);
#endif
#ifdef HAVE_FFMPEG
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_XMB_SHOW_MUSIC,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_XMB_SHOW_VIDEO,
PARSE_ONLY_BOOL, false);
#endif
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_XMB_SHOW_HISTORY,
PARSE_ONLY_BOOL, false);
#ifdef HAVE_LIBRETRODB
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_XMB_SHOW_ADD,
PARSE_ONLY_BOOL, false);
#endif
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_MATERIALUI_MENU_COLOR_THEME,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_MATERIALUI_MENU_HEADER_OPACITY,
PARSE_ONLY_FLOAT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_MATERIALUI_MENU_FOOTER_OPACITY,
PARSE_ONLY_FLOAT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_RGUI_SHOW_START_SCREEN,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_THUMBNAILS,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_TIMEDATE_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_BATTERY_LEVEL_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CORE_ENABLE,
PARSE_ONLY_BOOL, false);
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_USER_INTERFACE_SETTINGS_LIST:
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_MENU_SETTINGS, PARSE_ACTION, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SHOW_ADVANCED_SETTINGS,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_THREADED_DATA_RUNLOOP_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_PAUSE_NONACTIVE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_DISABLE_COMPOSITION,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_UI_COMPANION_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_UI_COMPANION_START_ON_BOOT,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_UI_MENUBAR_ENABLE,
PARSE_ONLY_BOOL, false);
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_RETRO_ACHIEVEMENTS_SETTINGS_LIST:
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CHEEVOS_ENABLE,
PARSE_ONLY_BOOL, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CHEEVOS_USERNAME,
PARSE_ONLY_STRING, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CHEEVOS_PASSWORD,
PARSE_ONLY_STRING, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CHEEVOS_TEST_UNOFFICIAL,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CHEEVOS_HARDCORE_MODE_ENABLE,
PARSE_ONLY_BOOL, false);
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_UPDATER_SETTINGS_LIST:
{
unsigned count = 0;
if (menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CORE_UPDATER_BUILDBOT_URL,
PARSE_ONLY_STRING, false) != -1)
count++;
if (menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_BUILDBOT_ASSETS_URL,
PARSE_ONLY_STRING, false) != -1)
count++;
if (menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CORE_UPDATER_AUTO_EXTRACT_ARCHIVE,
PARSE_ONLY_BOOL, false) != -1)
count++;
if (count == 0)
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_SETTINGS_FOUND),
msg_hash_to_str(MENU_ENUM_LABEL_NO_SETTINGS_FOUND),
MENU_ENUM_LABEL_NO_SETTINGS_FOUND,
0, 0, 0);
}
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_WIFI_SETTINGS_LIST:
if (string_is_equal(settings->wifi.driver, "null"))
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_NETWORKS_FOUND),
msg_hash_to_str(MENU_ENUM_LABEL_NO_NETWORKS_FOUND),
MENU_ENUM_LABEL_NO_NETWORKS_FOUND,
0, 0, 0);
#ifdef HAVE_NETWORKING
else
{
struct string_list *ssid_list = string_list_new();
driver_wifi_get_ssids(ssid_list);
if (ssid_list->size == 0)
{
task_push_wifi_scan();
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_NETWORKS_FOUND),
msg_hash_to_str(MENU_ENUM_LABEL_NO_NETWORKS_FOUND),
MENU_ENUM_LABEL_NO_NETWORKS_FOUND,
0, 0, 0);
}
else
{
unsigned i;
for (i = 0; i < ssid_list->size; i++)
{
const char *ssid = ssid_list->elems[i].data;
menu_entries_append_enum(info->list,
ssid,
msg_hash_to_str(MENU_ENUM_LABEL_CONNECT_WIFI),
MENU_ENUM_LABEL_CONNECT_WIFI,
MENU_WIFI, 0, 0);
}
}
}
#else
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_NETWORKS_FOUND),
msg_hash_to_str(MENU_ENUM_LABEL_NO_NETWORKS_FOUND),
MENU_ENUM_LABEL_NO_NETWORKS_FOUND,
0, 0, 0);
#endif
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_NETWORK_SETTINGS_LIST:
{
unsigned user;
unsigned count = 0;
if (menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_NETPLAY_PUBLIC_ANNOUNCE,
PARSE_ONLY_BOOL, false) != -1)
count++;
if (menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_NETPLAY_IP_ADDRESS,
PARSE_ONLY_STRING, false) != -1)
count++;
if (menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_NETPLAY_TCP_UDP_PORT,
PARSE_ONLY_UINT, false) != -1)
count++;
if (menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_NETPLAY_PASSWORD,
PARSE_ONLY_STRING, false) != -1)
count++;
if (menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_NETPLAY_SPECTATE_PASSWORD,
PARSE_ONLY_STRING, false) != -1)
count++;
if (menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_NETPLAY_START_AS_SPECTATOR,
PARSE_ONLY_BOOL, false) != -1)
count++;
if (menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_NETPLAY_STATELESS_MODE,
PARSE_ONLY_BOOL, false) != -1)
count++;
if (menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_NETPLAY_CHECK_FRAMES,
PARSE_ONLY_INT, false) != -1)
count++;
if (menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_NETPLAY_INPUT_LATENCY_FRAMES_MIN,
PARSE_ONLY_INT, false) != -1)
count++;
if (menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_NETPLAY_INPUT_LATENCY_FRAMES_RANGE,
PARSE_ONLY_INT, false) != -1)
count++;
if (menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_NETPLAY_NAT_TRAVERSAL,
PARSE_ONLY_BOOL, false) != -1)
count++;
if (menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_NETPLAY_CLIENT_SWAP_INPUT,
PARSE_ONLY_BOOL, false) != -1)
count++;
if (menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_NETWORK_CMD_ENABLE,
PARSE_ONLY_BOOL, false) != -1)
count++;
if (menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_NETWORK_CMD_PORT,
PARSE_ONLY_UINT, false) != -1)
count++;
if (menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_NETWORK_REMOTE_ENABLE,
PARSE_ONLY_BOOL, false) != -1)
count++;
if (menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_NETWORK_REMOTE_PORT,
PARSE_ONLY_UINT, false) != -1)
count++;
for(user = 0; user < settings->input.max_users; user++)
{
if (menu_displaylist_parse_settings_enum(menu, info,
(enum msg_hash_enums)(MENU_ENUM_LABEL_NETWORK_REMOTE_USER_1_ENABLE + user),
PARSE_ONLY_BOOL, false) != -1)
count++;
}
if (menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_STDIN_CMD_ENABLE,
PARSE_ONLY_BOOL, false) != -1)
count++;
if (menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_UPDATER_SETTINGS, PARSE_ACTION, false) != -1)
count++;
if (count == 0)
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_SETTINGS_FOUND),
msg_hash_to_str(MENU_ENUM_LABEL_NO_SETTINGS_FOUND),
MENU_ENUM_LABEL_NO_SETTINGS_FOUND,
0, 0, 0);
}
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_NETPLAY_LAN_SCAN_SETTINGS_LIST:
#ifdef HAVE_NETWORKING
{
struct netplay_host_list *hosts;
if (!netplay_discovery_driver_ctl(RARCH_NETPLAY_DISCOVERY_CTL_LAN_GET_RESPONSES, &hosts))
hosts = NULL;
if (!hosts || hosts->size == 0)
{
if (!hosts)
task_push_netplay_lan_scan();
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_NETPLAY_HOSTS_FOUND),
msg_hash_to_str(MENU_ENUM_LABEL_NO_NETPLAY_HOSTS_FOUND),
MENU_ENUM_LABEL_NO_NETPLAY_HOSTS_FOUND,
0, 0, 0);
}
else
{
size_t i;
for (i = 0; i < hosts->size; i++)
{
struct netplay_host *host = &hosts->hosts[i];
menu_entries_append_enum(info->list,
host->nick,
msg_hash_to_str(MENU_ENUM_LABEL_CONNECT_NETPLAY_LAN),
MENU_ENUM_LABEL_CONNECT_NETPLAY_LAN,
MENU_NETPLAY_LAN_SCAN, 0, 0);
}
}
}
#else
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_NETPLAY_HOSTS_FOUND),
msg_hash_to_str(MENU_ENUM_LABEL_NO_NETPLAY_HOSTS_FOUND),
MENU_ENUM_LABEL_NO_NETPLAY_HOSTS_FOUND,
0, 0, 0);
#endif
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_LAKKA_SERVICES_LIST:
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SSH_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SAMBA_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_BLUETOOTH_ENABLE,
PARSE_ONLY_BOOL, false);
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_USER_SETTINGS_LIST:
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_ACCOUNTS_LIST,
PARSE_ACTION, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_NETPLAY_NICKNAME,
PARSE_ONLY_STRING, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_USER_LANGUAGE,
PARSE_ONLY_UINT, false);
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_DIRECTORY_SETTINGS_LIST:
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SYSTEM_DIRECTORY,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CORE_ASSETS_DIRECTORY,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_ASSETS_DIRECTORY,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_DYNAMIC_WALLPAPERS_DIRECTORY,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_THUMBNAILS_DIRECTORY,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_RGUI_BROWSER_DIRECTORY,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_RGUI_CONFIG_DIRECTORY,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_LIBRETRO_DIR_PATH,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_LIBRETRO_INFO_PATH,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CONTENT_DATABASE_DIRECTORY,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CURSOR_DIRECTORY,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CHEAT_DATABASE_PATH,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_FILTER_DIR,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_AUDIO_FILTER_DIR,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_SHADER_DIR,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_RECORDING_OUTPUT_DIRECTORY,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_RECORDING_CONFIG_DIRECTORY,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_OVERLAY_DIRECTORY,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SCREENSHOT_DIRECTORY,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_JOYPAD_AUTOCONFIG_DIR,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_REMAPPING_DIRECTORY,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_PLAYLIST_DIRECTORY,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SAVEFILE_DIRECTORY,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SAVESTATE_DIRECTORY,
PARSE_ONLY_DIR, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CACHE_DIRECTORY,
PARSE_ONLY_DIR, false);
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_PRIVACY_SETTINGS_LIST:
{
bool available = false;
if (menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CAMERA_ALLOW,
PARSE_ONLY_BOOL, false) == 0)
available = true;
if (menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_LOCATION_ALLOW,
PARSE_ONLY_BOOL, true) == 0)
available = true;
if (!available)
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_SETTINGS_FOUND),
msg_hash_to_str(MENU_ENUM_LABEL_NO_SETTINGS_FOUND),
MENU_ENUM_LABEL_NO_SETTINGS_FOUND,
0, 0, 0);
info->need_refresh = true;
info->need_push = true;
}
break;
case DISPLAYLIST_VIDEO_SETTINGS_LIST:
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SUSPEND_SCREENSAVER_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_FPS_SHOW,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SCREEN_RESOLUTION,
PARSE_ACTION, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_PAL60_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_GAMMA,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_SOFT_FILTER,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_FILTER_FLICKER,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_MONITOR_INDEX,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_FULLSCREEN,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_WINDOWED_FULLSCREEN,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_REFRESH_RATE,
PARSE_ONLY_FLOAT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_REFRESH_RATE_AUTO,
PARSE_ONLY_FLOAT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_FORCE_SRGB_DISABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_ASPECT_RATIO_INDEX,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_X,
PARSE_ONLY_INT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_Y,
PARSE_ONLY_INT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_WIDTH,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_HEIGHT,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_SCALE,
PARSE_ONLY_FLOAT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_WINDOW_WIDTH,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_WINDOW_HEIGHT,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_SCALE_INTEGER,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_VI_WIDTH,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_VFILTER,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_ROTATION,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_THREADED,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_VSYNC,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_SWAP_INTERVAL,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_MAX_SWAPCHAIN_IMAGES,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_HARD_SYNC,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_HARD_SYNC_FRAMES,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_FRAME_DELAY,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_BLACK_FRAME_INSERTION,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_GPU_SCREENSHOT,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_CROP_OVERSCAN,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_SMOOTH,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_FILTER,
PARSE_ONLY_PATH, false);
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_CORE_SETTINGS_LIST:
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_SHARED_CONTEXT,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_DUMMY_ON_CORE_SHUTDOWN,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CHECK_FOR_MISSING_FIRMWARE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_ALLOW_ROTATE,
PARSE_ONLY_BOOL, false);
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_AUDIO_SETTINGS_LIST:
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_AUDIO_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_AUDIO_MUTE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_AUDIO_VOLUME,
PARSE_ONLY_FLOAT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SYSTEM_BGM_ENABLE,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_AUDIO_SYNC,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_AUDIO_LATENCY,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_AUDIO_RATE_CONTROL_DELTA,
PARSE_ONLY_FLOAT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_AUDIO_MAX_TIMING_SKEW,
PARSE_ONLY_FLOAT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_AUDIO_BLOCK_FRAMES,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_AUDIO_DEVICE,
PARSE_ONLY_STRING, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_AUDIO_OUTPUT_RATE,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_AUDIO_DSP_PLUGIN,
PARSE_ONLY_PATH, false);
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_INPUT_SETTINGS_LIST:
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_MAX_USERS,
PARSE_ONLY_UINT, false);
#if TARGET_OS_IPHONE
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_SMALL_KEYBOARD_ENABLE,
PARSE_ONLY_BOOL, false);
#endif
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_UNIFIED_MENU_CONTROLS,
PARSE_ONLY_BOOL, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_POLL_TYPE_BEHAVIOR,
PARSE_ONLY_UINT, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_ICADE_ENABLE,
PARSE_ONLY_BOOL, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_KEYBOARD_GAMEPAD_MAPPING_TYPE,
PARSE_ONLY_UINT, false);
#ifdef VITA
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_TOUCH_ENABLE,
PARSE_ONLY_BOOL, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_PREFER_FRONT_TOUCH,
PARSE_ONLY_BOOL, false);
#endif
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO, PARSE_ONLY_UINT, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_MENU_INPUT_SWAP_OK_CANCEL, PARSE_ONLY_BOOL, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_ALL_USERS_CONTROL_MENU, PARSE_ONLY_BOOL, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_REMAP_BINDS_ENABLE, PARSE_ONLY_BOOL, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_AUTODETECT_ENABLE, PARSE_ONLY_BOOL, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_DESCRIPTOR_LABEL_SHOW, PARSE_ONLY_BOOL, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_DESCRIPTOR_HIDE_UNBOUND, PARSE_ONLY_BOOL, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_AXIS_THRESHOLD, PARSE_ONLY_FLOAT, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_BIND_TIMEOUT, PARSE_ONLY_UINT, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_TURBO_PERIOD, PARSE_ONLY_UINT, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_DUTY_CYCLE, PARSE_ONLY_UINT, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_BIND_MODE, PARSE_ONLY_UINT, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_HOTKEY_BINDS, PARSE_ACTION, false);
{
unsigned user;
for (user = 0; user < settings->input.max_users; user++)
{
menu_displaylist_parse_settings_enum(menu, info,
(enum msg_hash_enums)(MENU_ENUM_LABEL_INPUT_USER_1_BINDS + user),
PARSE_ACTION, false);
}
}
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_SETTINGS_ALL:
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_DRIVER_SETTINGS, PARSE_ACTION, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_SETTINGS, PARSE_ACTION, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_AUDIO_SETTINGS, PARSE_ACTION, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_INPUT_SETTINGS, PARSE_ACTION, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CORE_SETTINGS, PARSE_ACTION, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CONFIGURATION_SETTINGS, PARSE_ACTION, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SAVING_SETTINGS, PARSE_ACTION, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_LOGGING_SETTINGS, PARSE_ACTION, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_FRAME_THROTTLE_SETTINGS, PARSE_ACTION, false);
if (!string_is_equal(settings->record.driver, "null"))
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_RECORDING_SETTINGS, PARSE_ACTION, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_ONSCREEN_DISPLAY_SETTINGS, PARSE_ACTION, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_USER_INTERFACE_SETTINGS, PARSE_ACTION, false);
#ifdef HAVE_CHEEVOS
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_RETRO_ACHIEVEMENTS_SETTINGS, PARSE_ACTION, false);
#endif
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_WIFI_SETTINGS, PARSE_ACTION, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_NETWORK_SETTINGS, PARSE_ACTION, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_NETPLAY_LAN_SCAN_SETTINGS, PARSE_ACTION, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_LAKKA_SERVICES, PARSE_ACTION, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_PLAYLIST_SETTINGS, PARSE_ACTION, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_USER_SETTINGS, PARSE_ACTION, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_DIRECTORY_SETTINGS, PARSE_ACTION, false);
ret = menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_PRIVACY_SETTINGS, PARSE_ACTION, false);
info->need_push = true;
break;
case DISPLAYLIST_HORIZONTAL:
ret = menu_displaylist_parse_horizontal_list(info);
info->need_sort = true;
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_HORIZONTAL_CONTENT_ACTIONS:
ret = menu_displaylist_parse_horizontal_content_actions(info);
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_CONTENT_SETTINGS:
ret = menu_displaylist_parse_load_content_settings(info);
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_INFORMATION_LIST:
ret = menu_displaylist_parse_information_list(info);
info->need_push = true;
info->need_refresh = true;
break;
case DISPLAYLIST_ADD_CONTENT_LIST:
ret = menu_displaylist_parse_add_content_list(info);
info->need_push = true;
info->need_refresh = true;
break;
case DISPLAYLIST_CONFIGURATIONS_LIST:
ret = menu_displaylist_parse_configurations_list(info);
info->need_push = true;
info->need_refresh = true;
break;
case DISPLAYLIST_SCAN_DIRECTORY_LIST:
ret = menu_displaylist_parse_scan_directory_list(info);
info->need_push = true;
info->need_refresh = true;
break;
case DISPLAYLIST_NETPLAY_ROOM_LIST:
ret = menu_displaylist_parse_netplay_room_list(info);
info->need_push = true;
info->need_refresh = true;
break;
case DISPLAYLIST_LOAD_CONTENT_LIST:
if (!string_is_empty(settings->directory.menu_content))
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_FAVORITES),
msg_hash_to_str(MENU_ENUM_LABEL_FAVORITES),
MENU_ENUM_LABEL_FAVORITES,
MENU_SETTING_ACTION, 0, 0);
if (core_info_list_num_info_files(list))
{
menu_entries_append_enum(info->list,
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_DOWNLOADED_FILE_DETECT_CORE_LIST),
msg_hash_to_str(
MENU_ENUM_LABEL_DOWNLOADED_FILE_DETECT_CORE_LIST),
MENU_ENUM_LABEL_DOWNLOADED_FILE_DETECT_CORE_LIST,
MENU_SETTING_ACTION, 0, 0);
}
#ifdef HAVE_LIBRETRODB
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CONTENT_COLLECTION_LIST),
msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST),
MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST,
MENU_SETTING_ACTION, 0, 0);
#endif
if (frontend_driver_parse_drive_list(info->list) != 0)
menu_entries_append_enum(info->list, "/",
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
MENU_SETTING_ACTION, 0, 0);
#if 0
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_BROWSE_URL_LIST),
msg_hash_to_str(MENU_ENUM_LABEL_BROWSE_URL_LIST),
MENU_ENUM_LABEL_BROWSE_URL_LIST,
MENU_SETTING_ACTION, 0, 0);
#endif
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS),
msg_hash_to_str(MENU_ENUM_LABEL_MENU_FILE_BROWSER_SETTINGS),
MENU_ENUM_LABEL_MENU_FILE_BROWSER_SETTINGS,
MENU_SETTING_ACTION, 0, 0);
info->need_push = true;
info->need_refresh = true;
break;
case DISPLAYLIST_OPTIONS:
ret = menu_displaylist_parse_options(info);
info->need_push = true;
break;
case DISPLAYLIST_OPTIONS_CHEATS:
ret = menu_displaylist_parse_options_cheats(info);
info->need_push = true;
break;
case DISPLAYLIST_OPTIONS_REMAPPINGS:
ret = menu_displaylist_parse_options_remappings(info);
info->need_push = true;
break;
case DISPLAYLIST_SHADER_PARAMETERS:
case DISPLAYLIST_SHADER_PARAMETERS_PRESET:
#ifdef HAVE_SHADER_MANAGER
video_shader_driver_get_current_shader(&shader_info);
if (shader_info.data)
ret = deferred_push_video_shader_parameters_common(
info, shader_info.data,
(type == DISPLAYLIST_SHADER_PARAMETERS)
? MENU_SETTINGS_SHADER_PARAMETER_0
: MENU_SETTINGS_SHADER_PRESET_PARAMETER_0
);
else
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_SHADER_PARAMETERS),
msg_hash_to_str(MENU_ENUM_LABEL_NO_SHADER_PARAMETERS),
MENU_ENUM_LABEL_NO_SHADER_PARAMETERS,
0, 0, 0);
ret = 0;
}
info->need_push = true;
#endif
break;
case DISPLAYLIST_PERFCOUNTERS_CORE:
case DISPLAYLIST_PERFCOUNTERS_FRONTEND:
menu_displaylist_push_perfcounter(info,
(type == DISPLAYLIST_PERFCOUNTERS_CORE) ?
retro_get_perf_counter_libretro()
: retro_get_perf_counter_rarch(),
(type == DISPLAYLIST_PERFCOUNTERS_CORE) ?
retro_get_perf_count_libretro()
: retro_get_perf_count_rarch(),
(type == DISPLAYLIST_PERFCOUNTERS_CORE) ?
MENU_SETTINGS_LIBRETRO_PERF_COUNTERS_BEGIN :
MENU_SETTINGS_PERF_COUNTERS_BEGIN);
ret = 0;
info->need_refresh = false;
info->need_push = true;
break;
case DISPLAYLIST_DATABASE_ENTRY:
{
struct string_list *str_list = string_split(info->label, "|");
if (!str_list)
goto error;
strlcpy(info->path_b,
str_list->elems[1].data, sizeof(info->path_b));
strlcpy(info->label,
str_list->elems[0].data, sizeof(info->label));
string_list_free(str_list);
}
#ifdef HAVE_LIBRETRODB
ret = menu_displaylist_parse_database_entry(info);
#else
ret = 0;
#endif
info->need_push = true;
break;
case DISPLAYLIST_DATABASE_QUERY:
#ifdef HAVE_LIBRETRODB
ret = menu_database_parse_query(info->list,
info->path, string_is_empty(info->path_c)
? NULL : info->path_c);
#else
ret = 0;
#endif
strlcpy(info->path, info->path_b, sizeof(info->path));
info->need_sort = true;
info->need_refresh = true;
info->need_push = true;
break;
case DISPLAYLIST_OPTIONS_SHADERS:
ret = menu_displaylist_parse_shader_options(info);
info->need_push = true;
break;
case DISPLAYLIST_NETPLAY:
#ifdef HAVE_NETWORKING
ret = menu_displaylist_parse_netplay(info);
#else
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_ITEMS),
msg_hash_to_str(MENU_ENUM_LABEL_NO_ITEMS),
MENU_ENUM_LABEL_NO_ITEMS,
MENU_SETTING_NO_ITEM, 0, 0);
ret = 0;
#endif
info->need_push = true;
break;
case DISPLAYLIST_CORE_CONTENT:
#ifdef HAVE_NETWORKING
print_buf_lines(info->list, core_buf, "",
core_len, FILE_TYPE_DOWNLOAD_CORE_CONTENT, true, false);
info->need_push = true;
info->need_refresh = true;
#endif
break;
case DISPLAYLIST_CORE_CONTENT_DIRS_SUBDIR:
{
#ifdef HAVE_NETWORKING
char new_label[PATH_MAX_LENGTH];
struct string_list *str_list = string_split(info->path, ";");
new_label[0] = '\0';
if (str_list->elems[0].data)
strlcpy(new_label, str_list->elems[0].data, sizeof(new_label));
if (str_list->elems[1].data)
strlcpy(core_buf, str_list->elems[1].data, core_len);
print_buf_lines(info->list, core_buf, new_label,
core_len, FILE_TYPE_DOWNLOAD_URL, false, false);
info->need_push = true;
info->need_refresh = true;
info->need_clear = true;
string_list_free(str_list);
#endif
}
break;
case DISPLAYLIST_CORE_CONTENT_DIRS:
{
#ifdef HAVE_NETWORKING
char new_label[PATH_MAX_LENGTH];
new_label[0] = '\0';
fill_pathname_join(new_label,
settings->network.buildbot_assets_url,
"cores", sizeof(new_label));
print_buf_lines(info->list, core_buf, new_label,
core_len, FILE_TYPE_DOWNLOAD_URL, true, false);
info->need_push = true;
info->need_refresh = true;
#endif
}
break;
case DISPLAYLIST_CORES_UPDATER:
#ifdef HAVE_NETWORKING
print_buf_lines(info->list, core_buf, "",
core_len, FILE_TYPE_DOWNLOAD_CORE, true, true);
info->need_push = true;
info->need_refresh = true;
info->need_clear = true;
#endif
break;
case DISPLAYLIST_THUMBNAILS_UPDATER:
#ifdef HAVE_NETWORKING
print_buf_lines(info->list, core_buf, "",
core_len, FILE_TYPE_DOWNLOAD_THUMBNAIL_CONTENT,
true, false);
info->need_push = true;
info->need_refresh = true;
info->need_clear = true;
#endif
break;
case DISPLAYLIST_LAKKA:
#ifdef HAVE_NETWORKING
print_buf_lines(info->list, core_buf, "",
core_len, FILE_TYPE_DOWNLOAD_LAKKA,
true, false);
info->need_push = true;
info->need_refresh = true;
info->need_clear = true;
#endif
break;
case DISPLAYLIST_PLAYLIST_COLLECTION:
if (string_is_equal(info->path, file_path_str(FILE_PATH_CONTENT_HISTORY)))
{
if (menu_displaylist_ctl(DISPLAYLIST_HISTORY, info))
return menu_displaylist_push_list_process(info);
goto error;
}
else
{
char path_playlist[PATH_MAX_LENGTH];
playlist_t *playlist = NULL;
path_playlist[0] = '\0';
menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_FREE, NULL);
fill_pathname_join(
path_playlist,
settings->directory.playlist,
info->path,
sizeof(path_playlist));
menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_INIT,
(void*)path_playlist);
strlcpy(menu->db_playlist_file, path_playlist,
sizeof(menu->db_playlist_file));
strlcpy(path_playlist,
msg_hash_to_str(MENU_ENUM_LABEL_COLLECTION),
sizeof(path_playlist));
menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_GET, &playlist);
playlist_qsort(playlist);
ret = menu_displaylist_parse_playlist(info,
playlist, path_playlist, false);
if (ret == 0)
{
info->need_sort = true;
info->need_refresh = true;
info->need_push = true;
}
}
break;
case DISPLAYLIST_HISTORY:
if (settings->history_list_enable)
menu_displaylist_parse_playlist_history(menu, info,
g_defaults.content_history,
"history",
settings->path.content_history,
&ret);
else
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_HISTORY_AVAILABLE),
msg_hash_to_str(MENU_ENUM_LABEL_NO_HISTORY_AVAILABLE),
MENU_ENUM_LABEL_NO_HISTORY_AVAILABLE,
MENU_INFO_MESSAGE, 0, 0);
ret = 0;
}
if (ret == 0)
{
info->need_refresh = true;
info->need_push = true;
}
break;
case DISPLAYLIST_IMAGES_HISTORY:
#ifdef HAVE_IMAGEVIEWER
if (settings->history_list_enable)
menu_displaylist_parse_playlist_history(menu, info,
g_defaults.image_history,
"images_history",
settings->path.content_image_history,
&ret);
else
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_HISTORY_AVAILABLE),
msg_hash_to_str(MENU_ENUM_LABEL_NO_HISTORY_AVAILABLE),
MENU_ENUM_LABEL_NO_HISTORY_AVAILABLE,
MENU_INFO_MESSAGE, 0, 0);
ret = 0;
}
if (ret == 0)
{
info->need_refresh = true;
info->need_push = true;
}
#endif
break;
case DISPLAYLIST_MUSIC_HISTORY:
#ifdef HAVE_FFMPEG
if (settings->history_list_enable)
menu_displaylist_parse_playlist_history(menu, info,
g_defaults.music_history,
"music_history",
settings->path.content_music_history,
&ret);
else
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_HISTORY_AVAILABLE),
msg_hash_to_str(MENU_ENUM_LABEL_NO_HISTORY_AVAILABLE),
MENU_ENUM_LABEL_NO_HISTORY_AVAILABLE,
MENU_INFO_MESSAGE, 0, 0);
ret = 0;
}
if (ret == 0)
{
info->need_refresh = true;
info->need_push = true;
}
#endif
break;
case DISPLAYLIST_VIDEO_HISTORY:
#ifdef HAVE_FFMPEG
if (settings->history_list_enable)
menu_displaylist_parse_playlist_history(menu, info,
g_defaults.video_history,
"video_history",
settings->path.content_video_history,
&ret);
else
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_HISTORY_AVAILABLE),
msg_hash_to_str(MENU_ENUM_LABEL_NO_HISTORY_AVAILABLE),
MENU_ENUM_LABEL_NO_HISTORY_AVAILABLE,
MENU_INFO_MESSAGE, 0, 0);
ret = 0;
}
if (ret == 0)
{
info->need_refresh = true;
info->need_push = true;
}
#endif
break;
case DISPLAYLIST_OPTIONS_DISK:
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DISK_INDEX),
msg_hash_to_str(MENU_ENUM_LABEL_DISK_INDEX),
MENU_ENUM_LABEL_DISK_INDEX,
MENU_SETTINGS_CORE_DISK_OPTIONS_DISK_INDEX, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DISK_CYCLE_TRAY_STATUS),
msg_hash_to_str(MENU_ENUM_LABEL_DISK_CYCLE_TRAY_STATUS),
MENU_ENUM_LABEL_DISK_CYCLE_TRAY_STATUS,
MENU_SETTINGS_CORE_DISK_OPTIONS_DISK_CYCLE_TRAY_STATUS, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DISK_IMAGE_APPEND),
msg_hash_to_str(MENU_ENUM_LABEL_DISK_IMAGE_APPEND),
MENU_ENUM_LABEL_DISK_IMAGE_APPEND,
MENU_SETTINGS_CORE_DISK_OPTIONS_DISK_IMAGE_APPEND, 0, 0);
info->need_push = true;
break;
case DISPLAYLIST_NETWORK_INFO:
#ifdef HAVE_NETWORKING
#ifndef HAVE_SOCKET_LEGACY
menu_displaylist_parse_network_info(info);
#endif
#endif
info->need_push = true;
info->need_refresh = true;
break;
case DISPLAYLIST_SYSTEM_INFO:
menu_displaylist_parse_system_info(info);
info->need_push = true;
info->need_refresh = true;
break;
#ifdef HAVE_CHEEVOS
case DISPLAYLIST_ACHIEVEMENT_LIST:
cheevos_populate_menu(info, false);
info->need_push = true;
info->need_refresh = true;
break;
case DISPLAYLIST_ACHIEVEMENT_LIST_HARDCORE:
cheevos_populate_menu(info, true);
info->need_push = true;
info->need_refresh = true;
break;
#endif
case DISPLAYLIST_CORES_SUPPORTED:
info->need_sort = true;
info->need_refresh = true;
info->need_push = true;
{
unsigned cores_names_len = 0;
unsigned cores_paths_len = 0;
size_t cores_paths_size = 0;
size_t cores_names_size = 0;
struct string_list *cores_names =
string_list_new_special(STRING_LIST_SUPPORTED_CORES_NAMES,
(void*)menu->deferred_path,
&cores_names_len, &cores_names_size);
if (cores_names_size == 0)
{
if (!path_is_empty(RARCH_PATH_CORE))
{
menu_entries_append_enum(info->list,
path_get(RARCH_PATH_CORE),
path_get(RARCH_PATH_CORE),
MENU_ENUM_LABEL_DETECT_CORE_LIST_OK_CURRENT_CORE,
FILE_TYPE_DIRECT_LOAD,
0,
0);
{
const char *core_name = NULL;
struct retro_system_info *system = NULL;
menu_driver_ctl(RARCH_MENU_CTL_SYSTEM_INFO_GET,
&system);
if (system)
core_name = system->library_name;
if (!string_is_empty(core_name))
menu_entries_set_alt_at_offset(info->list, 0,
core_name);
}
}
else
{
#ifndef HAVE_DYNAMIC
const char *core_name = NULL;
struct retro_system_info *system = NULL;
menu_driver_ctl(RARCH_MENU_CTL_SYSTEM_INFO_GET,
&system);
if (system)
{
core_name = system->library_name;
menu_entries_append_enum(info->list,
core_name,
core_name,
MENU_ENUM_LABEL_DETECT_CORE_LIST_OK_CURRENT_CORE,
FILE_TYPE_DIRECT_LOAD,
0,
0);
}
else
#endif
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_CORES_AVAILABLE),
msg_hash_to_str(MENU_ENUM_LABEL_NO_CORES_AVAILABLE),
MENU_ENUM_LABEL_NO_CORES_AVAILABLE,
0, 0, 0);
info->download_core = true;
}
}
}
if (cores_names_size != 0)
{
unsigned j = 0;
struct string_list *cores_paths =
string_list_new_special(STRING_LIST_SUPPORTED_CORES_PATHS,
(void*)menu->deferred_path,
&cores_paths_len, &cores_paths_size);
for (i = 0; i < cores_names_size; i++)
{
const char *core_path = cores_paths->elems[i].data;
const char *core_name = cores_names->elems[i].data;
if ( !path_is_empty(RARCH_PATH_CORE) &&
string_is_equal(core_path, path_get(RARCH_PATH_CORE)))
{
strlcpy(new_path_entry, core_path, sizeof(new_path_entry));
snprintf(new_entry, sizeof(new_entry), "Current core (%s)", core_name);
if (type == DISPLAYLIST_CORES_COLLECTION_SUPPORTED)
{
new_lbl_entry[0] = '\0';
new_type = MENU_ENUM_LABEL_FILE_BROWSER_CORE_SELECT_FROM_COLLECTION_CURRENT_CORE;
}
else
{
strlcpy(new_lbl_entry, core_path, sizeof(new_lbl_entry));
new_type = MENU_ENUM_LABEL_DETECT_CORE_LIST_OK_CURRENT_CORE;
}
}
else if (core_path)
{
switch (type)
{
case DISPLAYLIST_CORES_COLLECTION_SUPPORTED:
menu_entries_append_enum(info->list, core_path, "",
MENU_ENUM_LABEL_FILE_BROWSER_CORE_SELECT_FROM_COLLECTION,
FILE_TYPE_CORE, 0, 0);
break;
default:
menu_entries_append_enum(info->list, core_path,
msg_hash_to_str(MENU_ENUM_LABEL_DETECT_CORE_LIST_OK),
MENU_ENUM_LABEL_DETECT_CORE_LIST_OK,
FILE_TYPE_CORE, 0, 0);
break;
}
menu_entries_set_alt_at_offset(info->list, j, core_name);
j++;
}
}
string_list_free(cores_paths);
}
string_list_free(cores_names);
}
break;
case DISPLAYLIST_CORES_COLLECTION_SUPPORTED:
info->need_sort = true;
info->need_refresh = true;
info->need_push = true;
{
unsigned cores_names_len = 0;
unsigned cores_paths_len = 0;
size_t cores_paths_size = 0;
size_t cores_names_size = 0;
struct string_list *cores_names =
string_list_new_special(STRING_LIST_SUPPORTED_CORES_NAMES,
(void*)menu->deferred_path,
&cores_names_len, &cores_names_size);
if (cores_names_size == 0)
{
if (!path_is_empty(RARCH_PATH_CORE))
{
menu_entries_append_enum(info->list,
path_get(RARCH_PATH_CORE),
path_get(RARCH_PATH_CORE),
MENU_ENUM_LABEL_DETECT_CORE_LIST_OK,
FILE_TYPE_DIRECT_LOAD,
0,
0);
{
const char *core_name = NULL;
struct retro_system_info *system = NULL;
menu_driver_ctl(RARCH_MENU_CTL_SYSTEM_INFO_GET,
&system);
if (system)
core_name = system->library_name;
if (!string_is_empty(core_name))
menu_entries_set_alt_at_offset(info->list, 0,
core_name);
}
}
else
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_CORES_AVAILABLE),
msg_hash_to_str(MENU_ENUM_LABEL_NO_CORES_AVAILABLE),
MENU_ENUM_LABEL_NO_CORES_AVAILABLE,
0, 0, 0);
info->download_core = true;
}
}
if (cores_names_size != 0)
{
unsigned j = 0;
struct string_list *cores_paths =
string_list_new_special(STRING_LIST_SUPPORTED_CORES_PATHS,
(void*)menu->deferred_path,
&cores_paths_len, &cores_paths_size);
for (i = 0; i < cores_names_size; i++)
{
const char *core_path = cores_paths->elems[i].data;
const char *core_name = cores_names->elems[i].data;
if ( !path_is_empty(RARCH_PATH_CORE) &&
string_is_equal(core_path, path_get(RARCH_PATH_CORE)))
{
strlcpy(new_path_entry, core_path, sizeof(new_path_entry));
snprintf(new_entry, sizeof(new_entry), "Current core (%s)", core_name);
if (type == DISPLAYLIST_CORES_COLLECTION_SUPPORTED)
{
new_lbl_entry[0] = '\0';
new_type = MENU_ENUM_LABEL_FILE_BROWSER_CORE_SELECT_FROM_COLLECTION_CURRENT_CORE;
}
else
{
strlcpy(new_lbl_entry, core_path, sizeof(new_lbl_entry));
new_type = MENU_ENUM_LABEL_DETECT_CORE_LIST_OK_CURRENT_CORE;
}
}
else if (core_path)
{
switch (type)
{
case DISPLAYLIST_CORES_COLLECTION_SUPPORTED:
menu_entries_append_enum(info->list, core_path, "",
MENU_ENUM_LABEL_FILE_BROWSER_CORE_SELECT_FROM_COLLECTION,
FILE_TYPE_CORE, 0, 0);
break;
default:
menu_entries_append_enum(info->list, core_path,
msg_hash_to_str(MENU_ENUM_LABEL_DETECT_CORE_LIST_OK),
MENU_ENUM_LABEL_DETECT_CORE_LIST_OK,
FILE_TYPE_CORE, 0, 0);
break;
}
menu_entries_set_alt_at_offset(info->list, j, core_name);
j++;
}
}
string_list_free(cores_paths);
}
string_list_free(cores_names);
}
break;
case DISPLAYLIST_CORE_INFO:
menu_displaylist_parse_core_info(info);
info->need_push = true;
break;
case DISPLAYLIST_CORE_OPTIONS:
if (runloop_ctl(RUNLOOP_CTL_HAS_CORE_OPTIONS, NULL))
{
size_t opts = 0;
runloop_ctl(RUNLOOP_CTL_GET_CORE_OPTION_SIZE, &opts);
if (settings->game_specific_options)
{
if (!runloop_ctl(RUNLOOP_CTL_IS_GAME_OPTIONS_ACTIVE, NULL))
menu_entries_append_enum(info->list,
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS_CREATE),
msg_hash_to_str(
MENU_ENUM_LABEL_GAME_SPECIFIC_OPTIONS_CREATE),
MENU_ENUM_LABEL_GAME_SPECIFIC_OPTIONS_CREATE,
MENU_SETTINGS_CORE_OPTION_CREATE, 0, 0);
else
menu_entries_append_enum(info->list,
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS_IN_USE),
msg_hash_to_str(
MENU_ENUM_LABEL_GAME_SPECIFIC_OPTIONS_IN_USE),
MENU_ENUM_LABEL_GAME_SPECIFIC_OPTIONS_IN_USE,
MENU_SETTINGS_CORE_OPTION_CREATE, 0, 0);
}
if (opts == 0)
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_CORE_OPTIONS_AVAILABLE),
msg_hash_to_str(MENU_ENUM_LABEL_NO_CORE_OPTIONS_AVAILABLE),
MENU_ENUM_LABEL_NO_CORE_OPTIONS_AVAILABLE,
MENU_SETTINGS_CORE_OPTION_NONE, 0, 0);
}
else
{
core_option_manager_t *coreopts = NULL;
runloop_ctl(RUNLOOP_CTL_CORE_OPTIONS_LIST_GET, &coreopts);
for (i = 0; i < opts; i++)
menu_entries_append_enum(info->list,
core_option_manager_get_desc(coreopts, i), "",
MENU_ENUM_LABEL_CORE_OPTION_ENTRY,
MENU_SETTINGS_CORE_OPTION_START + i, 0, 0);
}
}
else
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_CORE_OPTIONS_AVAILABLE),
msg_hash_to_str(MENU_ENUM_LABEL_NO_CORE_OPTIONS_AVAILABLE),
MENU_ENUM_LABEL_NO_CORE_OPTIONS_AVAILABLE,
MENU_SETTINGS_CORE_OPTION_NONE, 0, 0);
info->need_push = true;
break;
case DISPLAYLIST_DATABASES:
filebrowser_clear_type();
info->type_default = FILE_TYPE_RDB;
strlcpy(info->exts,
file_path_str(FILE_PATH_RDB_EXTENSION),
sizeof(info->exts));
info->enum_idx = MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST;
strlcpy(info->path, settings->path.content_database, sizeof(info->path));
break;
case DISPLAYLIST_ARCHIVE_ACTION:
#ifdef HAVE_COMPRESSION
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_OPEN_ARCHIVE),
msg_hash_to_str(MENU_ENUM_LABEL_OPEN_ARCHIVE),
MENU_ENUM_LABEL_OPEN_ARCHIVE,
0, 0, 0);
#endif
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_LOAD_ARCHIVE),
msg_hash_to_str(MENU_ENUM_LABEL_LOAD_ARCHIVE),
MENU_ENUM_LABEL_LOAD_ARCHIVE,
0, 0, 0);
info->need_push = true;
break;
case DISPLAYLIST_ARCHIVE_ACTION_DETECT_CORE:
#ifdef HAVE_COMPRESSION
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_OPEN_ARCHIVE),
msg_hash_to_str(MENU_ENUM_LABEL_OPEN_ARCHIVE_DETECT_CORE),
MENU_ENUM_LABEL_OPEN_ARCHIVE_DETECT_CORE,
0, 0, 0);
#endif
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_LOAD_ARCHIVE),
msg_hash_to_str(MENU_ENUM_LABEL_LOAD_ARCHIVE_DETECT_CORE),
MENU_ENUM_LABEL_LOAD_ARCHIVE_DETECT_CORE,
0, 0, 0);
info->need_push = true;
break;
case DISPLAYLIST_DATABASE_CURSORS:
filebrowser_clear_type();
info->type_default = FILE_TYPE_CURSOR;
strlcpy(info->exts, "dbc", sizeof(info->exts));
strlcpy(info->path, settings->directory.cursor, sizeof(info->path));
break;
case DISPLAYLIST_CORES:
{
char ext_name[PATH_MAX_LENGTH];
ext_name[0] = '\0';
filebrowser_clear_type();
info->type_default = FILE_TYPE_PLAIN;
if (frontend_driver_get_core_extension(ext_name, sizeof(ext_name)))
strlcpy(info->exts, ext_name, sizeof(info->exts));
}
break;
case DISPLAYLIST_CONFIG_FILES:
filebrowser_clear_type();
info->type_default = FILE_TYPE_CONFIG;
strlcpy(info->exts, "cfg", sizeof(info->exts));
break;
case DISPLAYLIST_SHADER_PRESET:
{
struct string_list *str_list;
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_VULKAN)
union string_list_elem_attr attr;
attr.i = 0;
#endif
str_list = string_list_new();
filebrowser_clear_type();
info->type_default = FILE_TYPE_SHADER_PRESET;
#ifdef HAVE_CG
string_list_append(str_list, "cgp", attr);
#endif
#ifdef HAVE_GLSL
string_list_append(str_list, "glslp", attr);
#endif
#ifdef HAVE_VULKAN
string_list_append(str_list, "slangp", attr);
#endif
string_list_join_concat(info->exts, sizeof(info->exts), str_list, "|");
string_list_free(str_list);
}
break;
case DISPLAYLIST_SHADER_PASS:
{
struct string_list *str_list;
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_VULKAN)
union string_list_elem_attr attr;
attr.i = 0;
#endif
str_list = string_list_new();
filebrowser_clear_type();
info->type_default = FILE_TYPE_SHADER;
#ifdef HAVE_CG
string_list_append(str_list, "cg", attr);
#endif
#ifdef HAVE_GLSL
string_list_append(str_list, "glsl", attr);
#endif
#ifdef HAVE_VULKAN
string_list_append(str_list, "slang", attr);
#endif
string_list_join_concat(info->exts, sizeof(info->exts), str_list, "|");
string_list_free(str_list);
}
break;
case DISPLAYLIST_VIDEO_FILTERS:
filebrowser_clear_type();
info->type_default = FILE_TYPE_VIDEOFILTER;
strlcpy(info->exts, "filt", sizeof(info->exts));
break;
case DISPLAYLIST_IMAGES:
if (filebrowser_get_type() != FILEBROWSER_SELECT_FILE)
filebrowser_clear_type();
info->type_default = FILE_TYPE_IMAGE;
{
union string_list_elem_attr attr;
struct string_list *str_list = string_list_new();
attr.i = 0;
#ifdef HAVE_RBMP
string_list_append(str_list, "bmp", attr);
#endif
#ifdef HAVE_RPNG
string_list_append(str_list, "png", attr);
#endif
#ifdef HAVE_RJPEG
string_list_append(str_list, "jpeg", attr);
string_list_append(str_list, "jpg", attr);
#endif
#ifdef HAVE_RTGA
string_list_append(str_list, "tga", attr);
#endif
string_list_join_concat(info->exts, sizeof(info->exts), str_list, "|");
string_list_free(str_list);
}
break;
case DISPLAYLIST_AUDIO_FILTERS:
filebrowser_clear_type();
info->type_default = FILE_TYPE_AUDIOFILTER;
strlcpy(info->exts, "dsp", sizeof(info->exts));
break;
case DISPLAYLIST_CHEAT_FILES:
filebrowser_clear_type();
info->type_default = FILE_TYPE_CHEAT;
strlcpy(info->exts, "cht", sizeof(info->exts));
break;
case DISPLAYLIST_CONTENT_HISTORY:
filebrowser_clear_type();
info->type_default = FILE_TYPE_PLAIN;
strlcpy(info->exts, "lpl", sizeof(info->exts));
break;
case DISPLAYLIST_FONTS:
filebrowser_clear_type();
info->type_default = FILE_TYPE_FONT;
strlcpy(info->exts, "ttf", sizeof(info->exts));
break;
case DISPLAYLIST_OVERLAYS:
filebrowser_clear_type();
info->type_default = FILE_TYPE_OVERLAY;
strlcpy(info->exts, "cfg", sizeof(info->exts));
break;
case DISPLAYLIST_RECORD_CONFIG_FILES:
filebrowser_clear_type();
info->type_default = FILE_TYPE_RECORD_CONFIG;
strlcpy(info->exts, "cfg", sizeof(info->exts));
break;
case DISPLAYLIST_REMAP_FILES:
filebrowser_clear_type();
info->type_default = FILE_TYPE_REMAP;
strlcpy(info->exts, "rmp", sizeof(info->exts));
break;
default:
break;
}
switch (type)
{
case DISPLAYLIST_DATABASE_PLAYLISTS_HORIZONTAL:
if (menu_displaylist_parse_playlists(info, true) == 0)
{
info->need_refresh = true;
info->need_push = true;
}
break;
case DISPLAYLIST_DATABASE_PLAYLISTS:
if (menu_displaylist_parse_playlists(info, false) == 0)
{
info->need_refresh = true;
info->need_push = true;
}
break;
case DISPLAYLIST_CORES:
if (menu_displaylist_parse_cores(menu, info, type) == 0)
{
info->need_refresh = true;
info->need_push = true;
}
info->push_builtin_cores = true;
break;
case DISPLAYLIST_DATABASES:
case DISPLAYLIST_SHADER_PASS:
case DISPLAYLIST_SHADER_PRESET:
case DISPLAYLIST_DATABASE_CURSORS:
case DISPLAYLIST_VIDEO_FILTERS:
case DISPLAYLIST_AUDIO_FILTERS:
case DISPLAYLIST_IMAGES:
case DISPLAYLIST_OVERLAYS:
case DISPLAYLIST_FONTS:
case DISPLAYLIST_CHEAT_FILES:
case DISPLAYLIST_REMAP_FILES:
case DISPLAYLIST_RECORD_CONFIG_FILES:
case DISPLAYLIST_CONFIG_FILES:
case DISPLAYLIST_DEFAULT:
case DISPLAYLIST_CORES_DETECTED:
case DISPLAYLIST_CONTENT_HISTORY:
if (string_is_empty(info->path))
{
if (frontend_driver_parse_drive_list(info->list) != 0)
menu_entries_append_enum(info->list, "/", "",
MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
info->need_refresh = true;
info->need_push = true;
}
else
{
filebrowser_parse(info, type);
info->need_refresh = true;
info->need_push = true;
}
break;
default:
break;
}
if (ret != 0)
goto error;
return true;
error:
return false;
}