diff options
author | Björn Stenberg <bjorn@haxx.se> | 2004-09-19 21:58:37 +0000 |
---|---|---|
committer | Björn Stenberg <bjorn@haxx.se> | 2004-09-19 21:58:37 +0000 |
commit | 6c33c51a4ca9907d23e3154d956fd6781122f492 (patch) | |
tree | f0e598efaf064bb72c33c0a8a2edba4cf9ebb13c /apps/menu.c | |
parent | 17f54a40f100a3343a15a431d235699024aa76c8 (diff) | |
download | rockbox-6c33c51a4ca9907d23e3154d956fd6781122f492.tar.gz rockbox-6c33c51a4ca9907d23e3154d956fd6781122f492.zip |
Redesigned the button handling. The code now uses symbolic function defines instead of checking for specific buttons. This makes it easier to add support for new devices with different button layouts.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5091 a1c6a512-1295-4272-9138-f99709370657
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 | /* |