diff options
Diffstat (limited to 'apps/gui/yesno.c')
-rw-r--r-- | apps/gui/yesno.c | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/apps/gui/yesno.c b/apps/gui/yesno.c new file mode 100644 index 0000000000..65f81aaf3e --- /dev/null +++ b/apps/gui/yesno.c | |||
@@ -0,0 +1,96 @@ | |||
1 | #include "yesno.h" | ||
2 | #include "kernel.h" | ||
3 | #include "misc.h" | ||
4 | #include "lang.h" | ||
5 | |||
6 | void gui_yesno_init(struct gui_yesno * yn, | ||
7 | struct text_message * main_message, | ||
8 | struct text_message * yes_message, | ||
9 | struct text_message * no_message) | ||
10 | { | ||
11 | yn->main_message=main_message; | ||
12 | yn->result_message[YESNO_YES]=yes_message; | ||
13 | yn->result_message[YESNO_NO]=no_message; | ||
14 | yn->display=0; | ||
15 | } | ||
16 | |||
17 | void gui_yesno_set_display(struct gui_yesno * yn, | ||
18 | struct screen * display) | ||
19 | { | ||
20 | yn->display=display; | ||
21 | } | ||
22 | |||
23 | void gui_yesno_draw(struct gui_yesno * yn) | ||
24 | { | ||
25 | struct screen * display=yn->display; | ||
26 | int nb_lines, line_shift=0; | ||
27 | #ifdef HAS_LCD_BITMAP | ||
28 | screen_set_xmargin(display, 0); | ||
29 | #endif | ||
30 | gui_textarea_clear(display); | ||
31 | nb_lines=yn->main_message->nb_lines; | ||
32 | |||
33 | if(nb_lines+3<display->nb_lines) | ||
34 | line_shift=1; | ||
35 | nb_lines=gui_textarea_put_message(display, yn->main_message, line_shift); | ||
36 | |||
37 | /* Space remaining for yes / no text ? */ | ||
38 | if(nb_lines+line_shift+2<=display->nb_lines) | ||
39 | { | ||
40 | if(nb_lines+line_shift+3<=display->nb_lines) | ||
41 | nb_lines++; | ||
42 | display->puts(0, nb_lines+line_shift, str(LANG_CONFIRM_WITH_PLAY_RECORDER)); | ||
43 | display->puts(0, nb_lines+line_shift+1, str(LANG_CANCEL_WITH_ANY_RECORDER)); | ||
44 | } | ||
45 | gui_textarea_update(display); | ||
46 | } | ||
47 | |||
48 | bool gui_yesno_draw_result(struct gui_yesno * yn, enum yesno_res result) | ||
49 | { | ||
50 | struct text_message * message=yn->result_message[result]; | ||
51 | if(message==NULL) | ||
52 | return false; | ||
53 | gui_textarea_put_message(yn->display, message, 0); | ||
54 | return(true); | ||
55 | } | ||
56 | |||
57 | enum yesno_res gui_syncyesno_run(struct text_message * main_message, | ||
58 | struct text_message * yes_message, | ||
59 | struct text_message * no_message) | ||
60 | { | ||
61 | int i; | ||
62 | unsigned button; | ||
63 | int result=-1; | ||
64 | bool result_displayed; | ||
65 | struct gui_yesno yn[NB_SCREENS]; | ||
66 | FOR_NB_SCREENS(i) | ||
67 | { | ||
68 | gui_yesno_init(&(yn[i]), main_message, yes_message, no_message); | ||
69 | gui_yesno_set_display(&(yn[i]), &(screens[i])); | ||
70 | gui_yesno_draw(&(yn[i])); | ||
71 | } | ||
72 | while (result==-1) | ||
73 | { | ||
74 | button = button_get(true); | ||
75 | switch (button) | ||
76 | { | ||
77 | case YESNO_OK: | ||
78 | #ifdef TREE_RC_RUN | ||
79 | case YESNO_RC_OK: | ||
80 | #endif | ||
81 | result=YESNO_YES; | ||
82 | break; | ||
83 | |||
84 | default: | ||
85 | if(default_event_handler(button) == SYS_USB_CONNECTED) | ||
86 | return(YESNO_USB); | ||
87 | if(!(button & BUTTON_REL)) | ||
88 | result=YESNO_NO; | ||
89 | } | ||
90 | } | ||
91 | FOR_NB_SCREENS(i) | ||
92 | result_displayed=gui_yesno_draw_result(&(yn[i]), result); | ||
93 | if(result_displayed) | ||
94 | sleep(HZ); | ||
95 | return(result); | ||
96 | } | ||