diff options
Diffstat (limited to 'apps/gui/skin_engine/skin_tokens.c')
-rw-r--r-- | apps/gui/skin_engine/skin_tokens.c | 56 |
1 files changed, 33 insertions, 23 deletions
diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c index db9a9e694b..b86c664d7e 100644 --- a/apps/gui/skin_engine/skin_tokens.c +++ b/apps/gui/skin_engine/skin_tokens.c | |||
@@ -163,7 +163,7 @@ const char *get_cuesheetid3_token(struct wps_token *token, struct mp3entry *id3, | |||
163 | struct cuesheet *cue = id3?id3->cuesheet:NULL; | 163 | struct cuesheet *cue = id3?id3->cuesheet:NULL; |
164 | if (!cue || !cue->curr_track) | 164 | if (!cue || !cue->curr_track) |
165 | return NULL; | 165 | return NULL; |
166 | 166 | ||
167 | struct cue_track_info *track = cue->curr_track; | 167 | struct cue_track_info *track = cue->curr_track; |
168 | if (offset_tracks) | 168 | if (offset_tracks) |
169 | { | 169 | { |
@@ -185,7 +185,7 @@ const char *get_cuesheetid3_token(struct wps_token *token, struct mp3entry *id3, | |||
185 | case SKIN_TOKEN_METADATA_TRACK_TITLE: | 185 | case SKIN_TOKEN_METADATA_TRACK_TITLE: |
186 | return *track->title ? track->title : NULL; | 186 | return *track->title ? track->title : NULL; |
187 | case SKIN_TOKEN_METADATA_TRACK_NUMBER: | 187 | case SKIN_TOKEN_METADATA_TRACK_NUMBER: |
188 | snprintf(buf, buf_size, "%d/%d", | 188 | snprintf(buf, buf_size, "%d/%d", |
189 | cue->curr_track_idx+offset_tracks+1, cue->track_count); | 189 | cue->curr_track_idx+offset_tracks+1, cue->track_count); |
190 | return buf; | 190 | return buf; |
191 | default: | 191 | default: |
@@ -200,7 +200,7 @@ static const char* get_filename_token(struct wps_token *token, char* filename, | |||
200 | if (filename) | 200 | if (filename) |
201 | { | 201 | { |
202 | switch (token->type) | 202 | switch (token->type) |
203 | { | 203 | { |
204 | case SKIN_TOKEN_FILE_PATH: | 204 | case SKIN_TOKEN_FILE_PATH: |
205 | return filename; | 205 | return filename; |
206 | case SKIN_TOKEN_FILE_NAME: | 206 | case SKIN_TOKEN_FILE_NAME: |
@@ -478,7 +478,7 @@ const char *get_radio_token(struct wps_token *token, int preset_offset, | |||
478 | { | 478 | { |
479 | *intval = val; | 479 | *intval = val; |
480 | } | 480 | } |
481 | else | 481 | else |
482 | { | 482 | { |
483 | *intval = 1+(limit-1)*(val-min)/(max-1-min); | 483 | *intval = 1+(limit-1)*(val-min)/(max-1-min); |
484 | } | 484 | } |
@@ -514,7 +514,7 @@ const char *get_radio_token(struct wps_token *token, int preset_offset, | |||
514 | return buf; | 514 | return buf; |
515 | } | 515 | } |
516 | case SKIN_TOKEN_PRESET_COUNT: | 516 | case SKIN_TOKEN_PRESET_COUNT: |
517 | snprintf(buf, buf_size, "%d", radio_preset_count()); | 517 | snprintf(buf, buf_size, "%d", radio_preset_count()); |
518 | if (intval) | 518 | if (intval) |
519 | *intval = radio_preset_count(); | 519 | *intval = radio_preset_count(); |
520 | return buf; | 520 | return buf; |
@@ -580,7 +580,7 @@ static const char* NOINLINE get_lif_token_value(struct gui_wps *gwps, | |||
580 | int b; | 580 | int b; |
581 | bool number_set = true; | 581 | bool number_set = true; |
582 | struct wps_token *liftoken = SKINOFFSETTOPTR(get_skin_buffer(gwps->data), lif->token); | 582 | struct wps_token *liftoken = SKINOFFSETTOPTR(get_skin_buffer(gwps->data), lif->token); |
583 | const char* out_text = get_token_value(gwps, liftoken, offset, buf, buf_size, &a); | 583 | const char* out_text = get_token_value(gwps, liftoken, offset, buf, buf_size, &a); |
584 | if (a == -1 && liftoken->type != SKIN_TOKEN_VOLUME) | 584 | if (a == -1 && liftoken->type != SKIN_TOKEN_VOLUME) |
585 | { | 585 | { |
586 | a = (out_text && *out_text) ? 1 : 0; | 586 | a = (out_text && *out_text) ? 1 : 0; |
@@ -610,10 +610,13 @@ static const char* NOINLINE get_lif_token_value(struct gui_wps *gwps, | |||
610 | char temp_buf[MAX_PATH]; | 610 | char temp_buf[MAX_PATH]; |
611 | const char *outb; | 611 | const char *outb; |
612 | struct skin_element *element = SKINOFFSETTOPTR(get_skin_buffer(gwps->data), lif->operand.data.code); | 612 | struct skin_element *element = SKINOFFSETTOPTR(get_skin_buffer(gwps->data), lif->operand.data.code); |
613 | if (!element) return NULL; | ||
613 | struct wps_token *token = SKINOFFSETTOPTR(get_skin_buffer(gwps->data), element->data); | 614 | struct wps_token *token = SKINOFFSETTOPTR(get_skin_buffer(gwps->data), element->data); |
614 | b = lif->num_options; | 615 | b = lif->num_options; |
616 | |||
615 | outb = get_token_value(gwps, token, offset, temp_buf, | 617 | outb = get_token_value(gwps, token, offset, temp_buf, |
616 | sizeof(temp_buf), &b); | 618 | sizeof(temp_buf), &b); |
619 | |||
617 | if (b == -1 && liftoken->type != SKIN_TOKEN_VOLUME) | 620 | if (b == -1 && liftoken->type != SKIN_TOKEN_VOLUME) |
618 | { | 621 | { |
619 | if (!out_text || !outb) | 622 | if (!out_text || !outb) |
@@ -631,7 +634,7 @@ static const char* NOINLINE get_lif_token_value(struct gui_wps *gwps, | |||
631 | case DEFAULT: | 634 | case DEFAULT: |
632 | break; | 635 | break; |
633 | } | 636 | } |
634 | 637 | ||
635 | switch (lif->op) | 638 | switch (lif->op) |
636 | { | 639 | { |
637 | case IF_EQUALS: | 640 | case IF_EQUALS: |
@@ -666,10 +669,12 @@ const char *get_token_value(struct gui_wps *gwps, | |||
666 | { | 669 | { |
667 | if (!gwps) | 670 | if (!gwps) |
668 | return NULL; | 671 | return NULL; |
672 | if (!token) | ||
673 | return NULL; | ||
669 | 674 | ||
670 | struct wps_data *data = gwps->data; | 675 | struct wps_data *data = gwps->data; |
671 | struct wps_state *state = skin_get_global_state(); | 676 | struct wps_state *state = skin_get_global_state(); |
672 | struct mp3entry *id3; /* Think very carefully about using this. | 677 | struct mp3entry *id3; /* Think very carefully about using this. |
673 | maybe get_id3_token() is the better place? */ | 678 | maybe get_id3_token() is the better place? */ |
674 | const char *out_text = NULL; | 679 | const char *out_text = NULL; |
675 | char *filename = NULL; | 680 | char *filename = NULL; |
@@ -680,7 +685,7 @@ const char *get_token_value(struct gui_wps *gwps, | |||
680 | id3 = get_mp3entry_from_offset(token->next? 1: offset, &filename); | 685 | id3 = get_mp3entry_from_offset(token->next? 1: offset, &filename); |
681 | if (id3) | 686 | if (id3) |
682 | filename = id3->path; | 687 | filename = id3->path; |
683 | 688 | ||
684 | #if CONFIG_RTC | 689 | #if CONFIG_RTC |
685 | struct tm* tm = NULL; | 690 | struct tm* tm = NULL; |
686 | 691 | ||
@@ -702,10 +707,10 @@ const char *get_token_value(struct gui_wps *gwps, | |||
702 | limit = *intval; | 707 | limit = *intval; |
703 | *intval = -1; | 708 | *intval = -1; |
704 | } | 709 | } |
705 | 710 | ||
706 | if (id3 && id3 == state->id3 && id3->cuesheet ) | 711 | if (id3 && id3 == state->id3 && id3->cuesheet ) |
707 | { | 712 | { |
708 | out_text = get_cuesheetid3_token(token, id3, | 713 | out_text = get_cuesheetid3_token(token, id3, |
709 | token->next?1:offset, buf, buf_size); | 714 | token->next?1:offset, buf, buf_size); |
710 | if (out_text) | 715 | if (out_text) |
711 | return out_text; | 716 | return out_text; |
@@ -734,6 +739,7 @@ const char *get_token_value(struct gui_wps *gwps, | |||
734 | char *skinbuffer = get_skin_buffer(data); | 739 | char *skinbuffer = get_skin_buffer(data); |
735 | struct skin_element *element = | 740 | struct skin_element *element = |
736 | SKINOFFSETTOPTR(skinbuffer, token->value.data); | 741 | SKINOFFSETTOPTR(skinbuffer, token->value.data); |
742 | if (!element || !element->params) return NULL; | ||
737 | struct skin_tag_parameter* params = | 743 | struct skin_tag_parameter* params = |
738 | SKINOFFSETTOPTR(skinbuffer, element->params); | 744 | SKINOFFSETTOPTR(skinbuffer, element->params); |
739 | struct skin_tag_parameter* thistag; | 745 | struct skin_tag_parameter* thistag; |
@@ -742,6 +748,7 @@ const char *get_token_value(struct gui_wps *gwps, | |||
742 | thistag = ¶ms[i]; | 748 | thistag = ¶ms[i]; |
743 | struct skin_element *tokenelement = | 749 | struct skin_element *tokenelement = |
744 | SKINOFFSETTOPTR(skinbuffer, thistag->data.code); | 750 | SKINOFFSETTOPTR(skinbuffer, thistag->data.code); |
751 | if (!tokenelement) return NULL; | ||
745 | out_text = get_token_value(gwps, | 752 | out_text = get_token_value(gwps, |
746 | SKINOFFSETTOPTR(skinbuffer, tokenelement->data), | 753 | SKINOFFSETTOPTR(skinbuffer, tokenelement->data), |
747 | offset, buf, buf_size, intval); | 754 | offset, buf, buf_size, intval); |
@@ -753,10 +760,12 @@ const char *get_token_value(struct gui_wps *gwps, | |||
753 | return truecount ? "true" : NULL; | 760 | return truecount ? "true" : NULL; |
754 | } | 761 | } |
755 | break; | 762 | break; |
763 | |||
756 | case SKIN_TOKEN_SUBSTRING: | 764 | case SKIN_TOKEN_SUBSTRING: |
757 | { | 765 | { |
758 | struct substring *ss = SKINOFFSETTOPTR(get_skin_buffer(data), token->value.data); | 766 | struct substring *ss = SKINOFFSETTOPTR(get_skin_buffer(data), token->value.data); |
759 | const char *token_val = get_token_value(gwps, | 767 | if (!ss) return NULL; |
768 | const char *token_val = get_token_value(gwps, | ||
760 | SKINOFFSETTOPTR(get_skin_buffer(data), ss->token), offset, | 769 | SKINOFFSETTOPTR(get_skin_buffer(data), ss->token), offset, |
761 | buf, buf_size, intval); | 770 | buf, buf_size, intval); |
762 | if (token_val) | 771 | if (token_val) |
@@ -788,13 +797,13 @@ const char *get_token_value(struct gui_wps *gwps, | |||
788 | if (ss->expect_number && | 797 | if (ss->expect_number && |
789 | intval && (buf[0] >= '0' && buf[0] <= '9')) | 798 | intval && (buf[0] >= '0' && buf[0] <= '9')) |
790 | *intval = atoi(buf) + 1; /* so 0 is the first item */ | 799 | *intval = atoi(buf) + 1; /* so 0 is the first item */ |
791 | 800 | ||
792 | return buf; | 801 | return buf; |
793 | } | 802 | } |
794 | return NULL; | 803 | return NULL; |
795 | } | 804 | } |
796 | break; | 805 | break; |
797 | 806 | ||
798 | case SKIN_TOKEN_CHARACTER: | 807 | case SKIN_TOKEN_CHARACTER: |
799 | if (token->value.c == '\n') | 808 | if (token->value.c == '\n') |
800 | return NULL; | 809 | return NULL; |
@@ -802,7 +811,7 @@ const char *get_token_value(struct gui_wps *gwps, | |||
802 | 811 | ||
803 | case SKIN_TOKEN_STRING: | 812 | case SKIN_TOKEN_STRING: |
804 | return (char*)SKINOFFSETTOPTR(get_skin_buffer(data), token->value.data); | 813 | return (char*)SKINOFFSETTOPTR(get_skin_buffer(data), token->value.data); |
805 | 814 | ||
806 | case SKIN_TOKEN_TRANSLATEDSTRING: | 815 | case SKIN_TOKEN_TRANSLATEDSTRING: |
807 | return (char*)P2STR(ID2P(token->value.i)); | 816 | return (char*)P2STR(ID2P(token->value.i)); |
808 | 817 | ||
@@ -821,6 +830,7 @@ const char *get_token_value(struct gui_wps *gwps, | |||
821 | case SKIN_TOKEN_LIST_ITEM_TEXT: | 830 | case SKIN_TOKEN_LIST_ITEM_TEXT: |
822 | { | 831 | { |
823 | struct listitem *li = (struct listitem *)SKINOFFSETTOPTR(get_skin_buffer(data), token->value.data); | 832 | struct listitem *li = (struct listitem *)SKINOFFSETTOPTR(get_skin_buffer(data), token->value.data); |
833 | if (!li) return NULL; | ||
824 | return skinlist_get_item_text(li->offset, li->wrap, buf, buf_size); | 834 | return skinlist_get_item_text(li->offset, li->wrap, buf, buf_size); |
825 | } | 835 | } |
826 | case SKIN_TOKEN_LIST_ITEM_ROW: | 836 | case SKIN_TOKEN_LIST_ITEM_ROW: |
@@ -843,6 +853,7 @@ const char *get_token_value(struct gui_wps *gwps, | |||
843 | case SKIN_TOKEN_LIST_ITEM_ICON: | 853 | case SKIN_TOKEN_LIST_ITEM_ICON: |
844 | { | 854 | { |
845 | struct listitem *li = (struct listitem *)SKINOFFSETTOPTR(get_skin_buffer(data), token->value.data); | 855 | struct listitem *li = (struct listitem *)SKINOFFSETTOPTR(get_skin_buffer(data), token->value.data); |
856 | if (!li) return NULL; | ||
846 | int icon = skinlist_get_item_icon(li->offset, li->wrap); | 857 | int icon = skinlist_get_item_icon(li->offset, li->wrap); |
847 | if (intval) | 858 | if (intval) |
848 | *intval = icon; | 859 | *intval = icon; |
@@ -905,11 +916,12 @@ const char *get_token_value(struct gui_wps *gwps, | |||
905 | if (in_radio_screen() || (get_radio_status() != FMRADIO_OFF)) | 916 | if (in_radio_screen() || (get_radio_status() != FMRADIO_OFF)) |
906 | { | 917 | { |
907 | struct skin_albumart *aa = SKINOFFSETTOPTR(get_skin_buffer(data), data->albumart); | 918 | struct skin_albumart *aa = SKINOFFSETTOPTR(get_skin_buffer(data), data->albumart); |
919 | if (!aa) return NULL; | ||
908 | struct dim dim = {aa->width, aa->height}; | 920 | struct dim dim = {aa->width, aa->height}; |
909 | handle = radio_get_art_hid(&dim); | 921 | handle = radio_get_art_hid(&dim); |
910 | } | 922 | } |
911 | #endif | 923 | #endif |
912 | if (handle >= 0) | 924 | if (handle >= 0) |
913 | return "C"; | 925 | return "C"; |
914 | } | 926 | } |
915 | return NULL; | 927 | return NULL; |
@@ -1009,7 +1021,7 @@ const char *get_token_value(struct gui_wps *gwps, | |||
1009 | int mode = 1; /* stop */ | 1021 | int mode = 1; /* stop */ |
1010 | if (status == STATUS_PLAY) | 1022 | if (status == STATUS_PLAY) |
1011 | mode = 2; /* play */ | 1023 | mode = 2; /* play */ |
1012 | if (state->is_fading || | 1024 | if (state->is_fading || |
1013 | (status == STATUS_PAUSE && !status_get_ffmode())) | 1025 | (status == STATUS_PAUSE && !status_get_ffmode())) |
1014 | mode = 3; /* pause */ | 1026 | mode = 3; /* pause */ |
1015 | else | 1027 | else |
@@ -1336,13 +1348,13 @@ const char *get_token_value(struct gui_wps *gwps, | |||
1336 | token->value.i)) | 1348 | token->value.i)) |
1337 | return "v"; | 1349 | return "v"; |
1338 | return NULL; | 1350 | return NULL; |
1339 | |||
1340 | case SKIN_TOKEN_LASTTOUCH: | 1351 | case SKIN_TOKEN_LASTTOUCH: |
1341 | { | 1352 | { |
1342 | #ifdef HAVE_TOUCHSCREEN | 1353 | #ifdef HAVE_TOUCHSCREEN |
1343 | unsigned int last_touch = touchscreen_last_touch(); | 1354 | unsigned int last_touch = touchscreen_last_touch(); |
1344 | char *skin_base = get_skin_buffer(data); | 1355 | char *skin_base = get_skin_buffer(data); |
1345 | struct touchregion_lastpress *data = SKINOFFSETTOPTR(skin_base, token->value.data); | 1356 | struct touchregion_lastpress *data = SKINOFFSETTOPTR(skin_base, token->value.data); |
1357 | if (!data) return NULL; | ||
1346 | struct touchregion *region = SKINOFFSETTOPTR(skin_base, data->region); | 1358 | struct touchregion *region = SKINOFFSETTOPTR(skin_base, data->region); |
1347 | if (region) | 1359 | if (region) |
1348 | last_touch = region->last_press; | 1360 | last_touch = region->last_press; |
@@ -1669,10 +1681,8 @@ const char *get_token_value(struct gui_wps *gwps, | |||
1669 | } | 1681 | } |
1670 | return NULL; | 1682 | return NULL; |
1671 | #endif | 1683 | #endif |
1672 | |||
1673 | default: | 1684 | default: |
1674 | return NULL; | 1685 | return NULL; |
1675 | } | 1686 | } |
1676 | } | ||
1677 | |||
1678 | 1687 | ||
1688 | } | ||