diff options
author | Dan Everton <dan@iocaine.org> | 2006-06-23 12:14:07 +0000 |
---|---|---|
committer | Dan Everton <dan@iocaine.org> | 2006-06-23 12:14:07 +0000 |
commit | 1f28a141e13a8c0096db3b3ff8f86dc29a629426 (patch) | |
tree | 3418351d0f3658a86ac27e7f95a5cc3ff3669d9e /apps | |
parent | dbd4406ca8b18e8896f235f7096514ec4f664cf9 (diff) | |
download | rockbox-1f28a141e13a8c0096db3b3ff8f86dc29a629426.tar.gz rockbox-1f28a141e13a8c0096db3b3ff8f86dc29a629426.zip |
Add LCD remote interface for the graphical equalizer. Patch #5585 from jdgordon.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10148 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r-- | apps/eq_menu.c | 110 |
1 files changed, 95 insertions, 15 deletions
diff --git a/apps/eq_menu.c b/apps/eq_menu.c index 63c6fa20f8..c78890de15 100644 --- a/apps/eq_menu.c +++ b/apps/eq_menu.c | |||
@@ -58,6 +58,13 @@ | |||
58 | #define EQ_BTN_CHANGE_MODE BUTTON_SELECT | 58 | #define EQ_BTN_CHANGE_MODE BUTTON_SELECT |
59 | #define EQ_BTN_EXIT BUTTON_OFF | 59 | #define EQ_BTN_EXIT BUTTON_OFF |
60 | 60 | ||
61 | #define EQ_BTN_RC_PREV_BAND BUTTON_RC_REW | ||
62 | #define EQ_BTN_RC_NEXT_BAND BUTTON_RC_FF | ||
63 | #define EQ_BTN_RC_DECREMENT BUTTON_RC_SOURCE | ||
64 | #define EQ_BTN_RC_INCREMENT BUTTON_RC_BITRATE | ||
65 | #define EQ_BTN_RC_CHANGE_MODE BUTTON_RC_MENU | ||
66 | #define EQ_BTN_RC_EXIT BUTTON_RC_STOP | ||
67 | |||
61 | #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \ | 68 | #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \ |
62 | (CONFIG_KEYPAD == IPOD_3G_PAD) | 69 | (CONFIG_KEYPAD == IPOD_3G_PAD) |
63 | 70 | ||
@@ -452,6 +459,40 @@ static int draw_eq_slider(struct screen * screen, int x, int y, | |||
452 | screen->set_drawmode(DRMODE_SOLID); | 459 | screen->set_drawmode(DRMODE_SOLID); |
453 | screen->putsxy(current_x, y + 2, separator); | 460 | screen->putsxy(current_x, y + 2, separator); |
454 | current_x += separator_width; | 461 | current_x += separator_width; |
462 | #ifdef HAVE_REMOTE_LCD | ||
463 | if (screen->screen_type == SCREEN_REMOTE) { | ||
464 | if (mode == GAIN) { | ||
465 | screen->putsxy(current_x, y + 2, str(LANG_EQUALIZER_BAND_GAIN)); | ||
466 | screen->getstringsize(str(LANG_EQUALIZER_BAND_GAIN), &w, &h); | ||
467 | } else if (mode == CUTOFF) { | ||
468 | screen->putsxy(current_x, y + 2, str(LANG_EQUALIZER_BAND_CUTOFF)); | ||
469 | screen->getstringsize(str(LANG_EQUALIZER_BAND_CUTOFF), &w, &h); | ||
470 | } else { | ||
471 | screen->putsxy(current_x, y + 2, str(LANG_EQUALIZER_BAND_Q)); | ||
472 | screen->getstringsize(str(LANG_EQUALIZER_BAND_Q), &w, &h); | ||
473 | } | ||
474 | |||
475 | /* Draw horizontal slider. Reuse scrollbar for this */ | ||
476 | gui_scrollbar_draw(screen, x + 3, y + h + 3, width - 6, slider_height, steps, | ||
477 | min_item, max_item, HORIZONTAL); | ||
478 | |||
479 | /* Print out cutoff part */ | ||
480 | snprintf(buf, sizeof(buf), "%sGain %s%2d.%ddB",mode==GAIN?" > ":" ", gain < 0 ? "-" : " ", | ||
481 | abs_gain / EQ_USER_DIVISOR, abs_gain % EQ_USER_DIVISOR); | ||
482 | screen->getstringsize(buf, &w, &h); | ||
483 | y = 3*h; | ||
484 | screen->putsxy(0, y, buf); | ||
485 | /* Print out cutoff part */ | ||
486 | snprintf(buf, sizeof(buf), "%sCutoff %5dHz",mode==CUTOFF?" > ":" ", cutoff); | ||
487 | y += h; | ||
488 | screen->putsxy(0, y, buf); | ||
489 | snprintf(buf, sizeof(buf), "%sQ setting %d.%d Q",mode==Q?" > ":" ", q / EQ_USER_DIVISOR, | ||
490 | q % EQ_USER_DIVISOR); | ||
491 | y += h; | ||
492 | screen->putsxy(0, y, buf); | ||
493 | return y; | ||
494 | } | ||
495 | #endif | ||
455 | 496 | ||
456 | /* Print out gain part of status line */ | 497 | /* Print out gain part of status line */ |
457 | snprintf(buf, sizeof(buf), "%s%2d.%ddB", gain < 0 ? "-" : " ", | 498 | snprintf(buf, sizeof(buf), "%s%2d.%ddB", gain < 0 ? "-" : " ", |
@@ -514,11 +555,14 @@ static int draw_eq_sliders(int current_band, enum eq_slider_mode mode) | |||
514 | { | 555 | { |
515 | int i, gain, q, cutoff; | 556 | int i, gain, q, cutoff; |
516 | int height = 2; /* Two pixel margin */ | 557 | int height = 2; /* Two pixel margin */ |
517 | int slider_width = screens[SCREEN_MAIN].width - 4; /* two pixel margin on each side */ | 558 | int slider_width[NB_SCREENS]; |
518 | int *setting = &global_settings.eq_band0_cutoff; | 559 | int *setting = &global_settings.eq_band0_cutoff; |
519 | enum eq_type type; | 560 | enum eq_type type; |
520 | 561 | ||
521 | for( i = 0; i < 5; ++i) { | 562 | FOR_NB_SCREENS(i) |
563 | slider_width[i] = screens[i].width - 4; /* two pixel margin on each side */ | ||
564 | |||
565 | for (i=0; i<5; i++) { | ||
522 | cutoff = *setting++; | 566 | cutoff = *setting++; |
523 | q = *setting++; | 567 | q = *setting++; |
524 | gain = *setting++; | 568 | gain = *setting++; |
@@ -530,10 +574,14 @@ static int draw_eq_sliders(int current_band, enum eq_slider_mode mode) | |||
530 | } else { | 574 | } else { |
531 | type = PEAK; | 575 | type = PEAK; |
532 | } | 576 | } |
533 | |||
534 | height += draw_eq_slider(&(screens[SCREEN_MAIN]), 2, height, | 577 | height += draw_eq_slider(&(screens[SCREEN_MAIN]), 2, height, |
535 | slider_width, cutoff, q, gain, i == current_band, mode, type); | 578 | slider_width[SCREEN_MAIN], cutoff, q, gain, |
536 | 579 | i == current_band, mode, type); | |
580 | #ifdef HAVE_REMOTE_LCD | ||
581 | if (i == current_band) | ||
582 | draw_eq_slider(&(screens[SCREEN_REMOTE]), 2, 0, | ||
583 | slider_width[SCREEN_REMOTE], cutoff, q, gain,1, mode, type); | ||
584 | #endif | ||
537 | /* add a margin */ | 585 | /* add a margin */ |
538 | height += 2; | 586 | height += 2; |
539 | } | 587 | } |
@@ -553,9 +601,12 @@ bool eq_menu_graphical(void) | |||
553 | enum eq_slider_mode mode; | 601 | enum eq_slider_mode mode; |
554 | enum eq_type current_type; | 602 | enum eq_type current_type; |
555 | char buf[24]; | 603 | char buf[24]; |
604 | int i; | ||
556 | 605 | ||
557 | screens[SCREEN_MAIN].setfont(FONT_SYSFIXED); | 606 | FOR_NB_SCREENS(i) { |
558 | screens[SCREEN_MAIN].clear_display(); | 607 | screens[i].setfont(FONT_SYSFIXED); |
608 | screens[i].clear_display(); | ||
609 | } | ||
559 | 610 | ||
560 | /* Start off editing gain on the first band */ | 611 | /* Start off editing gain on the first band */ |
561 | mode = GAIN; | 612 | mode = GAIN; |
@@ -563,11 +614,13 @@ bool eq_menu_graphical(void) | |||
563 | current_band = 0; | 614 | current_band = 0; |
564 | 615 | ||
565 | while (!exit_request) { | 616 | while (!exit_request) { |
566 | /* Clear the screen. The drawing routines expect this */ | ||
567 | screens[SCREEN_MAIN].clear_display(); | ||
568 | 617 | ||
569 | /* Draw equalizer band details */ | 618 | FOR_NB_SCREENS(i) { |
570 | y = draw_eq_sliders(current_band, mode); | 619 | /* Clear the screen. The drawing routines expect this */ |
620 | screens[i].clear_display(); | ||
621 | /* Draw equalizer band details */ | ||
622 | y = draw_eq_sliders(current_band, mode); | ||
623 | } | ||
571 | 624 | ||
572 | /* Set pointer to the band data currently editable */ | 625 | /* Set pointer to the band data currently editable */ |
573 | if (mode == GAIN) { | 626 | if (mode == GAIN) { |
@@ -617,13 +670,19 @@ bool eq_menu_graphical(void) | |||
617 | screens[SCREEN_MAIN].putsxy(2, y, buf); | 670 | screens[SCREEN_MAIN].putsxy(2, y, buf); |
618 | } | 671 | } |
619 | 672 | ||
620 | screens[SCREEN_MAIN].update(); | 673 | FOR_NB_SCREENS(i) { |
674 | screens[i].update(); | ||
675 | } | ||
621 | 676 | ||
622 | button = button_get(true); | 677 | button = button_get(true); |
623 | 678 | ||
624 | switch (button) { | 679 | switch (button) { |
625 | case EQ_BTN_DECREMENT: | 680 | case EQ_BTN_DECREMENT: |
626 | case EQ_BTN_DECREMENT | BUTTON_REPEAT: | 681 | case EQ_BTN_DECREMENT | BUTTON_REPEAT: |
682 | #ifdef EQ_BTN_RC_DECREMENT | ||
683 | case EQ_BTN_RC_DECREMENT: | ||
684 | case EQ_BTN_RC_DECREMENT | BUTTON_REPEAT: | ||
685 | #endif | ||
627 | *(setting) -= step; | 686 | *(setting) -= step; |
628 | has_changed = true; | 687 | has_changed = true; |
629 | if (*(setting) < min) | 688 | if (*(setting) < min) |
@@ -632,6 +691,10 @@ bool eq_menu_graphical(void) | |||
632 | 691 | ||
633 | case EQ_BTN_INCREMENT: | 692 | case EQ_BTN_INCREMENT: |
634 | case EQ_BTN_INCREMENT | BUTTON_REPEAT: | 693 | case EQ_BTN_INCREMENT | BUTTON_REPEAT: |
694 | #ifdef EQ_BTN_RC_INCREMENT | ||
695 | case EQ_BTN_RC_INCREMENT: | ||
696 | case EQ_BTN_RC_INCREMENT | BUTTON_REPEAT: | ||
697 | #endif | ||
635 | *(setting) += step; | 698 | *(setting) += step; |
636 | has_changed = true; | 699 | has_changed = true; |
637 | if (*(setting) > max) | 700 | if (*(setting) > max) |
@@ -658,6 +721,10 @@ bool eq_menu_graphical(void) | |||
658 | 721 | ||
659 | case EQ_BTN_PREV_BAND: | 722 | case EQ_BTN_PREV_BAND: |
660 | case EQ_BTN_PREV_BAND | BUTTON_REPEAT: | 723 | case EQ_BTN_PREV_BAND | BUTTON_REPEAT: |
724 | #ifdef EQ_BTN_RC_PREV_BAND | ||
725 | case EQ_BTN_RC_PREV_BAND: | ||
726 | case EQ_BTN_RC_PREV_BAND | BUTTON_REPEAT: | ||
727 | #endif | ||
661 | current_band--; | 728 | current_band--; |
662 | if (current_band < 0) | 729 | if (current_band < 0) |
663 | current_band = 4; /* wrap around */ | 730 | current_band = 4; /* wrap around */ |
@@ -665,6 +732,10 @@ bool eq_menu_graphical(void) | |||
665 | 732 | ||
666 | case EQ_BTN_NEXT_BAND: | 733 | case EQ_BTN_NEXT_BAND: |
667 | case EQ_BTN_NEXT_BAND | BUTTON_REPEAT: | 734 | case EQ_BTN_NEXT_BAND | BUTTON_REPEAT: |
735 | #ifdef EQ_BTN_RC_NEXT_BAND | ||
736 | case EQ_BTN_RC_NEXT_BAND: | ||
737 | case EQ_BTN_RC_NEXT_BAND | BUTTON_REPEAT: | ||
738 | #endif | ||
668 | current_band++; | 739 | current_band++; |
669 | if (current_band > 4) | 740 | if (current_band > 4) |
670 | current_band = 0; /* wrap around */ | 741 | current_band = 0; /* wrap around */ |
@@ -672,6 +743,10 @@ bool eq_menu_graphical(void) | |||
672 | 743 | ||
673 | case EQ_BTN_CHANGE_MODE: | 744 | case EQ_BTN_CHANGE_MODE: |
674 | case EQ_BTN_CHANGE_MODE | BUTTON_REPEAT: | 745 | case EQ_BTN_CHANGE_MODE | BUTTON_REPEAT: |
746 | #ifdef EQ_BTN_RC_CHANGE_MODE | ||
747 | case EQ_BTN_RC_CHANGE_MODE: | ||
748 | case EQ_BTN_RC_CHANGE_MODE | BUTTON_REPEAT: | ||
749 | #endif | ||
675 | mode++; | 750 | mode++; |
676 | if (mode > Q) | 751 | if (mode > Q) |
677 | mode = GAIN; /* wrap around */ | 752 | mode = GAIN; /* wrap around */ |
@@ -679,6 +754,10 @@ bool eq_menu_graphical(void) | |||
679 | 754 | ||
680 | case EQ_BTN_EXIT: | 755 | case EQ_BTN_EXIT: |
681 | case EQ_BTN_EXIT | BUTTON_REPEAT: | 756 | case EQ_BTN_EXIT | BUTTON_REPEAT: |
757 | #ifdef EQ_BTN_RC_EXIT | ||
758 | case EQ_BTN_RC_EXIT: | ||
759 | case EQ_BTN_RC_EXIT | BUTTON_REPEAT: | ||
760 | #endif | ||
682 | exit_request = true; | 761 | exit_request = true; |
683 | result = false; | 762 | result = false; |
684 | break; | 763 | break; |
@@ -699,9 +778,10 @@ bool eq_menu_graphical(void) | |||
699 | } | 778 | } |
700 | 779 | ||
701 | /* Reset screen settings */ | 780 | /* Reset screen settings */ |
702 | screens[SCREEN_MAIN].setfont(FONT_UI); | 781 | FOR_NB_SCREENS(i) { |
703 | screens[SCREEN_MAIN].clear_display(); | 782 | screens[i].setfont(FONT_UI); |
704 | 783 | screens[i].clear_display(); | |
784 | } | ||
705 | return result; | 785 | return result; |
706 | } | 786 | } |
707 | 787 | ||