From 3da96deec3a7786bc0e00a05fce5911b1d8975f6 Mon Sep 17 00:00:00 2001 From: jdgleaver Date: Thu, 15 Aug 2019 18:04:24 +0100 Subject: [PATCH] Enable per-playlist thumbnail selection --- intl/msg_hash_lbl.h | 22 +-- intl/msg_hash_us.h | 4 + libretro-common/include/string/stdstring.h | 4 + libretro-common/string/stdstring.c | 18 ++ menu/cbs/menu_cbs_deferred_push.c | 12 ++ menu/cbs/menu_cbs_get_value.c | 79 ++++++++ menu/cbs/menu_cbs_left.c | 48 ++++- menu/cbs/menu_cbs_ok.c | 88 +++++++++ menu/cbs/menu_cbs_right.c | 47 +++++ menu/cbs/menu_cbs_start.c | 34 ++++ menu/cbs/menu_cbs_sublabel.c | 32 ++++ menu/cbs/menu_cbs_title.c | 12 ++ menu/drivers/ozone/ozone.c | 29 +-- menu/drivers/ozone/ozone_entries.c | 6 +- menu/drivers/rgui.c | 8 +- menu/drivers/xmb.c | 56 +++--- menu/menu_cbs.h | 2 + menu/menu_displaylist.c | 213 +++++++++++++++------ menu/menu_displaylist.h | 2 + menu/menu_driver.h | 4 + menu/menu_thumbnail_path.c | 123 ++++++++++-- menu/menu_thumbnail_path.h | 4 +- msg_hash.h | 24 ++- playlist.c | 188 ++++++++++++++---- playlist.h | 26 ++- 25 files changed, 900 insertions(+), 185 deletions(-) diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index 0fa15a8a3e..71b9a1bf7c 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -279,6 +279,10 @@ MSG_HASH(MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_DEFAULT_CORE, "deferred_dropdown_box_list_playlist_default_core") MSG_HASH(MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_LABEL_DISPLAY_MODE, "deferred_dropdown_box_list_playlist_label_display_mode") +MSG_HASH(MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_RIGHT_THUMBNAIL_MODE, + "deferred_dropdown_box_list_playlist_right_thumbnail_mode") +MSG_HASH(MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_LEFT_THUMBNAIL_MODE, + "deferred_dropdown_box_list_playlist_left_thumbnail_mode") MSG_HASH(MENU_ENUM_LABEL_DEFERRED_CONFIGURATIONS_LIST, "deferred_configurations_list") MSG_HASH(MENU_ENUM_LABEL_DEFERRED_PLAYLIST_LIST, @@ -897,20 +901,10 @@ MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_MANAGER_RESET_CORES, "playlist_manager_reset_cores") MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE, "playlist_manager_label_display_mode") -MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_DEFAULT, - "playlist_manager_label_display_mode_default") -MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_REMOVE_PARENS, - "playlist_manager_label_display_mode_remove_parens") -MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_REMOVE_BRACKETS, - "playlist_manager_label_display_mode_remove_brackets") -MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_REMOVE_PARENS_AND_BRACKETS, - "playlist_manager_label_display_mode_remove_parens_and_brackets") -MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_KEEP_REGION, - "playlist_manager_label_display_mode_keep_region") -MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_KEEP_DISC_INDEX, - "playlist_manager_label_display_mode_keep_disc_index") -MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_KEEP_REGION_AND_DISC_INDEX, - "playlist_manager_label_display_mode_keep_region_and_disc_index") +MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_MANAGER_RIGHT_THUMBNAIL_MODE, + "playlist_manager_right_thumbnail_mode") +MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_MANAGER_LEFT_THUMBNAIL_MODE, + "playlist_manager_left_thumbnail_mode") MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_SETTINGS_BEGIN, "playlist_settings_begin") MSG_HASH(MENU_ENUM_LABEL_POINTER_ENABLE, diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 5423a7c9d0..ab043664f9 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -2248,6 +2248,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_KEEP_REGION_AND_DISC_INDEX, "Keep region and disc index" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_THUMBNAIL_MODE_DEFAULT, + "System Default" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_POINTER_ENABLE, "Touch Support" diff --git a/libretro-common/include/string/stdstring.h b/libretro-common/include/string/stdstring.h index 176045f637..d24b806636 100644 --- a/libretro-common/include/string/stdstring.h +++ b/libretro-common/include/string/stdstring.h @@ -151,6 +151,10 @@ char* string_tokenize(char **str, const char *delim); /* Removes every instance of character 'c' from 'str' */ void string_remove_all_chars(char *str, char c); +/* Converts string to unsigned integer. + * Returns 0 if string is invalid */ +unsigned string_to_unsigned(char *str); + RETRO_END_DECLS #endif diff --git a/libretro-common/string/stdstring.c b/libretro-common/string/stdstring.c index 914e6d31ec..1e8c93452e 100644 --- a/libretro-common/string/stdstring.c +++ b/libretro-common/string/stdstring.c @@ -318,3 +318,21 @@ void string_remove_all_chars(char *str, char c) *write_ptr = '\0'; } + +/* Converts string to unsigned integer. + * Returns 0 if string is invalid */ +unsigned string_to_unsigned(char *str) +{ + char *ptr = NULL; + + if (string_is_empty(str)) + return 0; + + for (ptr = str; *ptr != '\0'; ptr++) + { + if (!isdigit(*ptr)) + return 0; + } + + return (unsigned)strtoul(str, NULL, 10); +} diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index 68c5c8a45c..fcc8dcb561 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -641,6 +641,8 @@ generic_deferred_push_clear_general(deferred_push_dropdown_box_list_special, PUS generic_deferred_push_clear_general(deferred_push_dropdown_box_list_resolution, PUSH_DEFAULT, DISPLAYLIST_DROPDOWN_LIST_RESOLUTION) generic_deferred_push_clear_general(deferred_push_dropdown_box_list_playlist_default_core, PUSH_DEFAULT, DISPLAYLIST_DROPDOWN_LIST_PLAYLIST_DEFAULT_CORE) generic_deferred_push_clear_general(deferred_push_dropdown_box_list_playlist_label_display_mode, PUSH_DEFAULT, DISPLAYLIST_DROPDOWN_LIST_PLAYLIST_LABEL_DISPLAY_MODE) +generic_deferred_push_clear_general(deferred_push_dropdown_box_list_playlist_right_thumbnail_mode, PUSH_DEFAULT, DISPLAYLIST_DROPDOWN_LIST_PLAYLIST_RIGHT_THUMBNAIL_MODE) +generic_deferred_push_clear_general(deferred_push_dropdown_box_list_playlist_left_thumbnail_mode, PUSH_DEFAULT, DISPLAYLIST_DROPDOWN_LIST_PLAYLIST_LEFT_THUMBNAIL_MODE) static int menu_cbs_init_bind_deferred_push_compare_label( menu_file_list_cbs_t *cbs, @@ -686,6 +688,16 @@ static int menu_cbs_init_bind_deferred_push_compare_label( BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_dropdown_box_list_playlist_label_display_mode); return 0; } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_RIGHT_THUMBNAIL_MODE))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_dropdown_box_list_playlist_right_thumbnail_mode); + return 0; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_LEFT_THUMBNAIL_MODE))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_dropdown_box_list_playlist_left_thumbnail_mode); + return 0; + } else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_BROWSE_URL_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_browse_url_list); diff --git a/menu/cbs/menu_cbs_get_value.c b/menu/cbs/menu_cbs_get_value.c index ad82650a46..ea2c22c136 100644 --- a/menu/cbs/menu_cbs_get_value.c +++ b/menu/cbs/menu_cbs_get_value.c @@ -1143,6 +1143,77 @@ static void menu_action_setting_disp_set_label_playlist_label_display_mode( } } +static const char *get_playlist_thumbnail_mode_value(playlist_t *playlist, enum playlist_thumbnail_id thumbnail_id) +{ + enum playlist_thumbnail_mode thumbnail_mode = + playlist_get_thumbnail_mode(playlist, thumbnail_id); + + switch (thumbnail_mode) + { + case PLAYLIST_THUMBNAIL_MODE_OFF: + return msg_hash_to_str(MENU_ENUM_LABEL_VALUE_OFF); + case PLAYLIST_THUMBNAIL_MODE_SCREENSHOTS: + return msg_hash_to_str(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_SCREENSHOTS); + case PLAYLIST_THUMBNAIL_MODE_TITLE_SCREENS: + return msg_hash_to_str(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_TITLE_SCREENS); + case PLAYLIST_THUMBNAIL_MODE_BOXARTS: + return msg_hash_to_str(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_BOXARTS); + default: + /* PLAYLIST_THUMBNAIL_MODE_DEFAULT */ + break; + } + + return msg_hash_to_str(MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_THUMBNAIL_MODE_DEFAULT); +} + +static void menu_action_setting_disp_set_label_playlist_right_thumbnail_mode( + file_list_t* list, + unsigned *w, unsigned type, unsigned i, + const char *label, + char *s, size_t len, + const char *path, + char *s2, size_t len2) +{ + playlist_t *playlist = playlist_get_cached(); + + *s = '\0'; + *w = 19; + + strlcpy(s2, path, len2); + + if (!playlist) + return; + + strlcpy( + s, + get_playlist_thumbnail_mode_value(playlist, PLAYLIST_THUMBNAIL_RIGHT), + len); +} + +static void menu_action_setting_disp_set_label_playlist_left_thumbnail_mode( + file_list_t* list, + unsigned *w, unsigned type, unsigned i, + const char *label, + char *s, size_t len, + const char *path, + char *s2, size_t len2) +{ + playlist_t *playlist = playlist_get_cached(); + + *s = '\0'; + *w = 19; + + strlcpy(s2, path, len2); + + if (!playlist) + return; + + strlcpy( + s, + get_playlist_thumbnail_mode_value(playlist, PLAYLIST_THUMBNAIL_LEFT), + len); +} + static void menu_action_setting_disp_set_label_core_options(file_list_t* list, unsigned *w, unsigned type, unsigned i, const char *label, @@ -1394,6 +1465,14 @@ static int menu_cbs_init_bind_get_string_representation_compare_label( BIND_ACTION_GET_VALUE(cbs, menu_action_setting_disp_set_label_playlist_label_display_mode); break; + case MENU_ENUM_LABEL_PLAYLIST_MANAGER_RIGHT_THUMBNAIL_MODE: + BIND_ACTION_GET_VALUE(cbs, + menu_action_setting_disp_set_label_playlist_right_thumbnail_mode); + break; + case MENU_ENUM_LABEL_PLAYLIST_MANAGER_LEFT_THUMBNAIL_MODE: + BIND_ACTION_GET_VALUE(cbs, + menu_action_setting_disp_set_label_playlist_left_thumbnail_mode); + break; default: return - 1; } diff --git a/menu/cbs/menu_cbs_left.c b/menu/cbs/menu_cbs_left.c index 62bc13bf35..0246974c9d 100644 --- a/menu/cbs/menu_cbs_left.c +++ b/menu/cbs/menu_cbs_left.c @@ -456,6 +456,47 @@ static int playlist_label_display_mode_left(unsigned type, const char *label, return 0; } +static void playlist_thumbnail_mode_left(playlist_t *playlist, enum playlist_thumbnail_id thumbnail_id, + bool wraparound) +{ + enum playlist_thumbnail_mode thumbnail_mode = + playlist_get_thumbnail_mode(playlist, thumbnail_id); + + if (thumbnail_mode > PLAYLIST_THUMBNAIL_MODE_DEFAULT) + thumbnail_mode = (enum playlist_thumbnail_mode)((unsigned)thumbnail_mode - 1); + else if (wraparound) + thumbnail_mode = PLAYLIST_THUMBNAIL_MODE_BOXARTS; + + playlist_set_thumbnail_mode(playlist, thumbnail_id, thumbnail_mode); + playlist_write_file(playlist); +} + +static int playlist_right_thumbnail_mode_left(unsigned type, const char *label, + bool wraparound) +{ + playlist_t *playlist = playlist_get_cached(); + + if (!playlist) + return -1; + + playlist_thumbnail_mode_left(playlist, PLAYLIST_THUMBNAIL_RIGHT, wraparound); + + return 0; +} + +static int playlist_left_thumbnail_mode_left(unsigned type, const char *label, + bool wraparound) +{ + playlist_t *playlist = playlist_get_cached(); + + if (!playlist) + return -1; + + playlist_thumbnail_mode_left(playlist, PLAYLIST_THUMBNAIL_LEFT, wraparound); + + return 0; +} + static int core_setting_left(unsigned type, const char *label, bool wraparound) { @@ -701,10 +742,15 @@ static int menu_cbs_init_bind_left_compare_label(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE: BIND_ACTION_LEFT(cbs, playlist_label_display_mode_left); break; + case MENU_ENUM_LABEL_PLAYLIST_MANAGER_RIGHT_THUMBNAIL_MODE: + BIND_ACTION_LEFT(cbs, playlist_right_thumbnail_mode_left); + break; + case MENU_ENUM_LABEL_PLAYLIST_MANAGER_LEFT_THUMBNAIL_MODE: + BIND_ACTION_LEFT(cbs, playlist_left_thumbnail_mode_left); + break; default: return -1; } - } else { diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index fb06de23b0..2151e66fd9 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -178,6 +178,10 @@ static enum msg_hash_enums action_ok_dl_to_enum(unsigned lbl) return MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_DEFAULT_CORE; case ACTION_OK_DL_DROPDOWN_BOX_LIST_PLAYLIST_LABEL_DISPLAY_MODE: return MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_LABEL_DISPLAY_MODE; + case ACTION_OK_DL_DROPDOWN_BOX_LIST_PLAYLIST_RIGHT_THUMBNAIL_MODE: + return MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_RIGHT_THUMBNAIL_MODE; + case ACTION_OK_DL_DROPDOWN_BOX_LIST_PLAYLIST_LEFT_THUMBNAIL_MODE: + return MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_LEFT_THUMBNAIL_MODE; case ACTION_OK_DL_MIXER_STREAM_SETTINGS_LIST: return MENU_ENUM_LABEL_DEFERRED_MIXER_STREAM_SETTINGS_LIST; case ACTION_OK_DL_ACCOUNTS_LIST: @@ -444,6 +448,24 @@ int generic_action_ok_displaylist_push(const char *path, info.enum_idx = MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_LABEL_DISPLAY_MODE; dl_type = DISPLAYLIST_GENERIC; break; + case ACTION_OK_DL_DROPDOWN_BOX_LIST_PLAYLIST_RIGHT_THUMBNAIL_MODE: + info.type = type; + info.directory_ptr = idx; + info_path = path; + info_label = msg_hash_to_str( + MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_RIGHT_THUMBNAIL_MODE); + info.enum_idx = MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_RIGHT_THUMBNAIL_MODE; + dl_type = DISPLAYLIST_GENERIC; + break; + case ACTION_OK_DL_DROPDOWN_BOX_LIST_PLAYLIST_LEFT_THUMBNAIL_MODE: + info.type = type; + info.directory_ptr = idx; + info_path = path; + info_label = msg_hash_to_str( + MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_LEFT_THUMBNAIL_MODE); + info.enum_idx = MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_LEFT_THUMBNAIL_MODE; + dl_type = DISPLAYLIST_GENERIC; + break; case ACTION_OK_DL_USER_BINDS_LIST: info.type = type; info.directory_ptr = idx; @@ -5428,6 +5450,34 @@ static int action_ok_push_dropdown_item_playlist_label_display_mode(const char * return action_cancel_pop_default(NULL, NULL, 0, 0); } +static int action_ok_push_dropdown_item_playlist_right_thumbnail_mode(const char *path, + const char *label, unsigned type, size_t idx, size_t entry_idx) +{ + playlist_t *playlist = playlist_get_cached(); + + if (!playlist) + return -1; + + playlist_set_thumbnail_mode(playlist, PLAYLIST_THUMBNAIL_RIGHT, (enum playlist_thumbnail_mode)idx); + playlist_write_file(playlist); + + return action_cancel_pop_default(NULL, NULL, 0, 0); +} + +static int action_ok_push_dropdown_item_playlist_left_thumbnail_mode(const char *path, + const char *label, unsigned type, size_t idx, size_t entry_idx) +{ + playlist_t *playlist = playlist_get_cached(); + + if (!playlist) + return -1; + + playlist_set_thumbnail_mode(playlist, PLAYLIST_THUMBNAIL_LEFT, (enum playlist_thumbnail_mode)idx); + playlist_write_file(playlist); + + return action_cancel_pop_default(NULL, NULL, 0, 0); +} + static int action_ok_push_default(const char *path, const char *label, unsigned type, size_t idx, size_t entry_idx) { @@ -5626,6 +5676,26 @@ static int action_ok_playlist_label_display_mode(const char *path, return 0; } +static int action_ok_playlist_right_thumbnail_mode(const char *path, + const char *label, unsigned type, size_t idx, size_t entry_idx) +{ + generic_action_ok_displaylist_push( + NULL, + NULL, NULL, 0, 0, 0, + ACTION_OK_DL_DROPDOWN_BOX_LIST_PLAYLIST_RIGHT_THUMBNAIL_MODE); + return 0; +} + +static int action_ok_playlist_left_thumbnail_mode(const char *path, + const char *label, unsigned type, size_t idx, size_t entry_idx) +{ + generic_action_ok_displaylist_push( + NULL, + NULL, NULL, 0, 0, 0, + ACTION_OK_DL_DROPDOWN_BOX_LIST_PLAYLIST_LEFT_THUMBNAIL_MODE); + return 0; +} + static int action_ok_netplay_enable_host(const char *path, const char *label, unsigned type, size_t idx, size_t entry_idx) { @@ -6446,6 +6516,12 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE: BIND_ACTION_OK(cbs, action_ok_playlist_label_display_mode); break; + case MENU_ENUM_LABEL_PLAYLIST_MANAGER_RIGHT_THUMBNAIL_MODE: + BIND_ACTION_OK(cbs, action_ok_playlist_right_thumbnail_mode); + break; + case MENU_ENUM_LABEL_PLAYLIST_MANAGER_LEFT_THUMBNAIL_MODE: + BIND_ACTION_OK(cbs, action_ok_playlist_left_thumbnail_mode); + break; case MENU_ENUM_LABEL_UPDATE_ASSETS: BIND_ACTION_OK(cbs, action_ok_update_assets); break; @@ -6615,6 +6691,12 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs, case MENU_LABEL_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE: BIND_ACTION_OK(cbs, action_ok_playlist_label_display_mode); break; + case MENU_LABEL_PLAYLIST_MANAGER_RIGHT_THUMBNAIL_MODE: + BIND_ACTION_OK(cbs, action_ok_playlist_right_thumbnail_mode); + break; + case MENU_LABEL_PLAYLIST_MANAGER_LEFT_THUMBNAIL_MODE: + BIND_ACTION_OK(cbs, action_ok_playlist_left_thumbnail_mode); + break; default: return -1; } @@ -6741,6 +6823,12 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs, case MENU_SETTING_DROPDOWN_ITEM_PLAYLIST_LABEL_DISPLAY_MODE: BIND_ACTION_OK(cbs, action_ok_push_dropdown_item_playlist_label_display_mode); break; + case MENU_SETTING_DROPDOWN_ITEM_PLAYLIST_RIGHT_THUMBNAIL_MODE: + BIND_ACTION_OK(cbs, action_ok_push_dropdown_item_playlist_right_thumbnail_mode); + break; + case MENU_SETTING_DROPDOWN_ITEM_PLAYLIST_LEFT_THUMBNAIL_MODE: + BIND_ACTION_OK(cbs, action_ok_push_dropdown_item_playlist_left_thumbnail_mode); + break; case MENU_SETTING_ACTION_CORE_DISK_OPTIONS: BIND_ACTION_OK(cbs, action_ok_push_default); break; diff --git a/menu/cbs/menu_cbs_right.c b/menu/cbs/menu_cbs_right.c index 3abfc17c1f..0951078eb4 100644 --- a/menu/cbs/menu_cbs_right.c +++ b/menu/cbs/menu_cbs_right.c @@ -569,6 +569,47 @@ static int playlist_label_display_mode_right(unsigned type, const char *label, return 0; } +static void playlist_thumbnail_mode_right(playlist_t *playlist, enum playlist_thumbnail_id thumbnail_id, + bool wraparound) +{ + enum playlist_thumbnail_mode thumbnail_mode = + playlist_get_thumbnail_mode(playlist, thumbnail_id); + + if (thumbnail_mode < PLAYLIST_THUMBNAIL_MODE_BOXARTS) + thumbnail_mode = (enum playlist_thumbnail_mode)((unsigned)thumbnail_mode + 1); + else if (wraparound) + thumbnail_mode = PLAYLIST_THUMBNAIL_MODE_DEFAULT; + + playlist_set_thumbnail_mode(playlist, thumbnail_id, thumbnail_mode); + playlist_write_file(playlist); +} + +static int playlist_right_thumbnail_mode_right(unsigned type, const char *label, + bool wraparound) +{ + playlist_t *playlist = playlist_get_cached(); + + if (!playlist) + return -1; + + playlist_thumbnail_mode_right(playlist, PLAYLIST_THUMBNAIL_RIGHT, wraparound); + + return 0; +} + +static int playlist_left_thumbnail_mode_right(unsigned type, const char *label, + bool wraparound) +{ + playlist_t *playlist = playlist_get_cached(); + + if (!playlist) + return -1; + + playlist_thumbnail_mode_right(playlist, PLAYLIST_THUMBNAIL_LEFT, wraparound); + + return 0; +} + int core_setting_right(unsigned type, const char *label, bool wraparound) { @@ -850,6 +891,12 @@ static int menu_cbs_init_bind_right_compare_label(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE: BIND_ACTION_RIGHT(cbs, playlist_label_display_mode_right); break; + case MENU_ENUM_LABEL_PLAYLIST_MANAGER_RIGHT_THUMBNAIL_MODE: + BIND_ACTION_RIGHT(cbs, playlist_right_thumbnail_mode_right); + break; + case MENU_ENUM_LABEL_PLAYLIST_MANAGER_LEFT_THUMBNAIL_MODE: + BIND_ACTION_RIGHT(cbs, playlist_left_thumbnail_mode_right); + break; default: return -1; } diff --git a/menu/cbs/menu_cbs_start.c b/menu/cbs/menu_cbs_start.c index 0164b3ce6b..a5174b1db4 100644 --- a/menu/cbs/menu_cbs_start.c +++ b/menu/cbs/menu_cbs_start.c @@ -271,6 +271,34 @@ static int action_start_playlist_label_display_mode(unsigned type, const char *l return 0; } +static int action_start_playlist_right_thumbnail_mode(unsigned type, const char *label) +{ + playlist_t *playlist = playlist_get_cached(); + + if (!playlist) + return -1; + + /* Set thumbnail_mode to default value */ + playlist_set_thumbnail_mode(playlist, PLAYLIST_THUMBNAIL_RIGHT, PLAYLIST_THUMBNAIL_MODE_DEFAULT); + playlist_write_file(playlist); + + return 0; +} + +static int action_start_playlist_left_thumbnail_mode(unsigned type, const char *label) +{ + playlist_t *playlist = playlist_get_cached(); + + if (!playlist) + return -1; + + /* Set thumbnail_mode to default value */ + playlist_set_thumbnail_mode(playlist, PLAYLIST_THUMBNAIL_LEFT, PLAYLIST_THUMBNAIL_MODE_DEFAULT); + playlist_write_file(playlist); + + return 0; +} + static int action_start_video_resolution(unsigned type, const char *label) { unsigned width = 0, height = 0; @@ -354,6 +382,12 @@ static int menu_cbs_init_bind_start_compare_label(menu_file_list_cbs_t *cbs) case MENU_ENUM_LABEL_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE: BIND_ACTION_START(cbs, action_start_playlist_label_display_mode); break; + case MENU_ENUM_LABEL_PLAYLIST_MANAGER_RIGHT_THUMBNAIL_MODE: + BIND_ACTION_START(cbs, action_start_playlist_right_thumbnail_mode); + break; + case MENU_ENUM_LABEL_PLAYLIST_MANAGER_LEFT_THUMBNAIL_MODE: + BIND_ACTION_START(cbs, action_start_playlist_left_thumbnail_mode); + break; default: return -1; } diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index c319675bb5..6b8b176e07 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -133,6 +133,7 @@ default_sublabel_macro(action_bind_sublabel_playlist_settings_list, MENU_ default_sublabel_macro(action_bind_sublabel_playlist_manager_list, MENU_ENUM_SUBLABEL_PLAYLIST_MANAGER_LIST) default_sublabel_macro(action_bind_sublabel_playlist_manager_default_core, MENU_ENUM_SUBLABEL_PLAYLIST_MANAGER_DEFAULT_CORE) default_sublabel_macro(action_bind_sublabel_playlist_manager_reset_cores, MENU_ENUM_SUBLABEL_PLAYLIST_MANAGER_RESET_CORES) +default_sublabel_macro(action_bind_sublabel_playlist_manager_label_display_mode, MENU_ENUM_SUBLABEL_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE) default_sublabel_macro(action_bind_sublabel_network_settings_list, MENU_ENUM_SUBLABEL_NETWORK_SETTINGS) default_sublabel_macro(action_bind_sublabel_network_on_demand_thumbnails, MENU_ENUM_SUBLABEL_NETWORK_ON_DEMAND_THUMBNAILS) default_sublabel_macro(action_bind_sublabel_user_settings_list, MENU_ENUM_SUBLABEL_USER_SETTINGS) @@ -2475,6 +2476,37 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_PLAYLIST_MANAGER_RESET_CORES: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_playlist_manager_reset_cores); break; + case MENU_ENUM_LABEL_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_playlist_manager_label_display_mode); + break; + case MENU_ENUM_LABEL_PLAYLIST_MANAGER_RIGHT_THUMBNAIL_MODE: + settings = config_get_ptr(); + /* Uses same sublabels as MENU_ENUM_LABEL_THUMBNAILS */ + if (string_is_equal(settings->arrays.menu_driver, "rgui")) + { + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_thumbnails_rgui); + } + else + { + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_thumbnails); + } + break; + case MENU_ENUM_LABEL_PLAYLIST_MANAGER_LEFT_THUMBNAIL_MODE: + settings = config_get_ptr(); + /* Uses same sublabels as MENU_ENUM_LABEL_LEFT_THUMBNAILS */ + if (string_is_equal(settings->arrays.menu_driver, "rgui")) + { + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_left_thumbnails_rgui); + } + else if (string_is_equal(settings->arrays.menu_driver, "ozone")) + { + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_left_thumbnails_ozone); + } + else + { + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_left_thumbnails); + } + break; case MENU_ENUM_LABEL_USER_INTERFACE_SETTINGS: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_user_interface_settings_list); break; diff --git a/menu/cbs/menu_cbs_title.c b/menu/cbs/menu_cbs_title.c index aac94c66cb..e913d19bd6 100644 --- a/menu/cbs/menu_cbs_title.c +++ b/menu/cbs/menu_cbs_title.c @@ -1407,6 +1407,18 @@ int menu_cbs_init_bind_title(menu_file_list_cbs_t *cbs, BIND_ACTION_GET_TITLE(cbs, action_get_title_dropdown_item); return 0; } + if (string_is_equal(label, + msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_RIGHT_THUMBNAIL_MODE))) + { + BIND_ACTION_GET_TITLE(cbs, action_get_title_dropdown_item); + return 0; + } + if (string_is_equal(label, + msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_LEFT_THUMBNAIL_MODE))) + { + BIND_ACTION_GET_TITLE(cbs, action_get_title_dropdown_item); + return 0; + } if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_RPL_ENTRY_ACTIONS))) { BIND_ACTION_GET_TITLE(cbs, action_get_quick_menu_views_settings_list); diff --git a/menu/drivers/ozone/ozone.c b/menu/drivers/ozone/ozone.c index a428fa59ac..96fbbbcc97 100644 --- a/menu/drivers/ozone/ozone.c +++ b/menu/drivers/ozone/ozone.c @@ -382,7 +382,7 @@ static void ozone_update_thumbnail_path(void *data, unsigned i, char pos) menu_thumbnail_get_core_name(ozone->thumbnail_path_data, &core_name); if (string_is_equal(core_name, "imageviewer")) { - if ((pos == 'R') || (pos == 'L' && !menu_thumbnail_is_enabled(MENU_THUMBNAIL_RIGHT))) + if ((pos == 'R') || (pos == 'L' && !menu_thumbnail_is_enabled(ozone->thumbnail_path_data, MENU_THUMBNAIL_RIGHT))) menu_thumbnail_update_path(ozone->thumbnail_path_data, pos == 'R' ? MENU_THUMBNAIL_RIGHT : MENU_THUMBNAIL_LEFT); } else @@ -467,7 +467,8 @@ static void ozone_refresh_thumbnail_image(void *data) /* Only refresh thumbnails if thumbnails are enabled * and we are currently viewing a playlist */ - if ((menu_thumbnail_is_enabled(MENU_THUMBNAIL_RIGHT) || menu_thumbnail_is_enabled(MENU_THUMBNAIL_LEFT)) && + if ((menu_thumbnail_is_enabled(ozone->thumbnail_path_data, MENU_THUMBNAIL_RIGHT) || + menu_thumbnail_is_enabled(ozone->thumbnail_path_data, MENU_THUMBNAIL_LEFT)) && (ozone->is_playlist && ozone->depth == 1)) ozone_update_thumbnail_image(ozone); } @@ -660,10 +661,10 @@ static void ozone_context_reset(void *data, bool is_threaded) } /* Thumbnails */ - if (menu_thumbnail_is_enabled(MENU_THUMBNAIL_RIGHT)) + if (menu_thumbnail_is_enabled(ozone->thumbnail_path_data, MENU_THUMBNAIL_RIGHT)) ozone_update_thumbnail_path(ozone, 0, 'R'); - if (menu_thumbnail_is_enabled(MENU_THUMBNAIL_LEFT)) + if (menu_thumbnail_is_enabled(ozone->thumbnail_path_data, MENU_THUMBNAIL_LEFT)) ozone_update_thumbnail_path(ozone, 0, 'L'); ozone_update_thumbnail_image(ozone); @@ -1388,14 +1389,15 @@ static void ozone_selection_changed(ozone_handle_t *ozone, bool allow_animation) ozone_update_scroll(ozone, allow_animation, node); /* Update thumbnail */ - if (menu_thumbnail_is_enabled(MENU_THUMBNAIL_RIGHT) || menu_thumbnail_is_enabled(MENU_THUMBNAIL_LEFT)) + if (menu_thumbnail_is_enabled(ozone->thumbnail_path_data, MENU_THUMBNAIL_RIGHT) || + menu_thumbnail_is_enabled(ozone->thumbnail_path_data, MENU_THUMBNAIL_LEFT)) { bool update_thumbnails = false; /* Playlist updates */ if (ozone->is_playlist && ozone->depth == 1) { - ozone_set_thumbnail_content( ozone, ""); + ozone_set_thumbnail_content(ozone, ""); update_thumbnails = true; } /* Database list updates @@ -1408,19 +1410,19 @@ static void ozone_selection_changed(ozone_handle_t *ozone, bool allow_animation) /* Filebrowser image updates */ else if (entry_type == FILE_TYPE_IMAGEVIEWER || entry_type == FILE_TYPE_IMAGE) { - ozone_set_thumbnail_content(ozone, "imageviewer"); + ozone_set_thumbnail_content(ozone, "imageviewer"); update_thumbnails = true; } if (update_thumbnails) { - if (menu_thumbnail_is_enabled(MENU_THUMBNAIL_RIGHT)) + if (menu_thumbnail_is_enabled(ozone->thumbnail_path_data, MENU_THUMBNAIL_RIGHT)) ozone_update_thumbnail_path(ozone, 0 /* will be ignored */, 'R'); - if (menu_thumbnail_is_enabled(MENU_THUMBNAIL_LEFT)) + if (menu_thumbnail_is_enabled(ozone->thumbnail_path_data, MENU_THUMBNAIL_LEFT)) ozone_update_thumbnail_path(ozone, 0 /* will be ignored */, 'L'); - ozone_update_thumbnail_image(ozone); + ozone_update_thumbnail_image(ozone); } } @@ -1785,7 +1787,8 @@ static void ozone_populate_entries(void *data, const char *path, const char *lab } /* Thumbnails */ - if (menu_thumbnail_is_enabled(MENU_THUMBNAIL_RIGHT) || menu_thumbnail_is_enabled(MENU_THUMBNAIL_LEFT)) + if (menu_thumbnail_is_enabled(ozone->thumbnail_path_data, MENU_THUMBNAIL_RIGHT) || + menu_thumbnail_is_enabled(ozone->thumbnail_path_data, MENU_THUMBNAIL_LEFT)) { ozone_unload_thumbnail_textures(ozone); @@ -1793,10 +1796,10 @@ static void ozone_populate_entries(void *data, const char *path, const char *lab { ozone_set_thumbnail_content(ozone, ""); - if (menu_thumbnail_is_enabled(MENU_THUMBNAIL_RIGHT)) + if (menu_thumbnail_is_enabled(ozone->thumbnail_path_data, MENU_THUMBNAIL_RIGHT)) ozone_update_thumbnail_path(ozone, 0 /* will be ignored */, 'R'); - if (menu_thumbnail_is_enabled(MENU_THUMBNAIL_LEFT)) + if (menu_thumbnail_is_enabled(ozone->thumbnail_path_data, MENU_THUMBNAIL_LEFT)) ozone_update_thumbnail_path(ozone, 0 /* will be ignored */, 'L'); ozone_update_thumbnail_image(ozone); diff --git a/menu/drivers/ozone/ozone_entries.c b/menu/drivers/ozone/ozone_entries.c index 92443afbcf..eadaf4337b 100644 --- a/menu/drivers/ozone/ozone_entries.c +++ b/menu/drivers/ozone/ozone_entries.c @@ -689,14 +689,14 @@ void ozone_draw_thumbnail_bar(ozone_handle_t *ozone, video_frame_info_t *video_i /* Thumbnails */ thumbnail = ozone->thumbnail && - menu_thumbnail_is_enabled(MENU_THUMBNAIL_RIGHT); + menu_thumbnail_is_enabled(ozone->thumbnail_path_data, MENU_THUMBNAIL_RIGHT); left_thumbnail = ozone->left_thumbnail && - menu_thumbnail_is_enabled(MENU_THUMBNAIL_LEFT); + menu_thumbnail_is_enabled(ozone->thumbnail_path_data, MENU_THUMBNAIL_LEFT); /* If user requested "left" thumbnail instead of content metadata * and no thumbnails are available, show a centered message and * return immediately */ - if (!thumbnail && !left_thumbnail && settings->uints.menu_left_thumbnails != 0) + if (!thumbnail && !left_thumbnail && menu_thumbnail_is_enabled(ozone->thumbnail_path_data, MENU_THUMBNAIL_LEFT)) { ozone_draw_no_thumbnail_available(ozone, video_info, x_position, sidebar_width, 0); return; diff --git a/menu/drivers/rgui.c b/menu/drivers/rgui.c index 0b6cf08415..0e4209f173 100644 --- a/menu/drivers/rgui.c +++ b/menu/drivers/rgui.c @@ -4347,10 +4347,11 @@ static void rgui_scan_selected_entry_thumbnail(rgui_t *rgui, bool force_load) if (menu_thumbnail_set_content_playlist(rgui->thumbnail_path_data, playlist_get_cached(), menu_navigation_get_selection())) { - if (menu_thumbnail_is_enabled(MENU_THUMBNAIL_RIGHT)) + if (menu_thumbnail_is_enabled(rgui->thumbnail_path_data, MENU_THUMBNAIL_RIGHT)) has_thumbnail = menu_thumbnail_update_path(rgui->thumbnail_path_data, MENU_THUMBNAIL_RIGHT); - if (settings->bools.menu_rgui_inline_thumbnails && menu_thumbnail_is_enabled(MENU_THUMBNAIL_LEFT)) + if (settings->bools.menu_rgui_inline_thumbnails && + menu_thumbnail_is_enabled(rgui->thumbnail_path_data, MENU_THUMBNAIL_LEFT)) has_thumbnail = menu_thumbnail_update_path(rgui->thumbnail_path_data, MENU_THUMBNAIL_LEFT) || has_thumbnail; } @@ -4419,7 +4420,8 @@ static void rgui_refresh_thumbnail_image(void *userdata) /* Only refresh thumbnails if thumbnails are enabled */ if ((rgui->show_fs_thumbnail || settings->bools.menu_rgui_inline_thumbnails) && - (menu_thumbnail_is_enabled(MENU_THUMBNAIL_RIGHT) || menu_thumbnail_is_enabled(MENU_THUMBNAIL_LEFT))) + (menu_thumbnail_is_enabled(rgui->thumbnail_path_data, MENU_THUMBNAIL_RIGHT) || + menu_thumbnail_is_enabled(rgui->thumbnail_path_data, MENU_THUMBNAIL_LEFT))) { /* In all cases, reset current thumbnails */ fs_thumbnail.width = 0; diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index b61e87d8f8..e1f136d82b 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -937,7 +937,7 @@ static void xmb_update_thumbnail_path(void *data, unsigned i, char pos) menu_thumbnail_get_core_name(xmb->thumbnail_path_data, &core_name); if (string_is_equal(core_name, "imageviewer")) { - if ((pos == 'R') || (pos == 'L' && !menu_thumbnail_is_enabled(MENU_THUMBNAIL_RIGHT))) + if ((pos == 'R') || (pos == 'L' && !menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_RIGHT))) menu_thumbnail_update_path(xmb->thumbnail_path_data, pos == 'R' ? MENU_THUMBNAIL_RIGHT : MENU_THUMBNAIL_LEFT); } else @@ -1089,8 +1089,8 @@ static void xmb_refresh_thumbnail_image(void *data) return; /* Only refresh thumbnails if thumbnails are enabled */ - if ( menu_thumbnail_is_enabled(MENU_THUMBNAIL_RIGHT) || - menu_thumbnail_is_enabled(MENU_THUMBNAIL_LEFT)) + if ( menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_RIGHT) || + menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_LEFT)) { unsigned depth = (unsigned)xmb_list_get_size(xmb, MENU_LIST_PLAIN); unsigned xmb_system_tab = xmb_get_system_tab(xmb, (unsigned)xmb->categories_selection_ptr); @@ -1107,10 +1107,10 @@ static void xmb_refresh_thumbnail_image(void *data) (xmb_system_tab < XMB_SYSTEM_TAB_SETTINGS && depth == 4)) && xmb->is_playlist) { - if (menu_thumbnail_is_enabled(MENU_THUMBNAIL_RIGHT)) + if (menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_RIGHT)) xmb_update_thumbnail_path(xmb, 0 /* will be ignored */, 'R'); - if (menu_thumbnail_is_enabled(MENU_THUMBNAIL_LEFT)) + if (menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_LEFT)) xmb_update_thumbnail_path(xmb, 0 /* will be ignored */, 'L'); xmb_update_thumbnail_image(xmb); @@ -1293,8 +1293,8 @@ static void xmb_selection_pointer_changed( ia = xmb->items_active_alpha; iz = xmb->items_active_zoom; if ( - menu_thumbnail_is_enabled(MENU_THUMBNAIL_RIGHT) || - menu_thumbnail_is_enabled(MENU_THUMBNAIL_LEFT) + menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_RIGHT) || + menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_LEFT) ) { bool update_thumbnails = false; @@ -1325,10 +1325,10 @@ static void xmb_selection_pointer_changed( if (update_thumbnails) { - if (menu_thumbnail_is_enabled(MENU_THUMBNAIL_RIGHT)) + if (menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_RIGHT)) xmb_update_thumbnail_path(xmb, i /* will be ignored */, 'R'); - if (menu_thumbnail_is_enabled(MENU_THUMBNAIL_LEFT)) + if (menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_LEFT)) xmb_update_thumbnail_path(xmb, i /* will be ignored */, 'L'); xmb_update_thumbnail_image(xmb); @@ -1534,8 +1534,8 @@ static void xmb_list_open_new(xmb_handle_t *xmb, if (xmb_system_tab <= XMB_SYSTEM_TAB_SETTINGS) { - if ( menu_thumbnail_is_enabled(MENU_THUMBNAIL_RIGHT) || - menu_thumbnail_is_enabled(MENU_THUMBNAIL_LEFT)) + if ( menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_RIGHT) || + menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_LEFT)) { /* This code is horrible, full of hacks... * This hack ensures that thumbnails are not cleared @@ -1548,10 +1548,10 @@ static void xmb_list_open_new(xmb_handle_t *xmb, { xmb_set_thumbnail_content(xmb, NULL); - if (menu_thumbnail_is_enabled(MENU_THUMBNAIL_RIGHT)) + if (menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_RIGHT)) xmb_update_thumbnail_path(xmb, 0 /* will be ignored */, 'R'); - if (menu_thumbnail_is_enabled(MENU_THUMBNAIL_LEFT)) + if (menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_LEFT)) xmb_update_thumbnail_path(xmb, 0 /* will be ignored */, 'L'); xmb_update_thumbnail_image(xmb); @@ -1886,7 +1886,8 @@ static void xmb_list_switch(xmb_handle_t *xmb) xmb_list_switch_new(xmb, selection_buf, dir, selection); xmb->categories_active_idx_old = (unsigned)xmb->categories_selection_ptr; - if (menu_thumbnail_is_enabled(MENU_THUMBNAIL_RIGHT) || menu_thumbnail_is_enabled(MENU_THUMBNAIL_LEFT)) + if (menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_RIGHT) || + menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_LEFT)) { xmb_unload_thumbnail_textures(xmb); @@ -1894,10 +1895,10 @@ static void xmb_list_switch(xmb_handle_t *xmb) { xmb_set_thumbnail_content(xmb, NULL); - if (menu_thumbnail_is_enabled(MENU_THUMBNAIL_RIGHT)) + if (menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_RIGHT)) xmb_update_thumbnail_path(xmb, 0 /* will be ignored */, 'R'); - if (menu_thumbnail_is_enabled(MENU_THUMBNAIL_LEFT)) + if (menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_LEFT)) xmb_update_thumbnail_path(xmb, 0 /* will be ignored */, 'L'); xmb_update_thumbnail_image(xmb); @@ -2944,9 +2945,9 @@ static int xmb_draw_item( { if (xmb->savestate_thumbnail || !xmb->use_ps3_layout || - (menu_thumbnail_is_enabled(MENU_THUMBNAIL_RIGHT) + (menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_RIGHT) && xmb->thumbnail) || - (menu_thumbnail_is_enabled(MENU_THUMBNAIL_LEFT) + (menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_LEFT) && xmb->left_thumbnail && settings->bools.menu_xmb_vertical_thumbnails) ) @@ -3587,7 +3588,7 @@ static void xmb_frame(void *data, video_frame_info_t *video_info) xmb->icon_spacing_horizontal + pseudo_font_length + min_thumb_size) <= width)) { - if (xmb->thumbnail && menu_thumbnail_is_enabled(MENU_THUMBNAIL_RIGHT)) + if (xmb->thumbnail && menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_RIGHT)) { /* Limit thumbnail width */ @@ -3653,7 +3654,7 @@ static void xmb_frame(void *data, video_frame_info_t *video_info) { /* Left Thumbnail in the left margin */ - if (xmb->left_thumbnail && menu_thumbnail_is_enabled(MENU_THUMBNAIL_LEFT)) + if (xmb->left_thumbnail && menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_LEFT)) { /* Limit left thumbnail width */ @@ -3718,7 +3719,7 @@ static void xmb_frame(void *data, video_frame_info_t *video_info) xmb->icon_spacing_horizontal + pseudo_font_length + min_thumb_size) <= width)) { - if (xmb->left_thumbnail && menu_thumbnail_is_enabled(MENU_THUMBNAIL_LEFT)) + if (xmb->left_thumbnail && menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_LEFT)) { /* Limit left thumbnail width */ @@ -3782,7 +3783,7 @@ static void xmb_frame(void *data, video_frame_info_t *video_info) { /* Left Thumbnail in the left margin */ - if (xmb->left_thumbnail && menu_thumbnail_is_enabled(MENU_THUMBNAIL_LEFT)) + if (xmb->left_thumbnail && menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_LEFT)) { /* Limit left thumbnail width */ @@ -4024,7 +4025,7 @@ static void xmb_frame(void *data, video_frame_info_t *video_info) xmb->icon_spacing_horizontal + pseudo_font_length + min_thumb_size) <= width)) { - if (xmb->thumbnail && menu_thumbnail_is_enabled(MENU_THUMBNAIL_RIGHT)) + if (xmb->thumbnail && menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_RIGHT)) { /* Limit right thumbnail width */ @@ -4087,7 +4088,7 @@ static void xmb_frame(void *data, video_frame_info_t *video_info) xmb->icon_spacing_horizontal + pseudo_font_length + min_thumb_size) <= width)) { - if (xmb->left_thumbnail && menu_thumbnail_is_enabled(MENU_THUMBNAIL_LEFT)) + if (xmb->left_thumbnail && menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_LEFT)) { /* Limit left thumbnail width */ @@ -5195,12 +5196,13 @@ static void xmb_context_reset_internal(xmb_handle_t *xmb, xmb_context_reset_horizontal_list(xmb); - if (menu_thumbnail_is_enabled(MENU_THUMBNAIL_RIGHT) || menu_thumbnail_is_enabled(MENU_THUMBNAIL_LEFT)) + if (menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_RIGHT) || + menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_LEFT)) { - if (menu_thumbnail_is_enabled(MENU_THUMBNAIL_RIGHT)) + if (menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_RIGHT)) xmb_update_thumbnail_path(xmb, 0, 'R'); - if (menu_thumbnail_is_enabled(MENU_THUMBNAIL_LEFT)) + if (menu_thumbnail_is_enabled(xmb->thumbnail_path_data, MENU_THUMBNAIL_LEFT)) xmb_update_thumbnail_path(xmb, 0, 'L'); xmb_update_thumbnail_image(xmb); diff --git a/menu/menu_cbs.h b/menu/menu_cbs.h index 97900b390f..a28c0424ea 100644 --- a/menu/menu_cbs.h +++ b/menu/menu_cbs.h @@ -50,6 +50,8 @@ enum ACTION_OK_DL_DROPDOWN_BOX_LIST_RESOLUTION, ACTION_OK_DL_DROPDOWN_BOX_LIST_PLAYLIST_DEFAULT_CORE, ACTION_OK_DL_DROPDOWN_BOX_LIST_PLAYLIST_LABEL_DISPLAY_MODE, + ACTION_OK_DL_DROPDOWN_BOX_LIST_PLAYLIST_RIGHT_THUMBNAIL_MODE, + ACTION_OK_DL_DROPDOWN_BOX_LIST_PLAYLIST_LEFT_THUMBNAIL_MODE, ACTION_OK_DL_OPEN_ARCHIVE, ACTION_OK_DL_OPEN_ARCHIVE_DETECT_CORE, ACTION_OK_DL_MUSIC, diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 2653830768..c8b4203341 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -1762,15 +1762,17 @@ static int menu_displaylist_parse_horizontal_list( lpl_basename[0] = '\0'; path_playlist[0] = '\0'; - fill_pathname_base_noext(lpl_basename, item->path, sizeof(lpl_basename)); - menu_driver_set_thumbnail_system(lpl_basename, sizeof(lpl_basename)); - fill_pathname_join( path_playlist, settings->paths.directory_playlist, item->path, sizeof(path_playlist)); menu_displaylist_set_new_playlist(menu, path_playlist); + + /* Thumbnail system must be set *after* playlist + * is loaded/cached */ + fill_pathname_base_noext(lpl_basename, item->path, sizeof(lpl_basename)); + menu_driver_set_thumbnail_system(lpl_basename, sizeof(lpl_basename)); } playlist = playlist_get_cached(); @@ -2772,9 +2774,15 @@ static bool menu_displaylist_parse_playlist_manager_settings( menu_displaylist_info_t *info, const char *playlist_path) { + enum msg_hash_enums right_thumbnail_label_value; + enum msg_hash_enums left_thumbnail_label_value; + settings_t *settings = config_get_ptr(); const char *playlist_file = NULL; playlist_t *playlist = NULL; + if (!settings) + return false; + if (string_is_empty(playlist_path)) return false; @@ -2818,7 +2826,40 @@ static bool menu_displaylist_parse_playlist_manager_settings( MENU_ENUM_LABEL_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE, MENU_SETTING_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE, 0, 0); - /* TODO: Add + /* Thumbnail modes */ + + /* > Get label values */ + if (string_is_equal(settings->arrays.menu_driver, "rgui")) + { + right_thumbnail_label_value = MENU_ENUM_LABEL_VALUE_THUMBNAILS_RGUI; + left_thumbnail_label_value = MENU_ENUM_LABEL_VALUE_LEFT_THUMBNAILS_RGUI; + } + else if (string_is_equal(settings->arrays.menu_driver, "ozone")) + { + right_thumbnail_label_value = MENU_ENUM_LABEL_VALUE_THUMBNAILS; + left_thumbnail_label_value = MENU_ENUM_LABEL_VALUE_LEFT_THUMBNAILS_OZONE; + } + else + { + right_thumbnail_label_value = MENU_ENUM_LABEL_VALUE_THUMBNAILS; + left_thumbnail_label_value = MENU_ENUM_LABEL_VALUE_LEFT_THUMBNAILS; + } + + /* > Right thumbnail mode */ + menu_entries_append_enum(info->list, + msg_hash_to_str(right_thumbnail_label_value), + msg_hash_to_str(MENU_ENUM_LABEL_PLAYLIST_MANAGER_RIGHT_THUMBNAIL_MODE), + MENU_ENUM_LABEL_PLAYLIST_MANAGER_RIGHT_THUMBNAIL_MODE, + MENU_SETTING_PLAYLIST_MANAGER_RIGHT_THUMBNAIL_MODE, 0, 0); + + /* > Left thumbnail mode */ + menu_entries_append_enum(info->list, + msg_hash_to_str(left_thumbnail_label_value), + msg_hash_to_str(MENU_ENUM_LABEL_PLAYLIST_MANAGER_LEFT_THUMBNAIL_MODE), + MENU_ENUM_LABEL_PLAYLIST_MANAGER_LEFT_THUMBNAIL_MODE, + MENU_SETTING_PLAYLIST_MANAGER_LEFT_THUMBNAIL_MODE, 0, 0); + + /* TODO - Add: * - Remove invalid entries */ return true; @@ -3605,6 +3646,70 @@ typedef struct menu_displaylist_build_info_selective { bool checked; } menu_displaylist_build_info_selective_t; +static unsigned populate_playlist_thumbnail_mode_dropdown_list( + file_list_t *list, enum playlist_thumbnail_id thumbnail_id) +{ + unsigned count = 0; + playlist_t *playlist = playlist_get_cached(); + + if (list && playlist) + { + size_t i; + /* Get currently selected thumbnail mode */ + enum playlist_thumbnail_mode current_thumbnail_mode = + playlist_get_thumbnail_mode(playlist, thumbnail_id); + /* Get appropriate menu_settings_type (right/left) */ + enum menu_settings_type settings_type = + (thumbnail_id == PLAYLIST_THUMBNAIL_RIGHT) ? + MENU_SETTING_DROPDOWN_ITEM_PLAYLIST_RIGHT_THUMBNAIL_MODE : + MENU_SETTING_DROPDOWN_ITEM_PLAYLIST_LEFT_THUMBNAIL_MODE; + + /* Loop over all thumbnail modes */ + for (i = 0; i <= (unsigned)PLAYLIST_THUMBNAIL_MODE_BOXARTS; i++) + { + enum msg_hash_enums label_value; + enum playlist_thumbnail_mode thumbnail_mode = + (enum playlist_thumbnail_mode)i; + + /* Get appropriate entry label */ + switch (thumbnail_mode) + { + case PLAYLIST_THUMBNAIL_MODE_OFF: + label_value = MENU_ENUM_LABEL_VALUE_OFF; + break; + case PLAYLIST_THUMBNAIL_MODE_SCREENSHOTS: + label_value = MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_SCREENSHOTS; + break; + case PLAYLIST_THUMBNAIL_MODE_TITLE_SCREENS: + label_value = MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_TITLE_SCREENS; + break; + case PLAYLIST_THUMBNAIL_MODE_BOXARTS: + label_value = MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_BOXARTS; + break; + default: + /* PLAYLIST_THUMBNAIL_MODE_DEFAULT */ + label_value = MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_THUMBNAIL_MODE_DEFAULT; + break; + } + + /* Add entry */ + if (menu_entries_append_enum(list, + msg_hash_to_str(label_value), + "", + MENU_ENUM_LABEL_NO_ITEMS, + settings_type, + 0, 0)) + count++; + + /* Add checkmark if item is currently selected */ + if (current_thumbnail_mode == thumbnail_mode) + menu_entries_set_checked(list, i, true); + } + } + + return count; +} + unsigned menu_displaylist_build_list(file_list_t *list, enum menu_displaylist_ctl_state type) { unsigned i; @@ -3829,72 +3934,66 @@ unsigned menu_displaylist_build_list(file_list_t *list, enum menu_displaylist_ct break; case DISPLAYLIST_DROPDOWN_LIST_PLAYLIST_LABEL_DISPLAY_MODE: { - playlist_t *playlist = playlist_get_cached(); + playlist_t *playlist = playlist_get_cached(); if (playlist) { - enum playlist_label_display_mode label_display_mode = playlist_get_label_display_mode(playlist); + size_t i; + enum playlist_label_display_mode current_display_mode = + playlist_get_label_display_mode(playlist); - if (menu_entries_append_enum(list, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_DEFAULT), - "", - MENU_ENUM_LABEL_NO_ITEMS, - MENU_SETTING_DROPDOWN_ITEM_PLAYLIST_LABEL_DISPLAY_MODE, - 0, 0)) - count++; + for (i = 0; i <= (unsigned)LABEL_DISPLAY_MODE_KEEP_REGION_AND_DISC_INDEX; i++) + { + enum msg_hash_enums label_value; + enum playlist_label_display_mode display_mode = + (enum playlist_label_display_mode)i; - if (menu_entries_append_enum(list, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_REMOVE_PARENS), - "", - MENU_ENUM_LABEL_NO_ITEMS, - MENU_SETTING_DROPDOWN_ITEM_PLAYLIST_LABEL_DISPLAY_MODE, - 0, 0)) - count++; + switch (display_mode) + { + case LABEL_DISPLAY_MODE_REMOVE_PARENTHESES: + label_value = MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_REMOVE_PARENS; + break; + case LABEL_DISPLAY_MODE_REMOVE_BRACKETS: + label_value = MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_REMOVE_BRACKETS; + break; + case LABEL_DISPLAY_MODE_REMOVE_PARENTHESES_AND_BRACKETS: + label_value = MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_REMOVE_PARENS_AND_BRACKETS; + break; + case LABEL_DISPLAY_MODE_KEEP_REGION: + label_value = MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_KEEP_REGION; + break; + case LABEL_DISPLAY_MODE_KEEP_DISC_INDEX: + label_value = MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_KEEP_DISC_INDEX; + break; + case LABEL_DISPLAY_MODE_KEEP_REGION_AND_DISC_INDEX: + label_value = MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_KEEP_REGION_AND_DISC_INDEX; + break; + default: + /* LABEL_DISPLAY_MODE_DEFAULT */ + label_value = MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_DEFAULT; + break; + } - if (menu_entries_append_enum(list, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_REMOVE_BRACKETS), - "", - MENU_ENUM_LABEL_NO_ITEMS, - MENU_SETTING_DROPDOWN_ITEM_PLAYLIST_LABEL_DISPLAY_MODE, - 0, 0)) - count++; - - if (menu_entries_append_enum(list, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_REMOVE_PARENS_AND_BRACKETS), - "", - MENU_ENUM_LABEL_NO_ITEMS, - MENU_SETTING_DROPDOWN_ITEM_PLAYLIST_LABEL_DISPLAY_MODE, - 0, 0)) - count++; - - if (menu_entries_append_enum(list, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_KEEP_REGION), - "", - MENU_ENUM_LABEL_NO_ITEMS, - MENU_SETTING_DROPDOWN_ITEM_PLAYLIST_LABEL_DISPLAY_MODE, - 0, 0)) - count++; - - if (menu_entries_append_enum(list, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_KEEP_DISC_INDEX), - "", - MENU_ENUM_LABEL_NO_ITEMS, - MENU_SETTING_DROPDOWN_ITEM_PLAYLIST_LABEL_DISPLAY_MODE, - 0, 0)) - count++; - - if (menu_entries_append_enum(list, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_KEEP_REGION_AND_DISC_INDEX), + if (menu_entries_append_enum(list, + msg_hash_to_str(label_value), "", MENU_ENUM_LABEL_NO_ITEMS, MENU_SETTING_DROPDOWN_ITEM_PLAYLIST_LABEL_DISPLAY_MODE, 0, 0)) count++; - menu_entries_set_checked(list, label_display_mode, true); + if (current_display_mode == display_mode) + menu_entries_set_checked(list, i, true); + } } } break; + case DISPLAYLIST_DROPDOWN_LIST_PLAYLIST_RIGHT_THUMBNAIL_MODE: + count = populate_playlist_thumbnail_mode_dropdown_list(list, PLAYLIST_THUMBNAIL_RIGHT); + break; + case DISPLAYLIST_DROPDOWN_LIST_PLAYLIST_LEFT_THUMBNAIL_MODE: + count = populate_playlist_thumbnail_mode_dropdown_list(list, PLAYLIST_THUMBNAIL_LEFT); + break; case DISPLAYLIST_PERFCOUNTERS_CORE: case DISPLAYLIST_PERFCOUNTERS_FRONTEND: { @@ -6803,6 +6902,8 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, case DISPLAYLIST_DROPDOWN_LIST_RESOLUTION: case DISPLAYLIST_DROPDOWN_LIST_PLAYLIST_DEFAULT_CORE: case DISPLAYLIST_DROPDOWN_LIST_PLAYLIST_LABEL_DISPLAY_MODE: + case DISPLAYLIST_DROPDOWN_LIST_PLAYLIST_RIGHT_THUMBNAIL_MODE: + case DISPLAYLIST_DROPDOWN_LIST_PLAYLIST_LEFT_THUMBNAIL_MODE: case DISPLAYLIST_PERFCOUNTERS_CORE: case DISPLAYLIST_PERFCOUNTERS_FRONTEND: case DISPLAYLIST_MENU_SETTINGS_LIST: @@ -6824,6 +6925,8 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, case DISPLAYLIST_DROPDOWN_LIST_RESOLUTION: case DISPLAYLIST_DROPDOWN_LIST_PLAYLIST_DEFAULT_CORE: case DISPLAYLIST_DROPDOWN_LIST_PLAYLIST_LABEL_DISPLAY_MODE: + case DISPLAYLIST_DROPDOWN_LIST_PLAYLIST_RIGHT_THUMBNAIL_MODE: + case DISPLAYLIST_DROPDOWN_LIST_PLAYLIST_LEFT_THUMBNAIL_MODE: 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), diff --git a/menu/menu_displaylist.h b/menu/menu_displaylist.h index ea7d5ccdd6..a5ead0616e 100644 --- a/menu/menu_displaylist.h +++ b/menu/menu_displaylist.h @@ -58,6 +58,8 @@ enum menu_displaylist_ctl_state DISPLAYLIST_DROPDOWN_LIST_RESOLUTION, 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_CDROM_DETAIL_INFO, DISPLAYLIST_INFO, DISPLAYLIST_HELP, diff --git a/menu/menu_driver.h b/menu/menu_driver.h index 1c47ab27f3..1f9c773a98 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -88,6 +88,8 @@ enum menu_settings_type MENU_SETTING_DROPDOWN_ITEM_RESOLUTION, MENU_SETTING_DROPDOWN_ITEM_PLAYLIST_DEFAULT_CORE, MENU_SETTING_DROPDOWN_ITEM_PLAYLIST_LABEL_DISPLAY_MODE, + MENU_SETTING_DROPDOWN_ITEM_PLAYLIST_RIGHT_THUMBNAIL_MODE, + MENU_SETTING_DROPDOWN_ITEM_PLAYLIST_LEFT_THUMBNAIL_MODE, MENU_SETTING_DROPDOWN_SETTING_CORE_OPTIONS_ITEM, MENU_SETTING_DROPDOWN_SETTING_STRING_OPTIONS_ITEM, MENU_SETTING_DROPDOWN_SETTING_FLOAT_ITEM, @@ -123,6 +125,8 @@ enum menu_settings_type MENU_SETTING_ACTION_RESUME_ACHIEVEMENTS, MENU_SETTING_PLAYLIST_MANAGER_DEFAULT_CORE, MENU_SETTING_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE, + MENU_SETTING_PLAYLIST_MANAGER_RIGHT_THUMBNAIL_MODE, + MENU_SETTING_PLAYLIST_MANAGER_LEFT_THUMBNAIL_MODE, MENU_WIFI, MENU_ROOM, MENU_ROOM_LAN, diff --git a/menu/menu_thumbnail_path.c b/menu/menu_thumbnail_path.c index ea2e978416..b596e7ba10 100644 --- a/menu/menu_thumbnail_path.c +++ b/menu/menu_thumbnail_path.c @@ -51,6 +51,8 @@ struct menu_thumbnail_path_data char content_img[PATH_MAX_LENGTH]; char right_path[PATH_MAX_LENGTH]; char left_path[PATH_MAX_LENGTH]; + enum playlist_thumbnail_mode playlist_right_mode; + enum playlist_thumbnail_mode playlist_left_mode; }; /* Initialisation */ @@ -65,6 +67,12 @@ menu_thumbnail_path_data_t *menu_thumbnail_path_init(void) calloc(1, sizeof(*path_data)); if (!path_data) return NULL; + + /* Set these manually, since the default enum + * may not necessarily have a value of zero */ + path_data->playlist_right_mode = PLAYLIST_THUMBNAIL_MODE_DEFAULT; + path_data->playlist_left_mode = PLAYLIST_THUMBNAIL_MODE_DEFAULT; + return path_data; } @@ -75,14 +83,17 @@ void menu_thumbnail_path_reset(menu_thumbnail_path_data_t *path_data) if (!path_data) return; - path_data->system[0] = '\0'; - path_data->content_path[0] = '\0'; - path_data->content_label[0] = '\0'; + path_data->system[0] = '\0'; + path_data->content_path[0] = '\0'; + path_data->content_label[0] = '\0'; path_data->content_core_name[0] = '\0'; - path_data->content_db_name[0] = '\0'; - path_data->content_img[0] = '\0'; - path_data->right_path[0] = '\0'; - path_data->left_path[0] = '\0'; + path_data->content_db_name[0] = '\0'; + path_data->content_img[0] = '\0'; + path_data->right_path[0] = '\0'; + path_data->left_path[0] = '\0'; + + path_data->playlist_right_mode = PLAYLIST_THUMBNAIL_MODE_DEFAULT; + path_data->playlist_left_mode = PLAYLIST_THUMBNAIL_MODE_DEFAULT; } /* Utility Functions */ @@ -118,21 +129,27 @@ bool menu_thumbnail_get_sub_directory(unsigned type_idx, const char **sub_direct /* Returns currently set thumbnail 'type' (Named_Snaps, * Named_Titles, Named_Boxarts) for specified thumbnail * identifier (right, left) */ -const char *menu_thumbnail_get_type(enum menu_thumbnail_id thumbnail_id) +const char *menu_thumbnail_get_type(menu_thumbnail_path_data_t *path_data, enum menu_thumbnail_id thumbnail_id) { settings_t *settings = config_get_ptr(); unsigned type = 0; - if (!settings) + if (!path_data || !settings) return msg_hash_to_str(MENU_ENUM_LABEL_VALUE_OFF); switch (thumbnail_id) { case MENU_THUMBNAIL_RIGHT: - type = settings->uints.menu_thumbnails; + if (path_data->playlist_right_mode != PLAYLIST_THUMBNAIL_MODE_DEFAULT) + type = (unsigned)path_data->playlist_right_mode - 1; + else + type = settings->uints.menu_thumbnails; break; case MENU_THUMBNAIL_LEFT: - type = settings->uints.menu_left_thumbnails; + if (path_data->playlist_left_mode != PLAYLIST_THUMBNAIL_MODE_DEFAULT) + type = (unsigned)path_data->playlist_left_mode - 1; + else + type = settings->uints.menu_left_thumbnails; break; default: return msg_hash_to_str(MENU_ENUM_LABEL_VALUE_OFF); @@ -156,19 +173,25 @@ const char *menu_thumbnail_get_type(enum menu_thumbnail_id thumbnail_id) /* Returns true if specified thumbnail is enabled * (i.e. if 'type' is not equal to MENU_ENUM_LABEL_VALUE_OFF) */ -bool menu_thumbnail_is_enabled(enum menu_thumbnail_id thumbnail_id) +bool menu_thumbnail_is_enabled(menu_thumbnail_path_data_t *path_data, enum menu_thumbnail_id thumbnail_id) { settings_t *settings = config_get_ptr(); - if (!settings) + if (!path_data || !settings) return false; switch (thumbnail_id) { case MENU_THUMBNAIL_RIGHT: - return settings->uints.menu_thumbnails != 0; + if (path_data->playlist_right_mode != PLAYLIST_THUMBNAIL_MODE_DEFAULT) + return path_data->playlist_right_mode != PLAYLIST_THUMBNAIL_MODE_OFF; + else + return settings->uints.menu_thumbnails != 0; case MENU_THUMBNAIL_LEFT: - return settings->uints.menu_left_thumbnails != 0; + if (path_data->playlist_left_mode != PLAYLIST_THUMBNAIL_MODE_DEFAULT) + return path_data->playlist_left_mode != PLAYLIST_THUMBNAIL_MODE_OFF; + else + return settings->uints.menu_left_thumbnails != 0; default: break; } @@ -206,6 +229,8 @@ static void fill_content_img(menu_thumbnail_path_data_t *path_data) * associated database name */ bool menu_thumbnail_set_system(menu_thumbnail_path_data_t *path_data, const char *system) { + playlist_t *playlist = playlist_get_cached(); + if (!path_data) return false; @@ -217,6 +242,10 @@ bool menu_thumbnail_set_system(menu_thumbnail_path_data_t *path_data, const char /* 'Reset' path_data system string */ path_data->system[0] = '\0'; + /* Must also reset playlist thumbnail display modes */ + path_data->playlist_right_mode = PLAYLIST_THUMBNAIL_MODE_DEFAULT; + path_data->playlist_left_mode = PLAYLIST_THUMBNAIL_MODE_DEFAULT; + if (string_is_empty(system)) return false; @@ -227,6 +256,44 @@ bool menu_thumbnail_set_system(menu_thumbnail_path_data_t *path_data, const char else strlcpy(path_data->system, system, sizeof(path_data->system)); + /* Addendum: Now that we have per-playlist thumbnail display + * modes, we must extract them here - otherwise + * menu_thumbnail_is_enabled() will go out of sync */ + if (playlist) + { + /* History/favourites are a special case: 'system' + * can only be set to these values if we have a + * valid playlist (cf. menu_displaylist_parse_playlist()) */ + bool playlist_valid = + string_is_equal(system, "history") || + string_is_equal(system, "favorites"); + + if (!playlist_valid) + { + /* This means we have to work a little harder + * i.e. check whether the cached playlist file + * matches the database name */ + const char *playlist_path = playlist_get_conf_path(playlist); + char playlist_name[PATH_MAX_LENGTH]; + + playlist_name[0] = '\0'; + + if (!string_is_empty(playlist_path)) + fill_pathname_base_noext(playlist_name, playlist_path, sizeof(playlist_name)); + + playlist_valid = string_is_equal(playlist_name, system); + } + + /* If we have a valid playlist, extract thumbnail modes */ + if (playlist_valid) + { + path_data->playlist_right_mode = + playlist_get_thumbnail_mode(playlist, PLAYLIST_THUMBNAIL_RIGHT); + path_data->playlist_left_mode = + playlist_get_thumbnail_mode(playlist, PLAYLIST_THUMBNAIL_LEFT); + } + } + return true; } @@ -249,6 +316,10 @@ bool menu_thumbnail_set_content(menu_thumbnail_path_data_t *path_data, const cha path_data->content_db_name[0] = '\0'; path_data->content_img[0] = '\0'; + /* Must also reset playlist thumbnail display modes */ + path_data->playlist_right_mode = PLAYLIST_THUMBNAIL_MODE_DEFAULT; + path_data->playlist_left_mode = PLAYLIST_THUMBNAIL_MODE_DEFAULT; + if (string_is_empty(label)) return false; @@ -290,6 +361,10 @@ bool menu_thumbnail_set_content_image(menu_thumbnail_path_data_t *path_data, con path_data->content_db_name[0] = '\0'; path_data->content_img[0] = '\0'; + /* Must also reset playlist thumbnail display modes */ + path_data->playlist_right_mode = PLAYLIST_THUMBNAIL_MODE_DEFAULT; + path_data->playlist_left_mode = PLAYLIST_THUMBNAIL_MODE_DEFAULT; + if (string_is_empty(img_dir)) return false; @@ -347,7 +422,7 @@ bool menu_thumbnail_set_content_playlist(menu_thumbnail_path_data_t *path_data, const char *core_name = NULL; const char *db_name = NULL; const struct playlist_entry *entry = NULL; - + if (!path_data) return false; @@ -363,6 +438,10 @@ bool menu_thumbnail_set_content_playlist(menu_thumbnail_path_data_t *path_data, path_data->content_db_name[0] = '\0'; path_data->content_img[0] = '\0'; + /* Must also reset playlist thumbnail display modes */ + path_data->playlist_right_mode = PLAYLIST_THUMBNAIL_MODE_DEFAULT; + path_data->playlist_left_mode = PLAYLIST_THUMBNAIL_MODE_DEFAULT; + if (!playlist) return false; @@ -437,6 +516,14 @@ bool menu_thumbnail_set_content_playlist(menu_thumbnail_path_data_t *path_data, } } + /* Playlist entry is valid -> it is now 'safe' to + * extract any remaining playlist metadata + * (i.e. thumbnail display modes) */ + path_data->playlist_right_mode = + playlist_get_thumbnail_mode(playlist, PLAYLIST_THUMBNAIL_RIGHT); + path_data->playlist_left_mode = + playlist_get_thumbnail_mode(playlist, PLAYLIST_THUMBNAIL_LEFT); + return true; } @@ -452,7 +539,7 @@ bool menu_thumbnail_set_content_playlist(menu_thumbnail_path_data_t *path_data, bool menu_thumbnail_update_path(menu_thumbnail_path_data_t *path_data, enum menu_thumbnail_id thumbnail_id) { settings_t *settings = config_get_ptr(); - const char *type = menu_thumbnail_get_type(thumbnail_id); + const char *type = menu_thumbnail_get_type(path_data, thumbnail_id); const char *system_name = NULL; char *thumbnail_path = NULL; char content_dir[PATH_MAX_LENGTH]; @@ -483,7 +570,7 @@ bool menu_thumbnail_update_path(menu_thumbnail_path_data_t *path_data, enum menu if (string_is_empty(settings->paths.directory_thumbnails)) return false; - if (!menu_thumbnail_is_enabled(thumbnail_id)) + if (!menu_thumbnail_is_enabled(path_data, thumbnail_id)) return false; /* Generate new path */ diff --git a/menu/menu_thumbnail_path.h b/menu/menu_thumbnail_path.h index 958f585be6..95c5bf7471 100644 --- a/menu/menu_thumbnail_path.h +++ b/menu/menu_thumbnail_path.h @@ -73,11 +73,11 @@ bool menu_thumbnail_get_sub_directory(unsigned type_idx, const char **sub_direct /* Returns currently set thumbnail 'type' (Named_Snaps, * Named_Titles, Named_Boxarts) for specified thumbnail * identifier (right, left) */ -const char *menu_thumbnail_get_type(enum menu_thumbnail_id thumbnail_id); +const char *menu_thumbnail_get_type(menu_thumbnail_path_data_t *path_data, enum menu_thumbnail_id thumbnail_id); /* Returns true if specified thumbnail is enabled * (i.e. if 'type' is not equal to MENU_ENUM_LABEL_VALUE_OFF) */ -bool menu_thumbnail_is_enabled(enum menu_thumbnail_id thumbnail_id); +bool menu_thumbnail_is_enabled(menu_thumbnail_path_data_t *path_data, enum menu_thumbnail_id thumbnail_id); /* Setters */ diff --git a/msg_hash.h b/msg_hash.h index b8b1135c53..d54fc64cc3 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -1154,6 +1154,8 @@ enum msg_hash_enums MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_RESOLUTION, MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_DEFAULT_CORE, MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_LABEL_DISPLAY_MODE, + MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_RIGHT_THUMBNAIL_MODE, + MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_LEFT_THUMBNAIL_MODE, MENU_ENUM_LABEL_DEFERRED_MIXER_STREAM_SETTINGS_LIST, MENU_ENUM_LABEL_DEFERRED_CONFIGURATIONS_LIST, MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST, @@ -1842,13 +1844,18 @@ enum msg_hash_enums MENU_LABEL(PLAYLIST_MANAGER_LABEL_DISPLAY_MODE), - MENU_LABEL(PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_DEFAULT), - MENU_LABEL(PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_REMOVE_PARENS), - MENU_LABEL(PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_REMOVE_BRACKETS), - MENU_LABEL(PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_REMOVE_PARENS_AND_BRACKETS), - MENU_LABEL(PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_KEEP_REGION), - MENU_LABEL(PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_KEEP_DISC_INDEX), - MENU_LABEL(PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_KEEP_REGION_AND_DISC_INDEX), + MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_DEFAULT, + MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_REMOVE_PARENS, + MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_REMOVE_BRACKETS, + MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_REMOVE_PARENS_AND_BRACKETS, + MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_KEEP_REGION, + MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_KEEP_DISC_INDEX, + MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_KEEP_REGION_AND_DISC_INDEX, + + MENU_LABEL(PLAYLIST_MANAGER_RIGHT_THUMBNAIL_MODE), + MENU_LABEL(PLAYLIST_MANAGER_LEFT_THUMBNAIL_MODE), + + MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_THUMBNAIL_MODE_DEFAULT, MENU_LABEL(CORE_UPDATER_SETTINGS), MENU_LABEL(LAKKA_SERVICES), @@ -2555,6 +2562,9 @@ enum msg_hash_enums #define MENU_LABEL_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE 0xE0E1CD5BU +#define MENU_LABEL_PLAYLIST_MANAGER_RIGHT_THUMBNAIL_MODE 0x9F3BC635U +#define MENU_LABEL_PLAYLIST_MANAGER_LEFT_THUMBNAIL_MODE 0x6B80B382U + /* Menu settings */ #define MENU_LABEL_XMB_FONT 0x0ECA56CA2 diff --git a/playlist.c b/playlist.c index 3c2b9c6a24..ee55aa0f1b 100644 --- a/playlist.c +++ b/playlist.c @@ -43,10 +43,13 @@ struct content_playlist { bool modified; - enum playlist_label_display_mode label_display_mode; size_t size; size_t cap; + enum playlist_label_display_mode label_display_mode; + enum playlist_thumbnail_mode right_thumbnail_mode; + enum playlist_thumbnail_mode left_thumbnail_mode; + char *conf_path; char *default_core_path; char *default_core_name; @@ -227,13 +230,6 @@ char *playlist_get_conf_path(playlist_t *playlist) return playlist->conf_path; } -enum playlist_label_display_mode playlist_get_label_display_mode(playlist_t *playlist) -{ - if (!playlist) - return LABEL_DISPLAY_MODE_DEFAULT; - return playlist->label_display_mode; -} - /** * playlist_get_index: * @playlist : Playlist handle. @@ -1217,24 +1213,25 @@ void playlist_write_file(playlist_t *playlist) playlist->entries[i].db_name ? playlist->entries[i].db_name : "" ); - /* Add default core assignment metadata lines + /* Add metadata lines * (we add these at the end of the file to prevent * breakage if the playlist is loaded with an older * version of RetroArch */ - if (!string_is_empty(playlist->default_core_path) && - !string_is_empty(playlist->default_core_name)) - { - filestream_printf(file, "default_core_path = \"%s\"\ndefault_core_name = \"%s\"\nlabel_display_mode = \"%d\"\n", - playlist->default_core_path, - playlist->default_core_name, - playlist->label_display_mode - ); - } + filestream_printf( + file, + "default_core_path = \"%s\"\n" + "default_core_name = \"%s\"\n" + "label_display_mode = \"%d\"\n" + "thumbnail_mode = \"%d|%d\"\n", + playlist->default_core_path ? "" : playlist->default_core_path, + playlist->default_core_name ? "" : playlist->default_core_name, + playlist->label_display_mode, + playlist->right_thumbnail_mode, playlist->left_thumbnail_mode); } else #endif { - char label_display_mode[4] = {0}; + char uint_str[4]; JSONContext context = {0}; context.writer = JSON_Writer_Create(NULL); context.file = file; @@ -1258,7 +1255,7 @@ void playlist_write_file(playlist_t *playlist) JSON_Writer_WriteColon(context.writer); JSON_Writer_WriteSpace(context.writer, 1); JSON_Writer_WriteString(context.writer, "1.2", - STRLEN_CONST("1.2"), JSON_UTF8); + STRLEN_CONST("1.3"), JSON_UTF8); JSON_Writer_WriteComma(context.writer); JSON_Writer_WriteNewLine(context.writer); @@ -1294,15 +1291,42 @@ void playlist_write_file(playlist_t *playlist) JSON_Writer_WriteComma(context.writer); JSON_Writer_WriteNewLine(context.writer); - snprintf(label_display_mode, sizeof(label_display_mode), "%u", playlist->label_display_mode); + uint_str[0] = '\0'; + snprintf(uint_str, sizeof(uint_str), "%u", playlist->label_display_mode); JSON_Writer_WriteSpace(context.writer, 2); JSON_Writer_WriteString(context.writer, "label_display_mode", STRLEN_CONST("label_display_mode"), JSON_UTF8); JSON_Writer_WriteColon(context.writer); JSON_Writer_WriteSpace(context.writer, 1); - JSON_Writer_WriteNumber(context.writer, label_display_mode, - strlen(label_display_mode), JSON_UTF8); + JSON_Writer_WriteNumber(context.writer, uint_str, + strlen(uint_str), JSON_UTF8); + JSON_Writer_WriteComma(context.writer); + JSON_Writer_WriteNewLine(context.writer); + + uint_str[0] = '\0'; + snprintf(uint_str, sizeof(uint_str), "%u", playlist->right_thumbnail_mode); + + JSON_Writer_WriteSpace(context.writer, 2); + JSON_Writer_WriteString(context.writer, "right_thumbnail_mode", + STRLEN_CONST("right_thumbnail_mode"), JSON_UTF8); + JSON_Writer_WriteColon(context.writer); + JSON_Writer_WriteSpace(context.writer, 1); + JSON_Writer_WriteNumber(context.writer, uint_str, + strlen(uint_str), JSON_UTF8); + JSON_Writer_WriteComma(context.writer); + JSON_Writer_WriteNewLine(context.writer); + + uint_str[0] = '\0'; + snprintf(uint_str, sizeof(uint_str), "%u", playlist->left_thumbnail_mode); + + JSON_Writer_WriteSpace(context.writer, 2); + JSON_Writer_WriteString(context.writer, "left_thumbnail_mode", + STRLEN_CONST("left_thumbnail_mode"), JSON_UTF8); + JSON_Writer_WriteColon(context.writer); + JSON_Writer_WriteSpace(context.writer, 1); + JSON_Writer_WriteNumber(context.writer, uint_str, + strlen(uint_str), JSON_UTF8); JSON_Writer_WriteComma(context.writer); JSON_Writer_WriteNewLine(context.writer); @@ -1892,6 +1916,10 @@ static JSON_Parser_HandlerResult JSONObjectMemberHandler(JSON_Parser parser, cha pCtx->current_meta_val = &pCtx->playlist->default_core_name; else if (string_is_equal(pValue, "label_display_mode")) pCtx->current_meta_int_val = (int*)&pCtx->playlist->label_display_mode; + else if (string_is_equal(pValue, "right_thumbnail_mode")) + pCtx->current_meta_int_val = (int*)&pCtx->playlist->right_thumbnail_mode; + else if (string_is_equal(pValue, "left_thumbnail_mode")) + pCtx->current_meta_int_val = (int*)&pCtx->playlist->left_thumbnail_mode; else { /* ignore unknown members */ @@ -2088,8 +2116,8 @@ json_cleanup: metadata_char = filestream_getc(file); } - /* Search backwards for the next three newlines */ - while (metadata_counter < 3) + /* Search backwards for the next four newlines */ + while (metadata_counter < 4) { filestream_seek(file, -2, SEEK_CUR); if (filestream_error(file)) @@ -2128,19 +2156,57 @@ json_cleanup: metadata_line, STRLEN_CONST("label_display_mode")) == 0) { - char *start = NULL; - start = strchr(metadata_line, '\"'); + unsigned display_mode; + char display_mode_str[4] = {0}; - if (start) + get_old_format_metadata_value( + metadata_line, display_mode_str, sizeof(display_mode_str)); + + display_mode = string_to_unsigned(display_mode_str); + + if (display_mode <= LABEL_DISPLAY_MODE_KEEP_REGION_AND_DISC_INDEX) + playlist->label_display_mode = (enum playlist_label_display_mode)display_mode; + } + + /* > Get thumbnail modes */ + if (!filestream_gets(file, metadata_line, sizeof(metadata_line))) + goto end; + + if (strncmp("thumbnail_mode", + metadata_line, + STRLEN_CONST("thumbnail_mode")) == 0) + { + char thumbnail_mode_str[8] = {0}; + struct string_list *thumbnail_modes = NULL; + + get_old_format_metadata_value( + metadata_line, thumbnail_mode_str, sizeof(thumbnail_mode_str)); + + thumbnail_modes = string_split(thumbnail_mode_str, "|"); + + if (thumbnail_modes) { - start++; + if (thumbnail_modes->size == 2) + { + unsigned thumbnail_mode; - if (*start >= '0' && *start <= '9') - playlist->label_display_mode = (enum playlist_label_display_mode)(*start - '0'); + /* Right thumbnail mode */ + thumbnail_mode = string_to_unsigned(thumbnail_modes->elems[0].data); + if (thumbnail_mode <= PLAYLIST_THUMBNAIL_MODE_BOXARTS) + playlist->right_thumbnail_mode = (enum playlist_thumbnail_mode)thumbnail_mode; + + /* Left thumbnail mode */ + thumbnail_mode = string_to_unsigned(thumbnail_modes->elems[1].data); + if (thumbnail_mode <= PLAYLIST_THUMBNAIL_MODE_BOXARTS) + playlist->left_thumbnail_mode = (enum playlist_thumbnail_mode)thumbnail_mode; + } + + string_list_free(thumbnail_modes); } } - /* > Populate playlist fields, if required */ + /* > Populate default core path/name, if required + * (if one is empty, the other should be ignored) */ if (!string_is_empty(default_core_path) && !string_is_empty(default_core_name)) { @@ -2245,14 +2311,16 @@ playlist_t *playlist_init(const char *path, size_t size) return NULL; } - playlist->modified = false; - playlist->size = 0; - playlist->cap = size; - playlist->conf_path = strdup(path); - playlist->default_core_name = NULL; - playlist->default_core_path = NULL; - playlist->entries = entries; - playlist->label_display_mode = LABEL_DISPLAY_MODE_DEFAULT; + playlist->modified = false; + playlist->size = 0; + playlist->cap = size; + playlist->conf_path = strdup(path); + playlist->default_core_name = NULL; + playlist->default_core_path = NULL; + playlist->entries = entries; + playlist->label_display_mode = LABEL_DISPLAY_MODE_DEFAULT; + playlist->right_thumbnail_mode = PLAYLIST_THUMBNAIL_MODE_DEFAULT; + playlist->left_thumbnail_mode = PLAYLIST_THUMBNAIL_MODE_DEFAULT; playlist_read_file(playlist, path); @@ -2439,6 +2507,28 @@ char *playlist_get_default_core_name(playlist_t *playlist) return playlist->default_core_name; } +enum playlist_label_display_mode playlist_get_label_display_mode(playlist_t *playlist) +{ + if (!playlist) + return LABEL_DISPLAY_MODE_DEFAULT; + return playlist->label_display_mode; +} + +enum playlist_thumbnail_mode playlist_get_thumbnail_mode( + playlist_t *playlist, enum playlist_thumbnail_id thumbnail_id) +{ + if (!playlist) + return PLAYLIST_THUMBNAIL_MODE_DEFAULT; + + if (thumbnail_id == PLAYLIST_THUMBNAIL_RIGHT) + return playlist->right_thumbnail_mode; + else if (thumbnail_id == PLAYLIST_THUMBNAIL_LEFT) + return playlist->left_thumbnail_mode; + + /* Fallback */ + return PLAYLIST_THUMBNAIL_MODE_DEFAULT; +} + void playlist_set_default_core_path(playlist_t *playlist, const char *core_path) { char real_core_path[PATH_MAX_LENGTH]; @@ -2489,3 +2579,21 @@ void playlist_set_label_display_mode(playlist_t *playlist, enum playlist_label_d playlist->modified = true; } } + +void playlist_set_thumbnail_mode( + playlist_t *playlist, enum playlist_thumbnail_id thumbnail_id, enum playlist_thumbnail_mode thumbnail_mode) +{ + if (!playlist) + return; + + if (thumbnail_id == PLAYLIST_THUMBNAIL_RIGHT) + { + playlist->right_thumbnail_mode = thumbnail_mode; + playlist->modified = true; + } + else if (thumbnail_id == PLAYLIST_THUMBNAIL_LEFT) + { + playlist->left_thumbnail_mode = thumbnail_mode; + playlist->modified = true; + } +} diff --git a/playlist.h b/playlist.h index d8e47b8c3b..1d9509b0c0 100644 --- a/playlist.h +++ b/playlist.h @@ -40,8 +40,8 @@ enum playlist_runtime_status enum playlist_file_mode { - PLAYLIST_LOAD, - PLAYLIST_SAVE + PLAYLIST_LOAD = 0, + PLAYLIST_SAVE }; enum playlist_label_display_mode @@ -55,6 +55,24 @@ enum playlist_label_display_mode LABEL_DISPLAY_MODE_KEEP_REGION_AND_DISC_INDEX }; +enum playlist_thumbnail_mode +{ + PLAYLIST_THUMBNAIL_MODE_DEFAULT = 0, + PLAYLIST_THUMBNAIL_MODE_OFF, + PLAYLIST_THUMBNAIL_MODE_SCREENSHOTS, + PLAYLIST_THUMBNAIL_MODE_TITLE_SCREENS, + PLAYLIST_THUMBNAIL_MODE_BOXARTS +}; + +/* Note: We already have a left/right enum defined + * in menu_thumbnail_path.h - but we can't include + * menu code here, so have to make a 'duplicate'... */ +enum playlist_thumbnail_id +{ + PLAYLIST_THUMBNAIL_RIGHT = 0, + PLAYLIST_THUMBNAIL_LEFT +}; + struct playlist_entry { char *path; @@ -237,10 +255,14 @@ void playlist_get_db_name(playlist_t *playlist, size_t idx, char *playlist_get_default_core_path(playlist_t *playlist); char *playlist_get_default_core_name(playlist_t *playlist); enum playlist_label_display_mode playlist_get_label_display_mode(playlist_t *playlist); +enum playlist_thumbnail_mode playlist_get_thumbnail_mode( + playlist_t *playlist, enum playlist_thumbnail_id thumbnail_id); void playlist_set_default_core_path(playlist_t *playlist, const char *core_path); void playlist_set_default_core_name(playlist_t *playlist, const char *core_name); void playlist_set_label_display_mode(playlist_t *playlist, enum playlist_label_display_mode label_display_mode); +void playlist_set_thumbnail_mode( + playlist_t *playlist, enum playlist_thumbnail_id thumbnail_id, enum playlist_thumbnail_mode thumbnail_mode); RETRO_END_DECLS