Refactor menu_entries

This commit is contained in:
twinaphex 2015-09-06 02:56:57 +02:00
parent 8405f76ff3
commit f091cb455e
5 changed files with 70 additions and 43 deletions

View File

@ -131,7 +131,6 @@ bool menu_animation_is_active(struct menu_animation_t *anim);
void *menu_animation_init(void);
#ifdef __cplusplus
}
#endif

View File

@ -1492,15 +1492,10 @@ static int deferred_push_video_shader_parameters_common(
}
#endif
static void menu_displaylist_realloc_settings(menu_entries_t *entries, unsigned flags)
static void menu_displaylist_realloc_settings(struct menu_entries_t *entries, unsigned flags)
{
if (!entries)
return;
if (entries->list_settings)
menu_setting_free(entries->list_settings);
entries->list_settings = menu_setting_new(flags);
menu_entries_free_list(entries);
menu_entries_new_list(entries, flags);
}
static int menu_setting_set_flags(rarch_setting_t *setting)
@ -1535,7 +1530,7 @@ static int menu_displaylist_parse_settings(menu_handle_t *menu,
rarch_setting_t *setting = NULL;
settings_t *settings = config_get_ptr();
menu_displaylist_realloc_settings(&menu->entries, setting_flags);
menu_displaylist_realloc_settings(menu->entries, setting_flags);
setting = menu_setting_find(info->label);
@ -1599,7 +1594,7 @@ static int menu_displaylist_parse_settings_in_subgroup(menu_displaylist_info_t *
}
}
menu_displaylist_realloc_settings(&menu->entries, SL_FLAG_ALL_SETTINGS);
menu_displaylist_realloc_settings(menu->entries, SL_FLAG_ALL_SETTINGS);
info->setting = menu_setting_find(elem0);
@ -2562,7 +2557,7 @@ int menu_displaylist_push_list(menu_displaylist_info_t *info, unsigned type)
#endif
break;
case DISPLAYLIST_SETTINGS_ALL:
menu_displaylist_realloc_settings(&menu->entries, SL_FLAG_ALL_SETTINGS);
menu_displaylist_realloc_settings(menu->entries, SL_FLAG_ALL_SETTINGS);
setting = menu_setting_find(menu_hash_to_str(MENU_LABEL_VALUE_DRIVER_SETTINGS));

View File

@ -101,7 +101,7 @@ typedef struct
menu_display_t display;
/* Menu entries */
menu_entries_t entries;
struct menu_entries_t *entries;
bool load_no_content;

View File

@ -18,18 +18,30 @@
#include "../general.h"
static menu_entries_t *menu_entries_get_ptr(void)
typedef struct menu_entries
{
/* Flagged when menu entries need to be refreshed */
bool need_refresh;
bool nonblocking_refresh;
size_t begin;
menu_list_t *menu_list;
rarch_setting_t *list_settings;
menu_navigation_t navigation;
} menu_entries_t;
static struct menu_entries *menu_entries_get_ptr(void)
{
menu_handle_t *menu = menu_driver_get_ptr();
if (!menu)
return NULL;
return &menu->entries;
return (struct menu_entries*)menu->entries;
}
rarch_setting_t *menu_setting_get_ptr(void)
{
menu_entries_t *entries = menu_entries_get_ptr();
struct menu_entries *entries = menu_entries_get_ptr();
if (!entries)
return NULL;
@ -38,7 +50,7 @@ rarch_setting_t *menu_setting_get_ptr(void)
menu_list_t *menu_list_get_ptr(void)
{
menu_entries_t *entries = menu_entries_get_ptr();
struct menu_entries *entries = menu_entries_get_ptr();
if (!entries)
return NULL;
return entries->menu_list;
@ -46,7 +58,7 @@ menu_list_t *menu_list_get_ptr(void)
menu_navigation_t *menu_navigation_get_ptr(void)
{
menu_entries_t *entries = menu_entries_get_ptr();
struct menu_entries *entries = menu_entries_get_ptr();
if (!entries)
return NULL;
return &entries->navigation;
@ -55,7 +67,7 @@ menu_navigation_t *menu_navigation_get_ptr(void)
/* Sets the starting index of the menu entry list. */
void menu_entries_set_start(size_t i)
{
menu_entries_t *entries = menu_entries_get_ptr();
struct menu_entries *entries = menu_entries_get_ptr();
if (entries)
entries->begin = i;
@ -64,7 +76,7 @@ void menu_entries_set_start(size_t i)
/* Returns the starting index of the menu entry list. */
size_t menu_entries_get_start(void)
{
menu_entries_t *entries = menu_entries_get_ptr();
struct menu_entries *entries = menu_entries_get_ptr();
if (!entries)
return 0;
@ -75,7 +87,7 @@ size_t menu_entries_get_start(void)
/* Returns the last index (+1) of the menu entry list. */
size_t menu_entries_get_end(void)
{
menu_entries_t *entries = menu_entries_get_ptr();
struct menu_entries *entries = menu_entries_get_ptr();
return menu_list_get_size(entries->menu_list);
}
@ -86,7 +98,7 @@ void menu_entries_get(size_t i, menu_entry_t *entry)
const char *path = NULL;
const char *entry_label = NULL;
menu_file_list_cbs_t *cbs = NULL;
menu_entries_t *entries = menu_entries_get_ptr();
struct menu_entries *entries = menu_entries_get_ptr();
if (!entries || !entries->menu_list)
return;
@ -120,7 +132,7 @@ int menu_entries_get_title(char *s, size_t len)
const char *label = NULL;
unsigned menu_type = 0;
menu_file_list_cbs_t *cbs = NULL;
menu_entries_t *entries = menu_entries_get_ptr();
struct menu_entries *entries = menu_entries_get_ptr();
if (!entries->menu_list)
return -1;
@ -138,7 +150,7 @@ int menu_entries_get_title(char *s, size_t len)
* one level deep in the menu hierarchy). */
bool menu_entries_show_back(void)
{
menu_entries_t *entries = menu_entries_get_ptr();
struct menu_entries *entries = menu_entries_get_ptr();
if (!entries->menu_list)
return false;
@ -183,7 +195,7 @@ int menu_entries_get_core_title(char *s, size_t len)
bool menu_entries_needs_refresh(void)
{
menu_entries_t *entries = menu_entries_get_ptr();
struct menu_entries *entries = menu_entries_get_ptr();
if (!entries || entries->nonblocking_refresh)
return false;
@ -194,7 +206,7 @@ bool menu_entries_needs_refresh(void)
void menu_entries_set_refresh(bool nonblocking)
{
menu_entries_t *entries = menu_entries_get_ptr();
struct menu_entries *entries = menu_entries_get_ptr();
if (entries)
{
if (nonblocking)
@ -206,7 +218,7 @@ void menu_entries_set_refresh(bool nonblocking)
void menu_entries_unset_refresh(bool nonblocking)
{
menu_entries_t *entries = menu_entries_get_ptr();
struct menu_entries *entries = menu_entries_get_ptr();
if (entries)
{
if (nonblocking)
@ -218,22 +230,34 @@ void menu_entries_unset_refresh(bool nonblocking)
bool menu_entries_init(void *data)
{
menu_entries_t *entries = NULL;
struct menu_entries *entries = NULL;
menu_handle_t *menu = (menu_handle_t*)data;
if (!menu)
return false;
goto error;
entries = &menu->entries;
entries = (struct menu_entries*)calloc(1, sizeof(*entries));
if (!entries)
goto error;
menu->entries = (void*)entries;
if (!(entries->menu_list = (menu_list_t*)menu_list_new()))
return false;
goto error;
return true;
error:
if (entries)
free(entries);
if (menu)
menu->entries = NULL;
return false;
}
void menu_entries_free(void)
{
menu_entries_t *entries = menu_entries_get_ptr();
struct menu_entries *entries = menu_entries_get_ptr();
if (!entries)
return;
@ -244,3 +268,18 @@ void menu_entries_free(void)
menu_list_free(entries->menu_list);
entries->menu_list = NULL;
}
void menu_entries_free_list(struct menu_entries_t *data)
{
struct menu_entries *entries = (struct menu_entries*)data;
if (entries && entries->list_settings)
menu_setting_free(entries->list_settings);
}
void menu_entries_new_list(struct menu_entries_t *data, unsigned flags)
{
struct menu_entries *entries = (struct menu_entries*)data;
if (!entries)
return;
entries->list_settings = menu_setting_new(flags);
}

View File

@ -30,17 +30,7 @@
extern "C" {
#endif
typedef struct menu_entries
{
/* Flagged when menu entries need to be refreshed */
bool need_refresh;
bool nonblocking_refresh;
size_t begin;
menu_list_t *menu_list;
rarch_setting_t *list_settings;
menu_navigation_t navigation;
} menu_entries_t;
struct menu_entries_t;
void menu_entries_set_start(size_t i);
@ -70,6 +60,10 @@ bool menu_entries_init(void *data);
void menu_entries_free(void);
void menu_entries_free_list(struct menu_entries_t *data);
void menu_entries_new_list(struct menu_entries_t *data, unsigned flags);
#ifdef __cplusplus
}
#endif