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.zip
rockbox-8289b966b810eb21732ecb905433debf4e872857.tar.gz
rockbox-8289b966b810eb21732ecb905433debf4e872857.tar.bz2
rockbox-8289b966b810eb21732ecb905433debf4e872857.tar.xz
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 a0e09b8..bcaebc5 100644
--- a/apps/gui/gwps-common.c
+++ b/apps/gui/gwps-common.c
@@ -26,6 +26,7 @@
#include <stdlib.h>
#include "system.h"
#include "settings.h"
+#include "settings_list.h"
#include "rbunicode.h"
#include "rtc.h"
#include "audio.h"
@@ -1402,6 +1403,53 @@ static const char *get_token_value(struct gui_wps *gwps,
token->value.i * TIMEOUT_UNIT))
return "v";
return NULL;
+
+ case WPS_TOKEN_SETTING:
+ {
+ if (intval)
+ {
+ /* Handle contionals */
+ const struct settings_list *s = settings+token->value.i;
+ switch (s->flags&F_T_MASK)
+ {
+ case F_T_INT:
+ case F_T_UINT:
+ if (s->flags&F_RGB)
+ /* %?St|name|<#000000|#000001|...|#FFFFFF> */
+ /* shouldn't overflow since colors are stored
+ * on 16 bits ...
+ * but this is pretty useless anyway */
+ *intval = *(int*)s->setting + 1;
+ else if (s->cfg_vals == NULL)
+ /* %?St|name|<1st choice|2nd choice|...> */
+ *intval = (*(int*)s->setting-s->int_setting->min)
+ /s->int_setting->step + 1;
+ else
+ /* %?St|name|<1st choice|2nd choice|...> */
+ /* Not sure about this one. cfg_name/vals are
+ * indexed from 0 right? */
+ *intval = *(int*)s->setting + 1;
+ break;
+ case F_T_BOOL:
+ /* %?St|name|<if true|if false> */
+ *intval = *(bool*)s->setting?1:2;
+ break;
+ case F_T_CHARPTR:
+ /* %?St|name|<if non empty string|if empty>
+ * The string's emptyness discards the setting's
+ * prefix and suffix */
+ *intval = ((char*)s->setting)[0]?1:2;
+ break;
+ default:
+ /* This shouldn't happen ... but you never know */
+ *intval = -1;
+ break;
+ }
+ }
+ cfg_to_string(token->value.i,buf,buf_size);
+ return buf;
+ }
+
default:
return NULL;
}
diff --git a/apps/gui/gwps.h b/apps/gui/gwps.h
index ff402a7..4cffb0d 100644
--- a/apps/gui/gwps.h
+++ b/apps/gui/gwps.h
@@ -292,7 +292,10 @@ enum wps_token_type {
WPS_VIEWPORT_ENABLE,
/* buttons */
- WPS_TOKEN_BUTTON_VOLUME
+ WPS_TOKEN_BUTTON_VOLUME,
+
+ /* Setting option */
+ WPS_TOKEN_SETTING,
};
struct wps_token {
diff --git a/apps/gui/wps_parser.c b/apps/gui/wps_parser.c
index 88601fd..22b1611 100644
--- a/apps/gui/wps_parser.c
+++ b/apps/gui/wps_parser.c
@@ -56,6 +56,7 @@
#include "gwps.h"
#include "settings.h"
+#include "settings_list.h"
#ifdef HAVE_LCD_BITMAP
#include "bmp.h"
@@ -137,6 +138,8 @@ static int parse_progressbar(const char *wps_bufptr,
struct wps_token *token, struct wps_data *wps_data);
static int parse_dir_level(const char *wps_bufptr,
struct wps_token *token, struct wps_data *wps_data);
+static int parse_setting(const char *wps_bufptr,
+ struct wps_token *token, struct wps_data *wps_data);
#ifdef HAVE_LCD_BITMAP
static int parse_viewport_display(const char *wps_bufptr,
@@ -342,6 +345,8 @@ static const struct wps_tag all_tags[] = {
#endif
#endif
+ { WPS_TOKEN_SETTING, "St", WPS_REFRESH_DYNAMIC, parse_setting },
+
{ WPS_TOKEN_UNKNOWN, "", 0, NULL }
/* the array MUST end with an empty string (first char is \0) */
};
@@ -726,6 +731,39 @@ static int parse_viewport(const char *wps_bufptr,
return skip_end_of_line(wps_bufptr);
}
+static int parse_setting(const char *wps_bufptr,
+ struct wps_token *token,
+ struct wps_data *wps_data)
+{
+ (void)wps_data;
+ const char *ptr = wps_bufptr;
+ const char *end;
+ int i;
+
+ /* Find the setting's cfg_name */
+ if (*ptr != '|')
+ return WPS_ERROR_INVALID_PARAM;
+ ptr++;
+ end = strchr(ptr,'|');
+ if (!end)
+ return WPS_ERROR_INVALID_PARAM;
+
+ /* Find the setting */
+ for (i=0; i<nb_settings; i++)
+ if (settings[i].cfg_name &&
+ !strncmp(settings[i].cfg_name,ptr,end-ptr) &&
+ /* prevent matches on cfg_name prefixes */
+ strlen(settings[i].cfg_name)==end-ptr) break;
+ if (i == nb_settings)
+ return WPS_ERROR_INVALID_PARAM;
+
+ /* Store the setting number */
+ token->value.i = i;
+
+ /* Skip the rest of the line */
+ return end-ptr+2;
+}
+
#if (LCD_DEPTH > 1) || (defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1))
static int parse_image_special(const char *wps_bufptr,
diff --git a/manual/appendix/wps_tags.tex b/manual/appendix/wps_tags.tex
index 016bf28..df43984 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
being changed and 2.5 secs after the volume button has been released. After
that, it will display the volume value.
+\section{Settings}
+\begin{table}
+ \begin{tagmap}{}{}
+ \config{\%St{\textbar}<setting name>{\textbar}} & Display the value of any Rockbox setting\\
+ \end{tagmap}
+\end{table}
+Example: Can be used as a simple tag \config{\%St{\textbar}skip length{\textbar}} or with conditionals
+\config{\%?St{\textbar}eq enabled{\textbar}{\textless}Equalizer is enabled{\textbar}Equalizer is disabled{\textgreater}}.
+
\section{Images}
\begin{table}
\begin{tagmap}{}{}