summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Everton <dan@iocaine.org>2006-06-23 12:14:07 +0000
committerDan Everton <dan@iocaine.org>2006-06-23 12:14:07 +0000
commit1f28a141e13a8c0096db3b3ff8f86dc29a629426 (patch)
tree3418351d0f3658a86ac27e7f95a5cc3ff3669d9e
parentdbd4406ca8b18e8896f235f7096514ec4f664cf9 (diff)
downloadrockbox-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
-rw-r--r--apps/eq_menu.c110
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