From 28d5f2aa57e8963a82849b2009274e8272094c86 Mon Sep 17 00:00:00 2001 From: Frank Gevaerts Date: Sun, 18 Sep 2011 12:35:32 +0000 Subject: [PATCH] Add "%LN" tag to retrieve the list item number of the current item. This allows e.g. putting item numbers in skinned lists. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30568 a1c6a512-1295-4272-9138-f99709370657 --- apps/gui/bitmap/list-skinned.c | 6 ++++++ apps/gui/list.h | 1 + apps/gui/skin_engine/skin_tokens.c | 5 +++++ lib/skin_parser/tag_table.c | 1 + lib/skin_parser/tag_table.h | 1 + 5 files changed, 14 insertions(+) diff --git a/apps/gui/bitmap/list-skinned.c b/apps/gui/bitmap/list-skinned.c index 5f53784ccc..208b2df681 100644 --- a/apps/gui/bitmap/list-skinned.c +++ b/apps/gui/bitmap/list-skinned.c @@ -82,6 +82,12 @@ static int offset_to_item(int offset, bool wrap) item = item % current_list->nb_items; return item; } + +int skinlist_get_item_number() +{ + return current_drawing_line; +} + const char* skinlist_get_item_text(int offset, bool wrap, char* buf, size_t buf_size) { int item = offset_to_item(offset, wrap); diff --git a/apps/gui/list.h b/apps/gui/list.h index 7c64987abb..d40cfe9966 100644 --- a/apps/gui/list.h +++ b/apps/gui/list.h @@ -190,6 +190,7 @@ bool skinlist_is_selected_item(void); void skinlist_set_cfg(enum screen_type screen, struct listitem_viewport_cfg *cfg); const char* skinlist_get_item_text(int offset, bool wrap, char* buf, size_t buf_size); +int skinlist_get_item_number(void); enum themable_icons skinlist_get_item_icon(int offset, bool wrap); bool skinlist_needs_scrollbar(enum screen_type screen); void skinlist_get_scrollbar(int* nb_item, int* first_shown, int* last_shown); diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c index fa697b18e9..7bf588080d 100644 --- a/apps/gui/skin_engine/skin_tokens.c +++ b/apps/gui/skin_engine/skin_tokens.c @@ -932,6 +932,11 @@ const char *get_token_value(struct gui_wps *gwps, struct listitem *li = (struct listitem *)token->value.data; return skinlist_get_item_text(li->offset, li->wrap, buf, buf_size); } + case SKIN_TOKEN_LIST_ITEM_NUMBER: + if (intval) + *intval = skinlist_get_item_number(); + snprintf(buf, buf_size, "%d",skinlist_get_item_number()); + return buf; case SKIN_TOKEN_LIST_ITEM_IS_SELECTED: return skinlist_is_selected_item()?"s":""; case SKIN_TOKEN_LIST_ITEM_ICON: diff --git a/lib/skin_parser/tag_table.c b/lib/skin_parser/tag_table.c index aa18dd4cca..dda5074d9a 100644 --- a/lib/skin_parser/tag_table.c +++ b/lib/skin_parser/tag_table.c @@ -189,6 +189,7 @@ static const struct tag_info legal_tags[] = { SKIN_TOKEN_VIEWPORT_CUSTOMLIST, "Vp" , "IC", SKIN_REFRESH_DYNAMIC|NOBREAK }, { SKIN_TOKEN_LIST_TITLE_TEXT, "Lt" , "", SKIN_REFRESH_DYNAMIC }, { SKIN_TOKEN_LIST_ITEM_TEXT, "LT", "|IS", SKIN_REFRESH_DYNAMIC }, + { SKIN_TOKEN_LIST_ITEM_NUMBER, "LN", "", SKIN_REFRESH_DYNAMIC }, { SKIN_TOKEN_LIST_TITLE_ICON, "Li" , "", SKIN_REFRESH_DYNAMIC }, { SKIN_TOKEN_LIST_ITEM_ICON, "LI", "|IS", SKIN_REFRESH_DYNAMIC }, { SKIN_TOKEN_LIST_ITEM_CFG, "Lb" , "Sii|S", SKIN_REFRESH_STATIC }, diff --git a/lib/skin_parser/tag_table.h b/lib/skin_parser/tag_table.h index 82ee4757be..58c3869ea6 100644 --- a/lib/skin_parser/tag_table.h +++ b/lib/skin_parser/tag_table.h @@ -216,6 +216,7 @@ enum skin_token_type { SKIN_TOKEN_LIST_SELECTED_ITEM_CFG, SKIN_TOKEN_LIST_ITEM_IS_SELECTED, SKIN_TOKEN_LIST_ITEM_TEXT, + SKIN_TOKEN_LIST_ITEM_NUMBER, SKIN_TOKEN_LIST_ITEM_ICON, SKIN_TOKEN_LIST_NEEDS_SCROLLBAR, SKIN_TOKEN_LIST_SCROLLBAR, -- 2.11.4.GIT