summaryrefslogtreecommitdiff
path: root/apps/gui/yesno.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/gui/yesno.c')
-rw-r--r--apps/gui/yesno.c96
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
6void 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
17void gui_yesno_set_display(struct gui_yesno * yn,
18 struct screen * display)
19{
20 yn->display=display;
21}
22
23void 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
48bool 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
57enum 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}