diff options
author | Linus Nielsen Feltzing <linus@haxx.se> | 2004-03-12 10:20:33 +0000 |
---|---|---|
committer | Linus Nielsen Feltzing <linus@haxx.se> | 2004-03-12 10:20:33 +0000 |
commit | 10b92c44b3bac97e01be91409df6e7ccb94ea045 (patch) | |
tree | 4f98b439e02091abcfe5fe977f5179a9ac86e646 /apps/screens.c | |
parent | 5c09ed38c6dc19fd03eb47971433993d7afd8605 (diff) | |
download | rockbox-10b92c44b3bac97e01be91409df6e7ccb94ea045.tar.gz rockbox-10b92c44b3bac97e01be91409df6e7ccb94ea045.zip |
First step towards context sensitive and configurable menus, by Brent Coutts
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4370 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/screens.c')
-rw-r--r-- | apps/screens.c | 271 |
1 files changed, 129 insertions, 142 deletions
diff --git a/apps/screens.c b/apps/screens.c index 6987fc92e3..c2320a0217 100644 --- a/apps/screens.c +++ b/apps/screens.c | |||
@@ -37,6 +37,7 @@ | |||
37 | #include "system.h" | 37 | #include "system.h" |
38 | #include "powermgmt.h" | 38 | #include "powermgmt.h" |
39 | #include "adc.h" | 39 | #include "adc.h" |
40 | #include "action.h" | ||
40 | 41 | ||
41 | #ifdef HAVE_LCD_BITMAP | 42 | #ifdef HAVE_LCD_BITMAP |
42 | #define BMPHEIGHT_usb_logo 32 | 43 | #define BMPHEIGHT_usb_logo 32 |
@@ -427,85 +428,128 @@ int on_screen(void) | |||
427 | return 0; | 428 | return 0; |
428 | } | 429 | } |
429 | 430 | ||
430 | bool f2_screen(void) | 431 | bool quick_screen(int context, int button) |
431 | { | 432 | { |
432 | bool exit = false; | 433 | bool exit = false; |
433 | bool used = false; | 434 | bool used = false; |
434 | int w, h; | 435 | int w, h, key; |
435 | char buf[32]; | 436 | char buf[32]; |
436 | int oldrepeat = global_settings.repeat_mode; | 437 | int oldrepeat = global_settings.repeat_mode; |
437 | 438 | ||
439 | /* just to stop compiler warning */ | ||
440 | context = context; | ||
438 | lcd_setfont(FONT_SYSFIXED); | 441 | lcd_setfont(FONT_SYSFIXED); |
439 | lcd_getstringsize("A",&w,&h); | 442 | |
443 | if(button==BUTTON_F2) | ||
444 | lcd_getstringsize("A",&w,&h); | ||
440 | 445 | ||
441 | while (!exit) { | 446 | while (!exit) { |
442 | char* ptr=NULL; | 447 | char* ptr=NULL; |
443 | 448 | ||
444 | lcd_clear_display(); | 449 | lcd_clear_display(); |
445 | 450 | ||
446 | /* Shuffle mode */ | 451 | switch(button) |
447 | lcd_putsxy(0, LCD_HEIGHT/2 - h*2, str(LANG_SHUFFLE)); | 452 | { |
448 | lcd_putsxy(0, LCD_HEIGHT/2 - h, str(LANG_F2_MODE)); | 453 | case BUTTON_F2: |
449 | lcd_putsxy(0, LCD_HEIGHT/2, | 454 | /* Shuffle mode */ |
450 | global_settings.playlist_shuffle ? | 455 | lcd_putsxy(0, LCD_HEIGHT/2 - h*2, str(LANG_SHUFFLE)); |
451 | str(LANG_ON) : str(LANG_OFF)); | 456 | lcd_putsxy(0, LCD_HEIGHT/2 - h, str(LANG_F2_MODE)); |
452 | lcd_bitmap(bitmap_icons_7x8[Icon_FastBackward], | 457 | lcd_putsxy(0, LCD_HEIGHT/2, |
453 | LCD_WIDTH/2 - 16, LCD_HEIGHT/2 - 4, 7, 8, true); | 458 | global_settings.playlist_shuffle ? |
454 | 459 | str(LANG_ON) : str(LANG_OFF)); | |
455 | /* Directory Filter */ | 460 | |
456 | switch ( global_settings.dirfilter ) { | 461 | /* Directory Filter */ |
457 | case SHOW_ALL: | 462 | switch ( global_settings.dirfilter ) { |
458 | ptr = str(LANG_FILTER_ALL); | 463 | case SHOW_ALL: |
459 | break; | 464 | ptr = str(LANG_FILTER_ALL); |
460 | 465 | break; | |
461 | case SHOW_SUPPORTED: | 466 | |
462 | ptr = str(LANG_FILTER_SUPPORTED); | 467 | case SHOW_SUPPORTED: |
463 | break; | 468 | ptr = str(LANG_FILTER_SUPPORTED); |
464 | 469 | break; | |
465 | case SHOW_MUSIC: | 470 | |
466 | ptr = str(LANG_FILTER_MUSIC); | 471 | case SHOW_MUSIC: |
472 | ptr = str(LANG_FILTER_MUSIC); | ||
473 | break; | ||
474 | |||
475 | case SHOW_PLAYLIST: | ||
476 | ptr = str(LANG_FILTER_PLAYLIST); | ||
477 | break; | ||
478 | } | ||
479 | |||
480 | snprintf(buf, sizeof buf, "%s:", str(LANG_FILTER)); | ||
481 | lcd_getstringsize(buf,&w,&h); | ||
482 | lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h*2, buf); | ||
483 | lcd_getstringsize(ptr,&w,&h); | ||
484 | lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h, ptr); | ||
485 | |||
486 | /* Repeat Mode */ | ||
487 | switch ( global_settings.repeat_mode ) { | ||
488 | case REPEAT_OFF: | ||
489 | ptr = str(LANG_OFF); | ||
490 | break; | ||
491 | |||
492 | case REPEAT_ALL: | ||
493 | ptr = str(LANG_REPEAT_ALL); | ||
494 | break; | ||
495 | |||
496 | case REPEAT_ONE: | ||
497 | ptr = str(LANG_REPEAT_ONE); | ||
498 | break; | ||
499 | } | ||
500 | |||
501 | lcd_getstringsize(str(LANG_REPEAT),&w,&h); | ||
502 | lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h*2, str(LANG_REPEAT)); | ||
503 | lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h, str(LANG_F2_MODE)); | ||
504 | lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2, ptr); | ||
467 | break; | 505 | break; |
468 | 506 | case BUTTON_F3: | |
469 | case SHOW_PLAYLIST: | 507 | /* Scrollbar */ |
470 | ptr = str(LANG_FILTER_PLAYLIST); | 508 | lcd_putsxy(0, LCD_HEIGHT/2 - h*2, str(LANG_F3_SCROLL)); |
509 | lcd_putsxy(0, LCD_HEIGHT/2 - h, str(LANG_F3_BAR)); | ||
510 | lcd_putsxy(0, LCD_HEIGHT/2, | ||
511 | global_settings.scrollbar ? str(LANG_ON) : str(LANG_OFF)); | ||
512 | |||
513 | /* Status bar */ | ||
514 | ptr = str(LANG_F3_STATUS); | ||
515 | lcd_getstringsize(ptr,&w,&h); | ||
516 | lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h*2, ptr); | ||
517 | lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h, str(LANG_F3_BAR)); | ||
518 | lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2, | ||
519 | global_settings.statusbar ? str(LANG_ON) : str(LANG_OFF)); | ||
520 | |||
521 | /* Flip */ | ||
522 | ptr = str(LANG_FLIP_DISPLAY); | ||
523 | lcd_getstringsize(ptr,&w,&h); | ||
524 | lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h*2, str(LANG_FLIP_DISPLAY)); | ||
525 | ptr = global_settings.flip_display ? | ||
526 | str(LANG_SET_BOOL_YES) : str(LANG_SET_BOOL_NO); | ||
527 | lcd_getstringsize(ptr,&w,&h); | ||
528 | lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h, ptr); | ||
471 | break; | 529 | break; |
472 | } | 530 | } |
473 | 531 | ||
474 | snprintf(buf, sizeof buf, "%s:", str(LANG_FILTER)); | 532 | lcd_bitmap(bitmap_icons_7x8[Icon_FastBackward], |
475 | lcd_getstringsize(buf,&w,&h); | 533 | LCD_WIDTH/2 - 16, LCD_HEIGHT/2 - 4, 7, 8, true); |
476 | lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h*2, buf); | ||
477 | lcd_getstringsize(ptr,&w,&h); | ||
478 | lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h, ptr); | ||
479 | lcd_bitmap(bitmap_icons_7x8[Icon_DownArrow], | 534 | lcd_bitmap(bitmap_icons_7x8[Icon_DownArrow], |
480 | LCD_WIDTH/2 - 3, LCD_HEIGHT - h*3, 7, 8, true); | 535 | LCD_WIDTH/2 - 3, LCD_HEIGHT - h*3, 7, 8, true); |
481 | |||
482 | /* Repeat Mode */ | ||
483 | switch ( global_settings.repeat_mode ) { | ||
484 | case REPEAT_OFF: | ||
485 | ptr = str(LANG_OFF); | ||
486 | break; | ||
487 | |||
488 | case REPEAT_ALL: | ||
489 | ptr = str(LANG_REPEAT_ALL); | ||
490 | break; | ||
491 | |||
492 | case REPEAT_ONE: | ||
493 | ptr = str(LANG_REPEAT_ONE); | ||
494 | break; | ||
495 | } | ||
496 | |||
497 | lcd_getstringsize(str(LANG_REPEAT),&w,&h); | ||
498 | lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h*2, str(LANG_REPEAT)); | ||
499 | lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h, str(LANG_F2_MODE)); | ||
500 | lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2, ptr); | ||
501 | lcd_bitmap(bitmap_icons_7x8[Icon_FastForward], | 536 | lcd_bitmap(bitmap_icons_7x8[Icon_FastForward], |
502 | LCD_WIDTH/2 + 8, LCD_HEIGHT/2 - 4, 7, 8, true); | 537 | LCD_WIDTH/2 + 8, LCD_HEIGHT/2 - 4, 7, 8, true); |
503 | 538 | ||
504 | lcd_update(); | 539 | lcd_update(); |
505 | 540 | key = button_get(true); | |
506 | switch (button_get(true)) { | 541 | |
507 | case BUTTON_LEFT: | 542 | /* |
543 | * This is a temporary kludge so that the F2 & F3 menus operate in exactly | ||
544 | * the same manner up until the full F2/F3 configurable menus are complete | ||
545 | */ | ||
546 | |||
547 | if( key == BUTTON_LEFT || key == BUTTON_RIGHT || key == BUTTON_DOWN || key == ( BUTTON_LEFT | BUTTON_REPEAT ) || key == ( BUTTON_RIGHT | BUTTON_REPEAT ) || key == ( BUTTON_DOWN | BUTTON_REPEAT ) ) | ||
548 | key = button | key; | ||
549 | |||
550 | switch (key) { | ||
508 | case BUTTON_F2 | BUTTON_LEFT: | 551 | case BUTTON_F2 | BUTTON_LEFT: |
552 | case BUTTON_F2 | BUTTON_LEFT | BUTTON_REPEAT: | ||
509 | global_settings.playlist_shuffle = | 553 | global_settings.playlist_shuffle = |
510 | !global_settings.playlist_shuffle; | 554 | !global_settings.playlist_shuffle; |
511 | 555 | ||
@@ -519,110 +563,38 @@ bool f2_screen(void) | |||
519 | used = true; | 563 | used = true; |
520 | break; | 564 | break; |
521 | 565 | ||
522 | case BUTTON_DOWN: | ||
523 | case BUTTON_F2 | BUTTON_DOWN: | 566 | case BUTTON_F2 | BUTTON_DOWN: |
567 | case BUTTON_F2 | BUTTON_DOWN | BUTTON_REPEAT: | ||
524 | global_settings.dirfilter++; | 568 | global_settings.dirfilter++; |
525 | if ( global_settings.dirfilter >= NUM_FILTER_MODES ) | 569 | if ( global_settings.dirfilter >= NUM_FILTER_MODES ) |
526 | global_settings.dirfilter = 0; | 570 | global_settings.dirfilter = 0; |
527 | used = true; | 571 | used = true; |
528 | break; | 572 | break; |
529 | 573 | ||
530 | case BUTTON_RIGHT: | ||
531 | case BUTTON_F2 | BUTTON_RIGHT: | 574 | case BUTTON_F2 | BUTTON_RIGHT: |
575 | case BUTTON_F2 | BUTTON_RIGHT | BUTTON_REPEAT: | ||
532 | global_settings.repeat_mode++; | 576 | global_settings.repeat_mode++; |
533 | if ( global_settings.repeat_mode >= NUM_REPEAT_MODES ) | 577 | if ( global_settings.repeat_mode >= NUM_REPEAT_MODES ) |
534 | global_settings.repeat_mode = 0; | 578 | global_settings.repeat_mode = 0; |
535 | used = true; | 579 | used = true; |
536 | break; | 580 | break; |
537 | 581 | ||
538 | case BUTTON_F2 | BUTTON_REL: | ||
539 | if ( used ) | ||
540 | exit = true; | ||
541 | used = true; | ||
542 | break; | ||
543 | |||
544 | case BUTTON_F2 | BUTTON_REPEAT: | ||
545 | used = true; | ||
546 | break; | ||
547 | |||
548 | case BUTTON_OFF | BUTTON_REPEAT: | ||
549 | return false; | ||
550 | |||
551 | case SYS_USB_CONNECTED: | ||
552 | usb_screen(); | ||
553 | return true; | ||
554 | } | ||
555 | } | ||
556 | |||
557 | settings_save(); | ||
558 | lcd_setfont(FONT_UI); | ||
559 | if ( oldrepeat != global_settings.repeat_mode ) | ||
560 | mpeg_flush_and_reload_tracks(); | ||
561 | |||
562 | return false; | ||
563 | } | ||
564 | |||
565 | bool f3_screen(void) | ||
566 | { | ||
567 | bool exit = false; | ||
568 | bool used = false; | ||
569 | |||
570 | lcd_setfont(FONT_SYSFIXED); | ||
571 | |||
572 | while (!exit) { | ||
573 | int w,h; | ||
574 | char* ptr; | ||
575 | |||
576 | lcd_clear_display(); | ||
577 | |||
578 | /* Scrollbar */ | ||
579 | lcd_putsxy(0, LCD_HEIGHT/2 - h*2, str(LANG_F3_SCROLL)); | ||
580 | lcd_putsxy(0, LCD_HEIGHT/2 - h, str(LANG_F3_BAR)); | ||
581 | lcd_putsxy(0, LCD_HEIGHT/2, | ||
582 | global_settings.scrollbar ? str(LANG_ON) : str(LANG_OFF)); | ||
583 | lcd_bitmap(bitmap_icons_7x8[Icon_FastBackward], | ||
584 | LCD_WIDTH/2 - 16, LCD_HEIGHT/2 - 4, 7, 8, true); | ||
585 | |||
586 | /* Status bar */ | ||
587 | ptr = str(LANG_F3_STATUS); | ||
588 | lcd_getstringsize(ptr,&w,&h); | ||
589 | lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h*2, ptr); | ||
590 | lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h, str(LANG_F3_BAR)); | ||
591 | lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2, | ||
592 | global_settings.statusbar ? str(LANG_ON) : str(LANG_OFF)); | ||
593 | lcd_bitmap(bitmap_icons_7x8[Icon_FastForward], | ||
594 | LCD_WIDTH/2 + 8, LCD_HEIGHT/2 - 4, 7, 8, true); | ||
595 | |||
596 | /* Flip */ | ||
597 | ptr = str(LANG_FLIP_DISPLAY); | ||
598 | lcd_getstringsize(ptr,&w,&h); | ||
599 | lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h*2, str(LANG_FLIP_DISPLAY)); | ||
600 | ptr = global_settings.flip_display ? | ||
601 | str(LANG_SET_BOOL_YES) : str(LANG_SET_BOOL_NO); | ||
602 | lcd_getstringsize(ptr,&w,&h); | ||
603 | lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h, ptr); | ||
604 | lcd_bitmap(bitmap_icons_7x8[Icon_DownArrow], | ||
605 | LCD_WIDTH/2 - 3, LCD_HEIGHT - h*3, 7, 8, true); | ||
606 | |||
607 | lcd_update(); | ||
608 | |||
609 | switch (button_get(true)) { | ||
610 | case BUTTON_LEFT: | ||
611 | case BUTTON_F3 | BUTTON_LEFT: | 582 | case BUTTON_F3 | BUTTON_LEFT: |
583 | case BUTTON_F3 | BUTTON_LEFT | BUTTON_REPEAT: | ||
612 | global_settings.scrollbar = !global_settings.scrollbar; | 584 | global_settings.scrollbar = !global_settings.scrollbar; |
613 | used = true; | 585 | used = true; |
614 | break; | 586 | break; |
615 | 587 | ||
616 | case BUTTON_RIGHT: | ||
617 | case BUTTON_F3 | BUTTON_RIGHT: | 588 | case BUTTON_F3 | BUTTON_RIGHT: |
589 | case BUTTON_F3 | BUTTON_RIGHT | BUTTON_REPEAT: | ||
618 | global_settings.statusbar = !global_settings.statusbar; | 590 | global_settings.statusbar = !global_settings.statusbar; |
619 | used = true; | 591 | used = true; |
620 | break; | 592 | break; |
621 | 593 | ||
622 | case BUTTON_DOWN: | ||
623 | case BUTTON_F3 | BUTTON_DOWN: | 594 | case BUTTON_F3 | BUTTON_DOWN: |
624 | case BUTTON_UP: /* allow "up" as well, more tolerant if tilted */ | 595 | case BUTTON_F3 | BUTTON_DOWN | BUTTON_REPEAT: |
625 | case BUTTON_F3 | BUTTON_UP: | 596 | case BUTTON_F3 | BUTTON_UP: |
597 | case BUTTON_F3 | BUTTON_UP | BUTTON_REPEAT: | ||
626 | global_settings.flip_display = !global_settings.flip_display; | 598 | global_settings.flip_display = !global_settings.flip_display; |
627 | button_set_flip(global_settings.flip_display); | 599 | button_set_flip(global_settings.flip_display); |
628 | lcd_set_flip(global_settings.flip_display); | 600 | lcd_set_flip(global_settings.flip_display); |
@@ -630,13 +602,13 @@ bool f3_screen(void) | |||
630 | break; | 602 | break; |
631 | 603 | ||
632 | case BUTTON_F3 | BUTTON_REL: | 604 | case BUTTON_F3 | BUTTON_REL: |
633 | if ( used ) | 605 | case BUTTON_F2 | BUTTON_REL: |
606 | |||
607 | if( used ) | ||
634 | exit = true; | 608 | exit = true; |
635 | used = true; | ||
636 | break; | ||
637 | 609 | ||
638 | case BUTTON_F3 | BUTTON_REPEAT: | ||
639 | used = true; | 610 | used = true; |
611 | |||
640 | break; | 612 | break; |
641 | 613 | ||
642 | case BUTTON_OFF | BUTTON_REPEAT: | 614 | case BUTTON_OFF | BUTTON_REPEAT: |
@@ -649,10 +621,25 @@ bool f3_screen(void) | |||
649 | } | 621 | } |
650 | 622 | ||
651 | settings_save(); | 623 | settings_save(); |
652 | if (global_settings.statusbar) | 624 | |
653 | lcd_setmargins(0, STATUSBAR_HEIGHT); | 625 | switch( button ) |
654 | else | 626 | { |
655 | lcd_setmargins(0, 0); | 627 | case BUTTON_F2: |
628 | |||
629 | if ( oldrepeat != global_settings.repeat_mode ) | ||
630 | mpeg_flush_and_reload_tracks(); | ||
631 | |||
632 | break; | ||
633 | case BUTTON_F3: | ||
634 | |||
635 | if (global_settings.statusbar) | ||
636 | lcd_setmargins(0, STATUSBAR_HEIGHT); | ||
637 | else | ||
638 | lcd_setmargins(0, 0); | ||
639 | |||
640 | break; | ||
641 | } | ||
642 | |||
656 | lcd_setfont(FONT_UI); | 643 | lcd_setfont(FONT_UI); |
657 | 644 | ||
658 | return false; | 645 | return false; |