summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/filetree.c1
-rw-r--r--apps/gui/skin_engine/skin_display.c11
-rw-r--r--apps/gui/skin_engine/skin_parser.c48
-rw-r--r--apps/gui/skin_engine/skin_tokens.h2
-rw-r--r--apps/gui/skin_engine/wps_internals.h1
-rw-r--r--wps/cabbiev2.128x128x16.wps8
-rw-r--r--wps/cabbiev2.132x80x16.wps6
-rw-r--r--wps/cabbiev2.138x110x2.wps8
-rw-r--r--wps/cabbiev2.160x128x16.wps8
-rw-r--r--wps/cabbiev2.160x128x2.wps8
-rw-r--r--wps/cabbiev2.176x132x16.wps6
-rw-r--r--wps/cabbiev2.220x176x16.wps8
-rw-r--r--wps/cabbiev2.320x240x16.wps10
13 files changed, 89 insertions, 36 deletions
diff --git a/apps/filetree.c b/apps/filetree.c
index e5da8246f7..ccf4c2bd91 100644
--- a/apps/filetree.c
+++ b/apps/filetree.c
@@ -548,6 +548,7 @@ int ft_enter(struct tree_context* c)
548 MAX_FILENAME); 548 MAX_FILENAME);
549 talk_init(); /* use voice of same language */ 549 talk_init(); /* use voice of same language */
550 viewportmanager_theme_changed(THEME_LANGUAGE); 550 viewportmanager_theme_changed(THEME_LANGUAGE);
551 settings_apply_skins();
551 splash(HZ, ID2P(LANG_LANGUAGE_LOADED)); 552 splash(HZ, ID2P(LANG_LANGUAGE_LOADED));
552 break; 553 break;
553 554
diff --git a/apps/gui/skin_engine/skin_display.c b/apps/gui/skin_engine/skin_display.c
index ea2c794272..b8cc75e10a 100644
--- a/apps/gui/skin_engine/skin_display.c
+++ b/apps/gui/skin_engine/skin_display.c
@@ -31,6 +31,7 @@
31#endif 31#endif
32#include "abrepeat.h" 32#include "abrepeat.h"
33#include "lang.h" 33#include "lang.h"
34#include "language.h"
34#include "statusbar.h" 35#include "statusbar.h"
35#include "scrollbar.h" 36#include "scrollbar.h"
36#include "screen_access.h" 37#include "screen_access.h"
@@ -528,8 +529,10 @@ static bool get_line(struct gui_wps *gwps,
528#endif 529#endif
529 530
530 case WPS_TOKEN_ALIGN_LEFT: 531 case WPS_TOKEN_ALIGN_LEFT:
532 case WPS_TOKEN_ALIGN_LEFT_RTL:
531 case WPS_TOKEN_ALIGN_CENTER: 533 case WPS_TOKEN_ALIGN_CENTER:
532 case WPS_TOKEN_ALIGN_RIGHT: 534 case WPS_TOKEN_ALIGN_RIGHT:
535 case WPS_TOKEN_ALIGN_RIGHT_RTL:
533 /* remember where the current aligned text started */ 536 /* remember where the current aligned text started */
534 switch (cur_align) 537 switch (cur_align)
535 { 538 {
@@ -551,12 +554,20 @@ static bool get_line(struct gui_wps *gwps,
551 case WPS_TOKEN_ALIGN_LEFT: 554 case WPS_TOKEN_ALIGN_LEFT:
552 cur_align = WPS_ALIGN_LEFT; 555 cur_align = WPS_ALIGN_LEFT;
553 break; 556 break;
557 case WPS_TOKEN_ALIGN_LEFT_RTL:
558 cur_align = lang_is_rtl() ? WPS_ALIGN_RIGHT :
559 WPS_ALIGN_LEFT;
560 break;
554 case WPS_TOKEN_ALIGN_CENTER: 561 case WPS_TOKEN_ALIGN_CENTER:
555 cur_align = WPS_ALIGN_CENTER; 562 cur_align = WPS_ALIGN_CENTER;
556 break; 563 break;
557 case WPS_TOKEN_ALIGN_RIGHT: 564 case WPS_TOKEN_ALIGN_RIGHT:
558 cur_align = WPS_ALIGN_RIGHT; 565 cur_align = WPS_ALIGN_RIGHT;
559 break; 566 break;
567 case WPS_TOKEN_ALIGN_RIGHT_RTL:
568 cur_align = lang_is_rtl() ? WPS_ALIGN_LEFT :
569 WPS_ALIGN_RIGHT;
570 break;
560 default: 571 default:
561 break; 572 break;
562 } 573 }
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c
index 568f9cb578..1e24762fee 100644
--- a/apps/gui/skin_engine/skin_parser.c
+++ b/apps/gui/skin_engine/skin_parser.c
@@ -89,6 +89,8 @@ static struct skin_viewport *curr_vp;
89/* the current line, linked to the above viewport */ 89/* the current line, linked to the above viewport */
90static struct skin_line *curr_line; 90static struct skin_line *curr_line;
91 91
92static int follow_lang_direction = 0;
93
92#ifdef HAVE_LCD_BITMAP 94#ifdef HAVE_LCD_BITMAP
93 95
94#if LCD_DEPTH > 1 96#if LCD_DEPTH > 1
@@ -140,6 +142,19 @@ static int parse_dir_level(const char *wps_bufptr,
140 struct wps_token *token, struct wps_data *wps_data); 142 struct wps_token *token, struct wps_data *wps_data);
141static int parse_setting_and_lang(const char *wps_bufptr, 143static int parse_setting_and_lang(const char *wps_bufptr,
142 struct wps_token *token, struct wps_data *wps_data); 144 struct wps_token *token, struct wps_data *wps_data);
145
146
147int parse_languagedirection(const char *wps_bufptr,
148 struct wps_token *token, struct wps_data *wps_data)
149{
150 (void)wps_bufptr;
151 (void)token;
152 (void)wps_data;
153 follow_lang_direction = 2; /* 2 because it is decremented immediatly after
154 this token is parsed, after the next token it
155 will be 0 again. */
156 return 0;
157}
143 158
144#ifdef HAVE_LCD_BITMAP 159#ifdef HAVE_LCD_BITMAP
145static int parse_viewport_display(const char *wps_bufptr, 160static int parse_viewport_display(const char *wps_bufptr,
@@ -189,7 +204,10 @@ static const struct wps_tag all_tags[] = {
189 204
190 { WPS_TOKEN_ALIGN_CENTER, "ac", 0, NULL }, 205 { WPS_TOKEN_ALIGN_CENTER, "ac", 0, NULL },
191 { WPS_TOKEN_ALIGN_LEFT, "al", 0, NULL }, 206 { WPS_TOKEN_ALIGN_LEFT, "al", 0, NULL },
207 { WPS_TOKEN_ALIGN_LEFT_RTL, "aL", 0, NULL },
192 { WPS_TOKEN_ALIGN_RIGHT, "ar", 0, NULL }, 208 { WPS_TOKEN_ALIGN_RIGHT, "ar", 0, NULL },
209 { WPS_TOKEN_ALIGN_RIGHT_RTL, "aR", 0, NULL },
210 { WPS_NO_TOKEN, "ax", 0, parse_languagedirection },
193 211
194 { WPS_TOKEN_BATTERY_PERCENT, "bl", WPS_REFRESH_DYNAMIC, NULL }, 212 { WPS_TOKEN_BATTERY_PERCENT, "bl", WPS_REFRESH_DYNAMIC, NULL },
195 { WPS_TOKEN_BATTERY_VOLTS, "bv", WPS_REFRESH_DYNAMIC, NULL }, 213 { WPS_TOKEN_BATTERY_VOLTS, "bv", WPS_REFRESH_DYNAMIC, NULL },
@@ -748,15 +766,22 @@ static int parse_viewport(const char *wps_bufptr,
748 ptr++; 766 ptr++;
749 struct viewport *vp = &skin_vp->vp; 767 struct viewport *vp = &skin_vp->vp;
750 /* format: %V|x|y|width|height|font|fg_pattern|bg_pattern| */ 768 /* format: %V|x|y|width|height|font|fg_pattern|bg_pattern| */
751
752 if (!(ptr = viewport_parse_viewport(vp, curr_screen, ptr, '|'))) 769 if (!(ptr = viewport_parse_viewport(vp, curr_screen, ptr, '|')))
753 return WPS_ERROR_INVALID_PARAM; 770 return WPS_ERROR_INVALID_PARAM;
754 771
755 vp->flags &= ~VP_FLAG_ALIGN_RIGHT; /* ignore right-to-left languages */
756 /* Check for trailing | */ 772 /* Check for trailing | */
757 if (*ptr != '|') 773 if (*ptr != '|')
758 return WPS_ERROR_INVALID_PARAM; 774 return WPS_ERROR_INVALID_PARAM;
759 775
776 if (follow_lang_direction && lang_is_rtl())
777 {
778 vp->flags |= VP_FLAG_ALIGN_RIGHT;
779 vp->x = screens[curr_screen].lcdwidth - vp->width - vp->x;
780 }
781 else
782 vp->flags &= ~VP_FLAG_ALIGN_RIGHT; /* ignore right-to-left languages */
783
784
760 785
761 struct skin_token_list *list = new_skin_token_list_item(NULL, skin_vp); 786 struct skin_token_list *list = new_skin_token_list_item(NULL, skin_vp);
762 if (!list) 787 if (!list)
@@ -954,6 +979,7 @@ static int parse_progressbar(const char *wps_bufptr,
954 } 979 }
955 pb->have_bitmap_pb = false; 980 pb->have_bitmap_pb = false;
956 pb->bm.data = NULL; /* no bitmap specified */ 981 pb->bm.data = NULL; /* no bitmap specified */
982 pb->follow_lang_direction = follow_lang_direction > 0;
957 983
958 if (*wps_bufptr != '|') /* regular old style */ 984 if (*wps_bufptr != '|') /* regular old style */
959 { 985 {
@@ -1041,6 +1067,7 @@ static int parse_albumart_load(const char *wps_bufptr,
1041 bool parsing; 1067 bool parsing;
1042 struct dim dimensions; 1068 struct dim dimensions;
1043 int albumart_slot; 1069 int albumart_slot;
1070 bool swap_for_rtl = lang_is_rtl() && follow_lang_direction;
1044 struct skin_albumart *aa = skin_buffer_alloc(sizeof(struct skin_albumart)); 1071 struct skin_albumart *aa = skin_buffer_alloc(sizeof(struct skin_albumart));
1045 (void)token; /* silence warning */ 1072 (void)token; /* silence warning */
1046 if (!aa) 1073 if (!aa)
@@ -1085,7 +1112,10 @@ static int parse_albumart_load(const char *wps_bufptr,
1085 case 'l': 1112 case 'l':
1086 case 'L': 1113 case 'L':
1087 case '+': 1114 case '+':
1088 aa->xalign = WPS_ALBUMART_ALIGN_LEFT; 1115 if (swap_for_rtl)
1116 aa->xalign = WPS_ALBUMART_ALIGN_RIGHT;
1117 else
1118 aa->xalign = WPS_ALBUMART_ALIGN_LEFT;
1089 break; 1119 break;
1090 case 'c': 1120 case 'c':
1091 case 'C': 1121 case 'C':
@@ -1094,7 +1124,10 @@ static int parse_albumart_load(const char *wps_bufptr,
1094 case 'r': 1124 case 'r':
1095 case 'R': 1125 case 'R':
1096 case '-': 1126 case '-':
1097 aa->xalign = WPS_ALBUMART_ALIGN_RIGHT; 1127 if (swap_for_rtl)
1128 aa->xalign = WPS_ALBUMART_ALIGN_LEFT;
1129 else
1130 aa->xalign = WPS_ALBUMART_ALIGN_RIGHT;
1098 break; 1131 break;
1099 case 'd': 1132 case 'd':
1100 case 'D': 1133 case 'D':
@@ -1168,6 +1201,9 @@ static int parse_albumart_load(const char *wps_bufptr,
1168 aa->height = 0; 1201 aa->height = 0;
1169 else if (aa->height > LCD_HEIGHT) 1202 else if (aa->height > LCD_HEIGHT)
1170 aa->height = LCD_HEIGHT; 1203 aa->height = LCD_HEIGHT;
1204
1205 if (swap_for_rtl)
1206 aa->x = LCD_WIDTH - (aa->x + aa->width);
1171 1207
1172 aa->state = WPS_ALBUMART_LOAD; 1208 aa->state = WPS_ALBUMART_LOAD;
1173 aa->draw = false; 1209 aa->draw = false;
@@ -1500,6 +1536,8 @@ static bool wps_parse(struct wps_data *data, const char *wps_bufptr, bool debug)
1500 1536
1501 while (*wps_bufptr && !fail) 1537 while (*wps_bufptr && !fail)
1502 { 1538 {
1539 if (follow_lang_direction)
1540 follow_lang_direction--;
1503 /* first make sure there is enough room for tokens */ 1541 /* first make sure there is enough room for tokens */
1504 if (max_tokens <= data->num_tokens + 5) 1542 if (max_tokens <= data->num_tokens + 5)
1505 { 1543 {
diff --git a/apps/gui/skin_engine/skin_tokens.h b/apps/gui/skin_engine/skin_tokens.h
index 547bc858f9..25acfdacef 100644
--- a/apps/gui/skin_engine/skin_tokens.h
+++ b/apps/gui/skin_engine/skin_tokens.h
@@ -38,8 +38,10 @@ enum wps_token_type {
38 38
39 /* Alignment */ 39 /* Alignment */
40 WPS_TOKEN_ALIGN_LEFT, 40 WPS_TOKEN_ALIGN_LEFT,
41 WPS_TOKEN_ALIGN_LEFT_RTL,
41 WPS_TOKEN_ALIGN_CENTER, 42 WPS_TOKEN_ALIGN_CENTER,
42 WPS_TOKEN_ALIGN_RIGHT, 43 WPS_TOKEN_ALIGN_RIGHT,
44 WPS_TOKEN_ALIGN_RIGHT_RTL,
43 45
44 /* Sublines */ 46 /* Sublines */
45 WPS_TOKEN_SUBLINE_TIMEOUT, 47 WPS_TOKEN_SUBLINE_TIMEOUT,
diff --git a/apps/gui/skin_engine/wps_internals.h b/apps/gui/skin_engine/wps_internals.h
index e975616f91..bd0c1c01c7 100644
--- a/apps/gui/skin_engine/wps_internals.h
+++ b/apps/gui/skin_engine/wps_internals.h
@@ -99,6 +99,7 @@ struct progressbar {
99 short y; 99 short y;
100 short width; 100 short width;
101 short height; 101 short height;
102 bool follow_lang_direction;
102 /*progressbar image*/ 103 /*progressbar image*/
103 struct bitmap bm; 104 struct bitmap bm;
104 bool have_bitmap_pb; 105 bool have_bitmap_pb;
diff --git a/wps/cabbiev2.128x128x16.wps b/wps/cabbiev2.128x128x16.wps
index 95eac039ab..bce8b9423d 100644
--- a/wps/cabbiev2.128x128x16.wps
+++ b/wps/cabbiev2.128x128x16.wps
@@ -9,8 +9,8 @@
9%xl|D|shuffle-128x128x16.bmp|74|110| 9%xl|D|shuffle-128x128x16.bmp|74|110|
10%xl|E|repeat-128x128x16.bmp|97|110|4| 10%xl|E|repeat-128x128x16.bmp|97|110|4|
11%xl|F|playmode-128x128x16.bmp|111|110|5| 11%xl|F|playmode-128x128x16.bmp|111|110|5|
12%Cl|4|12|s60|s60| 12%ax%Cl|4|12|s60|s60|
13%pb|pb-128x128x16.bmp|3|87|122|6| 13%ax%pb|pb-128x128x16.bmp|3|87|122|6|
14# images all in the default viewport 14# images all in the default viewport
15%?mh<%xdAa|%xdAb> 15%?mh<%xdAa|%xdAb>
16%?bp<%?bc<%xdBa|%xdBb>|%?bl<|%xdBc|%xdBd|%xdBe|%xdBf|%xdBg|%xdBh|%xdBi|%xdBj>> 16%?bp<%?bc<%xdBa|%xdBb>|%?bl<|%xdBc|%xdBd|%xdBe|%xdBf|%xdBg|%xdBh|%xdBi|%xdBj>>
@@ -23,7 +23,7 @@
23 23
24 24
25#NowPlaying - with AA 25#NowPlaying - with AA
26%Vl|a|70|12|-|50|1|-|-| 26%ax%Vl|a|70|12|-|50|1|-|-|
27%s%al%?it<%it|%fn> 27%s%al%?it<%it|%fn>
28%s%al%?ia<%ia|%?d2<%d2|(root)>> 28%s%al%?ia<%ia|%?d2<%d2|(root)>>
29%s%al%?id<%id|%?d1<%d1|(root)>> 29%s%al%?id<%id|%?d1<%d1|(root)>>
@@ -40,4 +40,4 @@
40%V|3|70|122|18|1|-|-| 40%V|3|70|122|18|1|-|-|
41%s%ac%Sx|Next:|%?It<%It|%Fn> 41%s%ac%Sx|Next:|%?It<%It|%Fn>
42 42
43%al%pc%ac%?Sr<%pe %Sx|of| %pp|%pp %Sx|of| %pe>%ar%pr 43%aL%pc%ac%?Sr<%pe %Sx|of| %pp|%pp %Sx|of| %pe>%aR%pr
diff --git a/wps/cabbiev2.132x80x16.wps b/wps/cabbiev2.132x80x16.wps
index 279d3144b0..6657b01587 100644
--- a/wps/cabbiev2.132x80x16.wps
+++ b/wps/cabbiev2.132x80x16.wps
@@ -8,8 +8,8 @@
8%xl|D|shuffle-132x80x16.bmp|86|69| 8%xl|D|shuffle-132x80x16.bmp|86|69|
9%xl|E|repeat-132x80x16.bmp|105|67|4| 9%xl|E|repeat-132x80x16.bmp|105|67|4|
10%xl|F|playmode-132x80x16.bmp|118|67|5| 10%xl|F|playmode-132x80x16.bmp|118|67|5|
11%Cl|3|14|c40|c40| 11%ax%Cl|3|14|c40|c40|
12%pb|pb-132x80x16.bmp|2|58|127|6| 12%ax%pb|pb-132x80x16.bmp|2|58|127|6|
13%?C<%C%Vda|%Vdb> 13%?C<%C%Vda|%Vdb>
14 14
15#Images 15#Images
@@ -21,7 +21,7 @@
21%?mp<%xdFa|%xdFb|%xdFc|%xdFd|%xdFe> 21%?mp<%xdFa|%xdFb|%xdFc|%xdFd|%xdFe>
22 22
23#NowPlaying - aa 23#NowPlaying - aa
24%Vl|a|48|10|-|48|1|-|-| 24%ax%Vl|a|48|10|-|48|1|-|-|
25%s%al%?it<%it|%fn> 25%s%al%?it<%it|%fn>
26%s%al%?ia<%ia|%?d2<%d2|(root)>> 26%s%al%?ia<%ia|%?d2<%d2|(root)>>
27%s%al%?id<%id|%?d1<%d1|(root)>> 27%s%al%?id<%id|%?d1<%d1|(root)>>
diff --git a/wps/cabbiev2.138x110x2.wps b/wps/cabbiev2.138x110x2.wps
index 2437193374..4c74ddaab7 100644
--- a/wps/cabbiev2.138x110x2.wps
+++ b/wps/cabbiev2.138x110x2.wps
@@ -10,8 +10,8 @@
10%xl|D|shuffle-160x128x2.bmp|78|97| 10%xl|D|shuffle-160x128x2.bmp|78|97|
11%xl|E|repeat-160x128x2.bmp|102|97|4| 11%xl|E|repeat-160x128x2.bmp|102|97|4|
12%xl|F|playmode-160x128x2.bmp|123|98|5| 12%xl|F|playmode-160x128x2.bmp|123|98|5|
13%Cl|5|15|s55|s55| 13%ax%Cl|5|15|s55|s55|
14%pb|pb-138x110x2.bmp|2|75|134|6| 14%ax%pb|pb-138x110x2.bmp|2|75|134|6|
15#images 15#images
16%?mh<%xdAa|%xdAb> 16%?mh<%xdAa|%xdAb>
17%?bp<%?bc<%xdBa|%xdBb>|%?bl<|%xdBc|%xdBd|%xdBe|%xdBf|%xdBg|%xdBh|%xdBi|%xdBj>> 17%?bp<%?bc<%xdBa|%xdBb>|%?bl<|%xdBc|%xdBd|%xdBe|%xdBf|%xdBg|%xdBh|%xdBi|%xdBj>>
@@ -21,7 +21,7 @@
21%?mp<%xdFa|%xdFb|%xdFc|%xdFd|%xdFe> 21%?mp<%xdFa|%xdFb|%xdFc|%xdFd|%xdFe>
22%?C<%C%Vda|%Vdb> 22%?C<%C%Vda|%Vdb>
23 23
24%Vl|a|65|10|-|60|1|-|-| 24%ax%Vl|a|65|10|-|60|1|-|-|
25%s%al%?it<%it|%fn> 25%s%al%?it<%it|%fn>
26%s%al%?ia<%ia|%?d2<%d2|(root)>> 26%s%al%?ia<%ia|%?d2<%d2|(root)>>
27%s%al%?id<%id|%?d1<%d1|(root)>> 27%s%al%?id<%id|%?d1<%d1|(root)>>
@@ -36,4 +36,4 @@
36%s%ac%?It<%It|%Fn> 36%s%ac%?It<%It|%Fn>
37 37
38%V|2|82|134|13|1|-|-| 38%V|2|82|134|13|1|-|-|
39%al%pc%ac%?Sr<%pe %Sx|of| %pp|%pp %Sx|of| %pe>%ar%pr 39%aL%pc%ac%?Sr<%pe %Sx|of| %pp|%pp %Sx|of| %pe>%aR%pr
diff --git a/wps/cabbiev2.160x128x16.wps b/wps/cabbiev2.160x128x16.wps
index d4375930cc..c7bdbc7611 100644
--- a/wps/cabbiev2.160x128x16.wps
+++ b/wps/cabbiev2.160x128x16.wps
@@ -9,8 +9,8 @@
9%xl|D|shuffle-160x128x16.bmp|104|116| 9%xl|D|shuffle-160x128x16.bmp|104|116|
10%xl|E|repeat-160x128x16.bmp|125|112|4| 10%xl|E|repeat-160x128x16.bmp|125|112|4|
11%xl|F|playmode-160x128x16.bmp|142|114|5| 11%xl|F|playmode-160x128x16.bmp|142|114|5|
12%Cl|7|16|c65|c65| 12%ax%Cl|7|16|c65|c65|
13%pb|pb-160x128x16.bmp|6|86|149|8| 13%ax%pb|pb-160x128x16.bmp|6|86|149|8|
14%?mh<%xdAa|%xdAb> 14%?mh<%xdAa|%xdAb>
15%?bp<%?bc<%xdBa|%xdBb>|%?bl<|%xdBc|%xdBd|%xdBe|%xdBf|%xdBg|%xdBh|%xdBi|%xdBj>> 15%?bp<%?bc<%xdBa|%xdBb>|%?bl<|%xdBc|%xdBd|%xdBe|%xdBf|%xdBg|%xdBh|%xdBi|%xdBj>>
16%?pv<%xdCa|%xdCb|%xdCc|%xdCd|%xdCe|%xdCf|%xdCg|%xdCh|%xdCi|%xdCj> 16%?pv<%xdCa|%xdCb|%xdCc|%xdCd|%xdCe|%xdCf|%xdCg|%xdCh|%xdCi|%xdCj>
@@ -20,7 +20,7 @@
20%?C<%C%Vda|%Vdb> 20%?C<%C%Vda|%Vdb>
21 21
22# NowPlaying - AA 22# NowPlaying - AA
23%Vl|a|77|10|-|75|1|-|-| 23%ax%Vl|a|77|10|-|75|1|-|-|
24%s%al%?it<%it|%fn> 24%s%al%?it<%it|%fn>
25%s%al%?ia<%ia|%?d2<%d2|(root)>> 25%s%al%?ia<%ia|%?d2<%d2|(root)>>
26%s%al%?id<%id|%?d1<%d1|(root)>> 26%s%al%?id<%id|%?d1<%d1|(root)>>
@@ -38,5 +38,5 @@
38%s%?It<%It|%Fn> 38%s%?It<%It|%Fn>
39 39
40%V|6|96|149|10|1|-|-| 40%V|6|96|149|10|1|-|-|
41%al%pc%ac%pc%ac%?Sr<%pe %Sx|of| %pp|%pp %Sx|of| %pe>%ar%pr%ar%pr 41%aL%pc%ac%pc%ac%?Sr<%pe %Sx|of| %pp|%pp %Sx|of| %pe>%ar%pr%aR%pr
42 42
diff --git a/wps/cabbiev2.160x128x2.wps b/wps/cabbiev2.160x128x2.wps
index 4ccb180036..5b41c24741 100644
--- a/wps/cabbiev2.160x128x2.wps
+++ b/wps/cabbiev2.160x128x2.wps
@@ -11,8 +11,8 @@
11%xl|D|shuffle-160x128x2.bmp|107|115| 11%xl|D|shuffle-160x128x2.bmp|107|115|
12%xl|E|repeat-160x128x2.bmp|127|113|4| 12%xl|E|repeat-160x128x2.bmp|127|113|4|
13%xl|F|playmode-160x128x2.bmp|145|114|5| 13%xl|F|playmode-160x128x2.bmp|145|114|5|
14%Cl|2|16|s64|s64| 14%ax%Cl|2|16|s64|s64|
15%pb|pb-160x128x2.bmp|1|86|158|8| 15%ax%pb|pb-160x128x2.bmp|1|86|158|8|
16%?mh<%xdAa|%xdAb> 16%?mh<%xdAa|%xdAb>
17%?bp<%?bc<%xdBa|%xdBb>|%?bl<|%xdBc|%xdBd|%xdBe|%xdBf|%xdBg|%xdBh|%xdBi|%xdBj>> 17%?bp<%?bc<%xdBa|%xdBb>|%?bl<|%xdBc|%xdBd|%xdBe|%xdBf|%xdBg|%xdBh|%xdBi|%xdBj>>
18%?pv<%xdCa|%xdCb|%xdCc|%xdCd|%xdCe|%xdCf|%xdCg|%xdCh|%xdCi|%xdCj> 18%?pv<%xdCa|%xdCb|%xdCc|%xdCd|%xdCe|%xdCf|%xdCg|%xdCh|%xdCi|%xdCj>
@@ -21,7 +21,7 @@
21%?mp<%xdFa|%xdFb|%xdFc|%xdFd|%xdFe> 21%?mp<%xdFa|%xdFb|%xdFc|%xdFd|%xdFe>
22%?C<%C%Vda|%Vdb> 22%?C<%C%Vda|%Vdb>
23 23
24%Vl|a|70|10|-|75|1|-|-| 24%ax%Vl|a|70|10|-|75|1|-|-|
25%s%al%?it<%it|%fn> 25%s%al%?it<%it|%fn>
26%s%al%?ia<%ia|%?d2<%d2|(root)>> 26%s%al%?ia<%ia|%?d2<%d2|(root)>>
27%s%al%?id<%id|%?d1<%d1|(root)>> 27%s%al%?id<%id|%?d1<%d1|(root)>>
@@ -38,5 +38,5 @@
38%s%ac%?It<%It|%Fn> 38%s%ac%?It<%It|%Fn>
39 39
40%V|1|96|158|10|1|-|-| 40%V|1|96|158|10|1|-|-|
41%al%pc%ac%?Sr<%pe %Sx|of| %pp|%pp %Sx|of| %pe>%ar%pr 41%aL%pc%ac%?Sr<%pe %Sx|of| %pp|%pp %Sx|of| %pe>%aR%pr
42 42
diff --git a/wps/cabbiev2.176x132x16.wps b/wps/cabbiev2.176x132x16.wps
index a400c18c07..8a40eef849 100644
--- a/wps/cabbiev2.176x132x16.wps
+++ b/wps/cabbiev2.176x132x16.wps
@@ -10,8 +10,8 @@
10%xl|D|shuffle-176x132x16.bmp|120|117| 10%xl|D|shuffle-176x132x16.bmp|120|117|
11%xl|E|repeat-176x132x16.bmp|139|113|4| 11%xl|E|repeat-176x132x16.bmp|139|113|4|
12%xl|F|playmode-176x132x16.bmp|156|115|5| 12%xl|F|playmode-176x132x16.bmp|156|115|5|
13%Cl|9|16|s65|s65| 13%ax%Cl|9|16|s65|s65|
14%pb|pb-176x132x16.bmp|8|86|160|8| 14%ax%pb|pb-176x132x16.bmp|8|86|160|8|
15%?mh<%xdAa|%xdAb> 15%?mh<%xdAa|%xdAb>
16%?bp<%?bc<%xdBa|%xdBb>|%?bl<|%xdBc|%xdBd|%xdBe|%xdBf|%xdBg|%xdBh|%xdBi|%xdBj>> 16%?bp<%?bc<%xdBa|%xdBb>|%?bl<|%xdBc|%xdBd|%xdBe|%xdBf|%xdBg|%xdBh|%xdBi|%xdBj>>
17%?pv<%xdCa|%xdCb|%xdCc|%xdCd|%xdCe|%xdCf|%xdCg|%xdCh|%xdCi|%xdCj> 17%?pv<%xdCa|%xdCb|%xdCc|%xdCd|%xdCe|%xdCf|%xdCg|%xdCh|%xdCi|%xdCj>
@@ -21,7 +21,7 @@
21%?C<%C%Vda|%Vdb> 21%?C<%C%Vda|%Vdb>
22 22
23#NowPlaying 23#NowPlaying
24%Vl|a|81|12|-|74|1|-|-| 24%ax%Vl|a|81|12|-|74|1|-|-|
25%s%al%?it<%it|%fn> 25%s%al%?it<%it|%fn>
26%s%al%?ia<%ia|%?d2<%d2|(root)>> 26%s%al%?ia<%ia|%?d2<%d2|(root)>>
27%s%al%?id<%id|%?d1<%d1|(root)>> 27%s%al%?id<%id|%?d1<%d1|(root)>>
diff --git a/wps/cabbiev2.220x176x16.wps b/wps/cabbiev2.220x176x16.wps
index c5bd219f98..352386f4dd 100644
--- a/wps/cabbiev2.220x176x16.wps
+++ b/wps/cabbiev2.220x176x16.wps
@@ -9,8 +9,8 @@
9%xl|D|shuffle-220x176x16.bmp|155|153| 9%xl|D|shuffle-220x176x16.bmp|155|153|
10%xl|E|repeat-220x176x16.bmp|182|151|4| 10%xl|E|repeat-220x176x16.bmp|182|151|4|
11%xl|F|playmode-220x176x16.bmp|200|152|5| 11%xl|F|playmode-220x176x16.bmp|200|152|5|
12%Cl|15|32|s75|s75| 12%ax%Cl|15|32|s75|s75|
13%pb|pb-220x176x16.bmp|11|121|199|8| 13%ax%pb|pb-220x176x16.bmp|11|121|199|8|
14%?mh<%xdAa|%xdAb> 14%?mh<%xdAa|%xdAb>
15%?bp<%?bc<%xdBa|%xdBb>|%?bl<|%xdBc|%xdBd|%xdBe|%xdBf|%xdBg|%xdBh|%xdBi|%xdBj>> 15%?bp<%?bc<%xdBa|%xdBb>|%?bl<|%xdBc|%xdBd|%xdBe|%xdBf|%xdBg|%xdBh|%xdBi|%xdBj>>
16%?pv<%xdCa|%xdCb|%xdCc|%xdCd|%xdCe|%xdCf|%xdCg|%xdCh|%xdCi|%xdCj> 16%?pv<%xdCa|%xdCb|%xdCc|%xdCd|%xdCe|%xdCf|%xdCg|%xdCh|%xdCi|%xdCj>
@@ -21,7 +21,7 @@
21#NowPlaying 21#NowPlaying
22%?C<%Vda%C|%Vdb> 22%?C<%Vda%C|%Vdb>
23 23
24%Vl|a|105|30|-|90|1|-|-| 24%ax%Vl|a|105|30|-|90|1|-|-|
25%s%al%?it<%it|%fn> 25%s%al%?it<%it|%fn>
26%s%al%?ia<%ia|%?d2<%d2|(root)>> 26%s%al%?ia<%ia|%?d2<%d2|(root)>>
27%s%al%?id<%id|%?d1<%d1|(root)>> 27%s%al%?id<%id|%?d1<%d1|(root)>>
@@ -39,4 +39,4 @@
39 39
40 40
41%V|11|130|199|20|1|-|-| 41%V|11|130|199|20|1|-|-|
42%al%pc%ac%?Sr<%pe %Sx|of| %pp|%pp %Sx|of| %pe>%ar%pr 42%aL%pc%ac%?Sr<%pe %Sx|of| %pp|%pp %Sx|of| %pe>%aR%pr
diff --git a/wps/cabbiev2.320x240x16.wps b/wps/cabbiev2.320x240x16.wps
index 7efa3f361a..9ba15b6436 100644
--- a/wps/cabbiev2.320x240x16.wps
+++ b/wps/cabbiev2.320x240x16.wps
@@ -9,8 +9,8 @@
9%xl|D|shuffle-320x240x16.bmp|218|211| 9%xl|D|shuffle-320x240x16.bmp|218|211|
10%xl|E|repeat-320x240x16.bmp|261|207|4| 10%xl|E|repeat-320x240x16.bmp|261|207|4|
11%xl|F|playmode-320x240x16.bmp|286|207|5| 11%xl|F|playmode-320x240x16.bmp|286|207|5|
12%Cl|16|32|s120|s120| 12%ax%Cl|16|32|s120|s120|
13%pb|pb-320x240x16.bmp|10|162|300|15| 13%ax%pb|pb-320x240x16.bmp|10|162|300|15|
14%?mh<%xdAa|%xdAb> 14%?mh<%xdAa|%xdAb>
15%?bp<%?bc<%xdBa|%xdBb>|%?bl<|%xdBc|%xdBd|%xdBe|%xdBf|%xdBg|%xdBh|%xdBi|%xdBj>> 15%?bp<%?bc<%xdBa|%xdBb>|%?bl<|%xdBc|%xdBd|%xdBe|%xdBf|%xdBg|%xdBh|%xdBi|%xdBj>>
16%?pv<%xdCa|%xdCb|%xdCc|%xdCd|%xdCe|%xdCf|%xdCg|%xdCh|%xdCi|%xdCj> 16%?pv<%xdCa|%xdCb|%xdCc|%xdCd|%xdCe|%xdCf|%xdCg|%xdCh|%xdCi|%xdCj>
@@ -21,7 +21,7 @@
21%?C<%Vda%C|%Vdb> 21%?C<%Vda%C|%Vdb>
22#NowPlaying 22#NowPlaying
23 23
24%Vl|a|153|30|-|130|1|-|-| 24%ax%Vl|a|153|30|-|130|1|-|-|
25%s%al%?it<%it|%fn> 25%s%al%?it<%it|%fn>
26%s%al%?ia<%ia|%?d2<%d2|(root)>> 26%s%al%?ia<%ia|%?d2<%d2|(root)>>
27%s%al%?id<%id|%?d1<%d1|(root)>> 27%s%al%?id<%id|%?d1<%d1|(root)>>
@@ -31,7 +31,7 @@
31%s%al%?It<%It|%Fn> 31%s%al%?It<%It|%Fn>
32%s%al%Ia 32%s%al%Ia
33 33
34%Vl|b|0|30|-|130|1|-|-| 34%ax%Vl|b|0|30|-|130|1|-|-|
35%s%ac%?it<%it|%fn> 35%s%ac%?it<%it|%fn>
36%s%ac%?ia<%ia|%?d2<%d2|(root)>> 36%s%ac%?ia<%ia|%?d2<%d2|(root)>>
37%s%ac%?id<%id|%?d1<%d1|(root)>> 37%s%ac%?id<%id|%?d1<%d1|(root)>>
@@ -42,5 +42,5 @@
42%s%ac%Ia 42%s%ac%Ia
43 43
44%V|10|180|300|20|1|-|-| 44%V|10|180|300|20|1|-|-|
45%al%pc%ac%?Sr<%pe %Sx|of| %pp|%pp %Sx|of| %pe>%ar%pr 45%aL%pc%ac%?Sr<%pe %Sx|of| %pp|%pp %Sx|of| %pe>%aR%pr
46 46