summaryrefslogtreecommitdiff
path: root/apps/menu.c
diff options
context:
space:
mode:
authorBjörn Stenberg <bjorn@haxx.se>2004-09-19 21:58:37 +0000
committerBjörn Stenberg <bjorn@haxx.se>2004-09-19 21:58:37 +0000
commit6c33c51a4ca9907d23e3154d956fd6781122f492 (patch)
treef0e598efaf064bb72c33c0a8a2edba4cf9ebb13c /apps/menu.c
parent17f54a40f100a3343a15a431d235699024aa76c8 (diff)
downloadrockbox-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.c77
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
389bool menu_run(int m) 381bool 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/*