Applied Stephan Wezel's patch for the new wps %wd/%we tags (disable/enable statusbar in wps mode independantly from the global setting)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8015 a1c6a512-1295-4272-9138-f99709370657
diff --git a/apps/gui/gwps-common.c b/apps/gui/gwps-common.c
index 92d7ded..c2a4dff 100644
--- a/apps/gui/gwps-common.c
+++ b/apps/gui/gwps-common.c
@@ -17,7 +17,6 @@
*
****************************************************************************/
#include "gwps-common.h"
-#include "gwps.h"
#include "font.h"
#include <stdio.h>
#include <string.h>
@@ -37,7 +36,6 @@
#include "lang.h"
#include "misc.h"
-#include "statusbar.h"
#include "splash.h"
#include "scrollbar.h"
#ifdef HAVE_LCD_BITMAP
@@ -57,6 +55,24 @@
/* 3% of 30min file == 54s step size */
#define MIN_FF_REWIND_STEP 500
+/* draws the statusbar on the given wps-screen */
+#ifdef HAVE_LCD_BITMAP
+static void gui_wps_statusbar_draw(struct gui_wps *wps, bool force)
+{
+ bool draw = global_settings.statusbar;
+ if(wps->data->wps_sb_tag
+ && gui_wps->data->show_sb_on_wps)
+ draw = true;
+ else if(wps->data->wps_sb_tag)
+ draw = false;
+ if(draw)
+ gui_statusbar_draw(wps->statusbar, force);
+}
+#else
+#define gui_wps_statusbar_draw(wps, force) \
+ gui_statusbar_draw((wps)->statusbar, (force))
+#endif
+
/* Format time into buf.
*
* buf - buffer to format to.
@@ -944,6 +960,11 @@
subline = 0;
data->format_lines[line][subline] = buf;
+#ifdef HAVE_LCD_BITMAP
+ bool wps_tag_found = false;
+ data->wps_sb_tag = false;
+ data->show_sb_on_wps = false;
+#endif
while ((*buf) && (line < WPS_MAX_LINES))
{
c = *buf;
@@ -955,10 +976,19 @@
* don't skip %x lines (pre-load bitmaps)
*/
case '%':
+#ifdef HAVE_LCD_BITMAP
+ if(*(buf+1) == 'w' && (*(buf+2) == 'd' || *(buf+2) == 'e')
+ && !wps_tag_found)
+ {
+ data->wps_sb_tag = true;
+ if( *(buf+1) == 'w' && *(buf+2) == 'e' )
+ data->show_sb_on_wps = true;
+ wps_tag_found = true;
+ }
if (*(buf+1) != 'x')
buf++;
break;
-
+#endif
case '\r': /* CR */
*buf = 0;
break;
@@ -1177,7 +1207,13 @@
}
#ifdef HAVE_LCD_BITMAP
int h = font_get(FONT_UI)->height;
- int offset = global_settings.statusbar ? STATUSBAR_HEIGHT : 0;
+ int offset = 0;
+ gui_wps_statusbar_draw(gwps, true);
+ if(data->wps_sb_tag && data->show_sb_on_wps)
+ offset = STATUSBAR_HEIGHT;
+ else if ( global_settings.statusbar && !data->wps_sb_tag)
+ offset = STATUSBAR_HEIGHT;
+
/* to find out wether the peak meter is enabled we
assume it wasn't until we find a line that contains
the peak meter. We can't use peak_meter_enabled itself
@@ -1774,24 +1810,26 @@
}
#endif
-/* set volume
- return true if screen restore is needed
- return false otherwise
-*/
-bool setvol(void)
+/* set volume */
+void setvol(void)
{
if (global_settings.volume < sound_min(SOUND_VOLUME))
global_settings.volume = sound_min(SOUND_VOLUME);
if (global_settings.volume > sound_max(SOUND_VOLUME))
global_settings.volume = sound_max(SOUND_VOLUME);
sound_set_volume(global_settings.volume);
- gui_syncstatusbar_draw(&statusbars, false);
- int i;
- FOR_NB_SCREENS(i)
- gui_wps_refresh(&gui_wps[i], 0, WPS_REFRESH_NON_STATIC);
settings_save();
+}
+/* return true if screen restore is needed
+ return false otherwise
+*/
+bool update_onvol_change(struct gui_wps * gwps)
+{
+ gui_wps_statusbar_draw(gwps, false);
+ gui_wps_refresh(gwps, 0, WPS_REFRESH_NON_STATIC);
+
#ifdef HAVE_LCD_CHARCELLS
- gui_syncsplash(0, false, "Vol: %d %% ",
+ gui_splash(gwps->display,0, false, "Vol: %d %% ",
sound_val2phys(SOUND_VOLUME, global_settings.volume));
return true;
#endif
@@ -1837,13 +1875,13 @@
max_step = (wps_state.id3->length -
(wps_state.id3->elapsed +
ff_rewind_count)) *
- FF_REWIND_MAX_PERCENT / 100;
+ FF_REWIND_MAX_PERCENT / 100;
}
else
{
/* rewinding, calc max step relative to start */
max_step = (wps_state.id3->elapsed + ff_rewind_count) *
- FF_REWIND_MAX_PERCENT / 100;
+ FF_REWIND_MAX_PERCENT / 100;
}
max_step = MAX(max_step, MIN_FF_REWIND_STEP);
@@ -2003,10 +2041,9 @@
}
yield();
FOR_NB_SCREENS(i)
- gui_wps_refresh(&gui_wps[i], 0, WPS_REFRESH_ALL);
- gui_syncstatusbar_draw(&statusbars, true);
- FOR_NB_SCREENS(i)
{
+ gui_wps_refresh(&gui_wps[i], 0, WPS_REFRESH_ALL);
+
#ifdef HAVE_LCD_BITMAP
wps_display_images(&gui_wps[i]);
gui_wps[i].display->update();
@@ -2039,9 +2076,9 @@
if (gwps->state->id3)
gui_wps_refresh(gwps, 0, WPS_REFRESH_NON_STATIC);
- gui_syncstatusbar_draw(&statusbars, false);
-
- return retcode;
+ gui_wps_statusbar_draw(gwps, false);
+
+ return retcode;
}
#ifdef WPS_KEYLOCK
diff --git a/apps/gui/gwps-common.h b/apps/gui/gwps-common.h
index fe7f2f6..e9c1a42 100644
--- a/apps/gui/gwps-common.h
+++ b/apps/gui/gwps-common.h
@@ -30,7 +30,8 @@
bool gui_wps_refresh(struct gui_wps *gwps, int ffwd_offset,
unsigned char refresh_mode);
bool gui_wps_display(void);
-bool setvol(void);
+void setvol(void);
+bool update_onvol_change(struct gui_wps * gwps);
bool update(struct gui_wps *gwps);
bool ffwd_rew(int button);
#ifdef WPS_KEYLOCK
diff --git a/apps/gui/gwps.c b/apps/gui/gwps.c
index 5877cf7..a937507 100644
--- a/apps/gui/gwps.c
+++ b/apps/gui/gwps.c
@@ -53,7 +53,6 @@
#include "abrepeat.h"
#include "playback.h"
-#include "statusbar.h"
#include "splash.h"
#define WPS_DEFAULTCFG WPS_DIR "/rockbox_default.wps"
@@ -68,6 +67,19 @@
/* change the path to the current played track */
static void wps_state_update_ctp(const char *path);
+#ifdef HAVE_LCD_BITMAP
+static void gui_wps_set_margine(struct gui_wps *gwps)
+{
+ int offset = 0;
+ struct wps_data *data = gwps->data;
+ if(data->wps_sb_tag && data->show_sb_on_wps)
+ offset = STATUSBAR_HEIGHT;
+ else if ( global_settings.statusbar && !data->wps_sb_tag)
+ offset = STATUSBAR_HEIGHT;
+ gwps->display->setmargins(0, offset);
+}
+#endif
+
long gui_wps_show(void)
{
long button = 0, lastbutton = 0;
@@ -88,8 +100,7 @@
#else
FOR_NB_SCREENS(i)
{
- gui_wps[i].display->setmargins(0, global_settings.statusbar?
- STATUSBAR_HEIGHT:0);
+ gui_wps_set_margine(&gui_wps[i]);
}
#endif
@@ -156,12 +167,12 @@
if (TIME_AFTER(current_tick, next_refresh)) {
FOR_NB_SCREENS(i)
- {
- if(gui_wps[i].data->peak_meter_enabled)
- gui_wps_refresh(&gui_wps[i], 0,
- WPS_REFRESH_PEAK_METER);
- next_refresh += HZ / PEAK_METER_FPS;
- }
+ {
+ if(gui_wps[i].data->peak_meter_enabled)
+ gui_wps_refresh(&gui_wps[i], 0,
+ WPS_REFRESH_PEAK_METER);
+ next_refresh += HZ / PEAK_METER_FPS;
+ }
}
}
@@ -215,6 +226,12 @@
case WPS_RC_CONTEXT:
#endif
onplay(wps_state.id3->path, TREE_ATTR_MPA, CONTEXT_WPS);
+#ifdef HAVE_LCD_BITMAP
+ FOR_NB_SCREENS(i)
+ {
+ gui_wps_set_margine(&gui_wps[i]);
+ }
+#endif
restore = true;
break;
#endif
@@ -289,11 +306,20 @@
case WPS_RC_INCVOL:
case WPS_RC_INCVOL | BUTTON_REPEAT:
#endif
+ {
global_settings.volume++;
- if (setvol()) {
+ bool res = false;
+ setvol();
+ FOR_NB_SCREENS(i)
+ {
+ if(update_onvol_change(&gui_wps[i]))
+ res = true;
+ }
+ if (res) {
restore = true;
restoretimer = current_tick + HZ;
}
+ }
break;
/* volume down */
@@ -303,11 +329,20 @@
case WPS_RC_DECVOL:
case WPS_RC_DECVOL | BUTTON_REPEAT:
#endif
+ {
global_settings.volume--;
- if (setvol()) {
+ setvol();
+ bool res = false;
+ FOR_NB_SCREENS(i)
+ {
+ if(update_onvol_change(&gui_wps[i]))
+ res = true;
+ }
+ if (res) {
restore = true;
restoretimer = current_tick + HZ;
}
+ }
break;
/* fast forward / rewind */
@@ -450,9 +485,7 @@
#ifdef HAVE_LCD_BITMAP
FOR_NB_SCREENS(i)
{
- gui_wps[i].display->setmargins(0,
- global_settings.statusbar?
- STATUSBAR_HEIGHT:0);
+ gui_wps_set_margine(&gui_wps[i]);
}
#endif
restore = true;
@@ -581,13 +614,13 @@
if (update_track)
{
- bool upt = false;
+ bool update_failed = false;
FOR_NB_SCREENS(i)
{
if(update(&gui_wps[i]))
- upt = true;
+ update_failed = true;
}
- if (upt)
+ if (update_failed)
{
/* set dir browser to current playing song */
if (global_settings.browse_current &&
@@ -670,6 +703,8 @@
wps_data->img[i].display = false;
wps_data->img[i].always_display = false;
}
+ wps_data->wps_sb_tag = false;
+ wps_data->show_sb_on_wps = false;
#else /* HAVE_LCD_CHARCELLS */
for(i = 0; i < 8; i++)
wps_data->wps_progress_pat[i] = 0;
@@ -861,6 +896,7 @@
{
gui_wps->data = NULL;
gui_wps->display = NULL;
+ gui_wps->statusbar = NULL;
/* Currently no seperate wps_state needed/possible
so use the only aviable ( "global" ) one */
gui_wps->state = &wps_state;
@@ -877,14 +913,12 @@
{
gui_wps->display = display;
}
-/* gui_wps end */
-void gui_sync_data_wps_init(void)
+void gui_wps_set_statusbar(struct gui_wps *gui_wps, struct gui_statusbar *statusbar)
{
- int i;
- FOR_NB_SCREENS(i)
- wps_data_init(&wps_datas[i]);
+ gui_wps->statusbar = statusbar;
}
+/* gui_wps end */
void gui_sync_wps_screen_init(void)
{
@@ -898,7 +932,9 @@
int i;
FOR_NB_SCREENS(i)
{
+ wps_data_init(&wps_datas[i]);
gui_wps_init(&gui_wps[i]);
gui_wps_set_data(&gui_wps[i], &wps_datas[i]);
+ gui_wps_set_statusbar(&gui_wps[i], &statusbars.statusbars[i]);
}
}
diff --git a/apps/gui/gwps.h b/apps/gui/gwps.h
index 5c2bd92..40b9a74 100644
--- a/apps/gui/gwps.h
+++ b/apps/gui/gwps.h
@@ -20,6 +20,7 @@
#define _WPS_H
#include "screen_access.h"
+#include "statusbar.h"
#include "id3.h"
#include "playlist.h"
@@ -319,6 +320,7 @@
struct screen * display;
struct wps_data *data;
struct wps_state *state;
+ struct gui_statusbar *statusbar;
};
/* initial setup of a wps */
@@ -329,6 +331,9 @@
/* connects a wps with a screen */
void gui_wps_set_disp(struct gui_wps *gui_wps, struct screen *display);
+
+/* connects a wps with a statusbar*/
+void gui_wps_set_statusbar(struct gui_wps *gui_wps, struct gui_statusbar *statusbar);
/* gui_wps end */
long gui_wps_show(void);
@@ -338,7 +343,6 @@
extern struct gui_wps gui_wps[NB_SCREENS];
void gui_sync_wps_init(void);
-void gui_sync_data_wps_init(void);
void gui_sync_wps_screen_init(void);
#endif
diff --git a/apps/gui/statusbar.c b/apps/gui/statusbar.c
index 02c6981..70fe77f 100644
--- a/apps/gui/statusbar.c
+++ b/apps/gui/statusbar.c
@@ -104,11 +104,6 @@
void gui_statusbar_draw(struct gui_statusbar * bar, bool force_redraw)
{
-#ifdef HAVE_LCD_BITMAP
- if(!global_settings.statusbar)
- return;
-#endif /* HAVE_LCD_BITMAP */
-
struct screen * display = bar->display;
#ifdef HAVE_RTC
@@ -505,6 +500,10 @@
void gui_syncstatusbar_draw(struct gui_syncstatusbar * bars,
bool force_redraw)
{
+#ifdef HAVE_LCD_BITMAP
+ if(!global_settings.statusbar)
+ return;
+#endif /* HAVE_LCD_BITMAP */
int i;
FOR_NB_SCREENS(i) {
gui_statusbar_draw( &(bars->statusbars[i]), force_redraw );
diff --git a/apps/main.c b/apps/main.c
index a3fc267..4f23dfa 100644
--- a/apps/main.c
+++ b/apps/main.c
@@ -151,7 +151,6 @@
settings_reset();
settings_calc_config_sector();
settings_load(SETTINGS_ALL);
- gui_sync_data_wps_init();
gui_sync_wps_init();
settings_apply();
init_dircache();
@@ -318,7 +317,6 @@
settings_calc_config_sector();
settings_load(SETTINGS_ALL);
init_dircache();
- gui_sync_data_wps_init();
gui_sync_wps_init();
settings_apply();
diff --git a/apps/status.c b/apps/status.c
index e678c76..296b7aa 100644
--- a/apps/status.c
+++ b/apps/status.c
@@ -63,7 +63,6 @@
void status_set_ffmode(enum playmode mode)
{
ff_mode = mode; /* Either STATUS_FASTFORWARD or STATUS_FASTBACKWARD */
- gui_syncstatusbar_draw(&statusbars, false);
}
enum playmode status_get_ffmode(void)
diff --git a/wps/boxes.wps b/wps/boxes.wps
index 158d028..74be282 100755
--- a/wps/boxes.wps
+++ b/wps/boxes.wps
@@ -50,7 +50,7 @@
%xl|Z|rtg-8.bmp|91|68|
%xl|w|rtg-9.bmp|91|68|
%xl|y|rtg-10.bmp|91|68|
-
+%wd
diff --git a/wps/engineeer2.wps b/wps/engineeer2.wps
index a80be77..0b4be77 100644
--- a/wps/engineeer2.wps
+++ b/wps/engineeer2.wps
@@ -38,7 +38,7 @@
%xl|L|batt_3.bmp|144|0|
%xl|M|batt_4.bmp|144|0|
%xl|N|charge.bmp|143|0|
-
+%wd
diff --git a/wps/iAmp.rwps b/wps/iAmp.rwps
index d0d6e0a..5649d69 100644
--- a/wps/iAmp.rwps
+++ b/wps/iAmp.rwps
@@ -1,4 +1,4 @@
-
+%wd
%s%?ia<%ia|%d1>
%s%?it<%?in<%in. >%it|%fn>
%pb
diff --git a/wps/iAmp.wps b/wps/iAmp.wps
index 6472388..34a10c2 100644
--- a/wps/iAmp.wps
+++ b/wps/iAmp.wps
@@ -1,4 +1,4 @@
- %pv
+%wd %pv
%ac%s%?it<%it|%fn>
%s%ac%?ia<%ia|%?d1<%d1|Unknown Artist>>
@@ -51,4 +51,4 @@
%x|F|l.bmp|0|14|
%xl|G|bp.bmp|1|1|
%?bp<%xdG|%?bl<%xdA|%xdB|%xdC|%xdD|%xdE>>
-# letters to use: b, q, M-Z
\ No newline at end of file
+# letters to use: b, q, M-Z
diff --git a/wps/ipodVOL.wps b/wps/ipodVOL.wps
index 7278ea2..c162e83 100644
--- a/wps/ipodVOL.wps
+++ b/wps/ipodVOL.wps
@@ -23,7 +23,7 @@
%xl|Y|vol8.bmp|139|18|
%xl|Z|vol9.bmp|139|18|
%x|g|bg.bmp|0|0|
-
+%wd
%al%pp of %pe
%s%ac%?it<%it|%fn>
diff --git a/wps/zezayer.wps b/wps/zezayer.wps
index af0ffab..74eb18e 100644
--- a/wps/zezayer.wps
+++ b/wps/zezayer.wps
@@ -1,5 +1,5 @@
%x|a|RockBoxWPSd.bmp|0|0|
-%ar %?mp<Stop|Play|Pause|%>%>|%<%<>
+%wd%ar %?mp<Stop|Play|Pause|%>%>|%<%<>
* %?ia<%ia|%d2>
* %?id<%id|%d1>