/*************************************************************************** * __________ __ ___. * Open \______ \ ____ ____ | | _\_ |__ _______ ___ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ * \/ \/ \/ \/ \/ * $Id$ * * Copyright (C) 2005 by Kevin Ferrare * * 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 "select.h" #include "lang.h" #include "textarea.h" #include "sprintf.h" #include "kernel.h" #include "screen_access.h" void gui_select_init_numeric(struct gui_select * select, const char * title, int init_value, int min_value, int max_value, int step, const char * unit, void (*formatter)(char* dest, int dest_length, int variable, const char* unit) ) { select->canceled=false; select->validated=false; select->title=title; select->min_value=min_value; select->max_value=max_value+1; select->option=init_value; select->step=step; select->extra_string=unit; select->formatter=formatter; select->items=NULL; select->limit_loop=false; } void gui_select_init_items(struct gui_select * select, const char * title, int selected, const struct opt_items * items, int nb_items) { select->canceled=false; select->validated=false; select->title=title; select->min_value=0; select->max_value=nb_items; select->option=selected; select->step=1; select->formatter=NULL; select->items=items; select->limit_loop=false; } void gui_select_next(struct gui_select * select) { if(select->option + select->step >= select->max_value) { if(!select->limit_loop) { if(select->option==select->max_value-1) select->option=select->min_value; else select->option=select->max_value-1; } } else select->option+=select->step; } void gui_select_prev(struct gui_select * select) { if(select->option - select->step < select->min_value) { if(!select->limit_loop) { if(select->option==select->min_value) select->option=select->max_value-1; else select->option=select->min_value; } } else select->option-=select->step; } void gui_select_draw(struct gui_select * select, struct screen * display) { #ifdef HAVE_LCD_BITMAP screen_set_xmargin(display, 0); #endif gui_textarea_clear(display); display->puts_scroll(0, 0, select->title); if(gui_select_is_canceled(select)) display->puts_scroll(0, 0, str(LANG_MENU_SETTING_CANCEL)); if(select->items) display->puts_scroll(0, 1, P2STR(select->items[select->option].string)); else { char buffer[30]; if(!select->formatter) snprintf(buffer, sizeof buffer,"%d %s", select->option, select->extra_string); else select->formatter(buffer, sizeof buffer, select->option, select->extra_string); display->puts_scroll(0, 1, buffer); } gui_textarea_update(display); } void gui_syncselect_draw(struct gui_select * select) { int i; for(i=0;i