diff --git a/menu/drivers/glui.c b/menu/drivers/glui.c index d0b5164b28..9edeab4073 100644 --- a/menu/drivers/glui.c +++ b/menu/drivers/glui.c @@ -22,6 +22,7 @@ #include #include "../menu.h" +#include "../menu_entry.h" #include "../menu_display.h" #include "../../runloop_data.h" @@ -310,8 +311,8 @@ static void glui_render_menu_list(runloop_t *runloop, entry_title_buf[PATH_MAX_LENGTH], type_str_buf[PATH_MAX_LENGTH]; bool selected = false; - menu_list_get_entry(&entry, i, NULL, true); - selected = menu_list_entry_is_currently_selected(&entry); + menu_entry_get(&entry, i, NULL, true); + selected = menu_entry_is_currently_selected(&entry); menu_animation_ticker_line(entry_title_buf, glui->ticker_limit, frame_count / 100, entry.path, selected); diff --git a/menu/drivers/rgui.c b/menu/drivers/rgui.c index 2096308000..a5e2dc8c33 100644 --- a/menu/drivers/rgui.c +++ b/menu/drivers/rgui.c @@ -22,6 +22,7 @@ #include #include "../menu.h" +#include "../menu_entry.h" #include "../menu_display.h" #include #include @@ -494,8 +495,8 @@ static void rgui_render(void) entry_title_buf[PATH_MAX_LENGTH], type_str_buf[PATH_MAX_LENGTH]; bool selected = false; - menu_list_get_entry(&entry, i, NULL, true); - selected = menu_list_entry_is_currently_selected(&entry); + menu_entry_get(&entry, i, NULL, true); + selected = menu_entry_is_currently_selected(&entry); if (i > (menu->navigation.selection_ptr + 100)) continue; diff --git a/menu/drivers/rmenu.c b/menu/drivers/rmenu.c index 02a3744dcd..973947ca37 100644 --- a/menu/drivers/rmenu.c +++ b/menu/drivers/rmenu.c @@ -22,6 +22,7 @@ #include #include "../menu_driver.h" +#include "../menu_entry.h" #include "../menu_input.h" #include "../menu.h" #include "../../general.h" @@ -235,8 +236,8 @@ static void rmenu_render(void) entry_title_buf[PATH_MAX_LENGTH], type_str_buf[PATH_MAX_LENGTH]; bool selected = false; - menu_list_get_entry(&entry, i, NULL, true); - selected = menu_list_entry_is_currently_selected(&entry); + menu_entry_get(&entry, i, NULL, true); + selected = menu_entry_is_currently_selected(&entry); menu_animation_ticker_line(entry_title_buf, RMENU_TERM_WIDTH - (entry.spacing + 1 + 2), frame_count / 15, entry.path, selected); diff --git a/menu/drivers/rmenu_xui.cpp b/menu/drivers/rmenu_xui.cpp index 8296470a6c..57cc5f1b31 100644 --- a/menu/drivers/rmenu_xui.cpp +++ b/menu/drivers/rmenu_xui.cpp @@ -28,6 +28,7 @@ #include "../menu_driver.h" #include "../menu.h" +#include "../menu_entry.h" #include "../menu_list.h" #include "../menu_input.h" @@ -606,7 +607,7 @@ static void rmenu_xui_render(void) menu_entry_t entry; wchar_t msg_left[PATH_MAX_LENGTH], msg_right[PATH_MAX_LENGTH]; - menu_list_get_entry(&entry, i, NULL, true); + menu_entry_get(&entry, i, NULL, true); mbstowcs(msg_left, entry.path, sizeof(msg_left) / sizeof(wchar_t)); mbstowcs(msg_right, entry.value, sizeof(msg_right) / sizeof(wchar_t)); diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 33884cd405..48ebb42e1c 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -21,6 +21,7 @@ #include #include "../menu.h" +#include "../menu_entry.h" #include "../menu_animation.h" #include "../menu_display.h" @@ -1020,7 +1021,7 @@ static void xmb_draw_items(xmb_handle_t *xmb, gl_t *gl, icon_y > global->video_data.height + xmb->icon.size) continue; - menu_list_get_entry(&entry, i, list, true); + menu_entry_get(&entry, i, list, true); if (entry.type == MENU_FILE_CONTENTLIST_ENTRY) strlcpy(entry.path, path_basename(entry.path), sizeof(entry.path)); diff --git a/menu/menu_entries_cbs_iterate.c b/menu/menu_entries_cbs_iterate.c index fdd4522881..6035005b4a 100644 --- a/menu/menu_entries_cbs_iterate.c +++ b/menu/menu_entries_cbs_iterate.c @@ -16,6 +16,7 @@ #include #include #include "menu.h" +#include "menu_entry.h" #include "menu_entries_cbs.h" #include "menu_setting.h" #include "menu_input.h" @@ -489,7 +490,7 @@ static int action_iterate_switch(const char *label, unsigned action) if (!menu) return 0; - menu_list_get_entry(&entry, selected, NULL, false); + menu_entry_get(&entry, selected, NULL, false); cbs = (menu_file_list_cbs_t*)menu_list_get_actiondata_at_offset(menu_list->selection_buf, selected); @@ -566,7 +567,7 @@ static void action_iterate_post(int *ret, const char *label, unsigned action) menu_list_t *menu_list = menu_list_get_ptr(); size_t selected = menu_navigation_get_current_selection(); - menu_list_get_entry(&entry, selected, NULL, false); + menu_entry_get(&entry, selected, NULL, false); cbs = (menu_file_list_cbs_t*)menu_list_get_actiondata_at_offset(menu_list->selection_buf, selected); diff --git a/menu/menu_entry.c b/menu/menu_entry.c index 329a6e9e38..b4bdeaab0e 100644 --- a/menu/menu_entry.c +++ b/menu/menu_entry.c @@ -237,6 +237,71 @@ float menu_entry_num_max(uint32_t i) return setting->max; } +void menu_entry_get(menu_entry_t *entry, size_t i, + void *userdata, bool use_representation) +{ + const char *label = NULL; + const char *path = NULL; + const char *entry_label = NULL; + menu_file_list_cbs_t *cbs = NULL; + file_list_t *list = NULL; + menu_list_t *menu_list = menu_list_get_ptr(); + + if (!menu_list) + return; + + menu_list_get_last_stack(menu_list, NULL, &label, NULL); + + list = userdata ? (file_list_t*)userdata : menu_list->selection_buf; + + if (!list) + return; + + menu_list_get_at_offset(list, i, &path, &entry_label, &entry->type); + + cbs = (menu_file_list_cbs_t*)menu_list_get_actiondata_at_offset(list, i); + + if (cbs && cbs->action_get_representation && use_representation) + cbs->action_get_representation(list, + &entry->spacing, entry->type, i, label, + entry->value, sizeof(entry->value), + entry_label, path, + entry->path, sizeof(entry->path)); + + entry->id = i; + + if (path) + strlcpy(entry->path, path, sizeof(entry->path)); + if (entry_label) + strlcpy(entry->label, entry_label, sizeof(entry->label)); +} + +bool menu_entry_is_currently_selected(menu_entry_t *entry) +{ + menu_navigation_t *nav = menu_navigation_get_ptr(); + if (!entry || !nav) + return false; + return (entry->id == nav->selection_ptr); +} + +int menu_entry_get_current_id(bool use_representation) +{ + size_t i; + menu_list_t *menu_list = menu_list_get_ptr(); + size_t end = menu_list_get_size(menu_list); + + for (i = 0; i < end; i++) + { + menu_entry_t entry; + menu_entry_get(&entry, i, NULL, use_representation); + + if (menu_entry_is_currently_selected(&entry)) + return i; + } + + return -1; +} + /* Returns true if the menu should reload */ uint32_t menu_entry_select(uint32_t i) { @@ -247,7 +312,7 @@ uint32_t menu_entry_select(uint32_t i) rarch_setting_t *setting = menu_setting_find( menu_list->selection_buf->list[i].label); - menu_list_get_entry(&entry, i, NULL, false); + menu_entry_get(&entry, i, NULL, false); cbs = (menu_file_list_cbs_t*) menu_list_get_actiondata_at_offset(menu_list->selection_buf, i); diff --git a/menu/menu_entry.h b/menu/menu_entry.h index 775bbb9fc3..59b34831b2 100644 --- a/menu/menu_entry.h +++ b/menu/menu_entry.h @@ -37,6 +37,16 @@ enum menu_entry_type MENU_ENTRY_ENUM, }; +typedef struct menu_entry +{ + char path[PATH_MAX_LENGTH]; + char label[PATH_MAX_LENGTH]; + char value[PATH_MAX_LENGTH]; + unsigned id; + unsigned type; + unsigned spacing; +} menu_entry_t; + void get_core_title(char *title_msg, size_t title_msg_len); rarch_setting_t *menu_entry_get_setting(uint32_t i); @@ -85,6 +95,13 @@ float menu_entry_num_min(uint32_t i); float menu_entry_num_max(uint32_t i); +int menu_entry_get_current_id(bool use_representation); + +bool menu_entry_is_currently_selected(menu_entry_t *entry); + +void menu_entry_get(menu_entry_t *entry, size_t i, + void *userdata, bool use_representation); + uint32_t menu_entry_select(uint32_t i); #ifdef __cplusplus diff --git a/menu/menu_list.c b/menu/menu_list.c index 9cd45979a8..77f102613f 100644 --- a/menu/menu_list.c +++ b/menu/menu_list.c @@ -420,68 +420,3 @@ int menu_list_populate_generic(file_list_t *list, const char *path, return 0; } - -void menu_list_get_entry(menu_entry_t *entry, size_t i, void *userdata, - bool use_representation) -{ - const char *label = NULL; - const char *path = NULL; - const char *entry_label = NULL; - menu_file_list_cbs_t *cbs = NULL; - file_list_t *list = NULL; - menu_list_t *menu_list = menu_list_get_ptr(); - - if (!menu_list) - return; - - menu_list_get_last_stack(menu_list, NULL, &label, NULL); - - list = userdata ? (file_list_t*)userdata : menu_list->selection_buf; - - if (!list) - return; - - menu_list_get_at_offset(list, i, &path, &entry_label, &entry->type); - - cbs = (menu_file_list_cbs_t*)menu_list_get_actiondata_at_offset(list, i); - - if (cbs && cbs->action_get_representation && use_representation) - cbs->action_get_representation(list, - &entry->spacing, entry->type, i, label, - entry->value, sizeof(entry->value), - entry_label, path, - entry->path, sizeof(entry->path)); - - entry->id = i; - - if (path) - strlcpy(entry->path, path, sizeof(entry->path)); - if (entry_label) - strlcpy(entry->label, entry_label, sizeof(entry->label)); -} - -bool menu_list_entry_is_currently_selected(menu_entry_t *entry) -{ - menu_navigation_t *nav = menu_navigation_get_ptr(); - if (!entry || !nav) - return false; - return (entry->id == nav->selection_ptr); -} - -int menu_list_get_current_entry_id(bool use_representation) -{ - size_t i; - menu_list_t *menu_list = menu_list_get_ptr(); - size_t end = menu_list_get_size(menu_list); - - for (i = 0; i < end; i++) - { - menu_entry_t entry; - menu_list_get_entry(&entry, i, NULL, use_representation); - - if (menu_list_entry_is_currently_selected(&entry)) - return i; - } - - return -1; -} diff --git a/menu/menu_list.h b/menu/menu_list.h index 689d8cd810..f264617577 100644 --- a/menu/menu_list.h +++ b/menu/menu_list.h @@ -30,16 +30,6 @@ typedef struct menu_list file_list_t *selection_buf; } menu_list_t; -typedef struct menu_entry -{ - char path[PATH_MAX_LENGTH]; - char label[PATH_MAX_LENGTH]; - char value[PATH_MAX_LENGTH]; - unsigned id; - unsigned type; - unsigned spacing; -} menu_entry_t; - menu_list_t *menu_list_get_ptr(void); void menu_list_free(menu_list_t *menu_list); @@ -99,12 +89,6 @@ void menu_list_set_alt_at_offset(file_list_t *list, size_t idx, int menu_list_populate_generic(file_list_t *list, const char *path, const char *label, unsigned type); -void menu_list_get_entry(menu_entry_t *entry, size_t i, void *userdata, bool use_representation); - -int menu_list_get_current_entry_id(bool use_representation); - -bool menu_list_entry_is_currently_selected(menu_entry_t *entry); - #ifdef __cplusplus } #endif