Index: apps/recorder/recording.c =================================================================== --- apps/recorder/recording.c (revision 21583) +++ apps/recorder/recording.c (working copy) @@ -1120,6 +1120,16 @@ v->font = vp_top[i].font; v->y = vp_top[i].y + vp_top[i].height; v->height = screens[i].lcdheight - v->y; /* the rest */ +#ifdef HAVE_REMOTE_LCD + if (i == SCREEN_REMOTE) + { + if (global_settings.remote_statusbar == STATUSBAR_BOTTOM) + v->height -= STATUSBAR_HEIGHT; + } + else +#endif + if (global_settings.statusbar == STATUSBAR_BOTTOM) + v->height -= STATUSBAR_HEIGHT; screens[i].set_viewport(&vp_top[i]); /* req for next calls */ screens[i].getstringsize("W", &w, &h); Index: apps/settings.c =================================================================== --- apps/settings.c (revision 21583) +++ apps/settings.c (working copy) @@ -973,6 +973,7 @@ #if defined(HAVE_RECORDING) && CONFIG_CODEC == SWCODEC enc_global_settings_apply(); #endif + send_event(GUI_EVENT_STATUSBAR_TOGGLE, NULL); list_init_viewports(NULL); send_event(GUI_EVENT_ACTIONUPDATE, (void*)true); } Index: apps/lang/english.lang =================================================================== --- apps/lang/english.lang (revision 21583) +++ apps/lang/english.lang (working copy) @@ -12559,3 +12559,48 @@ touchscreen: "Reset Calibration" + + id: LANG_STATUSBAR_TOP + desc: in Settings -> General -> Display -> statusbar + user: core + + *: "Top" + + + *: "Top" + + + *: "Top" + + + + id: LANG_STATUSBAR_BOTTOM + desc: in Settings -> General -> Display -> statusbar + user: core + + *: "Bottom" + + + *: "Bottom" + + + *: "Bottom" + + + + id: LANG_REMOTE_STATUSBAR + desc: in Settings -> General -> Display -> statusbar + user: core + + *: none + remote: "Remote Statusbar" + + + *: none + remote: "Remote Statusbar" + + + *: none + remote: "Remote Statusbar" + + Index: apps/gui/statusbar.c =================================================================== --- apps/gui/statusbar.c (revision 21583) +++ apps/gui/statusbar.c (working copy) @@ -263,10 +263,20 @@ memcmp(&(bar->info), &(bar->lastinfo), sizeof(struct status_info))) { struct viewport vp; + bool bar_at_top = true; viewport_set_defaults(&vp, display->screen_type); vp.height = STATUSBAR_HEIGHT; vp.x = STATUSBAR_X_POS; - vp.y = STATUSBAR_Y_POS; +#ifdef HAVE_REMOTE_LCD + if (display->screen_type == SCREEN_REMOTE) + bar_at_top = global_settings.remote_statusbar != STATUSBAR_BOTTOM; + else +#endif + bar_at_top = global_settings.statusbar != STATUSBAR_BOTTOM; + if (bar_at_top) + vp.y = 0; + else + vp.y = display->lcdheight - STATUSBAR_HEIGHT; display->set_viewport(&vp); display->set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); display->fillrect(0, 0, display->getwidth(), STATUSBAR_HEIGHT); @@ -814,7 +824,7 @@ } } -void gui_statusbar_changed(bool enabled) +void gui_statusbar_changed(int enabled) { (void)enabled; send_event(GUI_EVENT_STATUSBAR_TOGGLE, NULL); Index: apps/gui/statusbar.h =================================================================== --- apps/gui/statusbar.h (revision 21583) +++ apps/gui/statusbar.h (working copy) @@ -98,6 +98,6 @@ extern void gui_syncstatusbar_init(struct gui_syncstatusbar * bars); extern void gui_syncstatusbar_draw(struct gui_syncstatusbar * bars, bool force_redraw); -void gui_statusbar_changed(bool enabled); +void gui_statusbar_changed(int enabled); #endif /*_GUI_STATUSBAR_H_*/ Index: apps/gui/viewport.c =================================================================== --- apps/gui/viewport.c (revision 21583) +++ apps/gui/viewport.c (working copy) @@ -49,30 +49,47 @@ static bool showing_bars(enum screen_type screen) { + bool ignore = statusbar_enabled & VP_SB_IGNORE_SETTING(screen); if (statusbar_enabled & VP_SB_ONSCREEN(screen)) + { #ifdef HAVE_LCD_BITMAP - return global_settings.statusbar || - (statusbar_enabled & VP_SB_IGNORE_SETTING(screen)); +#ifdef HAVE_REMOTE_LCD + if (screen == SCREEN_REMOTE) + return global_settings.remote_statusbar || ignore; +#endif + return global_settings.statusbar || ignore; #else return true; #endif + } return false; } void viewport_set_defaults(struct viewport *vp, enum screen_type screen) { + bool bar_at_top = true; vp->x = 0; vp->width = screens[screen].lcdwidth; #ifdef HAVE_LCD_BITMAP vp->drawmode = DRMODE_SOLID; vp->font = FONT_UI; /* default to UI to discourage SYSFONT use */ - - vp->y = showing_bars(screen)?STATUSBAR_HEIGHT:0; +#ifdef HAVE_REMOTE_LCD + if (screen == SCREEN_REMOTE) + bar_at_top = global_settings.remote_statusbar != STATUSBAR_BOTTOM; + else +#endif + bar_at_top = global_settings.statusbar != STATUSBAR_BOTTOM; + + vp->height = screens[screen].lcdheight; + if (bar_at_top && showing_bars(screen)) + vp->y = STATUSBAR_HEIGHT; + else + vp->y = 0; #else vp->y = 0; #endif - vp->height = screens[screen].lcdheight - vp->y; + vp->height = screens[screen].lcdheight - (showing_bars(screen)?STATUSBAR_HEIGHT:0); #ifdef HAVE_REMOTE_LCD /* We only need this test if there is a remote LCD */ @@ -136,5 +153,12 @@ void viewportmanager_statusbar_changed(void* data) { (void)data; + statusbar_enabled = 0; + if (global_settings.statusbar != STATUSBAR_OFF) + statusbar_enabled = 1; +#ifdef HAVE_REMOTE_LCD + if (global_settings.remote_statusbar != STATUSBAR_OFF) + statusbar_enabled |= 2; +#endif viewportmanager_set_statusbar(statusbar_enabled); } Index: apps/gui/gwps.c =================================================================== --- apps/gui/gwps.c (revision 21619) +++ apps/gui/gwps.c (working copy) @@ -937,7 +937,14 @@ } else { - vp->y = STATUSBAR_HEIGHT; + bool bars_at_top = true; +#ifdef HAVE_REMOTE_LCD + if (i == SCREEN_REMOTE) + bar_at_top = global_settings.remote_statusbar != STATUSBAR_BOTTOM; + else +#endif + bar_at_top = global_settings.statusbar != STATUSBAR_BOTTOM; + vp->y = bars_at_top?STATUSBAR_HEIGHT:0; vp->height = screens[i].lcdheight - STATUSBAR_HEIGHT; } } Index: apps/settings.h =================================================================== --- apps/settings.h (revision 21583) +++ apps/settings.h (working copy) @@ -149,6 +149,9 @@ /* show path types */ enum { SHOW_PATH_OFF = 0, SHOW_PATH_CURRENT, SHOW_PATH_FULL }; +/* statusbar visilibility */ +enum { STATUSBAR_OFF = 0, STATUSBAR_TOP, STATUSBAR_BOTTOM }; + /* Alarm settings */ #ifdef HAVE_RTC_ALARM enum { ALARM_START_WPS = 0, @@ -535,7 +538,10 @@ int volume_type; /* how volume is displayed: 0=graphic, 1=percent */ int battery_display; /* how battery is displayed: 0=graphic, 1=percent */ bool show_icons; /* 0=hide 1=show */ - bool statusbar; /* 0=hide, 1=show */ + int statusbar; /* STATUSBAR_* enum values */ +#ifdef HAVE_REMOTE_LCD + int remote_statusbar; +#endif #if CONFIG_KEYPAD == RECORDER_PAD bool buttonbar; /* 0=hide, 1=show */ Index: apps/menus/display_menu.c =================================================================== --- apps/menus/display_menu.c (revision 21583) +++ apps/menus/display_menu.c (working copy) @@ -321,6 +321,9 @@ } MENUITEM_SETTING(scrollbar_item, &global_settings.scrollbar, NULL); MENUITEM_SETTING(statusbar, &global_settings.statusbar, statusbar_callback); +#ifdef HAVE_REMOTE_LCD +MENUITEM_SETTING(remote_statusbar, &global_settings.remote_statusbar, statusbar_callback); +#endif #if CONFIG_KEYPAD == RECORDER_PAD MENUITEM_SETTING(buttonbar, &global_settings.buttonbar, NULL); #endif @@ -328,6 +331,9 @@ MENUITEM_SETTING(battery_display, &global_settings.battery_display, NULL); MAKE_MENU(bars_menu, ID2P(LANG_BARS_MENU), 0, Icon_NOICON, &scrollbar_item, &statusbar, +#ifdef HAVE_REMOTE_LCD + &remote_statusbar, +#endif #if CONFIG_KEYPAD == RECORDER_PAD &buttonbar, #endif Index: apps/settings_list.c =================================================================== --- apps/settings_list.c (revision 21583) +++ apps/settings_list.c (working copy) @@ -591,8 +591,16 @@ ID2P(LANG_INVERT_CURSOR_POINTER), ID2P(LANG_INVERT_CURSOR_BAR)), #endif - OFFON_SETTING(F_THEMESETTING|F_TEMPVAR, statusbar, - LANG_STATUS_BAR, true,"statusbar", gui_statusbar_changed), + CHOICE_SETTING(F_THEMESETTING|F_TEMPVAR, statusbar, + LANG_STATUS_BAR, STATUSBAR_TOP, "statusbar","off,top,bottom", + gui_statusbar_changed, 3, ID2P(LANG_OFF), ID2P(LANG_STATUSBAR_TOP), + ID2P(LANG_STATUSBAR_BOTTOM)), +#ifdef HAVE_REMOTE_LCD + CHOICE_SETTING(F_THEMESETTING|F_TEMPVAR, remote_statusbar, + LANG_REMOTE_STATUSBAR, STATUSBAR_TOP, "remote statusbar","off,top,bottom", + gui_statusbar_changed, 3, ID2P(LANG_OFF), ID2P(LANG_STATUSBAR_TOP), + ID2P(LANG_STATUSBAR_BOTTOM)), +#endif OFFON_SETTING(0,scrollbar, LANG_SCROLL_BAR, true,"scrollbar", NULL), #if CONFIG_KEYPAD == RECORDER_PAD OFFON_SETTING(0,buttonbar, LANG_BUTTON_BAR ,true,"buttonbar", NULL),