1
0
mirror of https://github.com/libretro/RetroArch synced 2024-07-03 08:48:42 +00:00

Enable per-playlist thumbnail selection

This commit is contained in:
jdgleaver 2019-08-15 18:04:24 +01:00
parent 3bc5c15526
commit 3da96deec3
25 changed files with 900 additions and 185 deletions

View File

@ -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,

View File

@ -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"

View File

@ -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

View File

@ -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);
}

View File

@ -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);

View File

@ -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;
}

View File

@ -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
{

View File

@ -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;

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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;

View File

@ -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;

View File

@ -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);

View File

@ -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,

View File

@ -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),

View File

@ -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,

View File

@ -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,

View File

@ -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 */

View File

@ -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 */

View File

@ -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

View File

@ -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;
}
}

View File

@ -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