diff options
Diffstat (limited to 'apps/recorder/keyboard.c')
-rw-r--r-- | apps/recorder/keyboard.c | 85 |
1 files changed, 32 insertions, 53 deletions
diff --git a/apps/recorder/keyboard.c b/apps/recorder/keyboard.c index 832bb995ba..6c47c3ad81 100644 --- a/apps/recorder/keyboard.c +++ b/apps/recorder/keyboard.c | |||
@@ -33,7 +33,7 @@ | |||
33 | 33 | ||
34 | #define KEYBOARD_LINES 4 | 34 | #define KEYBOARD_LINES 4 |
35 | #define KEYBOARD_PAGES 3 | 35 | #define KEYBOARD_PAGES 3 |
36 | 36 | #define KEYBOARD_MARGIN 3 | |
37 | 37 | ||
38 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | 38 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
39 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | 39 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
@@ -74,33 +74,22 @@ | |||
74 | 74 | ||
75 | #endif | 75 | #endif |
76 | 76 | ||
77 | static const char * const kbdpages[KEYBOARD_PAGES][KEYBOARD_LINES] = { | ||
78 | { "ABCDEFG !?\" @#$%+'", | ||
79 | "HIJKLMN 789 &_()-`", | ||
80 | "OPQRSTU 456 §|{}/<", | ||
81 | "VWXYZ.,0123 ~=[]*>" }, | ||
77 | 82 | ||
78 | static void kbd_setupkeys(const char* line[KEYBOARD_LINES], int page) | 83 | { "abcdefg ¢£¤¥¦§©®¬", |
79 | { | 84 | "hijklmn «»°ºª¹²³¶", |
80 | switch (page) | 85 | "opqrstu ¯±×÷¡¿µ·¨", |
81 | { | 86 | "vwxyz., ¼½¾ " }, |
82 | case 0: | 87 | |
83 | line[0] = "ABCDEFG !?\" @#$%+'"; | 88 | { "ÀÁÂÃÄÅÆ ÌÍÎÏ ÈÉÊË", |
84 | line[1] = "HIJKLMN 789 &_()-`"; | 89 | "àáâãäåæ ìíîï èéêë", |
85 | line[2] = "OPQRSTU 456 §|{}/<"; | 90 | "ÓÒÔÕÖØ ÇÐÞÝß ÙÚÛÜ", |
86 | line[3] = "VWXYZ.,0123 ~=[]*>"; | 91 | "òóôõöø çðþýÿ ùúûü" }, |
87 | break; | 92 | }; |
88 | |||
89 | case 1: | ||
90 | line[0] = "abcdefg ¢£¤¥¦§©®¬"; | ||
91 | line[1] = "hijklmn «»°ºª¹²³¶"; | ||
92 | line[2] = "opqrstu ¯±×÷¡¿µ·¨"; | ||
93 | line[3] = "vwxyz., ¼½¾ "; | ||
94 | break; | ||
95 | |||
96 | case 2: | ||
97 | line[0] = "ÀÁÂÃÄÅÆ ÌÍÎÏ ÈÉÊË"; | ||
98 | line[1] = "àáâãäåæ ìíîï èéêë"; | ||
99 | line[2] = "ÓÒÔÕÖØ ÇÐÞÝß ÙÚÛÜ"; | ||
100 | line[3] = "òóôõöø çðþýÿ ùúûü"; | ||
101 | break; | ||
102 | } | ||
103 | } | ||
104 | 93 | ||
105 | /* helper function to spell a char if voice UI is enabled */ | 94 | /* helper function to spell a char if voice UI is enabled */ |
106 | static void kbd_spellchar(char c) | 95 | static void kbd_spellchar(char c) |
@@ -121,18 +110,17 @@ int kbd_input(char* text, int buflen) | |||
121 | 110 | ||
122 | int font_w = 0, font_h = 0, i; | 111 | int font_w = 0, font_h = 0, i; |
123 | int x = 0, y = 0; | 112 | int x = 0, y = 0; |
124 | int main_x, main_y, max_chars, margin; | 113 | int main_x, main_y, max_chars; |
125 | int status_y1, status_y2; | 114 | int status_y1, status_y2; |
126 | int len; | 115 | int len; |
127 | int editpos, curpos, leftpos; | 116 | int editpos, curpos, leftpos; |
128 | bool redraw = true; | 117 | bool redraw = true; |
129 | const char* line[KEYBOARD_LINES]; | 118 | const char * const *line; |
130 | #ifdef KBD_MODES | 119 | #ifdef KBD_MODES |
131 | bool line_edit = false; | 120 | bool line_edit = false; |
132 | #endif | 121 | #endif |
133 | 122 | ||
134 | char outline[256]; | 123 | char outline[256]; |
135 | char c = 0; | ||
136 | struct font* font = font_get(FONT_SYSFIXED); | 124 | struct font* font = font_get(FONT_SYSFIXED); |
137 | int button, lastbutton = 0; | 125 | int button, lastbutton = 0; |
138 | 126 | ||
@@ -140,8 +128,7 @@ int kbd_input(char* text, int buflen) | |||
140 | font_w = font->maxwidth; | 128 | font_w = font->maxwidth; |
141 | font_h = font->height; | 129 | font_h = font->height; |
142 | 130 | ||
143 | margin = 3; | 131 | main_y = (KEYBOARD_LINES + 1) * font_h + (2*KEYBOARD_MARGIN); |
144 | main_y = (KEYBOARD_LINES + 1) * font_h + margin*2; | ||
145 | main_x = 0; | 132 | main_x = 0; |
146 | status_y1 = LCD_HEIGHT - font_h; | 133 | status_y1 = LCD_HEIGHT - font_h; |
147 | status_y2 = LCD_HEIGHT; | 134 | status_y2 = LCD_HEIGHT; |
@@ -149,7 +136,7 @@ int kbd_input(char* text, int buflen) | |||
149 | editpos = strlen(text); | 136 | editpos = strlen(text); |
150 | 137 | ||
151 | max_chars = LCD_WIDTH / font_w - 2; /* leave room for < and > */ | 138 | max_chars = LCD_WIDTH / font_w - 2; /* leave room for < and > */ |
152 | kbd_setupkeys(line, page); | 139 | line = kbdpages[0]; |
153 | 140 | ||
154 | if (global_settings.talk_menu) /* voice UI? */ | 141 | if (global_settings.talk_menu) /* voice UI? */ |
155 | talk_spell(text, true); /* spell initial text */ | 142 | talk_spell(text, true); /* spell initial text */ |
@@ -169,7 +156,7 @@ int kbd_input(char* text, int buflen) | |||
169 | lcd_putsxy(0, 8+i * font_h, line[i]); | 156 | lcd_putsxy(0, 8+i * font_h, line[i]); |
170 | 157 | ||
171 | /* separator */ | 158 | /* separator */ |
172 | lcd_hline(0, LCD_WIDTH - 1, main_y - margin); | 159 | lcd_hline(0, LCD_WIDTH - 1, main_y - KEYBOARD_MARGIN); |
173 | 160 | ||
174 | /* write out the text */ | 161 | /* write out the text */ |
175 | curpos = MIN(editpos, max_chars - MIN(len - editpos, 2)); | 162 | curpos = MIN(editpos, max_chars - MIN(len - editpos, 2)); |
@@ -221,10 +208,10 @@ int kbd_input(char* text, int buflen) | |||
221 | break; | 208 | break; |
222 | 209 | ||
223 | #ifdef KBD_PAGE_FLIP | 210 | #ifdef KBD_PAGE_FLIP |
224 | case KBD_PAGE_FLIP: | 211 | case KBD_PAGE_FLIP: |
225 | if (++page == KEYBOARD_PAGES) | 212 | if (++page == KEYBOARD_PAGES) |
226 | page = 0; | 213 | page = 0; |
227 | kbd_setupkeys(line, page); | 214 | line = kbdpages[page]; |
228 | kbd_spellchar(line[y][x]); | 215 | kbd_spellchar(line[y][x]); |
229 | break; | 216 | break; |
230 | #endif | 217 | #endif |
@@ -242,7 +229,7 @@ int kbd_input(char* text, int buflen) | |||
242 | } | 229 | } |
243 | else | 230 | else |
244 | #endif | 231 | #endif |
245 | { | 232 | { |
246 | if (x < (int)strlen(line[y]) - 1) | 233 | if (x < (int)strlen(line[y]) - 1) |
247 | x++; | 234 | x++; |
248 | else | 235 | else |
@@ -251,7 +238,7 @@ int kbd_input(char* text, int buflen) | |||
251 | #ifndef KBD_PAGE_FLIP /* no dedicated flip key - flip page on wrap */ | 238 | #ifndef KBD_PAGE_FLIP /* no dedicated flip key - flip page on wrap */ |
252 | if (++page == KEYBOARD_PAGES) | 239 | if (++page == KEYBOARD_PAGES) |
253 | page = 0; | 240 | page = 0; |
254 | kbd_setupkeys(line, page); | 241 | line = kbdpages[page]; |
255 | #endif | 242 | #endif |
256 | } | 243 | } |
257 | kbd_spellchar(line[y][x]); | 244 | kbd_spellchar(line[y][x]); |
@@ -271,7 +258,7 @@ int kbd_input(char* text, int buflen) | |||
271 | } | 258 | } |
272 | else | 259 | else |
273 | #endif | 260 | #endif |
274 | { | 261 | { |
275 | if (x) | 262 | if (x) |
276 | x--; | 263 | x--; |
277 | else | 264 | else |
@@ -279,7 +266,7 @@ int kbd_input(char* text, int buflen) | |||
279 | #ifndef KBD_PAGE_FLIP /* no dedicated flip key - flip page on wrap */ | 266 | #ifndef KBD_PAGE_FLIP /* no dedicated flip key - flip page on wrap */ |
280 | if (--page < 0) | 267 | if (--page < 0) |
281 | page = (KEYBOARD_PAGES-1); | 268 | page = (KEYBOARD_PAGES-1); |
282 | kbd_setupkeys(line, page); | 269 | line = kbdpages[page]; |
283 | #endif | 270 | #endif |
284 | x = strlen(line[y]) - 1; | 271 | x = strlen(line[y]) - 1; |
285 | } | 272 | } |
@@ -364,20 +351,12 @@ int kbd_input(char* text, int buflen) | |||
364 | else | 351 | else |
365 | #endif | 352 | #endif |
366 | { | 353 | { |
367 | if (len < buflen) | 354 | if (len + 1 < buflen) |
368 | { | 355 | { |
369 | c = line[y][x]; | 356 | for (i = len ; i > editpos; i--) |
370 | if (editpos == len) | 357 | text[i] = text[i-1]; |
371 | { | 358 | text[len+1] = 0; |
372 | text[len] = c; | 359 | text[editpos] = line[y][x]; |
373 | text[len+1] = 0; | ||
374 | } | ||
375 | else | ||
376 | { | ||
377 | for (i = len ; i >= editpos; i--) | ||
378 | text[i+1] = text[i]; | ||
379 | text[editpos] = c; | ||
380 | } | ||
381 | editpos++; | 360 | editpos++; |
382 | } | 361 | } |
383 | } | 362 | } |