summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntoine Cellerier <dionoea@videolan.org>2008-12-07 16:20:35 +0000
committerAntoine Cellerier <dionoea@videolan.org>2008-12-07 16:20:35 +0000
commit8289b966b810eb21732ecb905433debf4e872857 (patch)
tree4665d7ca2d8c2f5bfa41686f9e7ddba65fb4e18f
parent3ad535031a84f0fa9c65a24e140c81b0a60c3026 (diff)
downloadrockbox-8289b966b810eb21732ecb905433debf4e872857.tar.gz
rockbox-8289b966b810eb21732ecb905433debf4e872857.zip
Apply FS#9368 : add generic settings tag to WPS.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19357 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/gui/gwps-common.c48
-rw-r--r--apps/gui/gwps.h5
-rw-r--r--apps/gui/wps_parser.c38
-rw-r--r--manual/appendix/wps_tags.tex9
4 files changed, 99 insertions, 1 deletions
diff --git a/apps/gui/gwps-common.c b/apps/gui/gwps-common.c
index a0e09b8117..bcaebc502b 100644
--- a/apps/gui/gwps-common.c
+++ b/apps/gui/gwps-common.c
@@ -26,6 +26,7 @@
26#include <stdlib.h> 26#include <stdlib.h>
27#include "system.h" 27#include "system.h"
28#include "settings.h" 28#include "settings.h"
29#include "settings_list.h"
29#include "rbunicode.h" 30#include "rbunicode.h"
30#include "rtc.h" 31#include "rtc.h"
31#include "audio.h" 32#include "audio.h"
@@ -1402,6 +1403,53 @@ static const char *get_token_value(struct gui_wps *gwps,
1402 token->value.i * TIMEOUT_UNIT)) 1403 token->value.i * TIMEOUT_UNIT))
1403 return "v"; 1404 return "v";
1404 return NULL; 1405 return NULL;
1406
1407 case WPS_TOKEN_SETTING:
1408 {
1409 if (intval)
1410 {
1411 /* Handle contionals */
1412 const struct settings_list *s = settings+token->value.i;
1413 switch (s->flags&F_T_MASK)
1414 {
1415 case F_T_INT:
1416 case F_T_UINT:
1417 if (s->flags&F_RGB)
1418 /* %?St|name|<#000000|#000001|...|#FFFFFF> */
1419 /* shouldn't overflow since colors are stored
1420 * on 16 bits ...
1421 * but this is pretty useless anyway */
1422 *intval = *(int*)s->setting + 1;
1423 else if (s->cfg_vals == NULL)
1424 /* %?St|name|<1st choice|2nd choice|...> */
1425 *intval = (*(int*)s->setting-s->int_setting->min)
1426 /s->int_setting->step + 1;
1427 else
1428 /* %?St|name|<1st choice|2nd choice|...> */
1429 /* Not sure about this one. cfg_name/vals are
1430 * indexed from 0 right? */
1431 *intval = *(int*)s->setting + 1;
1432 break;
1433 case F_T_BOOL:
1434 /* %?St|name|<if true|if false> */
1435 *intval = *(bool*)s->setting?1:2;
1436 break;
1437 case F_T_CHARPTR:
1438 /* %?St|name|<if non empty string|if empty>
1439 * The string's emptyness discards the setting's
1440 * prefix and suffix */
1441 *intval = ((char*)s->setting)[0]?1:2;
1442 break;
1443 default:
1444 /* This shouldn't happen ... but you never know */
1445 *intval = -1;
1446 break;
1447 }
1448 }
1449 cfg_to_string(token->value.i,buf,buf_size);
1450 return buf;
1451 }
1452
1405 default: 1453 default:
1406 return NULL; 1454 return NULL;
1407 } 1455 }
diff --git a/apps/gui/gwps.h b/apps/gui/gwps.h
index ff402a73a9..4cffb0de2c 100644
--- a/apps/gui/gwps.h
+++ b/apps/gui/gwps.h
@@ -292,7 +292,10 @@ enum wps_token_type {
292 WPS_VIEWPORT_ENABLE, 292 WPS_VIEWPORT_ENABLE,
293 293
294 /* buttons */ 294 /* buttons */
295 WPS_TOKEN_BUTTON_VOLUME 295 WPS_TOKEN_BUTTON_VOLUME,
296
297 /* Setting option */
298 WPS_TOKEN_SETTING,
296}; 299};
297 300
298struct wps_token { 301struct wps_token {
diff --git a/apps/gui/wps_parser.c b/apps/gui/wps_parser.c
index 88601fd9eb..22b161155e 100644
--- a/apps/gui/wps_parser.c
+++ b/apps/gui/wps_parser.c
@@ -56,6 +56,7 @@
56 56
57#include "gwps.h" 57#include "gwps.h"
58#include "settings.h" 58#include "settings.h"
59#include "settings_list.h"
59 60
60#ifdef HAVE_LCD_BITMAP 61#ifdef HAVE_LCD_BITMAP
61#include "bmp.h" 62#include "bmp.h"
@@ -137,6 +138,8 @@ static int parse_progressbar(const char *wps_bufptr,
137 struct wps_token *token, struct wps_data *wps_data); 138 struct wps_token *token, struct wps_data *wps_data);
138static int parse_dir_level(const char *wps_bufptr, 139static int parse_dir_level(const char *wps_bufptr,
139 struct wps_token *token, struct wps_data *wps_data); 140 struct wps_token *token, struct wps_data *wps_data);
141static int parse_setting(const char *wps_bufptr,
142 struct wps_token *token, struct wps_data *wps_data);
140 143
141#ifdef HAVE_LCD_BITMAP 144#ifdef HAVE_LCD_BITMAP
142static int parse_viewport_display(const char *wps_bufptr, 145static int parse_viewport_display(const char *wps_bufptr,
@@ -342,6 +345,8 @@ static const struct wps_tag all_tags[] = {
342#endif 345#endif
343#endif 346#endif
344 347
348 { WPS_TOKEN_SETTING, "St", WPS_REFRESH_DYNAMIC, parse_setting },
349
345 { WPS_TOKEN_UNKNOWN, "", 0, NULL } 350 { WPS_TOKEN_UNKNOWN, "", 0, NULL }
346 /* the array MUST end with an empty string (first char is \0) */ 351 /* the array MUST end with an empty string (first char is \0) */
347}; 352};
@@ -726,6 +731,39 @@ static int parse_viewport(const char *wps_bufptr,
726 return skip_end_of_line(wps_bufptr); 731 return skip_end_of_line(wps_bufptr);
727} 732}
728 733
734static int parse_setting(const char *wps_bufptr,
735 struct wps_token *token,
736 struct wps_data *wps_data)
737{
738 (void)wps_data;
739 const char *ptr = wps_bufptr;
740 const char *end;
741 int i;
742
743 /* Find the setting's cfg_name */
744 if (*ptr != '|')
745 return WPS_ERROR_INVALID_PARAM;
746 ptr++;
747 end = strchr(ptr,'|');
748 if (!end)
749 return WPS_ERROR_INVALID_PARAM;
750
751 /* Find the setting */
752 for (i=0; i<nb_settings; i++)
753 if (settings[i].cfg_name &&
754 !strncmp(settings[i].cfg_name,ptr,end-ptr) &&
755 /* prevent matches on cfg_name prefixes */
756 strlen(settings[i].cfg_name)==end-ptr) break;
757 if (i == nb_settings)
758 return WPS_ERROR_INVALID_PARAM;
759
760 /* Store the setting number */
761 token->value.i = i;
762
763 /* Skip the rest of the line */
764 return end-ptr+2;
765}
766
729 767
730#if (LCD_DEPTH > 1) || (defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1)) 768#if (LCD_DEPTH > 1) || (defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1))
731static int parse_image_special(const char *wps_bufptr, 769static int parse_image_special(const char *wps_bufptr,
diff --git a/manual/appendix/wps_tags.tex b/manual/appendix/wps_tags.tex
index 016bf2833e..df43984c6c 100644
--- a/manual/appendix/wps_tags.tex
+++ b/manual/appendix/wps_tags.tex
@@ -192,6 +192,15 @@ The example above will display the text ``Volume changing'' if the volume is
192being changed and 2.5 secs after the volume button has been released. After 192being changed and 2.5 secs after the volume button has been released. After
193that, it will display the volume value. 193that, it will display the volume value.
194 194
195\section{Settings}
196\begin{table}
197 \begin{tagmap}{}{}
198 \config{\%St{\textbar}<setting name>{\textbar}} & Display the value of any Rockbox setting\\
199 \end{tagmap}
200\end{table}
201Example: Can be used as a simple tag \config{\%St{\textbar}skip length{\textbar}} or with conditionals
202\config{\%?St{\textbar}eq enabled{\textbar}{\textless}Equalizer is enabled{\textbar}Equalizer is disabled{\textgreater}}.
203
195\section{Images} 204\section{Images}
196\begin{table} 205\begin{table}
197 \begin{tagmap}{}{} 206 \begin{tagmap}{}{}