From 7491eaa07145222a964e29052e245af7db75ecd0 Mon Sep 17 00:00:00 2001 From: Thomas Martitz Date: Mon, 24 Aug 2009 19:59:15 +0200 Subject: [PATCH] Add a statusbar: custom setting (for now, probably going to be changed in the future). Choosing one of the old options will deactive the custom sb at all. --- apps/gui/statusbar-skinned.c | 22 ++++++++++++++-------- apps/gui/statusbar-skinned.h | 4 ++-- apps/gui/statusbar.h | 3 ++- apps/gui/viewport.c | 36 +++++++++++++++++++++++------------- apps/gui/viewport.h | 7 ++++--- apps/lang/english.lang | 14 ++++++++++++++ apps/settings_list.c | 12 ++++++------ wps/WPSLIST | 1 + 8 files changed, 66 insertions(+), 33 deletions(-) diff --git a/apps/gui/statusbar-skinned.c b/apps/gui/statusbar-skinned.c index 264abb0a1..de86672b5 100644 --- a/apps/gui/statusbar-skinned.c +++ b/apps/gui/statusbar-skinned.c @@ -28,6 +28,7 @@ #include "screen_access.h" #include "skin_engine/skin_engine.h" #include "skin_engine/wps_internals.h" +#include "debug.h" /* currently only one wps_state is needed */ @@ -37,8 +38,8 @@ static struct wps_data sb_skin_data[NB_SCREENS]; /* initial setup of wps_data */ static void sb_skin_update(void*); -static bool loaded_ok = false; -static bool enabled; +static bool loaded_ok[NB_SCREENS] = { false }; +static bool enabled[NB_SCREENS] = { 0 }; void sb_skin_data_load(enum screen_type screen, const char *buf, bool isfile) { @@ -74,7 +75,7 @@ void sb_skin_data_load(enum screen_type screen, const char *buf, bool isfile) #ifdef HAVE_REMOVE_LCD data->remote_wps = !(screen == SCREEN_MAIN); #endif - loaded_ok = enabled = success; + loaded_ok[screen] = enabled[screen] = success; } void sb_skin_data_init(enum screen_type screen) @@ -83,14 +84,14 @@ void sb_skin_data_init(enum screen_type screen) skin_update(&sb_skin[screen], WPS_REFRESH_ALL); } -bool sb_skin_get_state(void) +bool sb_skin_get_state(enum screen_type screen) { - return loaded_ok && enabled; + return loaded_ok[screen] && enabled[screen]; } -void sb_skin_set_state(int state) +void sb_skin_set_state(int state, enum screen_type screen) { - if ((enabled = state)) + if ((enabled[screen] = state)) add_event(GUI_EVENT_ACTIONUPDATE, false, sb_skin_update); else remove_event(GUI_EVENT_ACTIONUPDATE, sb_skin_update); @@ -104,7 +105,12 @@ static void sb_skin_update(void* param) if (TIME_AFTER(current_tick, next_update) || param != NULL) { FOR_NB_SCREENS(i) - skin_update(&sb_skin[i], WPS_REFRESH_NON_STATIC); + { + if (enabled[i]) + { + skin_update(&sb_skin[i], WPS_REFRESH_NON_STATIC); + } + } next_update = current_tick + HZ/4; } wps_state.do_full_update = false; diff --git a/apps/gui/statusbar-skinned.h b/apps/gui/statusbar-skinned.h index e2befedcb..c6f80f6dc 100644 --- a/apps/gui/statusbar-skinned.h +++ b/apps/gui/statusbar-skinned.h @@ -31,8 +31,8 @@ void sb_skin_data_load(enum screen_type screen, const char *buf, bool isfile); void sb_skin_data_init(enum screen_type screen); /* probably temporary, to shut the classic statusbar up */ -bool sb_skin_get_state(void); -void sb_skin_set_state(int state); +bool sb_skin_get_state(enum screen_type screen); +void sb_skin_set_state(int state, enum screen_type screen); void sb_skin_init(void); #ifdef HAVE_ALBUMART diff --git a/apps/gui/statusbar.h b/apps/gui/statusbar.h index 84d37858e..b25edbfab 100644 --- a/apps/gui/statusbar.h +++ b/apps/gui/statusbar.h @@ -55,7 +55,8 @@ struct status_info { }; /* statusbar visibility/position, used for settings also */ -enum statusbar_values { STATUSBAR_OFF = 0, STATUSBAR_TOP, STATUSBAR_BOTTOM }; +enum statusbar_values { STATUSBAR_OFF = 0, STATUSBAR_TOP, STATUSBAR_BOTTOM, + STATUSBAR_CUSTOM }; struct gui_statusbar { diff --git a/apps/gui/viewport.c b/apps/gui/viewport.c index ec7b4126c..85868d3cc 100644 --- a/apps/gui/viewport.c +++ b/apps/gui/viewport.c @@ -35,6 +35,7 @@ #include "screen_access.h" #include "statusbar-skinned.h" #include "appevents.h" +#include "debug.h" @@ -85,6 +86,8 @@ int viewport_get_nb_lines(struct viewport *vp) static bool showing_bars(enum screen_type screen) { + if (statusbar_position(screen) == STATUSBAR_CUSTOM) + return false; if (statusbar_enabled & VP_SB_ONSCREEN(screen)) { #ifdef HAVE_LCD_BITMAP @@ -166,22 +169,22 @@ int viewportmanager_set_statusbar(int enabled) { int old = statusbar_enabled; statusbar_enabled = enabled; - if (enabled) + int i; + if (enabled && statusbar_position(screen) != STATUSBAR_CUSTOM) { - int i; FOR_NB_SCREENS(i) { if (showing_bars(i)) gui_statusbar_draw(&statusbars.statusbars[i], true); } - if (!sb_skin_get_state()) - add_event(GUI_EVENT_ACTIONUPDATE, false, viewportmanager_redraw); } else { remove_event(GUI_EVENT_ACTIONUPDATE, viewportmanager_redraw); } - sb_skin_set_state(1); + + FOR_NB_SCREENS(i) + sb_skin_set_state(enabled && statusbar_position(i) == STATUSBAR_CUSTOM, i); return old; } @@ -202,7 +205,7 @@ static void statusbar_toggled(void* param) (void)param; /* update vp manager for the new setting and reposition vps * if necessary */ - viewportmanager_theme_changed(THEME_STATUSBAR); + viewportmanager_theme_changed(THEME_STATUSBAR|THEME_CUSTOM_STATUSBAR); } void viewportmanager_theme_changed(int which) @@ -219,14 +222,15 @@ void viewportmanager_theme_changed(int which) } if (which & THEME_STATUSBAR) { + int i; statusbar_enabled = 0; - if (global_settings.statusbar != STATUSBAR_OFF) - statusbar_enabled = VP_SB_ONSCREEN(SCREEN_MAIN); -#ifdef HAVE_REMOTE_LCD - if (global_settings.remote_statusbar != STATUSBAR_OFF) - statusbar_enabled |= VP_SB_ONSCREEN(SCREEN_REMOTE); -#endif - if (statusbar_enabled && !sb_skin_get_state()) + FOR_NB_SCREENS(i) + { + if (statusbar_position(i) == STATUSBAR_TOP + || statusbar_position(i) == STATUSBAR_BOTTOM) + statusbar_enabled = VP_SB_ONSCREEN(i); + } + if (statusbar_enabled) add_event(GUI_EVENT_ACTIONUPDATE, false, viewportmanager_redraw); else remove_event(GUI_EVENT_ACTIONUPDATE, viewportmanager_redraw); @@ -239,6 +243,12 @@ void viewportmanager_theme_changed(int which) viewport_set_fullscreen(&custom_vp[i], i); } } + if (which & THEME_CUSTOM_STATUSBAR) + { + int i; + FOR_NB_SCREENS(i) + sb_skin_set_state((statusbar_position(i) == STATUSBAR_CUSTOM), i); + } } static void viewportmanager_ui_vp_changed(void *param) diff --git a/apps/gui/viewport.h b/apps/gui/viewport.h index 2ed138b36..98dbc116a 100644 --- a/apps/gui/viewport.h +++ b/apps/gui/viewport.h @@ -56,9 +56,10 @@ void viewport_set_defaults(struct viewport *vp, enum screen_type screen); */ -#define THEME_STATUSBAR (BIT_N(0)) -#define THEME_UI_VIEWPORT (BIT_N(1)) -#define THEME_ALL (~(0u)) +#define THEME_STATUSBAR (BIT_N(0)) +#define THEME_UI_VIEWPORT (BIT_N(1)) +#define THEME_CUSTOM_STATUSBAR (BIT_N(1)) +#define THEME_ALL (~(0u)) #define VP_SB_HIDE_ALL 0 #define VP_SB_ONSCREEN(screen) BIT_N(screen) diff --git a/apps/lang/english.lang b/apps/lang/english.lang index 73a3fe9b1..850240a49 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -12718,3 +12718,17 @@ swcodec: "Limiter Preamp" + + id: LANG_STATUSBAR_CUSTOM + desc: in Settings -> General -> Display -> statusbar + user: core + + *: "Custom" + + + *: "Custom" + + + *: "Custom" + + diff --git a/apps/settings_list.c b/apps/settings_list.c index 8e3429d86..19e6d9ee3 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c @@ -603,14 +603,14 @@ const struct settings_list settings[] = { ID2P(LANG_INVERT_CURSOR_BAR)), #endif CHOICE_SETTING(F_THEMESETTING|F_TEMPVAR, statusbar, - LANG_STATUS_BAR, STATUSBAR_TOP, "statusbar","off,top,bottom", - NULL, 3, ID2P(LANG_OFF), ID2P(LANG_STATUSBAR_TOP), - ID2P(LANG_STATUSBAR_BOTTOM)), + LANG_STATUS_BAR, STATUSBAR_TOP, "statusbar","off,top,bottom,custom", + NULL, 4, ID2P(LANG_OFF), ID2P(LANG_STATUSBAR_TOP), + ID2P(LANG_STATUSBAR_BOTTOM), ID2P(LANG_STATUSBAR_CUSTOM)), #ifdef HAVE_REMOTE_LCD CHOICE_SETTING(F_THEMESETTING|F_TEMPVAR, remote_statusbar, - LANG_REMOTE_STATUSBAR, STATUSBAR_TOP, "remote statusbar","off,top,bottom", - NULL, 3, ID2P(LANG_OFF), ID2P(LANG_STATUSBAR_TOP), - ID2P(LANG_STATUSBAR_BOTTOM)), + LANG_REMOTE_STATUSBAR, STATUSBAR_TOP, "remote statusbar","off,top,bottom,custom", + NULL, 4, ID2P(LANG_OFF), ID2P(LANG_STATUSBAR_TOP), + ID2P(LANG_STATUSBAR_BOTTOM), ID2P(LANG_STATUSBAR_CUSTOM), #endif CHOICE_SETTING(F_THEMESETTING|F_TEMPVAR, scrollbar, LANG_SCROLL_BAR, SCROLLBAR_LEFT, "scrollbar","off,left,right", diff --git a/wps/WPSLIST b/wps/WPSLIST index 1d4cae8eb..c949907e2 100644 --- a/wps/WPSLIST +++ b/wps/WPSLIST @@ -176,6 +176,7 @@ remote ui viewport: - Name: DancePuffDuo.wps RWPS: DancePuffDuo.rwps +SB: - Author: Chris Oxtoby Font: 13-Nimbus.fnt Statusbar: top -- 2.11.4.GIT