/*************************************************************************** * __________ __ ___. * Open \______ \ ____ ____ | | _\_ |__ _______ ___ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ * \/ \/ \/ \/ \/ * $Id$ * * Copyright (C) 2002 Robert E. Hak * * All files in this archive are subject to the GNU General Public License. * See the file COPYING in the source tree root for full license agreement. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ****************************************************************************/ #include #include "lcd.h" #include "menu.h" #include "button.h" #include "kernel.h" #include "debug.h" struct menu { int top; int cursor; struct menu_items* items; int itemcount; }; #define MAX_MENUS 4 #ifdef HAVE_LCD_BITMAP #define MENU_LINES 6 #else #define MENU_LINES 2 #endif #ifdef HAVE_LCD_BITMAP #define CURSOR_CHAR "-" #else #ifdef HAVE_NEW_CHARCELL_LCD #define CURSOR_CHAR "\x7e" #else #define CURSOR_CHAR "\x89" #endif #endif static struct menu menus[MAX_MENUS]; static bool inuse[MAX_MENUS] = { false }; static void menu_draw(int m) { int i = 0; lcd_clear_display(); #ifdef HAVE_LCD_BITMAP lcd_setmargins(0,0); lcd_setfont(0); #endif for (i = menus[m].top; (i < menus[m].itemcount) && (i MENU_LINES-1 ) { menus[m].top++; menu_draw(m); do_update = false; } if (do_update) { lcd_puts(0, menus[m].cursor - menus[m].top, CURSOR_CHAR); lcd_update(); } } int menu_init(struct menu_items* mitems, int count) { int i; for ( i=0; i