RetroArch/menu/menu_displaylist.h
zoltanvb a9968e9e86 Controller device reservation / preference.
For each player, 2 new options are added:
- a reservation type (no reservation, preferred, reserved)
- a reserved device name

When handling port - player assignments, reserved devices
will be assigned to the respective player port. If reservation
type is "reserved", no other device can take that port
automatically.

Reservation config option and matching function lifted from:
PatrickStankard https://github.com/libretro/RetroArch/pull/16269

Test joypad driver was extended for more tests.

Co-authored-by: Patrick Stankard <me@patrickstankard.com>
2024-06-05 18:17:54 -05:00

394 lines
13 KiB
C

/* RetroArch - A frontend for libretro.
* Copyright (C) 2011-2017 - Daniel De Matteis
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
* ation, either version 3 of the License, or (at your option) any later version.
*
* RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with RetroArch.
* If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _MENU_DISPLAYLIST_H
#define _MENU_DISPLAYLIST_H
#include <stdint.h>
#include <boolean.h>
#include <retro_miscellaneous.h>
#include <retro_common_api.h>
#include <lists/file_list.h>
#include "../configuration.h"
#include "../msg_hash.h"
#include "../setting_list.h"
#define MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(list, label, parse_type, add_empty_entry) menu_displaylist_parse_settings_enum(list, parse_type, add_empty_entry, menu_setting_find_enum(label), label, true)
#define MENU_DISPLAYLIST_PARSE_SETTINGS(list, label, parse_type, add_empty_entry, entry_type) menu_displaylist_parse_settings_enum(list, parse_type, add_empty_entry, menu_setting_find(label), entry_type, false)
RETRO_BEGIN_DECLS
/* NOTE: Order matters - only add new entries at
* the bottom */
enum menu_displaylist_parse_type
{
PARSE_NONE = 0,
PARSE_GROUP,
PARSE_ACTION,
PARSE_ONLY_INT,
PARSE_ONLY_UINT,
PARSE_ONLY_BOOL,
PARSE_ONLY_FLOAT,
PARSE_ONLY_BIND,
PARSE_ONLY_GROUP,
PARSE_ONLY_STRING,
PARSE_ONLY_PATH,
PARSE_ONLY_STRING_OPTIONS,
PARSE_ONLY_DIR,
PARSE_SUB_GROUP,
PARSE_ONLY_SIZE
};
enum menu_displaylist_ctl_state
{
DISPLAYLIST_NONE = 0,
DISPLAYLIST_DROPDOWN_LIST,
DISPLAYLIST_DROPDOWN_LIST_SPECIAL,
DISPLAYLIST_DROPDOWN_LIST_RESOLUTION,
DISPLAYLIST_DROPDOWN_LIST_AUDIO_DEVICE,
#ifdef HAVE_MICROPHONE
DISPLAYLIST_DROPDOWN_LIST_MICROPHONE_DEVICE,
#endif
DISPLAYLIST_DROPDOWN_LIST_VIDEO_SHADER_PARAMETER,
DISPLAYLIST_DROPDOWN_LIST_VIDEO_SHADER_PRESET_PARAMETER,
DISPLAYLIST_DROPDOWN_LIST_VIDEO_SHADER_NUM_PASSES,
DISPLAYLIST_DROPDOWN_LIST_PLAYLIST_DEFAULT_CORE,
DISPLAYLIST_DROPDOWN_LIST_PLAYLIST_LABEL_DISPLAY_MODE,
DISPLAYLIST_DROPDOWN_LIST_PLAYLIST_RIGHT_THUMBNAIL_MODE,
DISPLAYLIST_DROPDOWN_LIST_PLAYLIST_LEFT_THUMBNAIL_MODE,
DISPLAYLIST_DROPDOWN_LIST_PLAYLIST_SORT_MODE,
DISPLAYLIST_DROPDOWN_LIST_MANUAL_CONTENT_SCAN_SYSTEM_NAME,
DISPLAYLIST_DROPDOWN_LIST_MANUAL_CONTENT_SCAN_CORE_NAME,
DISPLAYLIST_DROPDOWN_LIST_DISK_INDEX,
DISPLAYLIST_DROPDOWN_LIST_INPUT_DEVICE_TYPE,
DISPLAYLIST_DROPDOWN_LIST_INPUT_DESCRIPTION,
DISPLAYLIST_DROPDOWN_LIST_INPUT_DESCRIPTION_KBD,
DISPLAYLIST_DROPDOWN_LIST_INPUT_SELECT_RESERVED_DEVICE,
#ifdef ANDROID
DISPLAYLIST_DROPDOWN_LIST_INPUT_SELECT_PHYSICAL_KEYBOARD,
#endif
#ifdef HAVE_NETWORKING
DISPLAYLIST_DROPDOWN_LIST_NETPLAY_MITM_SERVER,
#endif
DISPLAYLIST_CDROM_DETAIL_INFO,
DISPLAYLIST_INFO,
DISPLAYLIST_HELP,
DISPLAYLIST_HELP_SCREEN_LIST,
DISPLAYLIST_MAIN_MENU,
DISPLAYLIST_GENERIC,
DISPLAYLIST_SETTINGS_ALL,
DISPLAYLIST_HORIZONTAL,
DISPLAYLIST_HORIZONTAL_CONTENT_ACTIONS,
DISPLAYLIST_HISTORY,
DISPLAYLIST_EXPLORE,
DISPLAYLIST_CONTENTLESS_CORES,
DISPLAYLIST_FAVORITES,
DISPLAYLIST_PLAYLIST,
DISPLAYLIST_VIDEO_HISTORY,
DISPLAYLIST_MUSIC_HISTORY,
DISPLAYLIST_IMAGES_HISTORY,
DISPLAYLIST_MUSIC_LIST,
DISPLAYLIST_PLAYLIST_COLLECTION,
DISPLAYLIST_DEFAULT,
DISPLAYLIST_FILE_BROWSER_SELECT_DIR,
DISPLAYLIST_FILE_BROWSER_SCAN_DIR,
DISPLAYLIST_FILE_BROWSER_SELECT_FILE,
DISPLAYLIST_FILE_BROWSER_SELECT_CORE,
DISPLAYLIST_FILE_BROWSER_SELECT_SIDELOAD_CORE,
DISPLAYLIST_FILE_BROWSER_SELECT_COLLECTION,
DISPLAYLIST_CORES,
DISPLAYLIST_CORES_SUPPORTED,
DISPLAYLIST_CORES_COLLECTION_SUPPORTED,
DISPLAYLIST_CORES_UPDATER,
DISPLAYLIST_CORE_MANAGER_LIST,
#ifdef HAVE_MIST
DISPLAYLIST_STEAM_SETTINGS_LIST,
DISPLAYLIST_CORE_MANAGER_STEAM_LIST,
DISPLAYLIST_CORE_INFORMATION_STEAM_LIST,
#endif
#if 0
/* Thumbnailpack removal */
DISPLAYLIST_THUMBNAILS_UPDATER,
#endif
DISPLAYLIST_PL_THUMBNAILS_UPDATER,
DISPLAYLIST_LAKKA,
DISPLAYLIST_CORES_DETECTED,
DISPLAYLIST_SAVESTATE_LIST,
DISPLAYLIST_CORE_OPTIONS,
DISPLAYLIST_CORE_OPTION_OVERRIDE_LIST,
DISPLAYLIST_CORE_INFO,
DISPLAYLIST_DISC_INFO,
DISPLAYLIST_PERFCOUNTERS_CORE,
DISPLAYLIST_PERFCOUNTERS_FRONTEND,
DISPLAYLIST_SHADER_PASS,
DISPLAYLIST_SHADER_PRESET,
DISPLAYLIST_DATABASES,
DISPLAYLIST_DATABASE_PLAYLISTS,
DISPLAYLIST_DATABASE_PLAYLISTS_HORIZONTAL,
DISPLAYLIST_DATABASE_QUERY,
DISPLAYLIST_DATABASE_ENTRY,
DISPLAYLIST_AUDIO_FILTERS,
DISPLAYLIST_VIDEO_FILTERS,
DISPLAYLIST_CHEAT_FILES,
DISPLAYLIST_REMAP_FILE_MANAGER,
DISPLAYLIST_REMAP_FILES,
DISPLAYLIST_RECORD_CONFIG_FILES,
DISPLAYLIST_STREAM_CONFIG_FILES,
DISPLAYLIST_RGUI_THEME_PRESETS,
DISPLAYLIST_CONFIG_FILES,
DISPLAYLIST_CONTENT_HISTORY,
DISPLAYLIST_IMAGES,
DISPLAYLIST_FONTS,
DISPLAYLIST_VIDEO_FONTS,
DISPLAYLIST_LOAD_DISC,
DISPLAYLIST_DUMP_DISC,
#ifdef HAVE_LAKKA
DISPLAYLIST_EJECT_DISC,
#endif
DISPLAYLIST_OVERLAYS,
DISPLAYLIST_OSK_OVERLAYS,
DISPLAYLIST_SHADER_PARAMETERS,
DISPLAYLIST_SHADER_PARAMETERS_PRESET,
DISPLAYLIST_SHADER_PRESET_SAVE,
DISPLAYLIST_SHADER_PRESET_REMOVE,
DISPLAYLIST_NETWORK_INFO,
DISPLAYLIST_SYSTEM_INFO,
DISPLAYLIST_ACHIEVEMENT_PAUSE_MENU,
DISPLAYLIST_ACHIEVEMENT_LIST,
DISPLAYLIST_USER_BINDS_LIST,
DISPLAYLIST_ACCOUNTS_LIST,
DISPLAYLIST_SUBSYSTEM_SETTINGS_LIST,
DISPLAYLIST_MIXER_STREAM_SETTINGS_LIST,
DISPLAYLIST_DRIVER_SETTINGS_LIST,
DISPLAYLIST_VIDEO_FULLSCREEN_MODE_SETTINGS_LIST,
DISPLAYLIST_VIDEO_WINDOWED_MODE_SETTINGS_LIST,
DISPLAYLIST_VIDEO_SYNCHRONIZATION_SETTINGS_LIST,
DISPLAYLIST_VIDEO_OUTPUT_SETTINGS_LIST,
DISPLAYLIST_VIDEO_SCALING_SETTINGS_LIST,
DISPLAYLIST_VIDEO_HDR_SETTINGS_LIST,
DISPLAYLIST_CRT_SWITCHRES_SETTINGS_LIST,
DISPLAYLIST_VIDEO_SETTINGS_LIST,
DISPLAYLIST_CONFIGURATION_SETTINGS_LIST,
DISPLAYLIST_SAVING_SETTINGS_LIST,
DISPLAYLIST_CLOUD_SYNC_SETTINGS_LIST,
DISPLAYLIST_LOGGING_SETTINGS_LIST,
DISPLAYLIST_FRAME_THROTTLE_SETTINGS_LIST,
DISPLAYLIST_FRAME_TIME_COUNTER_SETTINGS_LIST,
DISPLAYLIST_REWIND_SETTINGS_LIST,
DISPLAYLIST_CHEAT_DETAILS_SETTINGS_LIST,
DISPLAYLIST_CHEAT_SEARCH_SETTINGS_LIST,
DISPLAYLIST_AUDIO_SETTINGS_LIST,
DISPLAYLIST_AUDIO_OUTPUT_SETTINGS_LIST,
#ifdef HAVE_MICROPHONE
DISPLAYLIST_MICROPHONE_SETTINGS_LIST,
#endif
DISPLAYLIST_AUDIO_SYNCHRONIZATION_SETTINGS_LIST,
DISPLAYLIST_AUDIO_MIXER_SETTINGS_LIST,
DISPLAYLIST_CORE_SETTINGS_LIST,
DISPLAYLIST_INPUT_SETTINGS_LIST,
DISPLAYLIST_INPUT_TURBO_FIRE_SETTINGS_LIST,
DISPLAYLIST_INPUT_HAPTIC_FEEDBACK_SETTINGS_LIST,
DISPLAYLIST_INPUT_MENU_SETTINGS_LIST,
DISPLAYLIST_LATENCY_SETTINGS_LIST,
DISPLAYLIST_INPUT_RETROPAD_BINDS_LIST,
DISPLAYLIST_INPUT_HOTKEY_BINDS_LIST,
#if defined(HAVE_OVERLAY)
DISPLAYLIST_ONSCREEN_OVERLAY_SETTINGS_LIST,
DISPLAYLIST_OSK_OVERLAY_SETTINGS_LIST,
DISPLAYLIST_OVERLAY_LIGHTGUN_SETTINGS_LIST,
DISPLAYLIST_OVERLAY_MOUSE_SETTINGS_LIST,
#endif
DISPLAYLIST_AI_SERVICE_SETTINGS_LIST,
DISPLAYLIST_ACCESSIBILITY_SETTINGS_LIST,
DISPLAYLIST_ONSCREEN_DISPLAY_SETTINGS_LIST,
DISPLAYLIST_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST,
DISPLAYLIST_ONSCREEN_NOTIFICATIONS_VIEWS_SETTINGS_LIST,
DISPLAYLIST_MENU_FILE_BROWSER_SETTINGS_LIST,
DISPLAYLIST_MENU_VIEWS_SETTINGS_LIST,
DISPLAYLIST_QUICK_MENU_VIEWS_SETTINGS_LIST,
DISPLAYLIST_SETTINGS_VIEWS_SETTINGS_LIST,
DISPLAYLIST_MENU_SETTINGS_LIST,
#ifdef _3DS
DISPLAYLIST_MENU_BOTTOM_SETTINGS_LIST,
#endif
DISPLAYLIST_USER_INTERFACE_SETTINGS_LIST,
DISPLAYLIST_POWER_MANAGEMENT_SETTINGS_LIST,
DISPLAYLIST_MENU_SOUNDS_LIST,
DISPLAYLIST_RETRO_ACHIEVEMENTS_SETTINGS_LIST,
DISPLAYLIST_CHEEVOS_APPEARANCE_SETTINGS_LIST,
DISPLAYLIST_CHEEVOS_VISIBILITY_SETTINGS_LIST,
DISPLAYLIST_UPDATER_SETTINGS_LIST,
DISPLAYLIST_BLUETOOTH_SETTINGS_LIST,
DISPLAYLIST_WIFI_SETTINGS_LIST,
DISPLAYLIST_NETWORK_SETTINGS_LIST,
DISPLAYLIST_NETWORK_HOSTING_SETTINGS_LIST,
DISPLAYLIST_NETPLAY_KICK_LIST,
DISPLAYLIST_NETPLAY_BAN_LIST,
DISPLAYLIST_NETPLAY_LOBBY_FILTERS_LIST,
DISPLAYLIST_NETPLAY_LAN_SCAN_SETTINGS_LIST,
DISPLAYLIST_LAKKA_SERVICES_LIST,
#ifdef HAVE_LAKKA_SWITCH
DISPLAYLIST_LAKKA_SWITCH_OPTIONS_LIST,
#endif
DISPLAYLIST_USER_SETTINGS_LIST,
DISPLAYLIST_DIRECTORY_SETTINGS_LIST,
DISPLAYLIST_PRIVACY_SETTINGS_LIST,
DISPLAYLIST_MIDI_SETTINGS_LIST,
DISPLAYLIST_RECORDING_SETTINGS_LIST,
DISPLAYLIST_PLAYLIST_SETTINGS_LIST,
DISPLAYLIST_PLAYLIST_MANAGER_LIST,
DISPLAYLIST_ADD_TO_PLAYLIST_LIST,
DISPLAYLIST_PLAYLIST_MANAGER_SETTINGS,
DISPLAYLIST_ACCOUNTS_CHEEVOS_LIST,
DISPLAYLIST_ACCOUNTS_YOUTUBE_LIST,
DISPLAYLIST_ACCOUNTS_TWITCH_LIST,
DISPLAYLIST_ACCOUNTS_FACEBOOK_LIST,
DISPLAYLIST_BROWSE_URL_LIST,
DISPLAYLIST_BROWSE_URL_START,
DISPLAYLIST_LOAD_CONTENT_LIST,
DISPLAYLIST_LOAD_CONTENT_SPECIAL,
DISPLAYLIST_INFORMATION_LIST,
DISPLAYLIST_INFORMATION,
DISPLAYLIST_CONTENT_SETTINGS,
DISPLAYLIST_OPTIONS,
DISPLAYLIST_OPTIONS_CHEATS,
DISPLAYLIST_OPTIONS_REMAPPINGS,
DISPLAYLIST_OPTIONS_REMAPPINGS_PORT,
DISPLAYLIST_OPTIONS_MANAGEMENT,
DISPLAYLIST_OPTIONS_DISK,
DISPLAYLIST_OPTIONS_SHADERS,
DISPLAYLIST_OPTIONS_OVERRIDES,
DISPLAYLIST_NETPLAY,
DISPLAYLIST_ADD_CONTENT_LIST,
DISPLAYLIST_CONFIGURATIONS_LIST,
DISPLAYLIST_SCAN_DIRECTORY_LIST,
DISPLAYLIST_NETPLAY_ROOM_LIST,
DISPLAYLIST_ARCHIVE_ACTION,
DISPLAYLIST_ARCHIVE_ACTION_DETECT_CORE,
DISPLAYLIST_CORE_CONTENT,
DISPLAYLIST_CORE_CONTENT_DIRS,
DISPLAYLIST_CORE_CONTENT_DIRS_SUBDIR,
DISPLAYLIST_CORE_SYSTEM_FILES,
#if defined(HAVE_LIBNX)
DISPLAYLIST_SWITCH_CPU_PROFILE,
#endif
DISPLAYLIST_MANUAL_CONTENT_SCAN_LIST,
DISPLAYLIST_MANUAL_CONTENT_SCAN_DAT_FILES,
DISPLAYLIST_CORE_RESTORE_BACKUP_LIST,
DISPLAYLIST_CORE_DELETE_BACKUP_LIST,
DISPLAYLIST_WIFI_NETWORKS_LIST,
#if defined(HAVE_LAKKA)
DISPLAYLIST_CPU_PERFPOWER_LIST,
DISPLAYLIST_CPU_POLICY_LIST,
#endif
DISPLAYLIST_PENDING_CLEAR,
DISPLAYLIST_SHADER_PRESET_PREPEND,
DISPLAYLIST_SHADER_PRESET_APPEND
};
enum filebrowser_enums
{
FILEBROWSER_NONE = 0,
FILEBROWSER_SELECT_DIR,
FILEBROWSER_SCAN_DIR,
FILEBROWSER_SCAN_FILE,
FILEBROWSER_MANUAL_SCAN_DIR,
FILEBROWSER_SELECT_FILE,
FILEBROWSER_SELECT_FILE_SUBSYSTEM,
FILEBROWSER_SELECT_IMAGE,
FILEBROWSER_SELECT_VIDEO_FONT,
FILEBROWSER_SELECT_COLLECTION
};
enum menu_dl_flags
{
MD_FLAG_NONE = 0,
MD_FLAG_NEED_SORT = (1 << 0), /* Should the displaylist be sorted by alphabet? */
MD_FLAG_NEED_REFRESH = (1 << 1),
MD_FLAG_NEED_ENTRIES_REFRESH = (1 << 2),
MD_FLAG_NEED_PUSH = (1 << 3),
MD_FLAG_NEED_PUSH_NO_PLAYLIST_ENTRIES = (1 << 4),
MD_FLAG_NEED_CLEAR = (1 << 5), /* Should we clear the displaylist before we push
* entries onto it? */
MD_FLAG_PUSH_BUILTIN_CORES = (1 << 6),
MD_FLAG_DOWNLOAD_CORE = (1 << 7), /* Should a 'download core' entry be pushed onto the list?
* This will be set to true in case there are no currently
* installed cores. */
MD_FLAG_NEED_NAVIGATION_CLEAR = (1 << 8) /* Does the navigation index need to be cleared
* to 0 (first entry) ? */
};
typedef struct menu_displaylist_info
{
char *path;
char *path_b;
char *path_c;
char *exts;
char *label;
file_list_t *list;
rarch_setting_t *setting;
size_t directory_ptr;
uint32_t flags;
unsigned type;
unsigned type_default;
enum msg_hash_enums enum_idx;
} menu_displaylist_info_t;
bool menu_displaylist_process(menu_displaylist_info_t *info);
void menu_displaylist_info_free(menu_displaylist_info_t *info);
unsigned menu_displaylist_build_list(
file_list_t *list,
settings_t *settings,
enum menu_displaylist_ctl_state type,
bool include_everything);
void menu_displaylist_info_init(menu_displaylist_info_t *info);
bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist_info_t *info, settings_t *settings);
bool menu_displaylist_has_subsystems(void);
#if defined(HAVE_LIBRETRODB)
unsigned menu_displaylist_explore(file_list_t *list, settings_t *settings);
#endif
unsigned menu_displaylist_contentless_cores(file_list_t *list, settings_t *settings);
enum filebrowser_enums filebrowser_get_type(void);
void filebrowser_clear_type(void);
void filebrowser_set_type(enum filebrowser_enums type);
int menu_displaylist_parse_settings_enum(
file_list_t *info_list,
enum menu_displaylist_parse_type parse_type,
bool add_empty_entry,
rarch_setting_t *setting,
unsigned entry_type,
bool is_enum
);
RETRO_END_DECLS
#endif