Clean up menu_navigation

This commit is contained in:
twinaphex 2014-04-13 23:41:47 +02:00
parent 982c8e87a3
commit 9bc6e99104
6 changed files with 80 additions and 28 deletions

View File

@ -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;

View File

@ -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",
};

View File

@ -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",
};

View File

@ -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",
};

View File

@ -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",
};

View File

@ -20,59 +20,52 @@
#include <string.h>
#include <limits.h>
#include <ctype.h>
#ifdef HAVE_RMENU_XUI
#include <xui.h>
#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);
}