diff options
Diffstat (limited to 'apps/gui')
-rw-r--r-- | apps/gui/textarea.c | 20 | ||||
-rw-r--r-- | apps/gui/textarea.h | 6 | ||||
-rw-r--r-- | apps/gui/yesno.c | 34 |
3 files changed, 28 insertions, 32 deletions
diff --git a/apps/gui/textarea.c b/apps/gui/textarea.c index 0dd063c493..b30667df4e 100644 --- a/apps/gui/textarea.c +++ b/apps/gui/textarea.c | |||
@@ -19,6 +19,8 @@ | |||
19 | 19 | ||
20 | #include "textarea.h" | 20 | #include "textarea.h" |
21 | #include "font.h" | 21 | #include "font.h" |
22 | #include "lang.h" | ||
23 | #include "talk.h" | ||
22 | 24 | ||
23 | void gui_textarea_clear(struct screen * display) | 25 | void gui_textarea_clear(struct screen * display) |
24 | { | 26 | { |
@@ -51,7 +53,8 @@ int gui_textarea_put_message(struct screen * display, | |||
51 | int i; | 53 | int i; |
52 | gui_textarea_clear(display); | 54 | gui_textarea_clear(display); |
53 | for(i=0;i<message->nb_lines && i+ystart<display->nb_lines;i++) | 55 | for(i=0;i<message->nb_lines && i+ystart<display->nb_lines;i++) |
54 | display->puts_scroll(0, i+ystart, (unsigned char *)message->message_lines[i]); | 56 | display->puts_scroll(0, i+ystart, P2STR((unsigned char *)message-> |
57 | message_lines[i])); | ||
55 | gui_textarea_update(display); | 58 | gui_textarea_update(display); |
56 | return(i); | 59 | return(i); |
57 | } | 60 | } |
@@ -74,3 +77,18 @@ void gui_textarea_update_nblines(struct screen * display) | |||
74 | #endif | 77 | #endif |
75 | display->nb_lines = height / display->char_height; | 78 | display->nb_lines = height / display->char_height; |
76 | } | 79 | } |
80 | |||
81 | void talk_text_message(struct text_message * message, bool enqueue) | ||
82 | { | ||
83 | int line; | ||
84 | if(message) | ||
85 | for(line=0; line<message->nb_lines; line++) | ||
86 | { | ||
87 | long id = P2ID((unsigned char *)message->message_lines[line]); | ||
88 | if(id>=0) | ||
89 | { | ||
90 | talk_id(id, enqueue); | ||
91 | enqueue = true; | ||
92 | } | ||
93 | } | ||
94 | } | ||
diff --git a/apps/gui/textarea.h b/apps/gui/textarea.h index 413169db24..765add084a 100644 --- a/apps/gui/textarea.h +++ b/apps/gui/textarea.h | |||
@@ -59,6 +59,12 @@ extern int gui_textarea_put_message(struct screen * display, | |||
59 | */ | 59 | */ |
60 | extern void gui_textarea_update_nblines(struct screen * display); | 60 | extern void gui_textarea_update_nblines(struct screen * display); |
61 | 61 | ||
62 | /* | ||
63 | * Speak a text_message. The message's lines may be virtual pointers | ||
64 | * representing language / voicefont IDs (see settings.h). | ||
65 | */ | ||
66 | extern void talk_text_message(struct text_message * message, bool enqueue); | ||
67 | |||
62 | #ifdef HAVE_LCD_BITMAP | 68 | #ifdef HAVE_LCD_BITMAP |
63 | /* | 69 | /* |
64 | * Compute the number of pixels from which text can be displayed | 70 | * Compute the number of pixels from which text can be displayed |
diff --git a/apps/gui/yesno.c b/apps/gui/yesno.c index 4e86b017ca..891e73809b 100644 --- a/apps/gui/yesno.c +++ b/apps/gui/yesno.c | |||
@@ -101,25 +101,6 @@ static bool gui_yesno_draw_result(struct gui_yesno * yn, enum yesno_res result) | |||
101 | 101 | ||
102 | #include "debug.h" | 102 | #include "debug.h" |
103 | 103 | ||
104 | /* Processes a text_message whose lines may be virtual pointers | ||
105 | representing language / voicefont IDs (see settings.h). Copies out | ||
106 | the IDs to the ids array, which is of length maxlen, and replaces | ||
107 | the pointers in the text_message with the actual language strings. | ||
108 | The ids array is terminated with the TALK_FINAL_ID sentinel | ||
109 | element. */ | ||
110 | static void extract_talk_ids(struct text_message *m, long *ids, int maxlen) | ||
111 | { | ||
112 | int line, i=0; | ||
113 | if(m) | ||
114 | for(line=0; line<m->nb_lines; line++) { | ||
115 | long id = P2ID((unsigned char *)m->message_lines[line]); | ||
116 | if(id>=0 && i<maxlen-1) | ||
117 | ids[i++] = id; | ||
118 | m->message_lines[line] = (char *)P2STR((unsigned char *)m->message_lines[line]); | ||
119 | } | ||
120 | ids[i] = TALK_FINAL_ID; | ||
121 | } | ||
122 | |||
123 | enum yesno_res gui_syncyesno_run(struct text_message * main_message, | 104 | enum yesno_res gui_syncyesno_run(struct text_message * main_message, |
124 | struct text_message * yes_message, | 105 | struct text_message * yes_message, |
125 | struct text_message * no_message) | 106 | struct text_message * no_message) |
@@ -129,13 +110,7 @@ enum yesno_res gui_syncyesno_run(struct text_message * main_message, | |||
129 | int result=-1; | 110 | int result=-1; |
130 | bool result_displayed; | 111 | bool result_displayed; |
131 | struct gui_yesno yn[NB_SCREENS]; | 112 | struct gui_yesno yn[NB_SCREENS]; |
132 | long voice_ids[5]; | ||
133 | long talked_tick = 0; | 113 | long talked_tick = 0; |
134 | /* The text messages may contain virtual pointers to IDs (see | ||
135 | settings.h) instead of plain strings. Copy the IDs out so we | ||
136 | can speak them, and unwrap the actual language strings. */ | ||
137 | extract_talk_ids(main_message, voice_ids, | ||
138 | sizeof(voice_ids)/sizeof(voice_ids[0])); | ||
139 | FOR_NB_SCREENS(i) | 114 | FOR_NB_SCREENS(i) |
140 | { | 115 | { |
141 | gui_yesno_init(&(yn[i]), main_message, yes_message, no_message); | 116 | gui_yesno_init(&(yn[i]), main_message, yes_message, no_message); |
@@ -149,7 +124,7 @@ enum yesno_res gui_syncyesno_run(struct text_message * main_message, | |||
149 | && (talked_tick==0 || TIME_AFTER(current_tick, talked_tick+HZ*5))) | 124 | && (talked_tick==0 || TIME_AFTER(current_tick, talked_tick+HZ*5))) |
150 | { | 125 | { |
151 | talked_tick = current_tick; | 126 | talked_tick = current_tick; |
152 | talk_idarray(voice_ids, false); | 127 | talk_text_message(main_message, false); |
153 | } | 128 | } |
154 | button = get_action(CONTEXT_YESNOSCREEN, HZ*5); | 129 | button = get_action(CONTEXT_YESNOSCREEN, HZ*5); |
155 | switch (button) | 130 | switch (button) |
@@ -168,16 +143,13 @@ enum yesno_res gui_syncyesno_run(struct text_message * main_message, | |||
168 | } | 143 | } |
169 | } | 144 | } |
170 | 145 | ||
171 | /* extract_talk_ids also converts ID to STR */ | ||
172 | extract_talk_ids((result == YESNO_YES) ? yes_message : no_message, | ||
173 | voice_ids, sizeof(voice_ids)/sizeof(voice_ids[0])); | ||
174 | |||
175 | FOR_NB_SCREENS(i) | 146 | FOR_NB_SCREENS(i) |
176 | result_displayed=gui_yesno_draw_result(&(yn[i]), result); | 147 | result_displayed=gui_yesno_draw_result(&(yn[i]), result); |
177 | 148 | ||
178 | if (global_settings.talk_menu) | 149 | if (global_settings.talk_menu) |
179 | { | 150 | { |
180 | talk_idarray(voice_ids, false); | 151 | talk_text_message((result == YESNO_YES) ? yes_message |
152 | : no_message, false); | ||
181 | talk_force_enqueue_next(); | 153 | talk_force_enqueue_next(); |
182 | } | 154 | } |
183 | if(result_displayed) | 155 | if(result_displayed) |