Better keylock and button handling, with visual feedback

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1465 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Linus Nielsen Feltzing 2002-07-27 19:42:58 +00:00
parent b3d0b6ea2a
commit 2b934027d8

View file

@ -41,6 +41,12 @@
#define PLAY_DISPLAY_FILENAME_SCROLL 1
#define PLAY_DISPLAY_TRACK_TITLE 2
#ifdef HAVE_RECORDER_KEYPAD
#define RELEASE_MASK (BUTTON_F1 | BUTTON_DOWN)
#else
#define RELEASE_MASK (BUTTON_MENU | BUTTON_STOP)
#endif
static void draw_screen(struct mp3entry* id3)
{
lcd_clear_display();
@ -132,18 +138,51 @@ static void draw_screen(struct mp3entry* id3)
lcd_update();
}
void display_keylock_text(bool locked)
{
lcd_clear_display();
#ifdef HAVE_LCD_CHARCELLS
if(locked)
lcd_puts(0, 0, "Keylock ON");
else
lcd_puts(0, 0, "Keylock OFF");
#else
if(locked)
{
lcd_puts(2, 3, "Key lock is ON");
}
else
{
lcd_puts(2, 3, "Key lock is OFF");
}
lcd_update();
#endif
sleep(HZ);
}
/* demonstrates showing different formats from playtune */
int wps_show(void)
{
static bool playing = true;
struct mp3entry* id3 = mpeg_current_track();
struct mp3entry* id3 = NULL;
bool keys_locked = false;
bool dont_go_to_menu = false;
bool menu_button_is_down = false;
bool pending_keylock = true; /* Keylock will go ON next time */
int old_release_mask;
int x = 0;
lcd_clear_display();
old_release_mask = button_set_release(RELEASE_MASK);
if(mpeg_is_playing())
{
id3 = mpeg_current_track();
draw_screen(id3);
}
while ( 1 ) {
while ( 1 )
{
int i;
char buffer[32];
@ -154,7 +193,7 @@ int wps_show(void)
draw_screen(id3);
}
if (playing && id3)
if (mpeg_is_playing() && id3)
{
#ifdef HAVE_LCD_BITMAP
snprintf(buffer,sizeof(buffer), "Time: %d:%02d / %d:%02d",
@ -166,7 +205,8 @@ int wps_show(void)
lcd_puts(0, 6, buffer);
lcd_update();
#else
// Display time with the filename scroll only because the screen has room.
/* Display time with the filename scroll only because
the screen has room. */
if (global_settings.wps_display == PLAY_DISPLAY_FILENAME_SCROLL)
{
snprintf(buffer,sizeof(buffer), "Time: %d:%02d / %d:%02d",
@ -190,13 +230,32 @@ int wps_show(void)
#endif
for ( i=0;i<5;i++ ) {
switch ( button_get(false) ) {
int button = button_get(false);
if(button == BUTTON_NONE)
x++;
else
{
if(x)
debugf("%d BUTTON_NONE\n", x);
debugf("Btn: %04x - lock: %d\n", button, keys_locked);
x = 0;
}
switch ( button )
{
case BUTTON_ON:
if (keys_locked)
{
display_keylock_text(keys_locked);
draw_screen(id3);
break;
}
#ifdef HAVE_LCD_CHARCELLS
lcd_icon(ICON_RECORD, false);
#endif
button_set_release(old_release_mask);
return 0;
#ifdef HAVE_RECORDER_KEYPAD
@ -205,9 +264,13 @@ int wps_show(void)
case BUTTON_UP:
#endif
if (keys_locked)
{
display_keylock_text(keys_locked);
draw_screen(id3);
break;
}
if ( playing )
if ( mpeg_is_playing() )
{
mpeg_pause();
status_set_playmode(STATUS_PAUSE);
@ -217,14 +280,17 @@ int wps_show(void)
mpeg_resume();
status_set_playmode(STATUS_PLAY);
}
playing = !playing;
break;
#ifdef HAVE_RECORDER_KEYPAD
case BUTTON_UP:
if (keys_locked)
{
display_keylock_text(keys_locked);
draw_screen(id3);
break;
}
global_settings.volume++;
if(global_settings.volume > mpeg_sound_max(SOUND_VOLUME))
global_settings.volume = mpeg_sound_max(SOUND_VOLUME);
@ -233,7 +299,12 @@ int wps_show(void)
case BUTTON_DOWN:
if (keys_locked)
{
display_keylock_text(keys_locked);
draw_screen(id3);
break;
}
global_settings.volume--;
if(global_settings.volume < mpeg_sound_min(SOUND_VOLUME))
global_settings.volume = mpeg_sound_min(SOUND_VOLUME);
@ -243,13 +314,22 @@ int wps_show(void)
case BUTTON_LEFT:
if (keys_locked)
{
display_keylock_text(keys_locked);
draw_screen(id3);
break;
}
mpeg_prev();
break;
case BUTTON_RIGHT:
if (keys_locked)
{
display_keylock_text(keys_locked);
draw_screen(id3);
break;
}
mpeg_next();
break;
@ -272,6 +352,28 @@ int wps_show(void)
case BUTTON_MENU:
lcd_icon(ICON_PARAM, true);
menu_button_is_down = true;
break;
case BUTTON_STOP | BUTTON_REL:
/* The STOP key has been release while the MENU key
was held */
if(menu_button_is_down)
pending_keylock = !pending_keylock;
break;
#else
case BUTTON_F1:
menu_button_is_down = true;
break;
case BUTTON_DOWN | BUTTON_REL:
/* The DOWN key has been release while the F1 key
was held */
if(menu_button_is_down)
{
pending_keylock = !pending_keylock;
debugf("pending: %d\n", pending_keylock);
}
break;
#endif
@ -280,14 +382,20 @@ int wps_show(void)
#else
case BUTTON_MENU | BUTTON_STOP:
#endif
keys_locked = !keys_locked;
if(keys_locked != pending_keylock)
{
keys_locked = pending_keylock;
#ifdef HAVE_LCD_CHARCELLS
lcd_icon(ICON_PARAM, false);
if(keys_locked)
lcd_icon(ICON_RECORD, true);
else
lcd_icon(ICON_RECORD, false);
#endif
display_keylock_text(keys_locked);
draw_screen(id3);
}
dont_go_to_menu = true;
break;
@ -299,16 +407,15 @@ int wps_show(void)
#ifdef HAVE_LCD_CHARCELLS
lcd_icon(ICON_PARAM, false);
#endif
menu_button_is_down = false;
if(!keys_locked && !dont_go_to_menu)
{
lcd_stop_scroll();
button_set_release(old_release_mask);
main_menu();
old_release_mask = button_set_release(RELEASE_MASK);
id3 = mpeg_current_track();
draw_screen(id3);
/* Prevent any stray BUTTON_REL events from going
back to the main menu until we get a new
BUTTON_MENU event */
dont_go_to_menu = true;
}
else
{
@ -319,12 +426,18 @@ int wps_show(void)
#ifdef HAVE_RECORDER_KEYPAD
case BUTTON_OFF:
#else
case BUTTON_DOWN:
case BUTTON_STOP:
#endif
if (keys_locked)
{
display_keylock_text(keys_locked);
draw_screen(id3);
break;
}
mpeg_stop();
status_set_playmode(STATUS_STOP);
button_set_release(old_release_mask);
return 0;
#ifndef SIMULATOR