summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/menu.c47
-rw-r--r--apps/settings.c133
-rw-r--r--apps/sound_menu.c62
3 files changed, 205 insertions, 37 deletions
diff --git a/apps/menu.c b/apps/menu.c
index 4be4e78e87..93e8394011 100644
--- a/apps/menu.c
+++ b/apps/menu.c
@@ -23,13 +23,15 @@
23#include "kernel.h" 23#include "kernel.h"
24#include "debug.h" 24#include "debug.h"
25#include "panic.h" 25#include "panic.h"
26 26#include "settings.h"
27#include "status.h"
27#ifdef HAVE_LCD_BITMAP 28#ifdef HAVE_LCD_BITMAP
28#include "icons.h" 29#include "icons.h"
29#endif 30#endif
30#ifdef LOADABLE_FONTS 31#ifdef LOADABLE_FONTS
31#include "ajf.h" 32#include "ajf.h"
32#endif 33#endif
34
33struct menu { 35struct menu {
34 int top; 36 int top;
35 int cursor; 37 int cursor;
@@ -40,7 +42,9 @@ struct menu {
40#define MAX_MENUS 4 42#define MAX_MENUS 4
41 43
42#ifdef HAVE_LCD_BITMAP 44#ifdef HAVE_LCD_BITMAP
43#define MENU_LINES 8 45#define LINE_Y (global_settings.statusbar ? 1 : 0) /* Y position the entry-list starts at */
46#define LINE_HEIGTH 8 /* pixels for each text line */
47#define MENU_LINES (LCD_HEIGHT / LINE_HEIGTH - LINE_Y)
44#else 48#else
45#define MENU_LINES 2 49#define MENU_LINES 2
46#endif 50#endif
@@ -71,7 +75,7 @@ void put_cursorxy(int x, int y, bool on)
71 if(on) { 75 if(on) {
72#ifdef HAVE_LCD_BITMAP 76#ifdef HAVE_LCD_BITMAP
73 lcd_bitmap ( bitmap_icons_6x8[Cursor], 77 lcd_bitmap ( bitmap_icons_6x8[Cursor],
74 x*6, y*fh, 4, 8, true); 78 x*6, y*fh + lcd_getymargin(), 4, 8, true);
75#elif defined(SIMULATOR) 79#elif defined(SIMULATOR)
76 /* player simulator */ 80 /* player simulator */
77 unsigned char cursor[] = { 0x7f, 0x3e, 0x1c, 0x08 }; 81 unsigned char cursor[] = { 0x7f, 0x3e, 0x1c, 0x08 };
@@ -83,7 +87,7 @@ void put_cursorxy(int x, int y, bool on)
83 else { 87 else {
84#if defined(HAVE_LCD_BITMAP) 88#if defined(HAVE_LCD_BITMAP)
85 /* I use xy here since it needs to disregard the margins */ 89 /* I use xy here since it needs to disregard the margins */
86 lcd_clearrect (x*6, y*fh, 4, 8); 90 lcd_clearrect (x*6, y*fh + lcd_getymargin(), 4, 8);
87#elif defined(SIMULATOR) 91#elif defined(SIMULATOR)
88 /* player simulator in action */ 92 /* player simulator in action */
89 lcd_clearrect (x*6, 12+y*16, 4, 8); 93 lcd_clearrect (x*6, 12+y*16, 4, 8);
@@ -101,7 +105,10 @@ static void menu_draw(int m)
101 int fh; 105 int fh;
102 unsigned char* font = lcd_getcurrentldfont(); 106 unsigned char* font = lcd_getcurrentldfont();
103 fh = ajf_get_fontheight(font); 107 fh = ajf_get_fontheight(font);
104 menu_lines = LCD_HEIGHT/fh; 108 if (global_settings.statusbar)
109 menu_lines = (LCD_HEIGHT - STATUSBAR_HEIGHT) / fh;
110 else
111 menu_lines = LCD_HEIGHT/fh;
105#else 112#else
106 int menu_lines = MENU_LINES; 113 int menu_lines = MENU_LINES;
107#endif 114#endif
@@ -109,9 +116,16 @@ static void menu_draw(int m)
109 lcd_clear_display(); 116 lcd_clear_display();
110 lcd_stop_scroll(); 117 lcd_stop_scroll();
111#ifdef HAVE_LCD_BITMAP 118#ifdef HAVE_LCD_BITMAP
112 lcd_setmargins(0,0); 119 if(global_settings.statusbar)
120 lcd_setmargins(0, STATUSBAR_HEIGHT);
121 else
122 lcd_setmargins(0, 0);
113 lcd_setfont(0); 123 lcd_setfont(0);
114#endif 124#endif
125 /* correct cursor pos if out of screen */
126 if (menus[m].cursor - menus[m].top >= menu_lines)
127 menus[m].top++;
128
115 for (i = menus[m].top; 129 for (i = menus[m].top;
116 (i < menus[m].itemcount) && (i<menus[m].top+menu_lines); 130 (i < menus[m].itemcount) && (i<menus[m].top+menu_lines);
117 i++) { 131 i++) {
@@ -123,6 +137,9 @@ static void menu_draw(int m)
123 137
124 /* place the cursor */ 138 /* place the cursor */
125 put_cursorxy(0, menus[m].cursor - menus[m].top, true); 139 put_cursorxy(0, menus[m].cursor - menus[m].top, true);
140#ifdef HAVE_LCD_BITMAP
141 status_draw();
142#endif
126 lcd_update(); 143 lcd_update();
127} 144}
128 145
@@ -138,7 +155,10 @@ static void put_cursor(int m, int target)
138 int fh; 155 int fh;
139 unsigned char* font = lcd_getcurrentldfont(); 156 unsigned char* font = lcd_getcurrentldfont();
140 fh = ajf_get_fontheight(font); 157 fh = ajf_get_fontheight(font);
141 menu_lines = LCD_HEIGHT/fh; 158 if (global_settings.statusbar)
159 menu_lines = (LCD_HEIGHT-STATUSBAR_HEIGHT)/fh;
160 else
161 menu_lines = LCD_HEIGHT/fh;
142#else 162#else
143 int menu_lines = MENU_LINES; 163 int menu_lines = MENU_LINES;
144#endif 164#endif
@@ -196,7 +216,7 @@ void menu_run(int m)
196 menu_draw(m); 216 menu_draw(m);
197 217
198 while(1) { 218 while(1) {
199 switch( button_get(true) ) { 219 switch( button_get_w_tmo(HZ/2) ) {
200#ifdef HAVE_RECORDER_KEYPAD 220#ifdef HAVE_RECORDER_KEYPAD
201 case BUTTON_UP: 221 case BUTTON_UP:
202 case BUTTON_UP | BUTTON_REPEAT: 222 case BUTTON_UP | BUTTON_REPEAT:
@@ -247,10 +267,21 @@ void menu_run(int m)
247 lcd_stop_scroll(); 267 lcd_stop_scroll();
248 return; 268 return;
249 269
270#ifdef HAVE_RECORDER_KEYPAD
271 case BUTTON_F3:
272#ifdef HAVE_LCD_BITMAP
273 global_settings.statusbar = !global_settings.statusbar;
274 settings_save();
275 menu_draw(m);
276#endif
277 break;
278#endif
279
250 default: 280 default:
251 break; 281 break;
252 } 282 }
253 283
284 status_draw();
254 lcd_update(); 285 lcd_update();
255 } 286 }
256} 287}
diff --git a/apps/settings.c b/apps/settings.c
index 00510a9204..74843fe20d 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -34,6 +34,10 @@
34#include "power.h" 34#include "power.h"
35#include "backlight.h" 35#include "backlight.h"
36#include "powermgmt.h" 36#include "powermgmt.h"
37#include "status.h"
38#ifdef HAVE_LCD_BITMAP
39#include "icons.h"
40#endif
37 41
38struct user_settings global_settings; 42struct user_settings global_settings;
39 43
@@ -440,14 +444,23 @@ void set_bool(char* string, bool* variable )
440 bool done = false; 444 bool done = false;
441 int button; 445 int button;
442 446
447#ifdef HAVE_LCD_BITMAP
448 if(global_settings.statusbar)
449 lcd_setmargins(0, STATUSBAR_HEIGHT);
450 else
451 lcd_setmargins(0, 0);
452#endif
443 lcd_clear_display(); 453 lcd_clear_display();
444 lcd_puts_scroll(0,0,string); 454 lcd_puts_scroll(0, 0, string);
445 455
446 while ( !done ) { 456 while ( !done ) {
447 lcd_puts(0, 1, *variable ? "on " : "off"); 457 lcd_puts(0, 1, *variable ? "on " : "off");
458#ifdef HAVE_LCD_BITMAP
459 status_draw();
460#endif
448 lcd_update(); 461 lcd_update();
449 462
450 button = button_get(true); 463 button = button_get_w_tmo(HZ/2);
451 switch ( button ) { 464 switch ( button ) {
452#ifdef HAVE_RECORDER_KEYPAD 465#ifdef HAVE_RECORDER_KEYPAD
453 case BUTTON_LEFT: 466 case BUTTON_LEFT:
@@ -458,10 +471,31 @@ void set_bool(char* string, bool* variable )
458 done = true; 471 done = true;
459 break; 472 break;
460 473
461 default: 474#ifdef HAVE_RECORDER_KEYPAD
475 case BUTTON_UP:
476 case BUTTON_DOWN:
477#else
478 case BUTTON_LEFT:
479 case BUTTON_RIGHT:
480#endif
462 if(!(button & BUTTON_REL)) 481 if(!(button & BUTTON_REL))
463 *variable = !*variable; 482 *variable = !*variable;
464 break; 483 break;
484
485#ifdef HAVE_RECORDER_KEYPAD
486 case BUTTON_F3:
487#ifdef HAVE_LCD_BITMAP
488 global_settings.statusbar = !global_settings.statusbar;
489 settings_save();
490 if(global_settings.statusbar)
491 lcd_setmargins(0, STATUSBAR_HEIGHT);
492 else
493 lcd_setmargins(0, 0);
494 lcd_clear_display();
495 lcd_puts_scroll(0, 0, string);
496#endif
497 break;
498#endif
465 } 499 }
466 } 500 }
467 lcd_stop_scroll(); 501 lcd_stop_scroll();
@@ -477,16 +511,25 @@ void set_int(char* string,
477{ 511{
478 bool done = false; 512 bool done = false;
479 513
514#ifdef HAVE_LCD_BITMAP
515 if(global_settings.statusbar)
516 lcd_setmargins(0, STATUSBAR_HEIGHT);
517 else
518 lcd_setmargins(0, 0);
519#endif
480 lcd_clear_display(); 520 lcd_clear_display();
481 lcd_puts_scroll(0,0,string); 521 lcd_puts_scroll(0, 0, string);
482 522
483 while (!done) { 523 while (!done) {
484 char str[32]; 524 char str[32];
485 snprintf(str,sizeof str,"%d %s ", *variable, unit); 525 snprintf(str,sizeof str,"%d %s ", *variable, unit);
486 lcd_puts(0,1,str); 526 lcd_puts(0, 1, str);
527#ifdef HAVE_LCD_BITMAP
528 status_draw();
529#endif
487 lcd_update(); 530 lcd_update();
488 531
489 switch( button_get(true) ) { 532 switch( button_get_w_tmo(HZ/2) ) {
490#ifdef HAVE_RECORDER_KEYPAD 533#ifdef HAVE_RECORDER_KEYPAD
491 case BUTTON_UP: 534 case BUTTON_UP:
492 case BUTTON_UP | BUTTON_REPEAT: 535 case BUTTON_UP | BUTTON_REPEAT:
@@ -519,6 +562,21 @@ void set_int(char* string,
519#endif 562#endif
520 done = true; 563 done = true;
521 break; 564 break;
565
566#ifdef HAVE_RECORDER_KEYPAD
567 case BUTTON_F3:
568#ifdef HAVE_LCD_BITMAP
569 global_settings.statusbar = !global_settings.statusbar;
570 settings_save();
571 if(global_settings.statusbar)
572 lcd_setmargins(0, STATUSBAR_HEIGHT);
573 else
574 lcd_setmargins(0, 0);
575 lcd_clear_display();
576 lcd_puts_scroll(0, 0, string);
577#endif
578 break;
579#endif
522 } 580 }
523 if ( function ) 581 if ( function )
524 function(*variable); 582 function(*variable);
@@ -530,14 +588,23 @@ void set_option(char* string, int* variable, char* options[], int numoptions )
530{ 588{
531 bool done = false; 589 bool done = false;
532 590
591#ifdef HAVE_LCD_BITMAP
592 if(global_settings.statusbar)
593 lcd_setmargins(0, STATUSBAR_HEIGHT);
594 else
595 lcd_setmargins(0, 0);
596#endif
533 lcd_clear_display(); 597 lcd_clear_display();
534 lcd_puts_scroll(0,0,string); 598 lcd_puts_scroll(0, 0, string);
535 599
536 while ( !done ) { 600 while ( !done ) {
537 lcd_puts(0, 1, options[*variable]); 601 lcd_puts(0, 1, options[*variable]);
602#ifdef HAVE_LCD_BITMAP
603 status_draw();
604#endif
538 lcd_update(); 605 lcd_update();
539 606
540 switch ( button_get(true) ) { 607 switch ( button_get_w_tmo(HZ/2) ) {
541#ifdef HAVE_RECORDER_KEYPAD 608#ifdef HAVE_RECORDER_KEYPAD
542 case BUTTON_UP: 609 case BUTTON_UP:
543 case BUTTON_UP | BUTTON_REPEAT: 610 case BUTTON_UP | BUTTON_REPEAT:
@@ -568,6 +635,21 @@ void set_option(char* string, int* variable, char* options[], int numoptions )
568#endif 635#endif
569 done = true; 636 done = true;
570 break; 637 break;
638
639#ifdef HAVE_RECORDER_KEYPAD
640 case BUTTON_F3:
641#ifdef HAVE_LCD_BITMAP
642 global_settings.statusbar = !global_settings.statusbar;
643 settings_save();
644 if(global_settings.statusbar)
645 lcd_setmargins(0, STATUSBAR_HEIGHT);
646 else
647 lcd_setmargins(0, 0);
648 lcd_clear_display();
649 lcd_puts_scroll(0, 0, string);
650#endif
651 break;
652#endif
571 } 653 }
572 } 654 }
573 lcd_stop_scroll(); 655 lcd_stop_scroll();
@@ -605,6 +687,12 @@ void set_time(char* string, int timedate[])
605#endif 687#endif
606#endif 688#endif
607 689
690#ifdef HAVE_LCD_BITMAP
691 if(global_settings.statusbar)
692 lcd_setmargins(0, STATUSBAR_HEIGHT);
693 else
694 lcd_setmargins(0, 0);
695#endif
608 lcd_clear_display(); 696 lcd_clear_display();
609 lcd_puts_scroll(0, 0, string); 697 lcd_puts_scroll(0, 0, string);
610 698
@@ -734,7 +822,7 @@ void set_time(char* string, int timedate[])
734 cursor[5][INDEX_WIDTH] = width + strlen(reffub) - 1; 822 cursor[5][INDEX_WIDTH] = width + strlen(reffub) - 1;
735 823
736 lcd_invertrect(cursor[cursorpos][INDEX_X], 824 lcd_invertrect(cursor[cursorpos][INDEX_X],
737 cursor[cursorpos][INDEX_Y], 825 cursor[cursorpos][INDEX_Y] + lcd_getymargin(),
738 cursor[cursorpos][INDEX_WIDTH], 826 cursor[cursorpos][INDEX_WIDTH],
739 line_height); 827 line_height);
740#elif defined(LOADABLE_FONTS) 828#elif defined(LOADABLE_FONTS)
@@ -770,17 +858,20 @@ void set_time(char* string, int timedate[])
770 cursor[5][INDEX_WIDTH] = width; 858 cursor[5][INDEX_WIDTH] = width;
771 859
772 lcd_invertrect(cursor[cursorpos][INDEX_X], 860 lcd_invertrect(cursor[cursorpos][INDEX_X],
773 cursor[cursorpos][INDEX_Y], 861 cursor[cursorpos][INDEX_Y] + lcd_getymargin(),
774 cursor[cursorpos][INDEX_WIDTH], 862 cursor[cursorpos][INDEX_WIDTH],
775 line_height); 863 line_height);
776#else 864#else
777 lcd_invertrect(cursor[cursorpos][INDEX_X], 865 lcd_invertrect(cursor[cursorpos][INDEX_X],
778 cursor[cursorpos][INDEX_Y], 866 cursor[cursorpos][INDEX_Y] + lcd_getymargin(),
779 cursor[cursorpos][INDEX_WIDTH], 867 cursor[cursorpos][INDEX_WIDTH],
780 8); 868 8);
781#endif 869#endif
782 lcd_puts(0,4,"ON to set"); 870 lcd_puts(0, 4, "ON to set");
783 lcd_puts(0,5,"OFF to revert"); 871 lcd_puts(0, 5, "OFF to revert");
872#ifdef HAVE_LCD_BITMAP
873 status_draw();
874#endif
784 lcd_update(); 875 lcd_update();
785 876
786 /* calculate the minimum and maximum for the number under cursor */ 877 /* calculate the minimum and maximum for the number under cursor */
@@ -811,7 +902,7 @@ void set_time(char* string, int timedate[])
811 } 902 }
812 } 903 }
813 904
814 button = button_get(true); 905 button = button_get_w_tmo(HZ/2);
815 switch ( button ) { 906 switch ( button ) {
816 case BUTTON_LEFT: 907 case BUTTON_LEFT:
817 cursorpos = (cursorpos + 6 - 1) % 6; 908 cursorpos = (cursorpos + 6 - 1) % 6;
@@ -838,6 +929,20 @@ void set_time(char* string, int timedate[])
838 done = true; 929 done = true;
839 timedate[0] = -1; 930 timedate[0] = -1;
840 break; 931 break;
932#ifdef HAVE_RECORDER_KEYPAD
933 case BUTTON_F3:
934#ifdef HAVE_LCD_BITMAP
935 global_settings.statusbar = !global_settings.statusbar;
936 settings_save();
937 if(global_settings.statusbar)
938 lcd_setmargins(0, STATUSBAR_HEIGHT);
939 else
940 lcd_setmargins(0, 0);
941 lcd_clear_display();
942 lcd_puts_scroll(0, 0, string);
943#endif
944 break;
945#endif
841 default: 946 default:
842 break; 947 break;
843 } 948 }
diff --git a/apps/sound_menu.c b/apps/sound_menu.c
index 1b44859a2b..606fc8f3f5 100644
--- a/apps/sound_menu.c
+++ b/apps/sound_menu.c
@@ -19,12 +19,16 @@
19#include "config.h" 19#include "config.h"
20#include <stdio.h> 20#include <stdio.h>
21#include <stdbool.h> 21#include <stdbool.h>
22#include "kernel.h"
22#include "lcd.h" 23#include "lcd.h"
23#include "menu.h" 24#include "menu.h"
24#include "button.h" 25#include "button.h"
25#include "mpeg.h" 26#include "mpeg.h"
26#include "settings.h" 27#include "settings.h"
27#include "status.h" 28#include "status.h"
29#ifdef HAVE_LCD_BITMAP
30#include "icons.h"
31#endif
28 32
29static char *fmt[] = 33static char *fmt[] =
30{ 34{
@@ -38,6 +42,7 @@ void set_sound(char* string,
38 int setting) 42 int setting)
39{ 43{
40 bool done = false; 44 bool done = false;
45 bool changed = false;
41 int min, max; 46 int min, max;
42 int val; 47 int val;
43 int numdec; 48 int numdec;
@@ -51,26 +56,35 @@ void set_sound(char* string,
51 min = mpeg_sound_min(setting); 56 min = mpeg_sound_min(setting);
52 max = mpeg_sound_max(setting); 57 max = mpeg_sound_max(setting);
53 58
59#ifdef HAVE_LCD_BITMAP
60 if(global_settings.statusbar)
61 lcd_setmargins(0, STATUSBAR_HEIGHT);
62 else
63 lcd_setmargins(0, 0);
64#endif
54 lcd_clear_display(); 65 lcd_clear_display();
55 lcd_puts_scroll(0,0,string); 66 lcd_puts_scroll(0,0,string);
56 67
57 while (!done) { 68 while (!done) {
58 val = mpeg_val2phys(setting, *variable); 69 if (changed) {
59 if(numdec) 70 val = mpeg_val2phys(setting, *variable);
60 { 71 if(numdec)
61 integer = val / (10 * numdec); 72 {
62 dec = val % (10 * numdec); 73 integer = val / (10 * numdec);
63 snprintf(str,sizeof str, fmt[numdec], integer, dec, unit); 74 dec = val % (10 * numdec);
64 } 75 snprintf(str,sizeof str, fmt[numdec], integer, dec, unit);
65 else 76 }
66 { 77 else
67 snprintf(str,sizeof str,"%d %s ", val, unit); 78 {
79 snprintf(str,sizeof str,"%d %s ", val, unit);
80 }
68 } 81 }
69 lcd_puts(0,1,str); 82 lcd_puts(0,1,str);
70 lcd_update();
71 status_draw(); 83 status_draw();
84 lcd_update();
72 85
73 switch( button_get(true) ) { 86 changed = false;
87 switch( button_get_w_tmo(HZ/2) ) {
74#ifdef HAVE_RECORDER_KEYPAD 88#ifdef HAVE_RECORDER_KEYPAD
75 case BUTTON_UP: 89 case BUTTON_UP:
76 case BUTTON_UP | BUTTON_REPEAT: 90 case BUTTON_UP | BUTTON_REPEAT:
@@ -81,6 +95,7 @@ void set_sound(char* string,
81 (*variable)++; 95 (*variable)++;
82 if(*variable > max ) 96 if(*variable > max )
83 *variable = max; 97 *variable = max;
98 changed = true;
84 break; 99 break;
85 100
86#ifdef HAVE_RECORDER_KEYPAD 101#ifdef HAVE_RECORDER_KEYPAD
@@ -93,6 +108,7 @@ void set_sound(char* string,
93 (*variable)--; 108 (*variable)--;
94 if(*variable < min ) 109 if(*variable < min )
95 *variable = min; 110 *variable = min;
111 changed = true;
96 break; 112 break;
97 113
98#ifdef HAVE_RECORDER_KEYPAD 114#ifdef HAVE_RECORDER_KEYPAD
@@ -103,12 +119,28 @@ void set_sound(char* string,
103#endif 119#endif
104 done = true; 120 done = true;
105 break; 121 break;
122#ifdef HAVE_RECORDER_KEYPAD
123 case BUTTON_F3:
124#ifdef HAVE_LCD_BITMAP
125 global_settings.statusbar = !global_settings.statusbar;
126 settings_save();
127 if(global_settings.statusbar)
128 lcd_setmargins(0, STATUSBAR_HEIGHT);
129 else
130 lcd_setmargins(0, 0);
131 lcd_clear_display();
132 lcd_puts_scroll(0, 0, string);
133#endif
134 break;
135#endif
106 } 136 }
107 mpeg_sound_set(setting, *variable); 137 if (changed) {
138 mpeg_sound_set(setting, *variable);
108#ifdef HAVE_MAS3507D 139#ifdef HAVE_MAS3507D
109 if(setting == SOUND_BALANCE) 140 if(setting == SOUND_BALANCE)
110 mpeg_sound_set(SOUND_VOLUME, global_settings.volume); 141 mpeg_sound_set(SOUND_VOLUME, global_settings.volume);
111#endif 142#endif
143 }
112 } 144 }
113 lcd_stop_scroll(); 145 lcd_stop_scroll();
114} 146}