From 80c0f99a1a1ab3c6ebf30c289ad06a63eac1a6b3 Mon Sep 17 00:00:00 2001 From: Kevin Ferrare Date: Fri, 4 Nov 2005 16:07:50 +0000 Subject: [PATCH] Added iriver remote keys support to the option selection in the menus, corrected a silly c'n'p error git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7750 a1c6a512-1295-4272-9138-f99709370657 --- apps/gui/select.c | 46 ++++++++++++++++++++++++++++++++++++++-------- apps/gui/select.h | 7 +++++++ apps/settings.c | 2 +- 3 files changed, 46 insertions(+), 9 deletions(-) diff --git a/apps/gui/select.c b/apps/gui/select.c index cc02baa724..8323783448 100644 --- a/apps/gui/select.c +++ b/apps/gui/select.c @@ -42,7 +42,7 @@ void gui_select_init_numeric(struct gui_select * select, select->validated=false; select->title=title; select->min_value=min_value; - select->max_value=max_value; + select->max_value=max_value+1; select->option=init_value; select->step=step; select->extra_string=unit; @@ -66,19 +66,27 @@ void gui_select_init_items(struct gui_select * select, select->formatter=NULL; select->items=items; } -//FIXME: si step>1, mettre d'abord au plus grand, ensuite passerau plus petit + void gui_select_next(struct gui_select * select) { - select->option+=select->step; - if(select->option >= select->max_value) - select->option=select->min_value; + if(select->option + select->step >= select->max_value) + 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) { - select->option-=select->step; - if(select->option < select->min_value) - select->option=select->max_value-1; + if(select->option - select->step < select->min_value) + 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) @@ -119,22 +127,44 @@ bool gui_syncselect_do_button(struct gui_select * select, int button) { case SELECT_INC : case SELECT_INC | BUTTON_REPEAT : +#ifdef SELECT_RC_INC + case SELECT_RC_INC : + case SELECT_RC_INC | BUTTON_REPEAT : +#endif gui_select_next(select); moved=true; break; case SELECT_DEC : case SELECT_DEC | BUTTON_REPEAT : +#ifdef SELECT_RC_DEC + case SELECT_RC_DEC : + case SELECT_RC_DEC | BUTTON_REPEAT : +#endif gui_select_prev(select); moved=true; break; case SELECT_OK : +#ifdef SELECT_RC_OK + case SELECT_RC_OK : +#endif +#ifdef SELECT_RC_OK2 + case SELECT_RC_OK2 : +#endif #ifdef SELECT_OK2 case SELECT_OK2 : #endif gui_select_validate(select); break; case SELECT_CANCEL : +#ifdef SELECT_CANCEL2 case SELECT_CANCEL2 : +#endif +#ifdef SELECT_RC_CANCEL + case SELECT_RC_CANCEL : +#endif +#ifdef SELECT_RC_CANCEL2 + case SELECT_RC_CANCEL2 : +#endif gui_select_cancel(select); gui_syncselect_draw(select); sleep(HZ/2); diff --git a/apps/gui/select.h b/apps/gui/select.h index f222964893..aca40d3fd8 100644 --- a/apps/gui/select.h +++ b/apps/gui/select.h @@ -32,6 +32,13 @@ #define SELECT_CANCEL BUTTON_OFF #define SELECT_CANCEL2 BUTTON_MODE +#define SELECT_RC_INC BUTTON_RC_FF +#define SELECT_RC_DEC BUTTON_RC_REW +#define SELECT_RC_OK BUTTON_RC_ON +#define SELECT_RC_OK2 BUTTON_RC_MENU +#define SELECT_RC_CANCEL BUTTON_RC_STOP +#define SELECT_RC_CANCEL2 BUTTON_RC_MODE + #elif CONFIG_KEYPAD == RECORDER_PAD #define SELECT_INC BUTTON_UP #define SELECT_DEC BUTTON_DOWN diff --git a/apps/settings.c b/apps/settings.c index 628d56b43b..582011fa10 100644 --- a/apps/settings.c +++ b/apps/settings.c @@ -1401,9 +1401,9 @@ bool set_int(const char* string, if(gui_syncselect_do_button(&select, button)) { *variable=gui_select_get_selected(&select); + gui_syncselect_draw(&select); if (global_settings.talk_menu) { - gui_syncselect_draw(&select); if (voice_unit < UNIT_LAST) { /* use the available unit definition */ talk_value(*variable, voice_unit, false);