summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/gui/bitmap/list-skinned.c25
-rw-r--r--apps/gui/list.h2
-rw-r--r--apps/gui/skin_engine/skin_tokens.c10
-rw-r--r--lib/skin_parser/tag_table.c2
-rw-r--r--lib/skin_parser/tag_table.h2
5 files changed, 36 insertions, 5 deletions
diff --git a/apps/gui/bitmap/list-skinned.c b/apps/gui/bitmap/list-skinned.c
index 028374c..47bfec3 100644
--- a/apps/gui/bitmap/list-skinned.c
+++ b/apps/gui/bitmap/list-skinned.c
@@ -45,6 +45,9 @@
static struct listitem_viewport_cfg *listcfg[NB_SCREENS] = {NULL};
static struct gui_synclist *current_list;
+static int current_row;
+static int current_column;
+
void skinlist_set_cfg(enum screen_type screen,
struct listitem_viewport_cfg *cfg)
{
@@ -88,6 +91,17 @@ int skinlist_get_item_number()
return current_drawing_line;
}
+int skinlist_get_item_row()
+{
+ return current_row;
+}
+
+int skinlist_get_item_column()
+{
+ return current_column;
+}
+
+
const char* skinlist_get_item_text(int offset, bool wrap, char* buf, size_t buf_size)
{
int item = offset_to_item(offset, wrap);
@@ -181,7 +195,7 @@ bool skinlist_draw(struct screen *display, struct gui_synclist *list)
current_drawing_line = list_start_item+cur_line;
is_selected = list->show_selection_marker &&
list_start_item+cur_line == list->selected_item;
-
+
for (viewport = SKINOFFSETTOPTR(get_skin_buffer(wps.data), listcfg[screen]->data->tree);
viewport;
viewport = SKINOFFSETTOPTR(get_skin_buffer(wps.data), viewport->next))
@@ -206,14 +220,15 @@ bool skinlist_draw(struct screen *display, struct gui_synclist *list)
if (listcfg[screen]->tile)
{
int cols = (parent->width / listcfg[screen]->width);
- int col = (cur_line)%cols;
- int row = (cur_line)/cols;
+ current_column = (cur_line)%cols;
+ current_row = (cur_line)/cols;
- skin_viewport->vp.x = parent->x + listcfg[screen]->width*col + origional_x;
- skin_viewport->vp.y = parent->y + listcfg[screen]->height*row + origional_y;
+ skin_viewport->vp.x = parent->x + listcfg[screen]->width*current_column + origional_x;
+ skin_viewport->vp.y = parent->y + listcfg[screen]->height*current_row + origional_y;
}
else
{
+ current_row = cur_line;
skin_viewport->vp.x = parent->x + origional_x;
skin_viewport->vp.y = parent->y + origional_y +
(listcfg[screen]->height*cur_line);
diff --git a/apps/gui/list.h b/apps/gui/list.h
index 41bc436..647b4ea 100644
--- a/apps/gui/list.h
+++ b/apps/gui/list.h
@@ -194,6 +194,8 @@ 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);
+int skinlist_get_item_row(void);
+int skinlist_get_item_column(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 7651025..29ddad4 100644
--- a/apps/gui/skin_engine/skin_tokens.c
+++ b/apps/gui/skin_engine/skin_tokens.c
@@ -981,6 +981,16 @@ const char *get_token_value(struct gui_wps *gwps,
struct listitem *li = (struct listitem *)SKINOFFSETTOPTR(get_skin_buffer(data), token->value.data);
return skinlist_get_item_text(li->offset, li->wrap, buf, buf_size);
}
+ case SKIN_TOKEN_LIST_ITEM_ROW:
+ if (intval)
+ *intval = skinlist_get_item_row() + 1;
+ snprintf(buf, buf_size, "%d",skinlist_get_item_row() + 1);
+ return buf;
+ case SKIN_TOKEN_LIST_ITEM_COLUMN:
+ if (intval)
+ *intval = skinlist_get_item_column() + 1;
+ snprintf(buf, buf_size, "%d",skinlist_get_item_column() + 1);
+ return buf;
case SKIN_TOKEN_LIST_ITEM_NUMBER:
if (intval)
*intval = skinlist_get_item_number() + 1;
diff --git a/lib/skin_parser/tag_table.c b/lib/skin_parser/tag_table.c
index 14876d1..9a18398 100644
--- a/lib/skin_parser/tag_table.c
+++ b/lib/skin_parser/tag_table.c
@@ -191,6 +191,8 @@ 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_ROW, "LR", "", SKIN_REFRESH_DYNAMIC },
+ { SKIN_TOKEN_LIST_ITEM_COLUMN, "LC", "", 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 },
diff --git a/lib/skin_parser/tag_table.h b/lib/skin_parser/tag_table.h
index 35316b7..d14d31f 100644
--- a/lib/skin_parser/tag_table.h
+++ b/lib/skin_parser/tag_table.h
@@ -219,6 +219,8 @@ 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_ROW,
+ SKIN_TOKEN_LIST_ITEM_COLUMN,
SKIN_TOKEN_LIST_ITEM_NUMBER,
SKIN_TOKEN_LIST_ITEM_ICON,
SKIN_TOKEN_LIST_NEEDS_SCROLLBAR,