diff options
Diffstat (limited to 'apps/menu.c')
-rw-r--r-- | apps/menu.c | 77 |
1 files changed, 36 insertions, 41 deletions
diff --git a/apps/menu.c b/apps/menu.c index fccc88479b..e999c5f774 100644 --- a/apps/menu.c +++ b/apps/menu.c | |||
@@ -288,11 +288,17 @@ int menu_show(int m) | |||
288 | } | 288 | } |
289 | 289 | ||
290 | menu_lines = height / fh; | 290 | menu_lines = height / fh; |
291 | #else | ||
292 | int menu_lines = MENU_LINES; | ||
291 | #endif | 293 | #endif |
292 | 294 | ||
293 | /* Put the cursor on the first line and draw the menu */ | 295 | /* Put the cursor on the first line and draw the menu */ |
294 | put_cursor(m, menus[m].cursor); | 296 | put_cursor(m, menus[m].cursor); |
295 | 297 | ||
298 | /* wait until all keys are released */ | ||
299 | while (button_get(false) != BUTTON_NONE) | ||
300 | yield(); | ||
301 | |||
296 | while (!exit) { | 302 | while (!exit) { |
297 | key = button_get_w_tmo(HZ/2); | 303 | key = button_get_w_tmo(HZ/2); |
298 | 304 | ||
@@ -308,25 +314,15 @@ int menu_show(int m) | |||
308 | key = menus[m].callback(key, m); | 314 | key = menus[m].callback(key, m); |
309 | 315 | ||
310 | switch( key ) { | 316 | switch( key ) { |
311 | 317 | case MENU_PREV: | |
312 | #ifdef HAVE_RECORDER_KEYPAD | 318 | case MENU_PREV | BUTTON_REPEAT: |
313 | case BUTTON_UP: | ||
314 | case BUTTON_UP | BUTTON_REPEAT: | ||
315 | #else | ||
316 | case BUTTON_LEFT: | ||
317 | case BUTTON_LEFT | BUTTON_REPEAT: | ||
318 | #endif | ||
319 | if (menus[m].cursor) { | 319 | if (menus[m].cursor) { |
320 | /* move up */ | 320 | /* move up */ |
321 | put_cursor(m, menus[m].cursor-1); | 321 | put_cursor(m, menus[m].cursor-1); |
322 | } | 322 | } |
323 | else { | 323 | else { |
324 | /* move to bottom */ | 324 | /* move to bottom */ |
325 | #ifdef HAVE_RECORDER_KEYPAD | ||
326 | menus[m].top = menus[m].itemcount-(menu_lines+1); | 325 | menus[m].top = menus[m].itemcount-(menu_lines+1); |
327 | #else | ||
328 | menus[m].top = menus[m].itemcount-3; | ||
329 | #endif | ||
330 | if (menus[m].top < 0) | 326 | if (menus[m].top < 0) |
331 | menus[m].top = 0; | 327 | menus[m].top = 0; |
332 | menus[m].cursor = menus[m].itemcount-1; | 328 | menus[m].cursor = menus[m].itemcount-1; |
@@ -334,13 +330,8 @@ int menu_show(int m) | |||
334 | } | 330 | } |
335 | break; | 331 | break; |
336 | 332 | ||
337 | #ifdef HAVE_RECORDER_KEYPAD | 333 | case MENU_NEXT: |
338 | case BUTTON_DOWN: | 334 | case MENU_NEXT | BUTTON_REPEAT: |
339 | case BUTTON_DOWN | BUTTON_REPEAT: | ||
340 | #else | ||
341 | case BUTTON_RIGHT: | ||
342 | case BUTTON_RIGHT | BUTTON_REPEAT: | ||
343 | #endif | ||
344 | if (menus[m].cursor < menus[m].itemcount-1) { | 335 | if (menus[m].cursor < menus[m].itemcount-1) { |
345 | /* move down */ | 336 | /* move down */ |
346 | put_cursor(m, menus[m].cursor+1); | 337 | put_cursor(m, menus[m].cursor+1); |
@@ -353,22 +344,23 @@ int menu_show(int m) | |||
353 | } | 344 | } |
354 | break; | 345 | break; |
355 | 346 | ||
356 | #ifdef HAVE_RECORDER_KEYPAD | 347 | case MENU_ENTER: |
357 | case BUTTON_RIGHT: | 348 | #ifdef MENU_ENTER2 |
349 | case MENU_ENTER2: | ||
358 | #endif | 350 | #endif |
359 | case BUTTON_PLAY: | ||
360 | /* Erase current display state */ | 351 | /* Erase current display state */ |
361 | lcd_clear_display(); | 352 | lcd_clear_display(); |
362 | return menus[m].cursor; | 353 | return menus[m].cursor; |
363 | 354 | ||
364 | #ifdef HAVE_RECORDER_KEYPAD | 355 | case MENU_EXIT: |
365 | case BUTTON_LEFT: | 356 | case MENU_EXIT | BUTTON_REPEAT: |
366 | case BUTTON_F1: | 357 | #ifdef MENU_EXIT2 |
367 | case BUTTON_OFF | BUTTON_REPEAT: | 358 | case MENU_EXIT2: |
368 | #else | 359 | case MENU_EXIT2 | BUTTON_REPEAT: |
369 | case BUTTON_STOP: | 360 | #endif |
370 | case BUTTON_MENU: | 361 | #ifdef MENU_EXIT3 |
371 | case BUTTON_STOP | BUTTON_REPEAT: | 362 | case MENU_EXIT3: |
363 | case MENU_EXIT3 | BUTTON_REPEAT: | ||
372 | #endif | 364 | #endif |
373 | lcd_stop_scroll(); | 365 | lcd_stop_scroll(); |
374 | exit = true; | 366 | exit = true; |
@@ -388,18 +380,21 @@ int menu_show(int m) | |||
388 | 380 | ||
389 | bool menu_run(int m) | 381 | bool menu_run(int m) |
390 | { | 382 | { |
391 | bool stop=false; | 383 | while (1) { |
392 | while (!stop) { | 384 | switch (menu_show(m)) |
393 | int result=menu_show(m); | 385 | { |
394 | if (result == MENU_SELECTED_EXIT) | 386 | case MENU_SELECTED_EXIT: |
395 | return false; | 387 | return false; |
396 | else if (result == MENU_ATTACHED_USB) | 388 | |
397 | return true; | 389 | case MENU_ATTACHED_USB: |
398 | if (menus[m].items[menus[m].cursor].function()) { | 390 | return true; |
399 | return true; | 391 | |
392 | default: | ||
393 | if (menus[m].items[menus[m].cursor].function()) | ||
394 | return true; | ||
395 | } | ||
400 | } | 396 | } |
401 | } | 397 | return false; |
402 | return false; | ||
403 | } | 398 | } |
404 | 399 | ||
405 | /* | 400 | /* |