From 9bc6e99104644cd229322551d23b6bd3455c5b7f Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 13 Apr 2014 23:41:47 +0200 Subject: [PATCH] Clean up menu_navigation --- driver.h | 7 +++++ frontend/menu/disp/lakka.c | 8 ++++++ frontend/menu/disp/rgui.c | 7 +++++ frontend/menu/disp/rmenu.c | 8 ++++++ frontend/menu/disp/rmenu_xui.cpp | 29 +++++++++++++++++++ frontend/menu/menu_navigation.c | 49 ++++++++++++++------------------ 6 files changed, 80 insertions(+), 28 deletions(-) diff --git a/driver.h b/driver.h index 2ac9a39f0f..a24a6d9082 100644 --- a/driver.h +++ b/driver.h @@ -494,6 +494,13 @@ typedef struct menu_ctx_driver void (*populate_entries)(void*, unsigned); void (*iterate)(void*, unsigned); int (*input_postprocess)(void *, uint64_t); + void (*navigation_clear)(void *); + void (*navigation_decrement)(void *); + void (*navigation_increment)(void *); + void (*navigation_set)(void *); + void (*navigation_set_last)(void *); + void (*navigation_descend_alphabet)(void *, size_t *); + void (*navigation_ascend_alphabet)(void *, size_t *); // Human readable string. const char *ident; diff --git a/frontend/menu/disp/lakka.c b/frontend/menu/disp/lakka.c index 6549febf62..416e9653d7 100644 --- a/frontend/menu/disp/lakka.c +++ b/frontend/menu/disp/lakka.c @@ -724,5 +724,13 @@ const menu_ctx_driver_t menu_ctx_lakka = { NULL, NULL, lakka_input_postprocess, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, "lakka", }; diff --git a/frontend/menu/disp/rgui.c b/frontend/menu/disp/rgui.c index 8d4667075f..4ddbe2836f 100644 --- a/frontend/menu/disp/rgui.c +++ b/frontend/menu/disp/rgui.c @@ -617,5 +617,12 @@ const menu_ctx_driver_t menu_ctx_rgui = { NULL, NULL, rgui_input_postprocess, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, "rgui", }; diff --git a/frontend/menu/disp/rmenu.c b/frontend/menu/disp/rmenu.c index d048925777..cc85444287 100644 --- a/frontend/menu/disp/rmenu.c +++ b/frontend/menu/disp/rmenu.c @@ -477,5 +477,13 @@ const menu_ctx_driver_t menu_ctx_rmenu = { NULL, NULL, rmenu_input_postprocess, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, "rmenu", }; diff --git a/frontend/menu/disp/rmenu_xui.cpp b/frontend/menu/disp/rmenu_xui.cpp index e25124e4af..4578ca360d 100644 --- a/frontend/menu/disp/rmenu_xui.cpp +++ b/frontend/menu/disp/rmenu_xui.cpp @@ -652,6 +652,28 @@ static void rmenu_xui_populate_entries(void *data, unsigned i) XuiListSetCurSelVisible(m_menulist, rgui->selection_ptr); } +static void rmenu_xui_navigation_clear(void *data) +{ + rgui_handle_t *rgui = (rgui_handle_t*)data; + XuiListSetCurSelVisible(m_menulist, rgui->selection_ptr); +} + +static void rmenu_xui_navigation_set_visible(void *data) +{ + rgui_handle_t *rgui = (rgui_handle_t*)data; + XuiListSetCurSelVisible(m_menulist, rgui->selection_ptr); +} + +static void rmenu_xui_navigation_alphabet(void *data, size_t *ptr_out) +{ + XuiListSetCurSelVisible(m_menulist, *ptr_out); +} + +static void rmenu_xui_navigation_alphabet(void *data, size_t *ptr_out) +{ + XuiListSetCurSelVisible(m_menulist, *ptr_out); +} + const menu_ctx_driver_t menu_ctx_rmenu_xui = { NULL, rmenu_xui_render_messagebox, @@ -664,5 +686,12 @@ const menu_ctx_driver_t menu_ctx_rmenu_xui = { rmenu_xui_populate_entries, NULL, rmenu_xui_input_postprocess, + rmenu_xui_navigation_clear, + rmenu_xui_navigation_set_visible, + rmenu_xui_navigation_set_visible, + rmenu_xui_navigation_set_visible, + rmenu_xui_navigation_set_visible, + rmenu_xui_navigation_alphabet, + rmenu_xui_navigation_alphabet, "rmenu_xui", }; diff --git a/frontend/menu/menu_navigation.c b/frontend/menu/menu_navigation.c index 9bc83100d4..b3238c6baa 100644 --- a/frontend/menu/menu_navigation.c +++ b/frontend/menu/menu_navigation.c @@ -20,59 +20,52 @@ #include #include #include -#ifdef HAVE_RMENU_XUI -#include -#endif #include "menu_common.h" #include "menu_navigation.h" -#ifdef HAVE_RMENU_XUI -extern HXUIOBJ m_menulist; -#endif - void menu_clear_navigation(void *data) { rgui_handle_t *rgui = (rgui_handle_t*)data; rgui->selection_ptr = 0; -#ifdef HAVE_RMENU_XUI - XuiListSetCurSelVisible(m_menulist, rgui->selection_ptr); -#endif + + if (driver.menu_ctx && driver.menu_ctx->navigation_clear) + driver.menu_ctx->navigation_clear(rgui); } void menu_decrement_navigation(void *data) { rgui_handle_t *rgui = (rgui_handle_t*)data; rgui->selection_ptr--; -#ifdef HAVE_RMENU_XUI - XuiListSetCurSelVisible(m_menulist, rgui->selection_ptr); -#endif + + if (driver.menu_ctx && driver.menu_ctx->navigation_decrement) + driver.menu_ctx->navigation_decrement(rgui); } void menu_increment_navigation(void *data) { rgui_handle_t *rgui = (rgui_handle_t*)data; rgui->selection_ptr++; -#ifdef HAVE_RMENU_XUI - XuiListSetCurSelVisible(m_menulist, rgui->selection_ptr); -#endif + + if (driver.menu_ctx && driver.menu_ctx->navigation_increment) + driver.menu_ctx->navigation_increment(rgui); } void menu_set_navigation(void *data, size_t i) { rgui_handle_t *rgui = (rgui_handle_t*)data; rgui->selection_ptr = i; -#ifdef HAVE_RMENU_XUI - XuiListSetCurSelVisible(m_menulist, rgui->selection_ptr); -#endif + + if (driver.menu_ctx && driver.menu_ctx->navigation_set) + driver.menu_ctx->navigation_set(rgui); } void menu_set_navigation_last(void *data) { rgui_handle_t *rgui = (rgui_handle_t*)data; rgui->selection_ptr = rgui->selection_buf->size - 1; -#ifdef HAVE_RMENU_XUI - XuiListSetCurSelVisible(m_menulist, rgui->selection_ptr); -#endif + + if (driver.menu_ctx && driver.menu_ctx->navigation_set_last) + driver.menu_ctx->navigation_set_last(rgui); } void menu_descend_alphabet(void *data, size_t *ptr_out) @@ -87,9 +80,9 @@ void menu_descend_alphabet(void *data, size_t *ptr_out) while (i && rgui->scroll_indices[i - 1] >= ptr) i--; *ptr_out = rgui->scroll_indices[i - 1]; -#ifdef HAVE_RMENU_XUI - XuiListSetCurSelVisible(m_menulist, *ptr_out); -#endif + + if (driver.menu_ctx && driver.menu_ctx->navigation_descend_alphabet) + driver.menu_ctx->navigation_descend_alphabet(rgui, ptr_out); } void menu_ascend_alphabet(void *data, size_t *ptr_out) @@ -104,7 +97,7 @@ void menu_ascend_alphabet(void *data, size_t *ptr_out) while (i < rgui->scroll_indices_size - 1 && rgui->scroll_indices[i + 1] <= ptr) i++; *ptr_out = rgui->scroll_indices[i + 1]; -#ifdef HAVE_RMENU_XUI - XuiListSetCurSelVisible(m_menulist, *ptr_out); -#endif + + if (driver.menu_ctx && driver.menu_ctx->navigation_descend_alphabet) + driver.menu_ctx->navigation_descend_alphabet(rgui, ptr_out); }