summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2008-11-16 09:38:15 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2008-11-16 09:38:15 +0000
commit76d2dd9c0ed0c4f105c4cdd18f1c110cfcb4d9d5 (patch)
tree23b7d234e8b9c4199025427fda7d0a1128cd7d27
parentdb5965ff9e615d6eadcf7819d2518f7944bc35c6 (diff)
downloadrockbox-76d2dd9c0ed0c4f105c4cdd18f1c110cfcb4d9d5.tar.gz
rockbox-76d2dd9c0ed0c4f105c4cdd18f1c110cfcb4d9d5.zip
FS#9477 - new WPS tag (%mo) which lets the WPS have different "modes" which are changed with the usual "back to browser" button (This button is ONLY stolen if the WPS you use uses this tag.
an example use: %?mo<one|two|three> meaning that when the WPS is first opened "one" will be displayed, pressing select will change it to showing two, pressing it again will show three, and once more will go back to showing one. The text there could be any wps tags (conditional viewports for example...) There is no real limit on the amount of modes, but remember that if you create a WPS which uses this tag more than once that every use HAS to have the same amount of choices or bad things will happen. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19110 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/gui/gwps-common.c10
-rw-r--r--apps/gui/gwps.c27
-rw-r--r--apps/gui/gwps.h7
-rw-r--r--apps/gui/wps_debug.c3
-rw-r--r--apps/gui/wps_parser.c14
5 files changed, 53 insertions, 8 deletions
diff --git a/apps/gui/gwps-common.c b/apps/gui/gwps-common.c
index a81b8555f7..e40aa772cb 100644
--- a/apps/gui/gwps-common.c
+++ b/apps/gui/gwps-common.c
@@ -1394,6 +1394,16 @@ static const char *get_token_value(struct gui_wps *gwps,
1394 token->value.i)) 1394 token->value.i))
1395 return "v"; 1395 return "v";
1396 return NULL; 1396 return NULL;
1397 case WPS_TOKEN_VIEWMODE:
1398 if (intval)
1399 {
1400 if (data->current_mode > limit)
1401 data->current_mode = 1;
1402 *intval = data->current_mode;
1403 }
1404 snprintf(buf, buf_size, "%d", data->current_mode);
1405 return buf;
1406
1397 default: 1407 default:
1398 return NULL; 1408 return NULL;
1399 } 1409 }
diff --git a/apps/gui/gwps.c b/apps/gui/gwps.c
index 9b6d6b5558..bac5032440 100644
--- a/apps/gui/gwps.c
+++ b/apps/gui/gwps.c
@@ -136,7 +136,7 @@ long gui_wps_show(void)
136 bool update_track = false; 136 bool update_track = false;
137 int i; 137 int i;
138 long last_left = 0, last_right = 0; 138 long last_left = 0, last_right = 0;
139 139 bool isremote = false;
140 wps_state_init(); 140 wps_state_init();
141 141
142#ifdef HAVE_LCD_CHARCELLS 142#ifdef HAVE_LCD_CHARCELLS
@@ -234,7 +234,10 @@ long gui_wps_show(void)
234#else 234#else
235 button = get_action(CONTEXT_WPS|ALLOW_SOFTLOCK,HZ/5); 235 button = get_action(CONTEXT_WPS|ALLOW_SOFTLOCK,HZ/5);
236#endif 236#endif
237 237#if NB_SCREENS > 1
238 isremote = get_action_statuscode(NULL)&ACTION_REMOTE;
239#endif
240
238 /* Exit if audio has stopped playing. This can happen if using the 241 /* Exit if audio has stopped playing. This can happen if using the
239 sleep timer with the charger plugged or if starting a recording 242 sleep timer with the charger plugged or if starting a recording
240 from F1 */ 243 from F1 */
@@ -292,13 +295,23 @@ long gui_wps_show(void)
292 break; 295 break;
293 296
294 case ACTION_WPS_BROWSE: 297 case ACTION_WPS_BROWSE:
298 if (gui_wps[isremote?1:0].data->current_mode > -1)
299 {
300 /* will get set to 0 eventually again in wps_parser.c */
301 gui_wps[isremote?1:0].data->current_mode =
302 gui_wps[isremote?1:0].data->current_mode+1;
303 restore = true;
304 }
305 else
306 {
295#ifdef HAVE_LCD_CHARCELLS 307#ifdef HAVE_LCD_CHARCELLS
296 status_set_record(false); 308 status_set_record(false);
297 status_set_audio(false); 309 status_set_audio(false);
298#endif 310#endif
299 FOR_NB_SCREENS(i) 311 FOR_NB_SCREENS(i)
300 gui_wps[i].display->stop_scroll(); 312 gui_wps[i].display->stop_scroll();
301 return GO_TO_PREVIOUS_BROWSER; 313 return GO_TO_PREVIOUS_BROWSER;
314 }
302 break; 315 break;
303 316
304 /* play/pause */ 317 /* play/pause */
diff --git a/apps/gui/gwps.h b/apps/gui/gwps.h
index 6a4849c347..a414ca3986 100644
--- a/apps/gui/gwps.h
+++ b/apps/gui/gwps.h
@@ -295,7 +295,10 @@ enum wps_token_type {
295 WPS_VIEWPORT_ENABLE, 295 WPS_VIEWPORT_ENABLE,
296 296
297 /* buttons */ 297 /* buttons */
298 WPS_TOKEN_BUTTON_VOLUME 298 WPS_TOKEN_BUTTON_VOLUME,
299
300 WPS_TOKEN_VIEWMODE
301
299}; 302};
300 303
301struct wps_token { 304struct wps_token {
@@ -429,6 +432,8 @@ struct wps_data
429 432
430 /* tick the volume button was last pressed */ 433 /* tick the volume button was last pressed */
431 unsigned int button_time_volume; 434 unsigned int button_time_volume;
435 /* the current mode (used with %mo tag), -1 means modes not being used */
436 char current_mode;
432}; 437};
433 438
434/* initial setup of wps_data */ 439/* initial setup of wps_data */
diff --git a/apps/gui/wps_debug.c b/apps/gui/wps_debug.c
index 5a18218a52..ad595e305a 100644
--- a/apps/gui/wps_debug.c
+++ b/apps/gui/wps_debug.c
@@ -435,6 +435,9 @@ static char *get_token_desc(struct wps_token *token, struct wps_data *data,
435 snprintf(buf, bufsize, "Volume button timeout:%d", 435 snprintf(buf, bufsize, "Volume button timeout:%d",
436 token->value.i); 436 token->value.i);
437 break; 437 break;
438 case WPS_TOKEN_VIEWMODE:
439 snprintf(buf, bufsize, "viewmode");
440 break;
438 default: 441 default:
439 snprintf(buf, bufsize, "FIXME (code: %d)", 442 snprintf(buf, bufsize, "FIXME (code: %d)",
440 token->type); 443 token->type);
diff --git a/apps/gui/wps_parser.c b/apps/gui/wps_parser.c
index 1b845c9f8a..f421a0c8d4 100644
--- a/apps/gui/wps_parser.c
+++ b/apps/gui/wps_parser.c
@@ -162,6 +162,8 @@ static int parse_albumart_load(const char *wps_bufptr,
162static int parse_albumart_conditional(const char *wps_bufptr, 162static int parse_albumart_conditional(const char *wps_bufptr,
163 struct wps_token *token, struct wps_data *wps_data); 163 struct wps_token *token, struct wps_data *wps_data);
164#endif /* HAVE_ALBUMART */ 164#endif /* HAVE_ALBUMART */
165static int parse_viewmode(const char *wps_bufptr,
166 struct wps_token *token, struct wps_data *wps_data);
165 167
166#ifdef CONFIG_RTC 168#ifdef CONFIG_RTC
167#define WPS_RTC_REFRESH WPS_REFRESH_DYNAMIC 169#define WPS_RTC_REFRESH WPS_REFRESH_DYNAMIC
@@ -281,6 +283,8 @@ static const struct wps_tag all_tags[] = {
281 { WPS_TOKEN_PLAYBACK_STATUS, "mp", WPS_REFRESH_DYNAMIC, NULL }, 283 { WPS_TOKEN_PLAYBACK_STATUS, "mp", WPS_REFRESH_DYNAMIC, NULL },
282 { WPS_TOKEN_BUTTON_VOLUME, "mv", WPS_REFRESH_DYNAMIC, 284 { WPS_TOKEN_BUTTON_VOLUME, "mv", WPS_REFRESH_DYNAMIC,
283 parse_timeout }, 285 parse_timeout },
286 { WPS_TOKEN_VIEWMODE, "mo", WPS_REFRESH_STATIC,
287 parse_viewmode },
284 288
285#ifdef HAVE_LCD_BITMAP 289#ifdef HAVE_LCD_BITMAP
286 { WPS_TOKEN_PEAKMETER, "pm", WPS_REFRESH_PEAK_METER, NULL }, 290 { WPS_TOKEN_PEAKMETER, "pm", WPS_REFRESH_PEAK_METER, NULL },
@@ -1142,6 +1146,15 @@ static int parse_albumart_conditional(const char *wps_bufptr,
1142}; 1146};
1143#endif /* HAVE_ALBUMART */ 1147#endif /* HAVE_ALBUMART */
1144 1148
1149static int parse_viewmode(const char *wps_bufptr,
1150 struct wps_token *token,
1151 struct wps_data *wps_data)
1152{
1153 (void)wps_bufptr; (void)token;
1154 wps_data->current_mode = 1;
1155 /* are we going to add parameters? */
1156 return 0;
1157}
1145/* Parse a generic token from the given string. Return the length read */ 1158/* Parse a generic token from the given string. Return the length read */
1146static int parse_token(const char *wps_bufptr, struct wps_data *wps_data) 1159static int parse_token(const char *wps_bufptr, struct wps_data *wps_data)
1147{ 1160{
@@ -1476,6 +1489,7 @@ void wps_data_init(struct wps_data *wps_data)
1476 wps_data->full_line_progressbar = false; 1489 wps_data->full_line_progressbar = false;
1477#endif 1490#endif
1478 wps_data->button_time_volume = 0; 1491 wps_data->button_time_volume = 0;
1492 wps_data->current_mode = -1;
1479 wps_data->wps_loaded = false; 1493 wps_data->wps_loaded = false;
1480} 1494}
1481 1495