Use the multi-screen api in the usb and time screens
usb screen forces the status bar to display (fixes FS#700) time screen is now usable on the lcd remotes (need keymaps for the m5/x5) git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13903 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
f22dd51956
commit
3d73b8eb16
2 changed files with 133 additions and 100 deletions
|
@ -710,6 +710,14 @@ static const struct button_mapping button_context_radio_h300lcdremote[] = {
|
|||
};
|
||||
|
||||
|
||||
static const struct button_mapping button_context_time_remote[] = {
|
||||
{ ACTION_STD_CANCEL, BUTTON_OFF, BUTTON_NONE },
|
||||
{ ACTION_STD_OK, BUTTON_ON, BUTTON_NONE },
|
||||
{ ACTION_SETTINGS_INC, BUTTON_RC_BITRATE, BUTTON_NONE },
|
||||
{ ACTION_SETTINGS_DEC, BUTTON_RC_SOURCE, BUTTON_NONE },
|
||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS),
|
||||
}; /* button_context_settings_bmark */
|
||||
|
||||
/* the actual used tables */
|
||||
static const struct button_mapping
|
||||
*remote_btn_ctxt_std = 0,
|
||||
|
@ -878,7 +886,9 @@ static const struct button_mapping* get_context_mapping_remote(int context)
|
|||
return remote_btn_ctxt_listtree_scroll_w_cmb;
|
||||
case CONTEXT_CUSTOM|CONTEXT_TREE:
|
||||
return remote_btn_ctxt_tree;
|
||||
|
||||
case CONTEXT_SETTINGS_TIME:
|
||||
return remote_btn_ctxt_settingsgrph;
|
||||
|
||||
case CONTEXT_SETTINGS:
|
||||
return remote_btn_ctxt_settings;
|
||||
|
||||
|
|
221
apps/screens.c
221
apps/screens.c
|
@ -86,44 +86,45 @@ void usb_screen(void)
|
|||
/* nothing here! */
|
||||
#else
|
||||
int i;
|
||||
bool statusbar = global_settings.statusbar; /* force the statusbar */
|
||||
global_settings.statusbar = true;
|
||||
#if LCD_DEPTH > 1
|
||||
show_main_backdrop();
|
||||
#endif
|
||||
#if defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH > 1
|
||||
show_remote_main_backdrop();
|
||||
#endif
|
||||
|
||||
FOR_NB_SCREENS(i)
|
||||
{
|
||||
screens[i].backlight_on();
|
||||
|
||||
#ifdef HAVE_REMOTE_LCD
|
||||
lcd_remote_clear_display();
|
||||
lcd_remote_bitmap(remote_usblogo,
|
||||
screens[i].clear_display();
|
||||
#if NB_SCREENS > 1
|
||||
if (i == SCREEN_REMOTE)
|
||||
{
|
||||
screens[i].bitmap(remote_usblogo,
|
||||
(LCD_REMOTE_WIDTH-BMPWIDTH_remote_usblogo),
|
||||
(LCD_REMOTE_HEIGHT-BMPHEIGHT_remote_usblogo)/2,
|
||||
BMPWIDTH_remote_usblogo, BMPHEIGHT_remote_usblogo);
|
||||
lcd_remote_update();
|
||||
}
|
||||
else
|
||||
{
|
||||
#endif
|
||||
|
||||
lcd_clear_display();
|
||||
#ifdef HAVE_LCD_BITMAP
|
||||
#ifdef HAVE_LCD_COLOR
|
||||
lcd_bitmap_transparent(usblogo, (LCD_WIDTH-BMPWIDTH_usblogo),
|
||||
(LCD_HEIGHT-BMPHEIGHT_usblogo)/2,
|
||||
BMPWIDTH_usblogo, BMPHEIGHT_usblogo);
|
||||
#else
|
||||
lcd_bitmap(usblogo, (LCD_WIDTH-BMPWIDTH_usblogo),
|
||||
screens[i].transparent_bitmap(usblogo,
|
||||
(LCD_WIDTH-BMPWIDTH_usblogo),
|
||||
(LCD_HEIGHT-BMPHEIGHT_usblogo)/2,
|
||||
BMPWIDTH_usblogo, BMPHEIGHT_usblogo);
|
||||
#endif /* HAVE_LCD_COLOR */
|
||||
BMPWIDTH_usblogo, BMPHEIGHT_usblogo);
|
||||
#else
|
||||
lcd_double_height(false);
|
||||
lcd_puts_scroll(0, 0, "[USB Mode]");
|
||||
status_set_param(false);
|
||||
status_set_audio(false);
|
||||
status_set_usb(true);
|
||||
screens[i].puts_scroll(0, 0, "[USB Mode]");
|
||||
status_set_param(false);
|
||||
status_set_audio(false);
|
||||
status_set_usb(true);
|
||||
#endif /* HAVE_LCD_BITMAP */
|
||||
lcd_update();
|
||||
#if NB_SCREENS > 1
|
||||
}
|
||||
#endif
|
||||
screens[i].update();
|
||||
}
|
||||
|
||||
gui_syncstatusbar_draw(&statusbars, true);
|
||||
#ifdef SIMULATOR
|
||||
|
@ -144,6 +145,7 @@ void usb_screen(void)
|
|||
#endif /* HAVE_LCD_CHARCELLS */
|
||||
FOR_NB_SCREENS(i)
|
||||
screens[i].backlight_on();
|
||||
global_settings.statusbar = statusbar;
|
||||
#endif /* USB_NONE */
|
||||
}
|
||||
|
||||
|
@ -862,7 +864,7 @@ bool set_time_screen(const char* title, struct tm *tm)
|
|||
{
|
||||
bool done = false;
|
||||
int button;
|
||||
int i;
|
||||
int i, s;
|
||||
int cursorpos = 0;
|
||||
int lastcursorpos = !cursorpos;
|
||||
unsigned int julianday;
|
||||
|
@ -922,10 +924,6 @@ bool set_time_screen(const char* title, struct tm *tm)
|
|||
str(dayname[tm->tm_wday]), tm->tm_year+1900,
|
||||
str(monthname[tm->tm_mon]), tm->tm_mday);
|
||||
|
||||
/* recalculate the positions and offsets */
|
||||
lcd_getstringsize(title, &width, &prev_line_height);
|
||||
lcd_getstringsize(buffer, &width, &line_height);
|
||||
lcd_getstringsize(SEPARATOR, &separator_width, &height);
|
||||
|
||||
/* convert spaces in the buffer to \0 to make it possible to work
|
||||
directly on the buffer */
|
||||
|
@ -935,83 +933,103 @@ bool set_time_screen(const char* title, struct tm *tm)
|
|||
buffer[9 + DAYNAME_LEN] = '\0';
|
||||
buffer[14 + DAYNAME_LEN] = '\0';
|
||||
buffer[15 + DAYNAME_LEN + MONTHNAME_LEN] = '\0';
|
||||
|
||||
/* hour */
|
||||
lcd_getstringsize(buffer, &width, &height);
|
||||
/* cursor[0][INDEX_X] is already 0 because of the memset */
|
||||
cursor[0][INDEX_Y] = prev_line_height + statusbar_height;
|
||||
cursor[0][INDEX_WIDTH] = width;
|
||||
|
||||
/* minute */
|
||||
lcd_getstringsize(buffer + 3, &width, &height);
|
||||
cursor[1][INDEX_X] = cursor[0][INDEX_WIDTH] + separator_width;
|
||||
cursor[1][INDEX_Y] = prev_line_height + statusbar_height;
|
||||
cursor[1][INDEX_WIDTH] = width;
|
||||
|
||||
/* second */
|
||||
lcd_getstringsize(buffer + 6, &width, &height);
|
||||
cursor[2][INDEX_X] = cursor[0][INDEX_WIDTH] + separator_width +
|
||||
cursor[1][INDEX_WIDTH] + separator_width;
|
||||
cursor[2][INDEX_Y] = prev_line_height + statusbar_height;
|
||||
|
||||
/* weekday */
|
||||
lcd_getstringsize(buffer + 9, &weekday_width, &height);
|
||||
lcd_getstringsize(" ", &separator_width, &height);
|
||||
|
||||
/* year */
|
||||
lcd_getstringsize(buffer + 10 + DAYNAME_LEN, &width, &height);
|
||||
cursor[3][INDEX_X] = weekday_width + separator_width;
|
||||
cursor[3][INDEX_Y] = cursor[0][INDEX_Y] + prev_line_height;
|
||||
cursor[3][INDEX_WIDTH] = width;
|
||||
|
||||
/* month */
|
||||
lcd_getstringsize(buffer + 15 + DAYNAME_LEN, &width, &height);
|
||||
cursor[4][INDEX_X] = weekday_width + 2 * separator_width +
|
||||
cursor[3][INDEX_WIDTH];
|
||||
cursor[4][INDEX_Y] = cursor[0][INDEX_Y] + prev_line_height;
|
||||
cursor[4][INDEX_WIDTH] = width;
|
||||
|
||||
/* day */
|
||||
lcd_getstringsize(buffer + 16 + DAYNAME_LEN + MONTHNAME_LEN, &width, &height);
|
||||
cursor[5][INDEX_X] = weekday_width + 3 * separator_width +
|
||||
cursor[3][INDEX_WIDTH] +
|
||||
cursor[4][INDEX_WIDTH];
|
||||
cursor[5][INDEX_Y] = cursor[0][INDEX_Y] + prev_line_height;
|
||||
|
||||
/* draw the screen */
|
||||
lcd_set_drawmode(DRMODE_SOLID);
|
||||
lcd_clear_display();
|
||||
/* display the screen title */
|
||||
lcd_puts_scroll(0, 0, title);
|
||||
|
||||
/* these are not selectable, so we draw them outside the loop */
|
||||
lcd_putsxy(0, cursor[3][INDEX_Y], buffer + 9); /* name of the week day */
|
||||
lcd_putsxy(cursor[1][INDEX_X] - separator_width, cursor[0][INDEX_Y],
|
||||
SEPARATOR);
|
||||
lcd_putsxy(cursor[2][INDEX_X] - separator_width, cursor[0][INDEX_Y],
|
||||
SEPARATOR);
|
||||
|
||||
/* draw the selected item with drawmode set to
|
||||
DRMODE_SOLID|DRMODE_INVERSEVID, all other selectable
|
||||
items with drawmode DRMODE_SOLID */
|
||||
for(i=0; i<6; i++)
|
||||
FOR_NB_SCREENS(s)
|
||||
{
|
||||
if (cursorpos == i)
|
||||
lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
|
||||
/* minimum lines needed is 2 + title line */
|
||||
gui_textarea_update_nblines(&screens[s]);
|
||||
if (screens[s].nb_lines < 4)
|
||||
{
|
||||
screens[s].setfont(FONT_SYSFIXED);
|
||||
gui_textarea_update_nblines(&screens[s]);
|
||||
}
|
||||
|
||||
/* recalculate the positions and offsets */
|
||||
if (screens[s].nb_lines >= 3)
|
||||
screens[s].getstringsize(title, &width, &prev_line_height);
|
||||
else
|
||||
lcd_set_drawmode(DRMODE_SOLID);
|
||||
prev_line_height = 0;
|
||||
screens[s].getstringsize(buffer, &width, &line_height);
|
||||
screens[s].getstringsize(SEPARATOR, &separator_width, &height);
|
||||
|
||||
/* hour */
|
||||
screens[s].getstringsize(buffer, &width, &height);
|
||||
/* cursor[0][INDEX_X] is already 0 because of the memset */
|
||||
cursor[0][INDEX_Y] = prev_line_height + statusbar_height;
|
||||
cursor[0][INDEX_WIDTH] = width;
|
||||
|
||||
lcd_putsxy(cursor[i][INDEX_X], cursor[i][INDEX_Y], ptr[i]);
|
||||
/* minute */
|
||||
screens[s].getstringsize(buffer + 3, &width, &height);
|
||||
cursor[1][INDEX_X] = cursor[0][INDEX_WIDTH] + separator_width;
|
||||
cursor[1][INDEX_Y] = prev_line_height + statusbar_height;
|
||||
cursor[1][INDEX_WIDTH] = width;
|
||||
|
||||
/* second */
|
||||
screens[s].getstringsize(buffer + 6, &width, &height);
|
||||
cursor[2][INDEX_X] = cursor[0][INDEX_WIDTH] + separator_width +
|
||||
cursor[1][INDEX_WIDTH] + separator_width;
|
||||
cursor[2][INDEX_Y] = prev_line_height + statusbar_height;
|
||||
|
||||
/* weekday */
|
||||
screens[s].getstringsize(buffer + 9, &weekday_width, &height);
|
||||
screens[s].getstringsize(" ", &separator_width, &height);
|
||||
|
||||
/* year */
|
||||
screens[s].getstringsize(buffer + 10 + DAYNAME_LEN, &width, &height);
|
||||
cursor[3][INDEX_X] = weekday_width + separator_width;
|
||||
cursor[3][INDEX_Y] = cursor[0][INDEX_Y] + prev_line_height;
|
||||
cursor[3][INDEX_WIDTH] = width;
|
||||
|
||||
/* month */
|
||||
screens[s].getstringsize(buffer + 15 + DAYNAME_LEN, &width, &height);
|
||||
cursor[4][INDEX_X] = weekday_width + 2 * separator_width +
|
||||
cursor[3][INDEX_WIDTH];
|
||||
cursor[4][INDEX_Y] = cursor[0][INDEX_Y] + prev_line_height;
|
||||
cursor[4][INDEX_WIDTH] = width;
|
||||
|
||||
/* day */
|
||||
screens[s].getstringsize(buffer + 16 + DAYNAME_LEN + MONTHNAME_LEN,
|
||||
&width, &height);
|
||||
cursor[5][INDEX_X] = weekday_width + 3 * separator_width +
|
||||
cursor[3][INDEX_WIDTH] +
|
||||
cursor[4][INDEX_WIDTH];
|
||||
cursor[5][INDEX_Y] = cursor[0][INDEX_Y] + prev_line_height;
|
||||
|
||||
/* draw the screen */
|
||||
screens[s].set_drawmode(DRMODE_SOLID);
|
||||
screens[s].clear_display();
|
||||
/* display the screen title */
|
||||
screens[s].puts_scroll(0, 0, title);
|
||||
|
||||
/* these are not selectable, so we draw them outside the loop */
|
||||
screens[s].putsxy(0, cursor[3][INDEX_Y], buffer + 9); /* name of the week day */
|
||||
screens[s].putsxy(cursor[1][INDEX_X] - separator_width,
|
||||
cursor[0][INDEX_Y], SEPARATOR);
|
||||
screens[s].putsxy(cursor[2][INDEX_X] - separator_width,
|
||||
cursor[0][INDEX_Y], SEPARATOR);
|
||||
|
||||
/* draw the selected item with drawmode set to
|
||||
DRMODE_SOLID|DRMODE_INVERSEVID, all other selectable
|
||||
items with drawmode DRMODE_SOLID */
|
||||
for(i=0; i<6; i++)
|
||||
{
|
||||
if (cursorpos == i)
|
||||
screens[s].set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
|
||||
else
|
||||
screens[s].set_drawmode(DRMODE_SOLID);
|
||||
|
||||
screens[s].putsxy(cursor[i][INDEX_X],
|
||||
cursor[i][INDEX_Y], ptr[i]);
|
||||
}
|
||||
|
||||
/* print help text */
|
||||
if (screens[s].nb_lines > 4)
|
||||
screens[s].puts(0, 4, str(LANG_TIME_SET));
|
||||
if (screens[s].nb_lines > 5)
|
||||
screens[s].puts(0, 5, str(LANG_TIME_REVERT));
|
||||
screens[s].update();
|
||||
}
|
||||
|
||||
/* print help text */
|
||||
lcd_puts(0, 4, str(LANG_TIME_SET));
|
||||
lcd_puts(0, 5, str(LANG_TIME_REVERT));
|
||||
|
||||
gui_syncstatusbar_draw(&statusbars, true);
|
||||
|
||||
lcd_update();
|
||||
|
||||
/* calculate the minimum and maximum for the number under cursor */
|
||||
if(cursorpos!=lastcursorpos) {
|
||||
lastcursorpos=cursorpos;
|
||||
|
@ -1050,7 +1068,7 @@ bool set_time_screen(const char* title, struct tm *tm)
|
|||
say_time(cursorpos, tm);
|
||||
}
|
||||
|
||||
button = get_action(CONTEXT_SETTINGS_TIME,HZ/2);
|
||||
button = get_action(CONTEXT_SETTINGS_TIME, TIMEOUT_BLOCK);
|
||||
switch ( button ) {
|
||||
case ACTION_STD_PREV:
|
||||
cursorpos = (cursorpos + 6 - 1) % 6;
|
||||
|
@ -1090,6 +1108,11 @@ bool set_time_screen(const char* title, struct tm *tm)
|
|||
break;
|
||||
}
|
||||
}
|
||||
FOR_NB_SCREENS(i)
|
||||
{
|
||||
screens[i].setfont(FONT_UI);
|
||||
gui_textarea_update_nblines(&screens[i]);
|
||||
}
|
||||
action_signalscreenchange();
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue