summaryrefslogtreecommitdiff
path: root/apps/gui/select.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/gui/select.c')
-rw-r--r--apps/gui/select.c78
1 files changed, 10 insertions, 68 deletions
diff --git a/apps/gui/select.c b/apps/gui/select.c
index 5cde812a2f..b632177fd7 100644
--- a/apps/gui/select.c
+++ b/apps/gui/select.c
@@ -21,9 +21,9 @@
21 21
22#include "lang.h" 22#include "lang.h"
23#include "textarea.h" 23#include "textarea.h"
24#include "sprintf.h"
25#include "kernel.h"
26#include "screen_access.h" 24#include "screen_access.h"
25#include "kernel.h"
26
27 27
28void gui_select_init_numeric(struct gui_select * select, 28void gui_select_init_numeric(struct gui_select * select,
29 const char * title, 29 const char * title,
@@ -32,23 +32,12 @@ void gui_select_init_numeric(struct gui_select * select,
32 int max_value, 32 int max_value,
33 int step, 33 int step,
34 const char * unit, 34 const char * unit,
35 void (*formatter)(char* dest, 35 option_formatter *formatter)
36 int dest_length,
37 int variable,
38 const char* unit)
39 )
40{ 36{
41 select->canceled=false; 37 select->canceled=false;
42 select->validated=false; 38 select->validated=false;
43 select->title=title; 39 option_select_init_numeric(&select->options, title, init_value,
44 select->min_value=min_value; 40 min_value, max_value, step, unit, formatter);
45 select->max_value=max_value+1;
46 select->option=init_value;
47 select->step=step;
48 select->extra_string=unit;
49 select->formatter=formatter;
50 select->items=NULL;
51 select->limit_loop=false;
52} 41}
53 42
54void gui_select_init_items(struct gui_select * select, 43void gui_select_init_items(struct gui_select * select,
@@ -59,69 +48,22 @@ void gui_select_init_items(struct gui_select * select,
59{ 48{
60 select->canceled=false; 49 select->canceled=false;
61 select->validated=false; 50 select->validated=false;
62 select->title=title; 51 option_select_init_items(&select->options, title, selected, items, nb_items);
63 select->min_value=0;
64 select->max_value=nb_items;
65 select->option=selected;
66 select->step=1;
67 select->formatter=NULL;
68 select->items=items;
69 select->limit_loop=false;
70}
71
72void gui_select_next(struct gui_select * select)
73{
74 if(select->option + select->step >= select->max_value)
75 {
76 if(!select->limit_loop)
77 {
78 if(select->option==select->max_value-1)
79 select->option=select->min_value;
80 else
81 select->option=select->max_value-1;
82 }
83 }
84 else
85 select->option+=select->step;
86}
87
88void gui_select_prev(struct gui_select * select)
89{
90 if(select->option - select->step < select->min_value)
91 {
92 if(!select->limit_loop)
93 {
94 if(select->option==select->min_value)
95 select->option=select->max_value-1;
96 else
97 select->option=select->min_value;
98 }
99 }
100 else
101 select->option-=select->step;
102} 52}
103 53
104void gui_select_draw(struct gui_select * select, struct screen * display) 54void gui_select_draw(struct gui_select * select, struct screen * display)
105{ 55{
56 char buffer[30];
57 const char * selected=option_select_get_text(&(select->options), buffer);
106#ifdef HAVE_LCD_BITMAP 58#ifdef HAVE_LCD_BITMAP
107 screen_set_xmargin(display, 0); 59 screen_set_xmargin(display, 0);
108#endif 60#endif
109 gui_textarea_clear(display); 61 gui_textarea_clear(display);
110 display->puts_scroll(0, 0, select->title); 62 display->puts_scroll(0, 0, option_select_get_title(&(select->options)));
111 63
112 if(gui_select_is_canceled(select)) 64 if(gui_select_is_canceled(select))
113 display->puts_scroll(0, 0, str(LANG_MENU_SETTING_CANCEL)); 65 display->puts_scroll(0, 0, str(LANG_MENU_SETTING_CANCEL));
114 if(select->items) 66 display->puts_scroll(0, 1, selected);
115 display->puts_scroll(0, 1, P2STR(select->items[select->option].string));
116 else
117 {
118 char buffer[30];
119 if(!select->formatter)
120 snprintf(buffer, sizeof buffer,"%d %s", select->option, select->extra_string);
121 else
122 select->formatter(buffer, sizeof buffer, select->option, select->extra_string);
123 display->puts_scroll(0, 1, buffer);
124 }
125 gui_textarea_update(display); 67 gui_textarea_update(display);
126} 68}
127 69