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); void *menu_animation_init(void);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@ -1492,15 +1492,10 @@ static int deferred_push_video_shader_parameters_common(
} }
#endif #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) menu_entries_free_list(entries);
return; menu_entries_new_list(entries, flags);
if (entries->list_settings)
menu_setting_free(entries->list_settings);
entries->list_settings = menu_setting_new(flags);
} }
static int menu_setting_set_flags(rarch_setting_t *setting) 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; rarch_setting_t *setting = NULL;
settings_t *settings = config_get_ptr(); 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); 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); info->setting = menu_setting_find(elem0);
@ -2562,7 +2557,7 @@ int menu_displaylist_push_list(menu_displaylist_info_t *info, unsigned type)
#endif #endif
break; break;
case DISPLAYLIST_SETTINGS_ALL: 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)); 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_display_t display;
/* Menu entries */ /* Menu entries */
menu_entries_t entries; struct menu_entries_t *entries;
bool load_no_content; bool load_no_content;

View File

@ -18,18 +18,30 @@
#include "../general.h" #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(); menu_handle_t *menu = menu_driver_get_ptr();
if (!menu) if (!menu)
return NULL; return NULL;
return &menu->entries; return (struct menu_entries*)menu->entries;
} }
rarch_setting_t *menu_setting_get_ptr(void) 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) if (!entries)
return NULL; return NULL;
@ -38,7 +50,7 @@ rarch_setting_t *menu_setting_get_ptr(void)
menu_list_t *menu_list_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) if (!entries)
return NULL; return NULL;
return entries->menu_list; 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_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) if (!entries)
return NULL; return NULL;
return &entries->navigation; return &entries->navigation;
@ -55,7 +67,7 @@ menu_navigation_t *menu_navigation_get_ptr(void)
/* Sets the starting index of the menu entry list. */ /* Sets the starting index of the menu entry list. */
void menu_entries_set_start(size_t i) 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) if (entries)
entries->begin = i; entries->begin = i;
@ -64,7 +76,7 @@ void menu_entries_set_start(size_t i)
/* Returns the starting index of the menu entry list. */ /* Returns the starting index of the menu entry list. */
size_t menu_entries_get_start(void) 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) if (!entries)
return 0; return 0;
@ -75,7 +87,7 @@ size_t menu_entries_get_start(void)
/* Returns the last index (+1) of the menu entry list. */ /* Returns the last index (+1) of the menu entry list. */
size_t menu_entries_get_end(void) 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); 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 *path = NULL;
const char *entry_label = NULL; const char *entry_label = NULL;
menu_file_list_cbs_t *cbs = 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) if (!entries || !entries->menu_list)
return; return;
@ -120,7 +132,7 @@ int menu_entries_get_title(char *s, size_t len)
const char *label = NULL; const char *label = NULL;
unsigned menu_type = 0; unsigned menu_type = 0;
menu_file_list_cbs_t *cbs = 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->menu_list) if (!entries->menu_list)
return -1; return -1;
@ -138,7 +150,7 @@ int menu_entries_get_title(char *s, size_t len)
* one level deep in the menu hierarchy). */ * one level deep in the menu hierarchy). */
bool menu_entries_show_back(void) 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) if (!entries->menu_list)
return false; return false;
@ -183,7 +195,7 @@ int menu_entries_get_core_title(char *s, size_t len)
bool menu_entries_needs_refresh(void) 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) if (!entries || entries->nonblocking_refresh)
return false; return false;
@ -194,7 +206,7 @@ bool menu_entries_needs_refresh(void)
void menu_entries_set_refresh(bool nonblocking) 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 (entries)
{ {
if (nonblocking) if (nonblocking)
@ -206,7 +218,7 @@ void menu_entries_set_refresh(bool nonblocking)
void menu_entries_unset_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 (entries)
{ {
if (nonblocking) if (nonblocking)
@ -218,22 +230,34 @@ void menu_entries_unset_refresh(bool nonblocking)
bool menu_entries_init(void *data) bool menu_entries_init(void *data)
{ {
menu_entries_t *entries = NULL; struct menu_entries *entries = NULL;
menu_handle_t *menu = (menu_handle_t*)data; menu_handle_t *menu = (menu_handle_t*)data;
if (!menu) 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())) if (!(entries->menu_list = (menu_list_t*)menu_list_new()))
return false; goto error;
return true; return true;
error:
if (entries)
free(entries);
if (menu)
menu->entries = NULL;
return false;
} }
void menu_entries_free(void) void menu_entries_free(void)
{ {
menu_entries_t *entries = menu_entries_get_ptr(); struct menu_entries *entries = menu_entries_get_ptr();
if (!entries) if (!entries)
return; return;
@ -244,3 +268,18 @@ void menu_entries_free(void)
menu_list_free(entries->menu_list); menu_list_free(entries->menu_list);
entries->menu_list = NULL; 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" { extern "C" {
#endif #endif
typedef struct menu_entries struct menu_entries_t;
{
/* 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;
void menu_entries_set_start(size_t i); 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(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 #ifdef __cplusplus
} }
#endif #endif