summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Braun <markus.braun@krawel.de>2002-08-20 19:37:00 +0000
committerMarkus Braun <markus.braun@krawel.de>2002-08-20 19:37:00 +0000
commit5e4c1d2ad8278ea3787766c506dc5997d96b9386 (patch)
treeb873f7f2bf3a95b222652a32cb225375c8b800aa
parenteef970428be36d2eda5a4db1923a4cc474b94a0b (diff)
downloadrockbox-5e4c1d2ad8278ea3787766c506dc5997d96b9386.zip
rockbox-5e4c1d2ad8278ea3787766c506dc5997d96b9386.tar.gz
rockbox-5e4c1d2ad8278ea3787766c506dc5997d96b9386.tar.bz2
rockbox-5e4c1d2ad8278ea3787766c506dc5997d96b9386.tar.xz
enabled status bar in menus on recorders
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1822 a1c6a512-1295-4272-9138-f99709370657
-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 4be4e78..93e8394 100644
--- a/apps/menu.c
+++ b/apps/menu.c
@@ -23,13 +23,15 @@
#include "kernel.h"
#include "debug.h"
#include "panic.h"
-
+#include "settings.h"
+#include "status.h"
#ifdef HAVE_LCD_BITMAP
#include "icons.h"
#endif
#ifdef LOADABLE_FONTS
#include "ajf.h"
#endif
+
struct menu {
int top;
int cursor;
@@ -40,7 +42,9 @@ struct menu {
#define MAX_MENUS 4
#ifdef HAVE_LCD_BITMAP
-#define MENU_LINES 8
+#define LINE_Y (global_settings.statusbar ? 1 : 0) /* Y position the entry-list starts at */
+#define LINE_HEIGTH 8 /* pixels for each text line */
+#define MENU_LINES (LCD_HEIGHT / LINE_HEIGTH - LINE_Y)
#else
#define MENU_LINES 2
#endif
@@ -71,7 +75,7 @@ void put_cursorxy(int x, int y, bool on)
if(on) {
#ifdef HAVE_LCD_BITMAP
lcd_bitmap ( bitmap_icons_6x8[Cursor],
- x*6, y*fh, 4, 8, true);
+ x*6, y*fh + lcd_getymargin(), 4, 8, true);
#elif defined(SIMULATOR)
/* player simulator */
unsigned char cursor[] = { 0x7f, 0x3e, 0x1c, 0x08 };
@@ -83,7 +87,7 @@ void put_cursorxy(int x, int y, bool on)
else {
#if defined(HAVE_LCD_BITMAP)
/* I use xy here since it needs to disregard the margins */
- lcd_clearrect (x*6, y*fh, 4, 8);
+ lcd_clearrect (x*6, y*fh + lcd_getymargin(), 4, 8);
#elif defined(SIMULATOR)
/* player simulator in action */
lcd_clearrect (x*6, 12+y*16, 4, 8);
@@ -101,7 +105,10 @@ static void menu_draw(int m)
int fh;
unsigned char* font = lcd_getcurrentldfont();
fh = ajf_get_fontheight(font);
- menu_lines = LCD_HEIGHT/fh;
+ if (global_settings.statusbar)
+ menu_lines = (LCD_HEIGHT - STATUSBAR_HEIGHT) / fh;
+ else
+ menu_lines = LCD_HEIGHT/fh;
#else
int menu_lines = MENU_LINES;
#endif
@@ -109,9 +116,16 @@ static void menu_draw(int m)
lcd_clear_display();
lcd_stop_scroll();
#ifdef HAVE_LCD_BITMAP
- lcd_setmargins(0,0);
+ if(global_settings.statusbar)
+ lcd_setmargins(0, STATUSBAR_HEIGHT);
+ else
+ lcd_setmargins(0, 0);
lcd_setfont(0);
#endif
+ /* correct cursor pos if out of screen */
+ if (menus[m].cursor - menus[m].top >= menu_lines)
+ menus[m].top++;
+
for (i = menus[m].top;
(i < menus[m].itemcount) && (i<menus[m].top+menu_lines);
i++) {
@@ -123,6 +137,9 @@ static void menu_draw(int m)
/* place the cursor */
put_cursorxy(0, menus[m].cursor - menus[m].top, true);
+#ifdef HAVE_LCD_BITMAP
+ status_draw();
+#endif
lcd_update();
}
@@ -138,7 +155,10 @@ static void put_cursor(int m, int target)
int fh;
unsigned char* font = lcd_getcurrentldfont();
fh = ajf_get_fontheight(font);
- menu_lines = LCD_HEIGHT/fh;
+ if (global_settings.statusbar)
+ menu_lines = (LCD_HEIGHT-STATUSBAR_HEIGHT)/fh;
+ else
+ menu_lines = LCD_HEIGHT/fh;
#else
int menu_lines = MENU_LINES;
#endif
@@ -196,7 +216,7 @@ void menu_run(int m)
menu_draw(m);
while(1) {
- switch( button_get(true) ) {
+ switch( button_get_w_tmo(HZ/2) ) {
#ifdef HAVE_RECORDER_KEYPAD
case BUTTON_UP:
case BUTTON_UP | BUTTON_REPEAT:
@@ -247,10 +267,21 @@ void menu_run(int m)
lcd_stop_scroll();
return;
+#ifdef HAVE_RECORDER_KEYPAD
+ case BUTTON_F3:
+#ifdef HAVE_LCD_BITMAP
+ global_settings.statusbar = !global_settings.statusbar;
+ settings_save();
+ menu_draw(m);
+#endif
+ break;
+#endif
+
default:
break;
}
+ status_draw();
lcd_update();
}
}
diff --git a/apps/settings.c b/apps/settings.c
index 00510a9..74843fe 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -34,6 +34,10 @@
#include "power.h"
#include "backlight.h"
#include "powermgmt.h"
+#include "status.h"
+#ifdef HAVE_LCD_BITMAP
+#include "icons.h"
+#endif
struct user_settings global_settings;
@@ -440,14 +444,23 @@ void set_bool(char* string, bool* variable )
bool done = false;
int button;
+#ifdef HAVE_LCD_BITMAP
+ if(global_settings.statusbar)
+ lcd_setmargins(0, STATUSBAR_HEIGHT);
+ else
+ lcd_setmargins(0, 0);
+#endif
lcd_clear_display();
- lcd_puts_scroll(0,0,string);
+ lcd_puts_scroll(0, 0, string);
while ( !done ) {
lcd_puts(0, 1, *variable ? "on " : "off");
+#ifdef HAVE_LCD_BITMAP
+ status_draw();
+#endif
lcd_update();
- button = button_get(true);
+ button = button_get_w_tmo(HZ/2);
switch ( button ) {
#ifdef HAVE_RECORDER_KEYPAD
case BUTTON_LEFT:
@@ -458,10 +471,31 @@ void set_bool(char* string, bool* variable )
done = true;
break;
- default:
+#ifdef HAVE_RECORDER_KEYPAD
+ case BUTTON_UP:
+ case BUTTON_DOWN:
+#else
+ case BUTTON_LEFT:
+ case BUTTON_RIGHT:
+#endif
if(!(button & BUTTON_REL))
*variable = !*variable;
break;
+
+#ifdef HAVE_RECORDER_KEYPAD
+ case BUTTON_F3:
+#ifdef HAVE_LCD_BITMAP
+ global_settings.statusbar = !global_settings.statusbar;
+ settings_save();
+ if(global_settings.statusbar)
+ lcd_setmargins(0, STATUSBAR_HEIGHT);
+ else
+ lcd_setmargins(0, 0);
+ lcd_clear_display();
+ lcd_puts_scroll(0, 0, string);
+#endif
+ break;
+#endif
}
}
lcd_stop_scroll();
@@ -477,16 +511,25 @@ void set_int(char* string,
{
bool done = false;
+#ifdef HAVE_LCD_BITMAP
+ if(global_settings.statusbar)
+ lcd_setmargins(0, STATUSBAR_HEIGHT);
+ else
+ lcd_setmargins(0, 0);
+#endif
lcd_clear_display();
- lcd_puts_scroll(0,0,string);
+ lcd_puts_scroll(0, 0, string);
while (!done) {
char str[32];
snprintf(str,sizeof str,"%d %s ", *variable, unit);
- lcd_puts(0,1,str);
+ lcd_puts(0, 1, str);
+#ifdef HAVE_LCD_BITMAP
+ status_draw();
+#endif
lcd_update();
- switch( button_get(true) ) {
+ switch( button_get_w_tmo(HZ/2) ) {
#ifdef HAVE_RECORDER_KEYPAD
case BUTTON_UP:
case BUTTON_UP | BUTTON_REPEAT:
@@ -519,6 +562,21 @@ void set_int(char* string,
#endif
done = true;
break;
+
+#ifdef HAVE_RECORDER_KEYPAD
+ case BUTTON_F3:
+#ifdef HAVE_LCD_BITMAP
+ global_settings.statusbar = !global_settings.statusbar;
+ settings_save();
+ if(global_settings.statusbar)
+ lcd_setmargins(0, STATUSBAR_HEIGHT);
+ else
+ lcd_setmargins(0, 0);
+ lcd_clear_display();
+ lcd_puts_scroll(0, 0, string);
+#endif
+ break;
+#endif
}
if ( function )
function(*variable);
@@ -530,14 +588,23 @@ void set_option(char* string, int* variable, char* options[], int numoptions )
{
bool done = false;
+#ifdef HAVE_LCD_BITMAP
+ if(global_settings.statusbar)
+ lcd_setmargins(0, STATUSBAR_HEIGHT);
+ else
+ lcd_setmargins(0, 0);
+#endif
lcd_clear_display();
- lcd_puts_scroll(0,0,string);
+ lcd_puts_scroll(0, 0, string);
while ( !done ) {
lcd_puts(0, 1, options[*variable]);
+#ifdef HAVE_LCD_BITMAP
+ status_draw();
+#endif
lcd_update();
- switch ( button_get(true) ) {
+ switch ( button_get_w_tmo(HZ/2) ) {
#ifdef HAVE_RECORDER_KEYPAD
case BUTTON_UP:
case BUTTON_UP | BUTTON_REPEAT:
@@ -568,6 +635,21 @@ void set_option(char* string, int* variable, char* options[], int numoptions )
#endif
done = true;
break;
+
+#ifdef HAVE_RECORDER_KEYPAD
+ case BUTTON_F3:
+#ifdef HAVE_LCD_BITMAP
+ global_settings.statusbar = !global_settings.statusbar;
+ settings_save();
+ if(global_settings.statusbar)
+ lcd_setmargins(0, STATUSBAR_HEIGHT);
+ else
+ lcd_setmargins(0, 0);
+ lcd_clear_display();
+ lcd_puts_scroll(0, 0, string);
+#endif
+ break;
+#endif
}
}
lcd_stop_scroll();
@@ -605,6 +687,12 @@ void set_time(char* string, int timedate[])
#endif
#endif
+#ifdef HAVE_LCD_BITMAP
+ if(global_settings.statusbar)
+ lcd_setmargins(0, STATUSBAR_HEIGHT);
+ else
+ lcd_setmargins(0, 0);
+#endif
lcd_clear_display();
lcd_puts_scroll(0, 0, string);
@@ -734,7 +822,7 @@ void set_time(char* string, int timedate[])
cursor[5][INDEX_WIDTH] = width + strlen(reffub) - 1;
lcd_invertrect(cursor[cursorpos][INDEX_X],
- cursor[cursorpos][INDEX_Y],
+ cursor[cursorpos][INDEX_Y] + lcd_getymargin(),
cursor[cursorpos][INDEX_WIDTH],
line_height);
#elif defined(LOADABLE_FONTS)
@@ -770,17 +858,20 @@ void set_time(char* string, int timedate[])
cursor[5][INDEX_WIDTH] = width;
lcd_invertrect(cursor[cursorpos][INDEX_X],
- cursor[cursorpos][INDEX_Y],
+ cursor[cursorpos][INDEX_Y] + lcd_getymargin(),
cursor[cursorpos][INDEX_WIDTH],
line_height);
#else
lcd_invertrect(cursor[cursorpos][INDEX_X],
- cursor[cursorpos][INDEX_Y],
+ cursor[cursorpos][INDEX_Y] + lcd_getymargin(),
cursor[cursorpos][INDEX_WIDTH],
8);
#endif
- lcd_puts(0,4,"ON to set");
- lcd_puts(0,5,"OFF to revert");
+ lcd_puts(0, 4, "ON to set");
+ lcd_puts(0, 5, "OFF to revert");
+#ifdef HAVE_LCD_BITMAP
+ status_draw();
+#endif
lcd_update();
/* calculate the minimum and maximum for the number under cursor */
@@ -811,7 +902,7 @@ void set_time(char* string, int timedate[])
}
}
- button = button_get(true);
+ button = button_get_w_tmo(HZ/2);
switch ( button ) {
case BUTTON_LEFT:
cursorpos = (cursorpos + 6 - 1) % 6;
@@ -838,6 +929,20 @@ void set_time(char* string, int timedate[])
done = true;
timedate[0] = -1;
break;
+#ifdef HAVE_RECORDER_KEYPAD
+ case BUTTON_F3:
+#ifdef HAVE_LCD_BITMAP
+ global_settings.statusbar = !global_settings.statusbar;
+ settings_save();
+ if(global_settings.statusbar)
+ lcd_setmargins(0, STATUSBAR_HEIGHT);
+ else
+ lcd_setmargins(0, 0);
+ lcd_clear_display();
+ lcd_puts_scroll(0, 0, string);
+#endif
+ break;
+#endif
default:
break;
}
diff --git a/apps/sound_menu.c b/apps/sound_menu.c
index 1b44859..606fc8f 100644
--- a/apps/sound_menu.c
+++ b/apps/sound_menu.c
@@ -19,12 +19,16 @@
#include "config.h"
#include <stdio.h>
#include <stdbool.h>
+#include "kernel.h"
#include "lcd.h"
#include "menu.h"
#include "button.h"
#include "mpeg.h"
#include "settings.h"
#include "status.h"
+#ifdef HAVE_LCD_BITMAP
+#include "icons.h"
+#endif
static char *fmt[] =
{
@@ -38,6 +42,7 @@ void set_sound(char* string,
int setting)
{
bool done = false;
+ bool changed = false;
int min, max;
int val;
int numdec;
@@ -51,26 +56,35 @@ void set_sound(char* string,
min = mpeg_sound_min(setting);
max = mpeg_sound_max(setting);
+#ifdef HAVE_LCD_BITMAP
+ if(global_settings.statusbar)
+ lcd_setmargins(0, STATUSBAR_HEIGHT);
+ else
+ lcd_setmargins(0, 0);
+#endif
lcd_clear_display();
lcd_puts_scroll(0,0,string);
while (!done) {
- val = mpeg_val2phys(setting, *variable);
- if(numdec)
- {
- integer = val / (10 * numdec);
- dec = val % (10 * numdec);
- snprintf(str,sizeof str, fmt[numdec], integer, dec, unit);
- }
- else
- {
- snprintf(str,sizeof str,"%d %s ", val, unit);
+ if (changed) {
+ val = mpeg_val2phys(setting, *variable);
+ if(numdec)
+ {
+ integer = val / (10 * numdec);
+ dec = val % (10 * numdec);
+ snprintf(str,sizeof str, fmt[numdec], integer, dec, unit);
+ }
+ else
+ {
+ snprintf(str,sizeof str,"%d %s ", val, unit);
+ }
}
lcd_puts(0,1,str);
- lcd_update();
status_draw();
+ lcd_update();
- switch( button_get(true) ) {
+ changed = false;
+ switch( button_get_w_tmo(HZ/2) ) {
#ifdef HAVE_RECORDER_KEYPAD
case BUTTON_UP:
case BUTTON_UP | BUTTON_REPEAT:
@@ -81,6 +95,7 @@ void set_sound(char* string,
(*variable)++;
if(*variable > max )
*variable = max;
+ changed = true;
break;
#ifdef HAVE_RECORDER_KEYPAD
@@ -93,6 +108,7 @@ void set_sound(char* string,
(*variable)--;
if(*variable < min )
*variable = min;
+ changed = true;
break;
#ifdef HAVE_RECORDER_KEYPAD
@@ -103,12 +119,28 @@ void set_sound(char* string,
#endif
done = true;
break;
+#ifdef HAVE_RECORDER_KEYPAD
+ case BUTTON_F3:
+#ifdef HAVE_LCD_BITMAP
+ global_settings.statusbar = !global_settings.statusbar;
+ settings_save();
+ if(global_settings.statusbar)
+ lcd_setmargins(0, STATUSBAR_HEIGHT);
+ else
+ lcd_setmargins(0, 0);
+ lcd_clear_display();
+ lcd_puts_scroll(0, 0, string);
+#endif
+ break;
+#endif
}
- mpeg_sound_set(setting, *variable);
+ if (changed) {
+ mpeg_sound_set(setting, *variable);
#ifdef HAVE_MAS3507D
- if(setting == SOUND_BALANCE)
- mpeg_sound_set(SOUND_VOLUME, global_settings.volume);
+ if(setting == SOUND_BALANCE)
+ mpeg_sound_set(SOUND_VOLUME, global_settings.volume);
#endif
+ }
}
lcd_stop_scroll();
}