menu_st *menu_handle_item(menu_st *menulist, int num) { item_st *item; /* out of bounds */ if(num < 0 || num >= menulist->num_items) { Dprintf("menu_handle_item::Invalid item"); return menulist; } item = &menulist->items[num]; menulist->lastsel = -1; if(SUB_MENU_HEADER & item->op) { /* Destroy timer */ menu_handle_timer(menulist, 1); /* create another sub-menu */ menulist = menu_right_transition(menulist, item); } else if(ACTION_MENU & item->op) { /* execute the function */ void (* fp)(void); fp = item->action; (* fp)(); menulist->lastsel = 0; } else if(BOOLEAN_MENU & item->op) { /* toggle boolean; draw */ item->sel_option = !(item->sel_option); if(item->setting != 0) ipod_set_setting(item->setting, item->sel_option); menu_retext_pixmap(menulist, num - menulist->top_item, item); } else if(OPTION_MENU & item->op) { /* rotate option; draw */ item->sel_option = ((item->sel_option + 1) > (item->item_count - 1) ? 0 : item->sel_option + 1); if(item->setting != 0) ipod_set_setting(item->setting, item->sel_option); menu_retext_pixmap(menulist, num - menulist->top_item, item); } else if(SETTING_ITEM & item->op) { if(item->setting != 0) ipod_set_setting(item->setting, item->item_count); menulist = menu_destroy(menulist); } /* this isnt an else, so you can do (ACTION_MENU|SUB_MENU_PREV) */ if(SUB_MENU_PREV & item->op) { menulist = menu_destroy(menulist); } return menulist; }
static void menu_set_setting (ttk_menu_item *item, int cdata) { ipod_set_setting (cdata, item->choice); }
void toggle_backlight(void) { ipod_set_setting(BACKLIGHT, !ipod_get_setting(BACKLIGHT)); }