From bd66d9796f6fc0e7616517081f946509109be3d0 Mon Sep 17 00:00:00 2001 From: Jay McCarthy Date: Thu, 14 May 2015 16:18:32 -0400 Subject: [PATCH] change menu_entries to my wish list of functionality --- menu/drivers/glui.c | 2 +- menu/drivers/rgui.c | 2 +- menu/drivers/xmb.c | 2 +- menu/menu_entry.c | 70 +++++++++++++++++++++++++++--- menu/menu_entry.h | 9 +++- ui/drivers/cocoa/cocoa_common.h | 1 - ui/drivers/cocoa/cocoatouch_menu.m | 60 +++---------------------- ui/drivers/ui_cocoatouch.m | 12 +---- 8 files changed, 82 insertions(+), 76 deletions(-) diff --git a/menu/drivers/glui.c b/menu/drivers/glui.c index 2b86ba3513..7967e771db 100644 --- a/menu/drivers/glui.c +++ b/menu/drivers/glui.c @@ -392,7 +392,7 @@ static void glui_frame(void) if (settings->menu.core_enable) { - get_core_title(title_msg, sizeof(title_msg)); + menu_entries_get_core_title(title_msg, sizeof(title_msg)); glui_blit_line(glui->margin, global->video_data.height - glui->line_height, title_msg, diff --git a/menu/drivers/rgui.c b/menu/drivers/rgui.c index 46083311f9..e7546e65d3 100644 --- a/menu/drivers/rgui.c +++ b/menu/drivers/rgui.c @@ -426,7 +426,7 @@ static void rgui_render(void) if (settings->menu.core_enable) { - get_core_title(title_msg, sizeof(title_msg)); + menu_entries_get_core_title(title_msg, sizeof(title_msg)); blit_line(menu, RGUI_TERM_START_X, (RGUI_TERM_HEIGHT * FONT_HEIGHT_STRIDE) + diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 94ca097e1e..5fe2615e49 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -1215,7 +1215,7 @@ static void xmb_frame(void) if (settings->menu.core_enable) { - get_core_title(title_msg, sizeof(title_msg)); + menu_entries_get_core_title(title_msg, sizeof(title_msg)); xmb_draw_text(menu, xmb, title_msg, xmb->margins.title.left, global->video_data.height - xmb->margins.title.bottom, 1, 1, TEXT_ALIGN_LEFT); } diff --git a/menu/menu_entry.c b/menu/menu_entry.c index 146b8dd65a..833fa892fd 100644 --- a/menu/menu_entry.c +++ b/menu/menu_entry.c @@ -20,8 +20,64 @@ #include "menu_setting.h" #include "menu_input.h" #include "../settings.h" +#include "drivers/shared.h" -void get_core_title(char *title_msg, size_t title_msg_len) +size_t menu_entries_get_start() +{ + menu_handle_t *menu = menu_driver_get_ptr(); + + if (!menu) + return 0; + + return menu->begin; +} + +size_t menu_entries_get_end() +{ + menu_handle_t *menu = menu_driver_get_ptr(); + + if (!menu) + return 0; + + return menu_list_get_size(menu->menu_list); +} + +void menu_entries_get_title(char *title, size_t title_len) +{ + const char *dir = NULL; + const char *label = NULL; + unsigned menu_type = 0; + menu_handle_t *menu = menu_driver_get_ptr(); + + if (!menu) + return; + + menu_list_get_last_stack(menu->menu_list, &dir, &label, &menu_type); + get_title(label, dir, menu_type, title, title_len); + return; +} + +uint32_t menu_entries_show_back() +{ + menu_handle_t *menu = menu_driver_get_ptr(); + + if (!menu) + return false; + + return (menu_list_get_stack_size(menu->menu_list) > 1); +} + +void menu_entries_select_back() +{ + menu_list_t *menu_list = menu_list_get_ptr(); + if (!menu_list) + return; + + menu_apply_deferred_settings(); + menu_list_pop_stack(menu_list); +} + +void menu_entries_get_core_title(char *title_msg, size_t title_msg_len) { global_t *global = global_get_ptr(); const char *core_name = global->menu.info.library_name; @@ -306,8 +362,10 @@ int menu_entry_get_current_id(bool use_representation) return -1; } -/* Returns true if the menu should reload */ -uint32_t menu_entry_select(uint32_t i) +// JM: In the cases where this used to return true, it should actually +// arrange for menu_entries_* to start returning new things AND ensure +// that ui_companion_cocoatouch_notify_list_pushed is called. +void menu_entry_select(uint32_t i) { menu_entry_t entry; menu_file_list_cbs_t *cbs = NULL; @@ -322,14 +380,14 @@ uint32_t menu_entry_select(uint32_t i) menu_list_get_actiondata_at_offset(menu_list->selection_buf, i); if (setting_is_of_path_type(setting)) - return false; + return; if (setting_is_of_general_type(setting)) { nav->selection_ptr = i; if (cbs && cbs->action_ok) cbs->action_ok(entry.path, entry.label, entry.type, i); - return false; + return; } nav->selection_ptr = i; @@ -344,7 +402,7 @@ uint32_t menu_entry_select(uint32_t i) menu_list_push(menu_list->menu_stack, "", "info_screen", 0, i); } - return true; + return; } int menu_entry_iterate(unsigned action) diff --git a/menu/menu_entry.h b/menu/menu_entry.h index 3d7c9d6e56..a74201fd78 100644 --- a/menu/menu_entry.h +++ b/menu/menu_entry.h @@ -47,7 +47,12 @@ typedef struct menu_entry unsigned spacing; } menu_entry_t; -void get_core_title(char *title_msg, size_t title_msg_len); +size_t menu_entries_get_start(); +size_t menu_entries_get_end(); +void menu_entries_get_title(char *title, size_t title_len); +uint32_t menu_entries_show_back(); +void menu_entries_select_back(); +void menu_entries_get_core_title(char *title_msg, size_t title_msg_len); rarch_setting_t *menu_entry_get_setting(uint32_t i); @@ -104,7 +109,7 @@ void menu_entry_get(menu_entry_t *entry, size_t i, int menu_entry_iterate(unsigned action); -uint32_t menu_entry_select(uint32_t i); +void menu_entry_select(uint32_t i); int menu_entry_action(menu_entry_t *entry, unsigned i, unsigned action); diff --git a/ui/drivers/cocoa/cocoa_common.h b/ui/drivers/cocoa/cocoa_common.h index 114f966333..9daedc16ef 100644 --- a/ui/drivers/cocoa/cocoa_common.h +++ b/ui/drivers/cocoa/cocoa_common.h @@ -43,7 +43,6 @@ - (id)initWithStyle:(UITableViewStyle)style; - (id)itemForIndexPath:(NSIndexPath*)indexPath; -- (void)menuRefresh; @end diff --git a/ui/drivers/cocoa/cocoatouch_menu.m b/ui/drivers/cocoa/cocoatouch_menu.m index 1d886fd530..dcc4cec9b9 100644 --- a/ui/drivers/cocoa/cocoatouch_menu.m +++ b/ui/drivers/cocoa/cocoatouch_menu.m @@ -25,12 +25,6 @@ #include "../../../input/input_keymaps.h" #include "../../../input/drivers/cocoa_input.h" -#include "../../../menu/menu_displaylist.h" -#include "../../../menu/menu_navigation.h" -#include "../../../menu/menu_list.h" -#include "../../../menu/menu_setting.h" -#include "../../../menu/drivers/shared.h" - #include "../../../menu/menu_entry.h" // Menu Support @@ -123,8 +117,6 @@ static void RunActionSheet(const char* title, const struct string_list* items, result.selectionStyle = UITableViewCellSelectionStyleNone; result.textLabel.text = BOXSTRING(label); - if (buffer[0] == '\0') - strlcpy(buffer, "", sizeof(buffer)); if (label[0] == '\0') strlcpy(buffer, "N/A", sizeof(buffer)); result.detailTextLabel.text = BOXSTRING(buffer); @@ -641,10 +633,6 @@ didSelectRowAtIndexPath:(NSIndexPath *)indexPath [[self tableView] reloadData]; } -- (void)menuRefresh -{ -} - @end @interface RAMainMenu : RAMenuBase @@ -670,32 +658,24 @@ didSelectRowAtIndexPath:(NSIndexPath *)indexPath char title[256], title_msg[256]; NSMutableArray *everything; RAMainMenu* __weak weakSelf; - const char *dir = NULL; - const char *label = NULL; - unsigned menu_type = 0; - menu_handle_t *menu = menu_driver_get_ptr(); - - if (!menu) - return; everything = [NSMutableArray array]; - get_core_title(title_msg, sizeof(title_msg)); + menu_entries_get_core_title(title_msg, sizeof(title_msg)); self.title = BOXSTRING(title_msg); - menu_list_get_last_stack(menu->menu_list, &dir, &label, &menu_type); - get_title(label, dir, menu_type, title, sizeof(title)); + menu_entries_get_title(title, sizeof(title)); [everything addObject:BOXSTRING(title)]; - end = menu_list_get_size(menu->menu_list); - for (i = menu->begin; i < end; i++) + end = menu_entries_get_end(); + for (i = menu_entries_get_start(); i < end; i++) [everything addObject:[self make_menu_item_for_entry: i]]; self.sections = [NSMutableArray array]; [self.sections addObject:everything]; weakSelf = self; - if (menu_list_get_stack_size(menu->menu_list) > 1) + if (menu_entries_show_back()) [self set_leftbutton:BOXSTRING("Back") target:weakSelf action:@selector(menuBack)]; @@ -703,9 +683,6 @@ didSelectRowAtIndexPath:(NSIndexPath *)indexPath [self set_rightbutton:BOXSTRING("Switch") target:[RetroArch_iOS get] action:@selector(showGameView)]; - - if ( menu->message_contents[0] != '\0' ) - apple_display_alert(menu->message_contents, NULL); } - (void) set_leftbutton:(NSString *)title target:(id)target action:(SEL)action @@ -763,35 +740,12 @@ didSelectRowAtIndexPath:(NSIndexPath *)indexPath - (void)menuSelect: (uint32_t) i { - if (menu_entry_select(i)) - { - [self menuRefresh]; - [self reloadData]; - } -} - -- (void)menuRefresh -{ - menu_handle_t *menu = menu_driver_get_ptr(); - menu_list_t *menu_list = menu_list_get_ptr(); - if (!menu || !menu_list) - return; - if (!menu->need_refresh) - return; - - menu_displaylist_push(menu_list->selection_buf, menu_list->menu_stack); + menu_entry_select(i); } - (void)menuBack { - menu_list_t *menu_list = menu_list_get_ptr(); - if (!menu_list) - return; - - menu_apply_deferred_settings(); - menu_list_pop_stack(menu_list); - [self menuRefresh]; - [self reloadData]; + menu_entries_select_back(); } @end diff --git a/ui/drivers/ui_cocoatouch.m b/ui/drivers/ui_cocoatouch.m index fd8070dd10..d9d55fb06e 100644 --- a/ui/drivers/ui_cocoatouch.m +++ b/ui/drivers/ui_cocoatouch.m @@ -407,7 +407,7 @@ enum - (void)mainMenuRefresh { - [self.mainmenu menuRefresh]; + [self.mainmenu reloadData]; } @end @@ -519,24 +519,14 @@ static void ui_companion_cocoatouch_event_command(void *data, static void ui_companion_cocoatouch_notify_list_pushed(void *data, file_list_t *list, file_list_t *menu_list) { -#if 0 (void)data; (void)list; (void)menu_list; RetroArch_iOS *ap = (RetroArch_iOS *)apple_platform; - RARCH_WARN("notify list pushed (this log entry is not printed)"); - - // JM: Ideally, RA would have set this, but I'm going to force it - // for testing, because my menu refresh relies on it. - menu_handle_t *menu = menu_driver_get_ptr(); - if (!menu) return; - menu->need_refresh = true; - if (ap) [ap mainMenuRefresh]; -#endif } const ui_companion_driver_t ui_companion_cocoatouch = {