summaryrefslogtreecommitdiff
path: root/apps/gui/skin_engine
diff options
context:
space:
mode:
Diffstat (limited to 'apps/gui/skin_engine')
-rw-r--r--apps/gui/skin_engine/skin_parser.c25
-rw-r--r--apps/gui/skin_engine/skin_tokens.c13
-rw-r--r--apps/gui/skin_engine/wps_internals.h5
3 files changed, 40 insertions, 3 deletions
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c
index 0db19645bc..dd34d84e9f 100644
--- a/apps/gui/skin_engine/skin_parser.c
+++ b/apps/gui/skin_engine/skin_parser.c
@@ -485,6 +485,27 @@ static int parse_viewport_gradient_setup(struct skin_element *element,
485} 485}
486#endif 486#endif
487 487
488static int parse_listitem(struct skin_element *element,
489 struct wps_token *token,
490 struct wps_data *wps_data)
491{
492 (void)wps_data;
493 struct listitem *li = (struct listitem *)skin_buffer_alloc(sizeof(struct listitem));
494 if (!li)
495 return 1;
496 token->value.data = li;
497 if (element->params_count == 0)
498 li->offset = 0;
499 else
500 {
501 li->offset = element->params[0].data.number;
502 if (element->params_count > 1)
503 li->wrap = strcasecmp(element->params[1].data.text, "nowrap") != 0;
504 else
505 li->wrap = true;
506 }
507 return 0;
508}
488 509
489static int parse_listitemviewport(struct skin_element *element, 510static int parse_listitemviewport(struct skin_element *element,
490 struct wps_token *token, 511 struct wps_token *token,
@@ -1827,6 +1848,10 @@ static int skin_element_callback(struct skin_element* element, void* data)
1827 case SKIN_TOKEN_TRACK_ENDING: 1848 case SKIN_TOKEN_TRACK_ENDING:
1828 function = parse_timeout_tag; 1849 function = parse_timeout_tag;
1829 break; 1850 break;
1851 case SKIN_TOKEN_LIST_ITEM_TEXT:
1852 case SKIN_TOKEN_LIST_ITEM_ICON:
1853 function = parse_listitem;
1854 break;
1830#ifdef HAVE_LCD_BITMAP 1855#ifdef HAVE_LCD_BITMAP
1831 case SKIN_TOKEN_DISABLE_THEME: 1856 case SKIN_TOKEN_DISABLE_THEME:
1832 case SKIN_TOKEN_ENABLE_THEME: 1857 case SKIN_TOKEN_ENABLE_THEME:
diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c
index 371db46017..a4f0814945 100644
--- a/apps/gui/skin_engine/skin_tokens.c
+++ b/apps/gui/skin_engine/skin_tokens.c
@@ -922,14 +922,21 @@ const char *get_token_value(struct gui_wps *gwps,
922 snprintf(buf, buf_size, "%d",sb_get_icon(gwps->display->screen_type)); 922 snprintf(buf, buf_size, "%d",sb_get_icon(gwps->display->screen_type));
923 return buf; 923 return buf;
924 case SKIN_TOKEN_LIST_ITEM_TEXT: 924 case SKIN_TOKEN_LIST_ITEM_TEXT:
925 return skinlist_get_item_text(); 925 {
926 struct listitem *li = (struct listitem *)token->value.data;
927 return skinlist_get_item_text(li->offset, li->wrap, buf, buf_size);
928 }
926 case SKIN_TOKEN_LIST_ITEM_IS_SELECTED: 929 case SKIN_TOKEN_LIST_ITEM_IS_SELECTED:
927 return skinlist_is_selected_item()?"s":""; 930 return skinlist_is_selected_item()?"s":"";
928 case SKIN_TOKEN_LIST_ITEM_ICON: 931 case SKIN_TOKEN_LIST_ITEM_ICON:
932 {
933 struct listitem *li = (struct listitem *)token->value.data;
934 int icon = skinlist_get_item_icon(li->offset, li->wrap);
929 if (intval) 935 if (intval)
930 *intval = skinlist_get_item_icon(); 936 *intval = icon;
931 snprintf(buf, buf_size, "%d",skinlist_get_item_icon()); 937 snprintf(buf, buf_size, "%d", icon);
932 return buf; 938 return buf;
939 }
933 case SKIN_TOKEN_LIST_NEEDS_SCROLLBAR: 940 case SKIN_TOKEN_LIST_NEEDS_SCROLLBAR:
934 return skinlist_needs_scrollbar(gwps->display->screen_type) ? "s" : ""; 941 return skinlist_needs_scrollbar(gwps->display->screen_type) ? "s" : "";
935#endif 942#endif
diff --git a/apps/gui/skin_engine/wps_internals.h b/apps/gui/skin_engine/wps_internals.h
index 7d7afe95b1..244d08595e 100644
--- a/apps/gui/skin_engine/wps_internals.h
+++ b/apps/gui/skin_engine/wps_internals.h
@@ -294,6 +294,11 @@ struct substring {
294 struct wps_token *token; 294 struct wps_token *token;
295}; 295};
296 296
297struct listitem {
298 bool wrap;
299 short offset;
300};
301
297#ifdef HAVE_SKIN_VARIABLES 302#ifdef HAVE_SKIN_VARIABLES
298struct skin_var { 303struct skin_var {
299 const char *label; 304 const char *label;