mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-13 18:17:39 -04:00
convert the xobox menu to the new API so it can be used as an example for plugin devs
Includes some fixes in the api to handle this. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12907 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
14fea30548
commit
1f5ee2a366
3 changed files with 31 additions and 65 deletions
32
apps/menu.c
32
apps/menu.c
|
@ -142,6 +142,11 @@ static void menu_get_icon(int selected_item, void * data, ICON * icon)
|
||||||
int menu_icon = Icon_NOICON;
|
int menu_icon = Icon_NOICON;
|
||||||
selected_item = get_menu_selection(selected_item, menu);
|
selected_item = get_menu_selection(selected_item, menu);
|
||||||
|
|
||||||
|
if ((menu->flags&MENU_TYPE_MASK) == MT_RETURN_ID)
|
||||||
|
{
|
||||||
|
*icon = bitmap_icons_6x8[Icon_Menu_functioncall];
|
||||||
|
return;
|
||||||
|
}
|
||||||
menu = menu->submenus[selected_item];
|
menu = menu->submenus[selected_item];
|
||||||
if (menu->flags&MENU_HAS_DESC)
|
if (menu->flags&MENU_HAS_DESC)
|
||||||
menu_icon = menu->callback_and_desc->icon_id;
|
menu_icon = menu->callback_and_desc->icon_id;
|
||||||
|
@ -177,22 +182,27 @@ static void init_menu_lists(const struct menu_item_ex *menu,
|
||||||
struct gui_synclist *lists, int selected, bool callback)
|
struct gui_synclist *lists, int selected, bool callback)
|
||||||
{
|
{
|
||||||
int i, count = MENU_GET_COUNT(menu->flags);
|
int i, count = MENU_GET_COUNT(menu->flags);
|
||||||
|
int type = (menu->flags&MENU_TYPE_MASK);
|
||||||
menu_callback_type menu_callback = NULL;
|
menu_callback_type menu_callback = NULL;
|
||||||
ICON icon = NOICON;
|
ICON icon = NOICON;
|
||||||
current_subitems_count = 0;
|
current_subitems_count = 0;
|
||||||
|
|
||||||
if ((menu->flags&MENU_TYPE_MASK) == MT_OLD_MENU)
|
if (type == MT_OLD_MENU)
|
||||||
{
|
{
|
||||||
init_oldmenu(menu, lists, selected, callback);
|
init_oldmenu(menu, lists, selected, callback);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (type == MT_RETURN_ID)
|
||||||
|
get_menu_callback(menu, &menu_callback);
|
||||||
|
|
||||||
for (i=0; i<count; i++)
|
for (i=0; i<count; i++)
|
||||||
{
|
{
|
||||||
get_menu_callback(menu->submenus[i],&menu_callback);
|
if (type != MT_RETURN_ID)
|
||||||
|
get_menu_callback(menu->submenus[i],&menu_callback);
|
||||||
if (menu_callback)
|
if (menu_callback)
|
||||||
{
|
{
|
||||||
if (menu_callback(ACTION_REQUEST_MENUITEM,menu->submenus[i])
|
if (menu_callback(ACTION_REQUEST_MENUITEM,
|
||||||
|
type==MT_RETURN_ID ? (void*)(intptr_t)i: menu->submenus[i])
|
||||||
!= ACTION_EXIT_MENUITEM)
|
!= ACTION_EXIT_MENUITEM)
|
||||||
{
|
{
|
||||||
current_subitems[current_subitems_count] = i;
|
current_subitems[current_subitems_count] = i;
|
||||||
|
@ -524,13 +534,15 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected)
|
||||||
if (in_stringlist)
|
if (in_stringlist)
|
||||||
type = (menu->flags&MENU_TYPE_MASK);
|
type = (menu->flags&MENU_TYPE_MASK);
|
||||||
else
|
else
|
||||||
type = (temp->flags&MENU_TYPE_MASK);
|
|
||||||
get_menu_callback(temp, &menu_callback);
|
|
||||||
if (menu_callback)
|
|
||||||
{
|
{
|
||||||
action = menu_callback(ACTION_ENTER_MENUITEM,temp);
|
type = (temp->flags&MENU_TYPE_MASK);
|
||||||
if (action == ACTION_EXIT_MENUITEM)
|
get_menu_callback(temp, &menu_callback);
|
||||||
break;
|
if (menu_callback)
|
||||||
|
{
|
||||||
|
action = menu_callback(ACTION_ENTER_MENUITEM,temp);
|
||||||
|
if (action == ACTION_EXIT_MENUITEM)
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
|
|
|
@ -130,7 +130,7 @@ bool do_setting_from_menu(const struct menu_item_ex *temp);
|
||||||
static const struct menu_item_ex name = \
|
static const struct menu_item_ex name = \
|
||||||
{MT_RETURN_ID|MENU_HAS_DESC| \
|
{MT_RETURN_ID|MENU_HAS_DESC| \
|
||||||
MENU_ITEM_COUNT(sizeof( name##_)/sizeof(*name##_)), \
|
MENU_ITEM_COUNT(sizeof( name##_)/sizeof(*name##_)), \
|
||||||
{ .submenus = name##_},{.callback_and_desc = & name##__}};
|
{ .strings = name##_},{.callback_and_desc = & name##__}};
|
||||||
|
|
||||||
|
|
||||||
/* returns a value associated with the item */
|
/* returns a value associated with the item */
|
||||||
|
|
|
@ -716,60 +716,14 @@ static inline void move_board (void)
|
||||||
#define MENU_QUIT 1
|
#define MENU_QUIT 1
|
||||||
static int game_menu (void)
|
static int game_menu (void)
|
||||||
{
|
{
|
||||||
static char menu[MAIN_MENU_SIZE][15] = {
|
MENUITEM_STRINGLIST(menu, "XOBOX Menu", NULL, "Start New Game", "Quit");
|
||||||
"Start New Game",
|
int selection = 0;
|
||||||
"Quit"
|
rb->lcd_set_foreground (rb->global_settings->fg_color);
|
||||||
};
|
rb->lcd_set_background (rb->global_settings->bg_color);
|
||||||
|
selection = rb->do_menu(&menu, NULL);
|
||||||
int button, selection = 0, sw, sh, i;
|
if (selection < 0)
|
||||||
bool quit = false;
|
{
|
||||||
|
selection = MENU_QUIT;
|
||||||
rb->lcd_setfont(FONT_UI);
|
|
||||||
rb->lcd_getstringsize("A", &sw, &sh);
|
|
||||||
if(sw*20 > LCD_WIDTH || sh*4 > LCD_HEIGHT)
|
|
||||||
rb->lcd_setfont(FONT_SYSFIXED);
|
|
||||||
|
|
||||||
rb->lcd_getstringsize ("XOBOX", &sw, &sh);
|
|
||||||
sh++;
|
|
||||||
rb->lcd_set_background (LCD_WHITE);
|
|
||||||
rb->lcd_set_foreground (LCD_BLACK);
|
|
||||||
rb->lcd_clear_display ();
|
|
||||||
rb->lcd_putsxy (LCD_WIDTH / 2 - sw / 2, 2, "XOBOX");
|
|
||||||
while (!quit) {
|
|
||||||
for (i = 0; i < MAIN_MENU_SIZE; i++) {
|
|
||||||
rb->lcd_set_foreground ((i == selection ? LCD_WHITE : LCD_BLACK));
|
|
||||||
rb->lcd_set_background ((i == selection ? CLR_BLUE : LCD_WHITE));
|
|
||||||
rb->lcd_putsxy (10, sh + 4 + i * sh, menu[i]);
|
|
||||||
}
|
|
||||||
rb->lcd_update ();
|
|
||||||
button = rb->button_get (true);
|
|
||||||
switch (button) {
|
|
||||||
#ifdef MENU_UP
|
|
||||||
case MENU_UP:
|
|
||||||
#else
|
|
||||||
case UP:
|
|
||||||
#endif
|
|
||||||
selection = (selection + MAIN_MENU_SIZE - 1) % MAIN_MENU_SIZE;
|
|
||||||
break;
|
|
||||||
#ifdef MENU_UP
|
|
||||||
case MENU_DOWN:
|
|
||||||
#else
|
|
||||||
case DOWN:
|
|
||||||
#endif
|
|
||||||
selection = (selection + 1) % MAIN_MENU_SIZE;
|
|
||||||
break;
|
|
||||||
case SELECT:
|
|
||||||
case RIGHT:
|
|
||||||
quit = true;
|
|
||||||
break;
|
|
||||||
#ifdef RC_QUIT
|
|
||||||
case RC_QUIT:
|
|
||||||
#endif
|
|
||||||
case QUIT:
|
|
||||||
selection = MENU_QUIT;
|
|
||||||
quit = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return selection;
|
return selection;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue