summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Wenger <domonoky@googlemail.com>2007-03-15 14:02:37 +0000
committerDominik Wenger <domonoky@googlemail.com>2007-03-15 14:02:37 +0000
commit994a6d6c4c3cf580d663b65aadb50e99da06ab73 (patch)
tree04208011cf67dd305153c02398f38cf9799832ed
parent1625c91fbd51cf7c0376995ae49db8af9ec6c49c (diff)
downloadrockbox-994a6d6c4c3cf580d663b65aadb50e99da06ab73.tar.gz
rockbox-994a6d6c4c3cf580d663b65aadb50e99da06ab73.zip
Support for Theme installing in rbUtil. FS#6709
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12781 a1c6a512-1295-4272-9138-f99709370657
-rwxr-xr-xrbutil/bootloaders.cpp170
-rw-r--r--rbutil/credits.h2
-rwxr-xr-xrbutil/irivertools.cpp94
-rw-r--r--rbutil/rbutil-rc.rc10
-rw-r--r--rbutil/rbutil.cbp6
-rw-r--r--rbutil/rbutil.cpp205
-rw-r--r--rbutil/rbutil.h6
-rw-r--r--rbutil/rbutil.ini30
-rw-r--r--rbutil/rbutilApp.cpp18
-rw-r--r--rbutil/rbutilFrm.cpp361
-rw-r--r--rbutil/rbutilFrm.h4
-rw-r--r--rbutil/uninstall_3d.xpm599
-rw-r--r--rbutil/wizard_pages.cpp364
-rw-r--r--rbutil/wizard_pages.h54
14 files changed, 1218 insertions, 705 deletions
diff --git a/rbutil/bootloaders.cpp b/rbutil/bootloaders.cpp
index dd92b4a343..c2303beacc 100755
--- a/rbutil/bootloaders.cpp
+++ b/rbutil/bootloaders.cpp
@@ -42,14 +42,14 @@ bool ipodpatcher(int mode)
42 // downloading files 42 // downloading files
43 if(mode == BOOTLOADER_ADD) 43 if(mode == BOOTLOADER_ADD)
44 { 44 {
45 src.Printf("%s/ipod/%s.ipod", gv->bootloader_url.c_str(),gv->curbootloader.c_str()); 45 src.Printf(wxT("%s/ipod/%s.ipod"), gv->bootloader_url.c_str(),gv->curbootloader.c_str());
46 dest.Printf("%s" PATH_SEP "download" PATH_SEP "%s", 46 dest.Printf(wxT("%s" PATH_SEP "download" PATH_SEP "%s"),
47 gv->stdpaths->GetUserDataDir().c_str(),gv->curbootloader.c_str()); 47 gv->stdpaths->GetUserDataDir().c_str(),gv->curbootloader.c_str());
48 if ( DownloadURL(src, dest) ) 48 if ( DownloadURL(src, dest) )
49 { 49 {
50 wxRemoveFile(dest); 50 wxRemoveFile(dest);
51 buf.Printf(_("Unable to download %s"), src.c_str() ); 51 buf.Printf(wxT("Unable to download %s"), src.c_str() );
52 ERR_DIALOG(buf, _("Install")); 52 ERR_DIALOG(buf, wxT("Install"));
53 return false; 53 return false;
54 } 54 }
55 } 55 }
@@ -59,45 +59,45 @@ bool ipodpatcher(int mode)
59 int n = ipod_scan(&ipod); 59 int n = ipod_scan(&ipod);
60 if (n == 0) 60 if (n == 0)
61 { 61 {
62 ERR_DIALOG("[ERR] No ipods found.", _("Scanning for Ipods")); 62 ERR_DIALOG(wxT("[ERR] No ipods found."), wxT("Scanning for Ipods"));
63 return false; 63 return false;
64 } 64 }
65 if (n > 1) 65 if (n > 1)
66 { 66 {
67 ERR_DIALOG("[ERR] to many ipods found.", _("Scanning for Ipods")); 67 ERR_DIALOG(wxT("[ERR] to many ipods found."), wxT("Scanning for Ipods"));
68 return false; 68 return false;
69 } 69 }
70 70
71 if (ipod_open(&ipod, 0) < 0) 71 if (ipod_open(&ipod, 0) < 0)
72 { 72 {
73 ERR_DIALOG("[ERR] could not open ipod", _("open Ipod")); 73 ERR_DIALOG(wxT("[ERR] could not open ipod"), wxT("open Ipod"));
74 return false; 74 return false;
75 } 75 }
76 76
77 if (read_partinfo(&ipod,0) < 0) 77 if (read_partinfo(&ipod,0) < 0)
78 { 78 {
79 ERR_DIALOG("[ERR] could not read partitiontable", _("reading partitiontable")); 79 ERR_DIALOG(wxT("[ERR] could not read partitiontable"), wxT("reading partitiontable"));
80 return false; 80 return false;
81 } 81 }
82 82
83 if (ipod.pinfo[0].start==0) 83 if (ipod.pinfo[0].start==0)
84 { 84 {
85 ERR_DIALOG("[ERR] No partition 0 on disk", _("reading partitiontable")); 85 ERR_DIALOG(wxT("[ERR] No partition 0 on disk"), wxT("reading partitiontable"));
86 int i; 86 int i;
87 double sectors_per_MB = (1024.0*1024.0)/ipod.sector_size; 87 double sectors_per_MB = (1024.0*1024.0)/ipod.sector_size;
88 88
89 buf.Printf("[INFO] Part Start Sector End Sector Size (MB) Type\n"); 89 buf.Printf(wxT("[INFO] Part Start Sector End Sector Size (MB) Type\n"));
90 ERR_DIALOG(buf, _("reading partitiontable")); 90 ERR_DIALOG(buf, wxT("reading partitiontable"));
91 for ( i = 0; i < 4; i++ ) { 91 for ( i = 0; i < 4; i++ ) {
92 if (ipod.pinfo[i].start != 0) { 92 if (ipod.pinfo[i].start != 0) {
93 buf.Printf("[INFO] %d %10ld %10ld %10.1f %s (0x%02x)\n", 93 buf.Printf(wxT("[INFO] %d %10ld %10ld %10.1f %s (0x%02x)\n"),
94 i, 94 i,
95 ipod.pinfo[i].start, 95 ipod.pinfo[i].start,
96 ipod.pinfo[i].start+ipod.pinfo[i].size-1, 96 ipod.pinfo[i].start+ipod.pinfo[i].size-1,
97 ipod.pinfo[i].size/sectors_per_MB, 97 ipod.pinfo[i].size/sectors_per_MB,
98 get_parttype(ipod.pinfo[i].type), 98 get_parttype(ipod.pinfo[i].type),
99 ipod.pinfo[i].type); 99 ipod.pinfo[i].type);
100 ERR_DIALOG(buf, _("reading partitiontable")); 100 ERR_DIALOG(buf, wxT("reading partitiontable"));
101 } 101 }
102 } 102 }
103 return false; 103 return false;
@@ -107,52 +107,52 @@ bool ipodpatcher(int mode)
107 107
108 if (ipod.nimages <= 0) 108 if (ipod.nimages <= 0)
109 { 109 {
110 ERR_DIALOG("[ERR] Failed to read firmware directory", _("reading directory")); 110 ERR_DIALOG(wxT("[ERR] Failed to read firmware directory"), wxT("reading directory"));
111 return false; 111 return false;
112 } 112 }
113 if (getmodel(&ipod,(ipod.ipod_directory[0].vers>>8)) < 0) 113 if (getmodel(&ipod,(ipod.ipod_directory[0].vers>>8)) < 0)
114 { 114 {
115 buf.Printf(_("[ERR] Unknown version number in firmware (%08x)\n"), 115 buf.Printf(wxT("[ERR] Unknown version number in firmware (%08x)\n"),
116 ipod.ipod_directory[0].vers ); 116 ipod.ipod_directory[0].vers );
117 ERR_DIALOG(buf, _("reading directory")); 117 ERR_DIALOG(buf, wxT("reading directory"));
118 return false; 118 return false;
119 } 119 }
120 120
121 if (ipod.macpod) 121 if (ipod.macpod)
122 { 122 {
123 WARN_DIALOG("Warning this is a MacPod, Rockbox doesnt work on this. Convert it to WinPod",_("MacPod")); 123 WARN_DIALOG(wxT("Warning this is a MacPod, Rockbox doesnt work on this. Convert it to WinPod"),wxT("MacPod"));
124 } 124 }
125 125
126 126
127 if(mode == BOOTLOADER_ADD) 127 if(mode == BOOTLOADER_ADD)
128 { 128 {
129 if (ipod_reopen_rw(&ipod) < 0) { 129 if (ipod_reopen_rw(&ipod) < 0) {
130 ERR_DIALOG("[ERR] Could not open Ipod in RW mode", _("Bootloader add")); 130 ERR_DIALOG(wxT("[ERR] Could not open Ipod in RW mode"), wxT("Bootloader add"));
131 return false; 131 return false;
132 } 132 }
133 133
134 if (add_bootloader(&ipod, (char*)dest.c_str(), FILETYPE_DOT_IPOD)==0) { 134 if (add_bootloader(&ipod, (char*)dest.c_str(), FILETYPE_DOT_IPOD)==0) {
135 135
136 } else { 136 } else {
137 ERR_DIALOG("[ERR] failed to add Bootloader", _("Bootloader add")); 137 ERR_DIALOG(wxT("[ERR] failed to add Bootloader"), wxT("Bootloader add"));
138 return false; 138 return false;
139 } 139 }
140 } 140 }
141 else if(mode == BOOTLOADER_REM) 141 else if(mode == BOOTLOADER_REM)
142 { 142 {
143 if (ipod_reopen_rw(&ipod) < 0) { 143 if (ipod_reopen_rw(&ipod) < 0) {
144 ERR_DIALOG("[ERR] Could not open Ipod in RW mode", _("Bootloader add")); 144 ERR_DIALOG(wxT("[ERR] Could not open Ipod in RW mode"), wxT("Bootloader add"));
145 return false; 145 return false;
146 } 146 }
147 147
148 if (ipod.ipod_directory[0].entryOffset==0) { 148 if (ipod.ipod_directory[0].entryOffset==0) {
149 ERR_DIALOG("[ERR] No bootloader detected.\n", _("Bootloader del")); 149 ERR_DIALOG(wxT("[ERR] No bootloader detected.\n"), wxT("Bootloader del"));
150 return false; 150 return false;
151 } else { 151 } else {
152 if (delete_bootloader(&ipod)==0) { 152 if (delete_bootloader(&ipod)==0) {
153 153
154 } else { 154 } else {
155 ERR_DIALOG("[ERR] --delete-bootloader failed.\n", _("Bootloader del")); 155 ERR_DIALOG(wxT("[ERR] --delete-bootloader failed.\n"), wxT("Bootloader del"));
156 return false; 156 return false;
157 } 157 }
158 } 158 }
@@ -169,65 +169,65 @@ bool gigabeatf(int mode)
169 wxString err; 169 wxString err;
170 wxString src,dest; 170 wxString src,dest;
171 171
172 path1.Printf("%s" PATH_SEP "GBSYSTEM" PATH_SEP "FWIMG" PATH_SEP "FWIMG01.DAT",gv->curdestdir.c_str()); 172 path1.Printf(wxT("%s" PATH_SEP "GBSYSTEM" PATH_SEP "FWIMG" PATH_SEP "FWIMG01.DAT"),gv->curdestdir.c_str());
173 173
174 if(mode == BOOTLOADER_ADD) 174 if(mode == BOOTLOADER_ADD)
175 { 175 {
176 //Files downloaden 176 //Files downloaden
177 src.Printf("%s/gigabeat/%s", gv->bootloader_url.c_str(),gv->curbootloader.c_str()); 177 src.Printf(wxT("%s/gigabeat/%s"), gv->bootloader_url.c_str(),gv->curbootloader.c_str());
178 dest.Printf("%s" PATH_SEP "download" PATH_SEP "%s", 178 dest.Printf(wxT("%s" PATH_SEP "download" PATH_SEP "%s"),
179 gv->stdpaths->GetUserDataDir().c_str(),gv->curbootloader.c_str()); 179 gv->stdpaths->GetUserDataDir().c_str(),gv->curbootloader.c_str());
180 if( DownloadURL(src, dest) ) 180 if( DownloadURL(src, dest) )
181 { 181 {
182 wxRemoveFile(dest); 182 wxRemoveFile(dest);
183 err.Printf(_("Unable to download %s"), src.c_str() ); 183 err.Printf(wxT("Unable to download %s"), src.c_str() );
184 ERR_DIALOG(err, _("Install")); 184 ERR_DIALOG(err, wxT("Install"));
185 return false; 185 return false;
186 } 186 }
187 187
188 188
189 if(!wxFileExists(path1)) 189 if(!wxFileExists(path1))
190 { 190 {
191 err.Printf("[ERR] Coud not find %s",path1.c_str()); 191 err.Printf(wxT("[ERR] Coud not find %s"),path1.c_str());
192 ERR_DIALOG(err, _("Bootloader add")); 192 ERR_DIALOG(err, wxT("Bootloader add"));
193 return false; 193 return false;
194 } 194 }
195 path2 = path1; 195 path2 = path1;
196 path2.Append(".ORIG"); 196 path2.Append(wxT(".ORIG"));
197 if(wxFileExists(path2)) 197 if(wxFileExists(path2))
198 { 198 {
199 err = "Its seems there is already a Bootloader install, if not, delete the *.IMG.ORIG file"; 199 err = wxT("Its seems there is already a Bootloader install, if not, delete the *.IMG.ORIG file");
200 ERR_DIALOG(err, _("Bootloader add")); 200 ERR_DIALOG(err, wxT("Bootloader add"));
201 return false; 201 return false;
202 } 202 }
203 203
204 if(!wxRenameFile(path1,path2,false)) 204 if(!wxRenameFile(path1,path2,false))
205 { 205 {
206 err.Printf("[ERR] Coud not rename %s to %s",path1.c_str(),path2.c_str()); 206 err.Printf(wxT("[ERR] Coud not rename %s to %s"),path1.c_str(),path2.c_str());
207 ERR_DIALOG(err, _("Bootloader add")); 207 ERR_DIALOG(err, wxT("Bootloader add"));
208 return false; 208 return false;
209 } 209 }
210 if(!wxCopyFile(dest,path1)) 210 if(!wxCopyFile(dest,path1))
211 { 211 {
212 err.Printf("[ERR] Coud not copy %s to %s",dest.c_str(),path2.c_str()); 212 err.Printf(wxT("[ERR] Coud not copy %s to %s"),dest.c_str(),path2.c_str());
213 ERR_DIALOG(err, _("Bootloader add")); 213 ERR_DIALOG(err, wxT("Bootloader add"));
214 return false; 214 return false;
215 } 215 }
216 } 216 }
217 else if(mode == BOOTLOADER_REM) 217 else if(mode == BOOTLOADER_REM)
218 { 218 {
219 path2 = path1; 219 path2 = path1;
220 path2.Append(".ORIG"); 220 path2.Append(wxT(".ORIG"));
221 if(!wxFileExists(path2)) 221 if(!wxFileExists(path2))
222 { 222 {
223 err.Printf("[ERR] Coud not find %s",path1.c_str()); 223 err.Printf(wxT("[ERR] Coud not find %s"),path1.c_str());
224 ERR_DIALOG(err, _("Bootloader del")); 224 ERR_DIALOG(err, wxT("Bootloader del"));
225 return false; 225 return false;
226 } 226 }
227 if(!wxRenameFile(path2,path1,true)) 227 if(!wxRenameFile(path2,path1,true))
228 { 228 {
229 err.Printf("[ERR] Coud not rename %s to %s",path1.c_str(),path2.c_str()); 229 err.Printf(wxT("[ERR] Coud not rename %s to %s"),path1.c_str(),path2.c_str());
230 ERR_DIALOG(err, _("Bootloader del")); 230 ERR_DIALOG(err, wxT("Bootloader del"));
231 return false; 231 return false;
232 } 232 }
233 } 233 }
@@ -241,27 +241,27 @@ bool iaudiox5(int mode)
241 wxString err; 241 wxString err;
242 wxString src,dest; 242 wxString src,dest;
243 243
244 path1.Printf("%s" PATH_SEP "FIRMWARE" PATH_SEP "%s",gv->curdestdir.c_str(),gv->curbootloader.c_str()); 244 path1.Printf(wxT("%s" PATH_SEP "FIRMWARE" PATH_SEP "%s"),gv->curdestdir.c_str(),gv->curbootloader.c_str());
245 245
246 if(mode == BOOTLOADER_ADD) 246 if(mode == BOOTLOADER_ADD)
247 { 247 {
248 //Files downloaden 248 //Files downloaden
249 src.Printf("%s/iaudio/%s", gv->bootloader_url.c_str(),gv->curbootloader.c_str()); 249 src.Printf(wxT("%s/iaudio/%s"), gv->bootloader_url.c_str(),gv->curbootloader.c_str());
250 dest.Printf("%s" PATH_SEP "download" PATH_SEP "%s", 250 dest.Printf(wxT("%s" PATH_SEP "download" PATH_SEP "%s"),
251 gv->stdpaths->GetUserDataDir().c_str(),gv->curbootloader.c_str()); 251 gv->stdpaths->GetUserDataDir().c_str(),gv->curbootloader.c_str());
252 if( DownloadURL(src, dest) ) 252 if( DownloadURL(src, dest) )
253 { 253 {
254 wxRemoveFile(dest); 254 wxRemoveFile(dest);
255 err.Printf(_("Unable to download %s"), src.c_str() ); 255 err.Printf(wxT("Unable to download %s"), src.c_str() );
256 ERR_DIALOG(err, _("Install")); 256 ERR_DIALOG(err, wxT("Install"));
257 return false; 257 return false;
258 } 258 }
259 259
260 // copy file 260 // copy file
261 if(!wxCopyFile(dest,path1)) 261 if(!wxCopyFile(dest,path1))
262 { 262 {
263 err.Printf("[ERR] Coud not copy %s to %s",dest.c_str(),path2.c_str()); 263 err.Printf(wxT("[ERR] Coud not copy %s to %s"),dest.c_str(),path2.c_str());
264 ERR_DIALOG(err, _("Bootloader add")); 264 ERR_DIALOG(err, wxT("Bootloader add"));
265 return false; 265 return false;
266 } 266 }
267 267
@@ -276,7 +276,7 @@ bool h10(int mode)
276{ 276{
277 wxString err,src,dest,path1,path2; 277 wxString err,src,dest,path1,path2;
278 278
279 int pos = gv->curbootloader.Find('/'); 279 int pos = gv->curbootloader.Find('/');
280 if(pos == wxNOT_FOUND) pos = 0; 280 if(pos == wxNOT_FOUND) pos = 0;
281 wxString firmwarename = gv->curbootloader.SubString(pos,gv->curbootloader.Length()); 281 wxString firmwarename = gv->curbootloader.SubString(pos,gv->curbootloader.Length());
282 //wxString firmDir = gv->curbootloader.SubString(0,pos); 282 //wxString firmDir = gv->curbootloader.SubString(0,pos);
@@ -284,46 +284,46 @@ bool h10(int mode)
284 if(mode == BOOTLOADER_ADD) 284 if(mode == BOOTLOADER_ADD)
285 { 285 {
286 //Files downloaden 286 //Files downloaden
287 src.Printf("%s/iriver/%s", gv->bootloader_url.c_str(),gv->curbootloader.c_str()); 287 src.Printf(wxT("%s/iriver/%s"), gv->bootloader_url.c_str(),gv->curbootloader.c_str());
288 dest.Printf("%s" PATH_SEP "download" PATH_SEP "%s", 288 dest.Printf(wxT("%s" PATH_SEP "download" PATH_SEP "%s"),
289 gv->stdpaths->GetUserDataDir().c_str(),firmwarename.c_str()); 289 gv->stdpaths->GetUserDataDir().c_str(),firmwarename.c_str());
290 if( DownloadURL(src, dest) ) 290 if( DownloadURL(src, dest) )
291 { 291 {
292 wxRemoveFile(dest); 292 wxRemoveFile(dest);
293 err.Printf(_("Unable to download %s"), src.c_str() ); 293 err.Printf(wxT("Unable to download %s"), src.c_str() );
294 ERR_DIALOG(err, _("Install")); 294 ERR_DIALOG(err, wxT("Install"));
295 return false; 295 return false;
296 } 296 }
297 297
298 path1.Printf("%sSYSTEM" PATH_SEP "%s",gv->curdestdir.c_str(),firmwarename.c_str()); 298 path1.Printf(wxT("%sSYSTEM" PATH_SEP "%s"),gv->curdestdir.c_str(),firmwarename.c_str());
299 path2.Printf("%sSYSTEM" PATH_SEP "Original.mi4",gv->curdestdir.c_str()); 299 path2.Printf(wxT("%sSYSTEM" PATH_SEP "Original.mi4"),gv->curdestdir.c_str());
300 300
301 if(!wxFileExists(path1)) //Firmware dosent exists on player 301 if(!wxFileExists(path1)) //Firmware dosent exists on player
302 { 302 {
303 path1.Printf("%sSYSTEM" PATH_SEP "H10EMP.mi4"); //attempt other firmwarename 303 path1.Printf(wxT("%sSYSTEM" PATH_SEP "H10EMP.mi4")); //attempt other firmwarename
304 if(!wxFileExists(path1)) //Firmware dosent exists on player 304 if(!wxFileExists(path1)) //Firmware dosent exists on player
305 { 305 {
306 err.Printf("[ERR] File %s does not Exist",path1.c_str()); 306 err.Printf(wxT("[ERR] File %s does not Exist"),path1.c_str());
307 ERR_DIALOG(err, _("Bootloader add")); 307 ERR_DIALOG(err, wxT("Bootloader add"));
308 return false; 308 return false;
309 } 309 }
310 } 310 }
311 if(wxFileExists(path2)) //there is already a original firmware 311 if(wxFileExists(path2)) //there is already a original firmware
312 { 312 {
313 err.Printf("[ERR2] File %s does Exist",path2.c_str()); 313 err.Printf(wxT("[ERR2] File %s does Exist"),path2.c_str());
314 ERR_DIALOG(err, _("Bootloader add")); 314 ERR_DIALOG(err, wxT("Bootloader add"));
315 return false; 315 return false;
316 } 316 }
317 if(!wxRenameFile(path1,path2,false)) //rename Firmware to Original 317 if(!wxRenameFile(path1,path2,false)) //rename Firmware to Original
318 { 318 {
319 err.Printf("[ERR] Coud not rename %s to %s",path1.c_str(),path2.c_str()); 319 err.Printf(wxT("[ERR] Coud not rename %s to %s"),path1.c_str(),path2.c_str());
320 ERR_DIALOG(err, _("Bootloader add")); 320 ERR_DIALOG(err, wxT("Bootloader add"));
321 return false; 321 return false;
322 } 322 }
323 if(!wxCopyFile(dest,path1)) // copy file 323 if(!wxCopyFile(dest,path1)) // copy file
324 { 324 {
325 err.Printf("[ERR] Coud not copy %s to %s",dest.c_str(),path1.c_str()); 325 err.Printf(wxT("[ERR] Coud not copy %s to %s"),dest.c_str(),path1.c_str());
326 ERR_DIALOG(err, _("Bootloader add")); 326 ERR_DIALOG(err,wxT("Bootloader add"));
327 return false; 327 return false;
328 } 328 }
329 329
@@ -332,30 +332,30 @@ bool h10(int mode)
332 } 332 }
333 else if(mode == BOOTLOADER_REM) 333 else if(mode == BOOTLOADER_REM)
334 { 334 {
335 path1.Printf("%sSYSTEM" PATH_SEP "%s",gv->curdestdir.c_str(),firmwarename.c_str()); 335 path1.Printf(wxT("%sSYSTEM" PATH_SEP "%s"),gv->curdestdir.c_str(),firmwarename.c_str());
336 path2.Printf("%sSYSTEM" PATH_SEP "Original.mi4",gv->curdestdir.c_str()); 336 path2.Printf(wxT("%sSYSTEM" PATH_SEP "Original.mi4"),gv->curdestdir.c_str());
337 if(!wxFileExists(path1)) //Firmware dosent exists on player 337 if(!wxFileExists(path1)) //Firmware dosent exists on player
338 { 338 {
339 path1.Printf("%s" PATH_SEP "SYSTEM" PATH_SEP "H10EMP.mi4"); //attempt other firmwarename 339 path1.Printf(wxT("%s" PATH_SEP "SYSTEM" PATH_SEP "H10EMP.mi4")); //attempt other firmwarename
340 if(!wxFileExists(path1)) //Firmware dosent exists on player 340 if(!wxFileExists(path1)) //Firmware dosent exists on player
341 { 341 {
342 err.Printf("[ERR] File %s does not Exist",path1.c_str()); 342 err.Printf(wxT("[ERR] File %s does not Exist"),path1.c_str());
343 ERR_DIALOG(err, _("Bootloader rem")); 343 ERR_DIALOG(err, wxT("Bootloader rem"));
344 return false; 344 return false;
345 } 345 }
346 } 346 }
347 347
348 if(!wxFileExists(path2)) //Original Firmware dosent exists on player 348 if(!wxFileExists(path2)) //Original Firmware dosent exists on player
349 { 349 {
350 err.Printf("[ERR] File %s does not Exist",path2.c_str()); 350 err.Printf(wxT("[ERR] File %s does not Exist"),path2.c_str());
351 ERR_DIALOG(err, _("Bootloader rem")); 351 ERR_DIALOG(err, wxT("Bootloader rem"));
352 return false; 352 return false;
353 } 353 }
354 354
355 if(!wxRenameFile(path2,path1,true)) //rename Firmware to Original 355 if(!wxRenameFile(path2,path1,true)) //rename Firmware to Original
356 { 356 {
357 err.Printf("[ERR] Coud not rename %s to %s",path2.c_str(),path1.c_str()); 357 err.Printf(wxT("[ERR] Coud not rename %s to %s"),path2.c_str(),path1.c_str());
358 ERR_DIALOG(err, _("Bootloader add")); 358 ERR_DIALOG(err, wxT("Bootloader add"));
359 return false; 359 return false;
360 } 360 }
361 361
@@ -372,7 +372,7 @@ bool fwpatcher(int mode)
372 int series,table_entry; 372 int series,table_entry;
373 373
374 if (!FileMD5(gv->curfirmware, &md5sum_str)) { 374 if (!FileMD5(gv->curfirmware, &md5sum_str)) {
375 ERR_DIALOG("Could not open firmware", _("Open Firmware")); 375 ERR_DIALOG(wxT("Could not open firmware"), wxT("Open Firmware"));
376 return false; 376 return false;
377 } 377 }
378 else { 378 else {
@@ -398,44 +398,44 @@ bool fwpatcher(int mode)
398 } 398 }
399 } 399 }
400 if (series == 0) { 400 if (series == 0) {
401 ERR_DIALOG("Could not detect firmware type", _("Detect Player out of Firmware")); 401 ERR_DIALOG(wxT("Could not detect firmware type"), wxT("Detect Player out of Firmware"));
402 return false; 402 return false;
403 } 403 }
404 else 404 else
405 { 405 {
406 //Download bootloader 406 //Download bootloader
407 src.Printf("%s/iriver/%s", gv->bootloader_url.c_str(),gv->curbootloader.c_str()); 407 src.Printf(wxT("%s/iriver/%s"), gv->bootloader_url.c_str(),gv->curbootloader.c_str());
408 dest.Printf("%s" PATH_SEP "download" PATH_SEP "%s", 408 dest.Printf(wxT("%s" PATH_SEP "download" PATH_SEP "%s"),
409 gv->stdpaths->GetUserDataDir().c_str(),gv->curbootloader.c_str()); 409 gv->stdpaths->GetUserDataDir().c_str(),gv->curbootloader.c_str());
410 if( DownloadURL(src, dest) ) 410 if( DownloadURL(src, dest) )
411 { 411 {
412 wxRemoveFile(dest); 412 wxRemoveFile(dest);
413 err.Printf(_("Unable to download %s"), src.c_str() ); 413 err.Printf(wxT("Unable to download %s"), src.c_str() );
414 ERR_DIALOG(err, _("Install")); 414 ERR_DIALOG(err, wxT("Install"));
415 return false; 415 return false;
416 } 416 }
417 417
418 if(!PatchFirmware(gv->curfirmware,dest,series, table_entry)) // Patch firmware 418 if(!PatchFirmware(gv->curfirmware,dest,series, table_entry)) // Patch firmware
419 { 419 {
420 ERR_DIALOG("Patching Firmware failed", _("Patching Firmware")); 420 ERR_DIALOG(wxT("Patching Firmware failed"), wxT("Patching Firmware"));
421 return false; 421 return false;
422 } 422 }
423 } 423 }
424 424
425 // Load patched Firmware to player 425 // Load patched Firmware to player
426 src.Printf("%s" PATH_SEP "download" PATH_SEP "new.hex", 426 src.Printf(wxT("%s" PATH_SEP "download" PATH_SEP "new.hex"),
427 gv->stdpaths->GetUserDataDir().c_str()); 427 gv->stdpaths->GetUserDataDir().c_str());
428 428
429 if(gv->curplat == "h100") 429 if(gv->curplat == "h100")
430 dest.Printf("%s" PATH_SEP "ihp_100.hex",gv->curdestdir.c_str()); 430 dest.Printf(wxT("%s" PATH_SEP "ihp_100.hex"),gv->curdestdir.c_str());
431 else if(gv->curplat == "h120") 431 else if(gv->curplat == "h120")
432 dest.Printf("%s" PATH_SEP "ihp_120.hex",gv->curdestdir.c_str()); 432 dest.Printf(wxT("%s" PATH_SEP "ihp_120.hex"),gv->curdestdir.c_str());
433 else if(gv->curplat == "h300") 433 else if(gv->curplat == "h300")
434 dest.Printf("%s" PATH_SEP "H300.hex",gv->curdestdir.c_str()); 434 dest.Printf(wxT("%s" PATH_SEP "H300.hex"),gv->curdestdir.c_str());
435 435
436 if(!wxRenameFile(src,dest)) 436 if(!wxRenameFile(src,dest))
437 { 437 {
438 ERR_DIALOG("Copying Firmware to Device failed", _("Copying Firmware")); 438 ERR_DIALOG(wxT("Copying Firmware to Device failed"), wxT("Copying Firmware"));
439 return false; 439 return false;
440 } 440 }
441 else 441 else
diff --git a/rbutil/credits.h b/rbutil/credits.h
index 39f8389621..c01bb69dc5 100644
--- a/rbutil/credits.h
+++ b/rbutil/credits.h
@@ -22,7 +22,7 @@
22#define CREDITS_H_INCLUDED 22#define CREDITS_H_INCLUDED
23 23
24#define RBUTIL_FULLNAME "The Rockbox Utility" 24#define RBUTIL_FULLNAME "The Rockbox Utility"
25#define RBUTIL_VERSION "Version 0.2.1.1" 25#define RBUTIL_VERSION "Version 0.3.0.0"
26 26
27static const char* rbutil_developers[] = { 27static const char* rbutil_developers[] = {
28 "Christi Alice Scarborough", 28 "Christi Alice Scarborough",
diff --git a/rbutil/irivertools.cpp b/rbutil/irivertools.cpp
index f04db6417a..a1c83ebd39 100755
--- a/rbutil/irivertools.cpp
+++ b/rbutil/irivertools.cpp
@@ -61,13 +61,13 @@ bool mkboot(wxString infile, wxString outfile,wxString bootloader,int origin)
61 wxFile f; 61 wxFile f;
62 if(!f.Open(infile)) 62 if(!f.Open(infile))
63 { 63 {
64 err.Printf("Could not open: %s",infile.c_str()); 64 err.Printf(wxT("Could not open: %s"),infile.c_str());
65 ERR_DIALOG(err, _("mkboot")); 65 ERR_DIALOG(err, wxT("mkboot"));
66 return false; 66 return false;
67 } 67 }
68 i = f.Read(image,16); 68 i = f.Read(image,16);
69 if(i < 16) { 69 if(i < 16) {
70 ERR_DIALOG("reading header failed", _("mkboot")); 70 ERR_DIALOG(wxT("reading header failed"), wxT("mkboot"));
71 return false; 71 return false;
72 } 72 }
73 73
@@ -80,7 +80,7 @@ bool mkboot(wxString infile, wxString outfile,wxString bootloader,int origin)
80 len = binary_length+0x200-16; 80 len = binary_length+0x200-16;
81 i = f.Read(image+16, len); 81 i = f.Read(image+16, len);
82 if(i < len) { 82 if(i < len) {
83 ERR_DIALOG("reading firmware failed", _("mkboot")); 83 ERR_DIALOG(wxT("reading firmware failed"),wxT("mkboot"));
84 return false; 84 return false;
85 } 85 }
86 86
@@ -88,8 +88,8 @@ bool mkboot(wxString infile, wxString outfile,wxString bootloader,int origin)
88 /* Now, read the boot loader into the image */ 88 /* Now, read the boot loader into the image */
89 if(!f.Open(bootloader)) 89 if(!f.Open(bootloader))
90 { 90 {
91 err.Printf("Could not open: %s",bootloader.c_str()); 91 err.Printf(wxT("Could not open: %s"),bootloader.c_str());
92 ERR_DIALOG(err, _("mkboot")); 92 ERR_DIALOG(err, wxT("mkboot"));
93 return false; 93 return false;
94 } 94 }
95 95
@@ -97,7 +97,7 @@ bool mkboot(wxString infile, wxString outfile,wxString bootloader,int origin)
97 97
98 i = f.Read(image+0x220 + origin, bllen); 98 i = f.Read(image+0x220 + origin, bllen);
99 if(i < bllen) { 99 if(i < bllen) {
100 ERR_DIALOG("reading bootloader failed", _("mkboot")); 100 ERR_DIALOG(wxT("reading bootloader failed"), wxT("mkboot"));
101 return false; 101 return false;
102 } 102 }
103 103
@@ -105,8 +105,8 @@ bool mkboot(wxString infile, wxString outfile,wxString bootloader,int origin)
105 105
106 if(!f.Open(outfile,wxFile::write)) 106 if(!f.Open(outfile,wxFile::write))
107 { 107 {
108 err.Printf("Could not open: %s",outfile.c_str()); 108 err.Printf(wxT("Could not open: %s"),outfile.c_str());
109 ERR_DIALOG(err, _("mkboot")); 109 ERR_DIALOG(err, wxT("mkboot"));
110 return false; 110 return false;
111 } 111 }
112 112
@@ -158,7 +158,7 @@ bool mkboot(wxString infile, wxString outfile,wxString bootloader,int origin)
158 158
159 i = f.Write(image,total_length); 159 i = f.Write(image,total_length);
160 if(i < total_length) { 160 if(i < total_length) {
161 ERR_DIALOG("writing bootloader failed", _("mkboot")); 161 ERR_DIALOG(wxT("writing bootloader failed"), wxT("mkboot"));
162 return false; 162 return false;
163 } 163 }
164 164
@@ -230,21 +230,21 @@ int iriver_decode(wxString infile_name, wxString outfile_name, unsigned int modi
230 230
231 if(!infile.Open(infile_name)) 231 if(!infile.Open(infile_name))
232 { 232 {
233 err.Printf("Could not open: %s",infile_name.c_str()); 233 err.Printf(wxT("Could not open: %s"),infile_name.c_str());
234 ERR_DIALOG(err, _("iriver_decode")); 234 ERR_DIALOG(err, wxT("iriver_decode"));
235 return -1; 235 return -1;
236 } 236 }
237 if(!outfile.Open(outfile_name,wxFile::write)) 237 if(!outfile.Open(outfile_name,wxFile::write))
238 { 238 {
239 err.Printf("Could not open: %s",outfile_name.c_str()); 239 err.Printf(wxT("Could not open: %s"),outfile_name.c_str());
240 ERR_DIALOG(err, _("iriver_decode")); 240 ERR_DIALOG(err, wxT("iriver_decode"));
241 return -1; 241 return -1;
242 } 242 }
243 lenread = infile.Read( headerdata, 512); 243 lenread = infile.Read( headerdata, 512);
244 if( lenread != 512 ) 244 if( lenread != 512 )
245 { 245 {
246 ERR_DIALOG(_("This doesn't look like a valid encrypted iHP " 246 ERR_DIALOG(wxT("This doesn't look like a valid encrypted iHP "
247 "firmware - reason: header length\n"),_("iriver_decode")); 247 "firmware - reason: header length\n"),wxT("iriver_decode"));
248 248
249 infile.Close(); 249 infile.Close();
250 outfile.Close(); 250 outfile.Close();
@@ -254,8 +254,8 @@ int iriver_decode(wxString infile_name, wxString outfile_name, unsigned int modi
254 i = testheader( headerdata ); 254 i = testheader( headerdata );
255 if( i == -1 ) 255 if( i == -1 )
256 { 256 {
257 ERR_DIALOG( _( "This firmware is for an unknown model, or is not" 257 ERR_DIALOG( wxT( "This firmware is for an unknown model, or is not"
258 " a valid encrypted iHP firmware\n" ),_("iriver_decode")); 258 " a valid encrypted iHP firmware\n" ),wxT("iriver_decode"));
259 infile.Close(); 259 infile.Close();
260 outfile.Close(); 260 outfile.Close();
261 return -1; 261 return -1;
@@ -277,8 +277,8 @@ int iriver_decode(wxString infile_name, wxString outfile_name, unsigned int modi
277 dwLength2>>9 != dwLength3 || 277 dwLength2>>9 != dwLength3 ||
278 dwLength2+dwLength3+512 != dwLength1 ) 278 dwLength2+dwLength3+512 != dwLength1 )
279 { 279 {
280 ERR_DIALOG( _( "This doesn't look like a valid encrypted " 280 ERR_DIALOG( wxT( "This doesn't look like a valid encrypted "
281 "iHP firmware - reason: file 'length' data\n" ),_("iriver_decode")); 281 "iHP firmware - reason: file 'length' data\n" ),wxT("iriver_decode"));
282 infile.Close(); 282 infile.Close();
283 outfile.Close(); 283 outfile.Close();
284 return -1; 284 return -1;
@@ -339,8 +339,8 @@ int iriver_decode(wxString infile_name, wxString outfile_name, unsigned int modi
339 339
340 if( fp != dwLength2 ) 340 if( fp != dwLength2 )
341 { 341 {
342 ERR_DIALOG( _( "This doesn't look like a valid encrypted " 342 ERR_DIALOG( wxT( "This doesn't look like a valid encrypted "
343 "iHP firmware - reason: 'length2' mismatch\n" ),_("iriver_decode")); 343 "iHP firmware - reason: 'length2' mismatch\n" ),wxT("iriver_decode"));
344 infile.Close(); 344 infile.Close();
345 outfile.Close(); 345 outfile.Close();
346 return -1; 346 return -1;
@@ -356,8 +356,8 @@ int iriver_decode(wxString infile_name, wxString outfile_name, unsigned int modi
356 outfile.Write( blockdata, lenread ); 356 outfile.Write( blockdata, lenread );
357 if( memcmp( ppChecksums, blockdata, lenread ) != 0 ) 357 if( memcmp( ppChecksums, blockdata, lenread ) != 0 )
358 { 358 {
359 ERR_DIALOG( _( "This doesn't look like a valid encrypted " 359 ERR_DIALOG( wxT( "This doesn't look like a valid encrypted "
360 "iHP firmware - reason: Checksum mismatch!" ),_("iriver_decode")); 360 "iHP firmware - reason: Checksum mismatch!" ),wxT("iriver_decode"));
361 infile.Close(); 361 infile.Close();
362 outfile.Close(); 362 outfile.Close();
363 return -1; 363 return -1;
@@ -367,8 +367,8 @@ int iriver_decode(wxString infile_name, wxString outfile_name, unsigned int modi
367 367
368 if( fp != dwLength3 ) 368 if( fp != dwLength3 )
369 { 369 {
370 ERR_DIALOG(_( "This doesn't look like a valid encrypted " 370 ERR_DIALOG(wxT( "This doesn't look like a valid encrypted "
371 "iHP firmware - reason: 'length3' mismatch\n" ),_("iriver_decode")); 371 "iHP firmware - reason: 'length3' mismatch\n" ),wxT("iriver_decode"));
372 infile.Close(); 372 infile.Close();
373 outfile.Close(); 373 outfile.Close();
374 return -1; 374 return -1;
@@ -419,22 +419,22 @@ int iriver_encode(wxString infile_name, wxString outfile_name, unsigned int modi
419 419
420 if(!infile.Open(infile_name,wxFile::read)) 420 if(!infile.Open(infile_name,wxFile::read))
421 { 421 {
422 err.Printf("Could not open: %s",infile_name.c_str()); 422 err.Printf(wxT("Could not open: %s"),infile_name.c_str());
423 ERR_DIALOG(err, _("iriver_decode")); 423 ERR_DIALOG(err, wxT("iriver_decode"));
424 return -1; 424 return -1;
425 } 425 }
426 if(!outfile.Open(outfile_name,wxFile::write)) 426 if(!outfile.Open(outfile_name,wxFile::write))
427 { 427 {
428 err.Printf("Could not open: %s",outfile_name.c_str()); 428 err.Printf(wxT("Could not open: %s"),outfile_name.c_str());
429 ERR_DIALOG(err, _("iriver_decode")); 429 ERR_DIALOG(err, wxT("iriver_decode"));
430 return -1; 430 return -1;
431 } 431 }
432 432
433 lenread = infile.Read( headerdata, 512 ); 433 lenread = infile.Read( headerdata, 512 );
434 if( lenread != 512 ) 434 if( lenread != 512 )
435 { 435 {
436 ERR_DIALOG("This doesn't look like a valid decoded " 436 ERR_DIALOG(wxT("This doesn't look like a valid decoded "
437 "iHP firmware - reason: header length\n", _("iriver_decode")); 437 "iHP firmware - reason: header length\n"), wxT("iriver_decode"));
438 infile.Close(); 438 infile.Close();
439 outfile.Close(); 439 outfile.Close();
440 }; 440 };
@@ -447,8 +447,8 @@ int iriver_encode(wxString infile_name, wxString outfile_name, unsigned int modi
447 i = testheader( headerdata ); 447 i = testheader( headerdata );
448 if( i == -1 ) 448 if( i == -1 )
449 { 449 {
450 ERR_DIALOG("This firmware is for an unknown model, or is not" 450 ERR_DIALOG(wxT("This firmware is for an unknown model, or is not"
451 " a valid decoded iHP firmware\n", _("iriver_decode")); 451 " a valid decoded iHP firmware\n"), wxT("iriver_decode"));
452 infile.Close(); 452 infile.Close();
453 outfile.Close(); 453 outfile.Close();
454 }; 454 };
@@ -468,8 +468,8 @@ int iriver_encode(wxString infile_name, wxString outfile_name, unsigned int modi
468 dwLength3 > dwLength1 || 468 dwLength3 > dwLength1 ||
469 dwLength2+dwLength3+512 != dwLength1 ) 469 dwLength2+dwLength3+512 != dwLength1 )
470 { 470 {
471 ERR_DIALOG("This doesn't look like a valid decoded iHP" 471 ERR_DIALOG(wxT("This doesn't look like a valid decoded iHP"
472 " firmware - reason: file 'length' data\n", _("iriver_decode")); 472 " firmware - reason: file 'length' data\n"), wxT("iriver_decode"));
473 infile.Close(); 473 infile.Close();
474 outfile.Close(); 474 outfile.Close();
475 }; 475 };
@@ -506,8 +506,8 @@ int iriver_encode(wxString infile_name, wxString outfile_name, unsigned int modi
506 506
507 if( fp != dwLength2 ) 507 if( fp != dwLength2 )
508 { 508 {
509 ERR_DIALOG("This doesn't look like a valid decoded " 509 ERR_DIALOG(wxT("This doesn't look like a valid decoded "
510 "iHP firmware - reason: 'length1' mismatch\n", _("iriver_decode")); 510 "iHP firmware - reason: 'length1' mismatch\n"), wxT("iriver_decode"));
511 infile.Close(); 511 infile.Close();
512 outfile.Close(); 512 outfile.Close();
513 }; 513 };
@@ -526,8 +526,8 @@ int iriver_encode(wxString infile_name, wxString outfile_name, unsigned int modi
526 526
527 if( fp != dwLength3 ) 527 if( fp != dwLength3 )
528 { 528 {
529 ERR_DIALOG("This doesn't look like a valid decoded " 529 ERR_DIALOG(wxT("This doesn't look like a valid decoded "
530 "iHP firmware - reason: 'length2' mismatch\n", _("iriver_decode")); 530 "iHP firmware - reason: 'length2' mismatch\n"), wxT("iriver_decode"));
531 infile.Close(); 531 infile.Close();
532 outfile.Close(); 532 outfile.Close();
533 }; 533 };
@@ -565,30 +565,30 @@ bool PatchFirmware(wxString firmware,wxString bootloader,int series, int table_e
565 break; 565 break;
566 } 566 }
567 567
568 name1.Printf("%s" PATH_SEP "download" PATH_SEP "firmware.bin", 568 name1.Printf(wxT("%s" PATH_SEP "download" PATH_SEP "firmware.bin"),
569 gv->stdpaths->GetUserDataDir().c_str()); 569 gv->stdpaths->GetUserDataDir().c_str());
570 /* descrambled file */ 570 /* descrambled file */
571 name2.Printf("%s" PATH_SEP "download" PATH_SEP "new.bin", 571 name2.Printf(wxT("%s" PATH_SEP "download" PATH_SEP "new.bin"),
572 gv->stdpaths->GetUserDataDir().c_str()); 572 gv->stdpaths->GetUserDataDir().c_str());
573 /* patched file */ 573 /* patched file */
574 name3.Printf("%s" PATH_SEP "download" PATH_SEP "new.hex", 574 name3.Printf(wxT("%s" PATH_SEP "download" PATH_SEP "new.hex"),
575 gv->stdpaths->GetUserDataDir().c_str()); 575 gv->stdpaths->GetUserDataDir().c_str());
576 if (iriver_decode(firmware, name1, FALSE, STRIP_NONE) == -1) { 576 if (iriver_decode(firmware, name1, FALSE, STRIP_NONE) == -1) {
577 ERR_DIALOG("Error in descramble", _("Descramble Firmware")); 577 ERR_DIALOG(wxT("Error in descramble"), wxT("Descramble Firmware"));
578 wxRemoveFile(name1); 578 wxRemoveFile(name1);
579 wxRemoveFile(name2); 579 wxRemoveFile(name2);
580 wxRemoveFile(name3); 580 wxRemoveFile(name3);
581 return false; 581 return false;
582 } 582 }
583 if (!mkboot(name1, name2, bootloader, origin)) { 583 if (!mkboot(name1, name2, bootloader, origin)) {
584 ERR_DIALOG("Error in patching",_("Patching Firmware")); 584 ERR_DIALOG(wxT("Error in patching"),wxT("Patching Firmware"));
585 wxRemoveFile(name1); 585 wxRemoveFile(name1);
586 wxRemoveFile(name2); 586 wxRemoveFile(name2);
587 wxRemoveFile(name3); 587 wxRemoveFile(name3);
588 return false; 588 return false;
589 } 589 }
590 if (iriver_encode(name2, name3, FALSE) == -1) { 590 if (iriver_encode(name2, name3, FALSE) == -1) {
591 ERR_DIALOG("Error in scramble",_("Scramble Firmware")); 591 ERR_DIALOG(wxT("Error in scramble"),wxT("Scramble Firmware"));
592 wxRemoveFile(name1); 592 wxRemoveFile(name1);
593 wxRemoveFile(name2); 593 wxRemoveFile(name2);
594 wxRemoveFile(name3); 594 wxRemoveFile(name3);
@@ -596,7 +596,7 @@ bool PatchFirmware(wxString firmware,wxString bootloader,int series, int table_e
596 } 596 }
597 /* now md5sum it */ 597 /* now md5sum it */
598 if (!FileMD5(name3, &md5sum_str)) { 598 if (!FileMD5(name3, &md5sum_str)) {
599 ERR_DIALOG("Error in checksumming",_("Checksumming Firmware")); 599 ERR_DIALOG(wxT("Error in checksumming"),wxT("Checksumming Firmware"));
600 wxRemoveFile(name1); 600 wxRemoveFile(name1);
601 wxRemoveFile(name2); 601 wxRemoveFile(name2);
602 wxRemoveFile(name3); 602 wxRemoveFile(name3);
diff --git a/rbutil/rbutil-rc.rc b/rbutil/rbutil-rc.rc
index 756b65fb49..f01d5a61d1 100644
--- a/rbutil/rbutil-rc.rc
+++ b/rbutil/rbutil-rc.rc
@@ -1,8 +1,8 @@
1#define RBUTIL 1 1#define RBUTIL 1
2#include <wx/msw/wx.rc> 2#include <wx/msw/wx.rc>
3RBUTIL VERSIONINFO 3RBUTIL VERSIONINFO
4FILEVERSION 0,2,1,1 4FILEVERSION 0,3,0,0
5PRODUCTVERSION 0,2,1,1 5PRODUCTVERSION 0,3,0,0
6FILEOS 0x00000004 6FILEOS 0x00000004
7FILETYPE 0x00000001 7FILETYPE 0x00000001
8BEGIN 8BEGIN
@@ -10,12 +10,12 @@ BEGIN
10 BEGIN 10 BEGIN
11 BLOCK "FFFF0000" 11 BLOCK "FFFF0000"
12 BEGIN 12 BEGIN
13 VALUE "FileVersion", "0.2.1.1\0" 13 VALUE "FileVersion", "0.3.0.0\0"
14 VALUE "ProductVersion", "0.2.1.1\0" 14 VALUE "ProductVersion", "0.3.0.0\0"
15 VALUE "CompanyName", "Rockbox Team\0" 15 VALUE "CompanyName", "Rockbox Team\0"
16 VALUE "FileDescription", "Rockbox Utility\0" 16 VALUE "FileDescription", "Rockbox Utility\0"
17 VALUE "InternalName", "rbutil\0" 17 VALUE "InternalName", "rbutil\0"
18 VALUE "LegalCopyright", "(C) 2005,6 Rockbox Team\0" 18 VALUE "LegalCopyright", "(C) 2005 - 2007 Rockbox Team\0"
19 VALUE "ProductName", "Rockbox Utility\0" 19 VALUE "ProductName", "Rockbox Utility\0"
20 END 20 END
21 END 21 END
diff --git a/rbutil/rbutil.cbp b/rbutil/rbutil.cbp
index 2ee3f2316d..e577abc3b1 100644
--- a/rbutil/rbutil.cbp
+++ b/rbutil/rbutil.cbp
@@ -82,6 +82,10 @@
82 <Add library="oleaut32" /> 82 <Add library="oleaut32" />
83 <Add library="uuid" /> 83 <Add library="uuid" />
84 <Add library="libwxzlib" /> 84 <Add library="libwxzlib" />
85 <Add library="libwxregex" />
86 <Add library="libwxpng" />
87 <Add library="libwxjpeg" />
88 <Add library="libwxtiff" />
85 <Add directory="$(#WX.lib)\gcc_lib$(WX_CFG)" /> 89 <Add directory="$(#WX.lib)\gcc_lib$(WX_CFG)" />
86 <Add directory="$(#WX.lib)" /> 90 <Add directory="$(#WX.lib)" />
87 <Add directory=".\" /> 91 <Add directory=".\" />
@@ -127,8 +131,10 @@
127 <Unit filename="rbutilFrm.cpp" /> 131 <Unit filename="rbutilFrm.cpp" />
128 <Unit filename="rbutilFrm.h" /> 132 <Unit filename="rbutilFrm.h" />
129 <Unit filename="rbutilFrm_XPM.xpm" /> 133 <Unit filename="rbutilFrm_XPM.xpm" />
134 <Unit filename="themes_3d.xpm" />
130 <Unit filename="tools2_3d.xpm" /> 135 <Unit filename="tools2_3d.xpm" />
131 <Unit filename="uninstall_3d.xpm" /> 136 <Unit filename="uninstall_3d.xpm" />
137 <Unit filename="untools2_3d.xpm" />
132 <Unit filename="wizard.xpm" /> 138 <Unit filename="wizard.xpm" />
133 <Unit filename="wizard_pages.cpp" /> 139 <Unit filename="wizard_pages.cpp" />
134 <Unit filename="wizard_pages.h" /> 140 <Unit filename="wizard_pages.h" />
diff --git a/rbutil/rbutil.cpp b/rbutil/rbutil.cpp
index 9ffe9a6c58..78203ad67f 100644
--- a/rbutil/rbutil.cpp
+++ b/rbutil/rbutil.cpp
@@ -58,15 +58,70 @@ const wxChar* _rootmatch[] = {
58const wxArrayString* rootmatch = new wxArrayString( 58const wxArrayString* rootmatch = new wxArrayString(
59 (size_t) (sizeof(_rootmatch) / sizeof(wxChar*)), _rootmatch); 59 (size_t) (sizeof(_rootmatch) / sizeof(wxChar*)), _rootmatch);
60 60
61bool InstallTheme(wxString Themesrc)
62{
63 wxString dest,src,err;
64
65 int pos = Themesrc.Find('/',true);
66 wxString themename = Themesrc.SubString(pos+1,Themesrc.Length());
67
68 src.Printf(wxT("%s/%s"), gv->themes_url.c_str(),Themesrc.c_str());
69 dest.Printf(wxT("%s" PATH_SEP "download" PATH_SEP "%s"),
70 gv->stdpaths->GetUserDataDir().c_str(),themename.c_str());
71 if( DownloadURL(src, dest) )
72 {
73 wxRemoveFile(dest);
74 err.Printf(wxT("Unable to download %s"), src.c_str() );
75 ERR_DIALOG(err, wxT("Install Theme"));
76 return false;
77 }
78
79 if(!checkZip(dest))
80 {
81 err.Printf(wxT("The Zip %s does not contain the correct dir structure"), dest.c_str());
82 ERR_DIALOG(err, wxT("Install Theme"));
83 return false;
84 }
85
86 if(UnzipFile(dest,gv->curdestdir, true))
87 {
88 err.Printf(wxT("Unable to unzip %s to %s"), dest.c_str(), gv->curdestdir.c_str());
89 ERR_DIALOG(err, wxT("Install Theme"));
90 return false;
91 }
92
93 return true;
94}
95
96bool checkZip(wxString zipname)
97{
98 wxZipEntryPtr entry;
99
100 wxFFileInputStream* in_file = new wxFFileInputStream(zipname);
101 wxZipInputStream* in_zip = new wxZipInputStream(*in_file);
102
103 entry.reset(in_zip->GetNextEntry());
104
105 wxString name = entry->GetName();
106 if(entry->IsDir())
107 {
108 if(name.Contains(wxT(".rockbox\\")))
109 {
110 return true;
111 }
112 }
113 return false;
114}
115
61int DownloadURL(wxString src, wxString dest) 116int DownloadURL(wxString src, wxString dest)
62{ 117{
63 int input, errnum = 0, success = false; 118 int input, errnum = 0, success = false;
64 wxString buf, errstr; 119 wxString buf, errstr;
65 wxLogVerbose(_("=== begin DownloadURL(%s,%s)"), src.c_str(), 120 wxLogVerbose(wxT("=== begin DownloadURL(%s,%s)"), src.c_str(),
66 dest.c_str()); 121 dest.c_str());
67 122
68 buf.Printf(_("Fetching %s"), src.c_str()); 123 buf.Printf(wxT("Fetching %s"), src.c_str());
69 wxProgressDialog* progress = new wxProgressDialog(_("Downloading"), 124 wxProgressDialog* progress = new wxProgressDialog(wxT("Downloading"),
70 buf, 100, NULL, wxPD_APP_MODAL | 125 buf, 100, NULL, wxPD_APP_MODAL |
71 wxPD_AUTO_HIDE | wxPD_SMOOTH | wxPD_ELAPSED_TIME | 126 wxPD_AUTO_HIDE | wxPD_SMOOTH | wxPD_ELAPSED_TIME |
72 wxPD_REMAINING_TIME | wxPD_CAN_ABORT); 127 wxPD_REMAINING_TIME | wxPD_CAN_ABORT);
@@ -105,7 +160,7 @@ int DownloadURL(wxString src, wxString dest)
105 current += os->LastWrite(); 160 current += os->LastWrite();
106 if (!progress->Update(current * 100 / filesize)) 161 if (!progress->Update(current * 100 / filesize))
107 { 162 {
108 errstr = _("Download aborted by user"); 163 errstr = wxT("Download aborted by user");
109 errnum = 1000; 164 errnum = 1000;
110 break; 165 break;
111 } 166 }
@@ -113,7 +168,7 @@ int DownloadURL(wxString src, wxString dest)
113 } else 168 } else
114 { 169 {
115 errnum = os->GetLastError(); 170 errnum = os->GetLastError();
116 errstr.Printf(_("Can't write to output stream (%s)"), 171 errstr.Printf(wxT("Can't write to output stream (%s)"),
117 stream_err_str(errnum).c_str() ); 172 stream_err_str(errnum).c_str() );
118 173
119 break; 174 break;
@@ -127,7 +182,7 @@ int DownloadURL(wxString src, wxString dest)
127 errnum = 0; 182 errnum = 0;
128 break; 183 break;
129 } 184 }
130 errstr.Printf(_("Can't read from input stream (%s)"), 185 errstr.Printf(wxT("Can't read from input stream (%s)"),
131 stream_err_str(errnum).c_str() ); 186 stream_err_str(errnum).c_str() );
132 } 187 }
133 } 188 }
@@ -136,7 +191,7 @@ int DownloadURL(wxString src, wxString dest)
136 if (! errnum) 191 if (! errnum)
137 { 192 {
138 errnum = os->GetLastError(); 193 errnum = os->GetLastError();
139 errstr.Printf(_("Can't close output file (%s)"), 194 errstr.Printf(wxT("Can't close output file (%s)"),
140 stream_err_str(errnum).c_str() ); 195 stream_err_str(errnum).c_str() );
141 196
142 input = false; 197 input = false;
@@ -147,26 +202,26 @@ int DownloadURL(wxString src, wxString dest)
147 } else 202 } else
148 { 203 {
149 errnum = is->GetLastError(); 204 errnum = is->GetLastError();
150 errstr.Printf(_("Can't get input stream size (%s)"), 205 errstr.Printf(wxT("Can't get input stream size (%s)"),
151 stream_err_str(errnum).c_str() ); 206 stream_err_str(errnum).c_str() );
152 207
153 } 208 }
154 } else 209 } else
155 { 210 {
156 errnum = in_http->GetError(); 211 errnum = in_http->GetError();
157 errstr.Printf(_("Can't get input stream (%d)"), errnum); 212 errstr.Printf(wxT("Can't get input stream (%d)"), errnum);
158 } 213 }
159 delete is; 214 delete is;
160 } else 215 } else
161 { 216 {
162 errnum = os->GetLastError(); 217 errnum = os->GetLastError();
163 errstr.Printf(_("Can't create output stream (%s)"), 218 errstr.Printf(wxT("Can't create output stream (%s)"),
164 stream_err_str(errnum).c_str() ); 219 stream_err_str(errnum).c_str() );
165 } 220 }
166 delete os; 221 delete os;
167 } else 222 } else
168 { 223 {
169 errstr.Printf(_("Can't open URL %s (%d)"), src.c_str(), 224 errstr.Printf(wxT("Can't open URL %s (%d)"), src.c_str(),
170 in_http->GetError() ); 225 in_http->GetError() );
171 errnum = 100; 226 errnum = 100;
172 } 227 }
@@ -179,19 +234,19 @@ int DownloadURL(wxString src, wxString dest)
179 if (errnum == 0) errnum = 999; 234 if (errnum == 0) errnum = 999;
180 if (input) 235 if (input)
181 { 236 {
182 buf.Printf(_("%s reading\n%s"), 237 buf.Printf(wxT("%s reading\n%s"),
183 errstr.c_str(), src.c_str()); 238 errstr.c_str(), src.c_str());
184 ERR_DIALOG(buf, _("Download URL")); 239 ERR_DIALOG(buf, wxT("Download URL"));
185 } else 240 } else
186 { 241 {
187 buf.Printf(_("%s writing to download\n/%s"), 242 buf.Printf(wxT("%s writing to download\n/%s"),
188 errstr.c_str(), dest.c_str()); 243 errstr.c_str(), dest.c_str());
189 ERR_DIALOG(buf, _("Download URL")); 244 ERR_DIALOG(buf, wxT("Download URL"));
190 } 245 }
191 246
192 } 247 }
193 248
194 wxLogVerbose(_("=== end DownloadURL")); 249 wxLogVerbose(wxT("=== end DownloadURL"));
195 return errnum; 250 return errnum;
196} 251}
197 252
@@ -202,7 +257,7 @@ int UnzipFile(wxString src, wxString destdir, bool isInstall)
202 int errnum = 0, curfile = 0, totalfiles = 0; 257 int errnum = 0, curfile = 0, totalfiles = 0;
203 InstallLog* log = NULL; 258 InstallLog* log = NULL;
204 259
205 wxLogVerbose(_("===begin UnzipFile(%s,%s,%i)"), 260 wxLogVerbose(wxT("===begin UnzipFile(%s,%s,%i)"),
206 src.c_str(), destdir.c_str(), isInstall); 261 src.c_str(), destdir.c_str(), isInstall);
207 262
208 wxFFileInputStream* in_file = new wxFFileInputStream(src); 263 wxFFileInputStream* in_file = new wxFFileInputStream(src);
@@ -212,9 +267,9 @@ int UnzipFile(wxString src, wxString destdir, bool isInstall)
212 if (! in_zip->IsOk() ) 267 if (! in_zip->IsOk() )
213 { 268 {
214 errnum = in_zip->GetLastError(); 269 errnum = in_zip->GetLastError();
215 buf.Printf(_("Can't open ZIP stream %s for reading (%s)"), 270 buf.Printf(wxT("Can't open ZIP stream %s for reading (%s)"),
216 src.c_str(), stream_err_str(errnum).c_str() ); 271 src.c_str(), stream_err_str(errnum).c_str() );
217 ERR_DIALOG(buf, _("Unzip File") ); 272 ERR_DIALOG(buf, wxT("Unzip File") );
218 delete in_zip; 273 delete in_zip;
219 delete in_file; 274 delete in_file;
220 return true; 275 return true;
@@ -224,9 +279,9 @@ int UnzipFile(wxString src, wxString destdir, bool isInstall)
224 if (! in_zip->IsOk() ) 279 if (! in_zip->IsOk() )
225 { 280 {
226 errnum = in_zip->GetLastError(); 281 errnum = in_zip->GetLastError();
227 buf.Printf(_("Error Getting total ZIP entries for %s (%s)"), 282 buf.Printf(wxT("Error Getting total ZIP entries for %s (%s)"),
228 src.c_str(), stream_err_str(errnum).c_str() ); 283 src.c_str(), stream_err_str(errnum).c_str() );
229 ERR_DIALOG(buf, _("Unzip File") ); 284 ERR_DIALOG(buf, wxT("Unzip File") );
230 delete in_zip; 285 delete in_zip;
231 delete in_file; 286 delete in_file;
232 return true; 287 return true;
@@ -234,16 +289,16 @@ int UnzipFile(wxString src, wxString destdir, bool isInstall)
234 } else 289 } else
235 { 290 {
236 errnum = in_file->GetLastError(); 291 errnum = in_file->GetLastError();
237 buf.Printf(_("Can't open %s (%s)"), src.c_str(), 292 buf.Printf(wxT("Can't open %s (%s)"), src.c_str(),
238 stream_err_str(errnum).c_str() ); 293 stream_err_str(errnum).c_str() );
239 ERR_DIALOG(buf, _("Unzip File") ); 294 ERR_DIALOG(buf, wxT("Unzip File") );
240 delete in_zip; 295 delete in_zip;
241 delete in_file; 296 delete in_file;
242 return true; 297 return true;
243 } 298 }
244 299
245 wxProgressDialog* progress = new wxProgressDialog(_("Unpacking archive"), 300 wxProgressDialog* progress = new wxProgressDialog(wxT("Unpacking archive"),
246 _("Preparing to unpack the downloaded files to your audio" 301 wxT("Preparing to unpack the downloaded files to your audio"
247 "device"), totalfiles, NULL, wxPD_APP_MODAL | 302 "device"), totalfiles, NULL, wxPD_APP_MODAL |
248 wxPD_AUTO_HIDE | wxPD_SMOOTH | wxPD_ELAPSED_TIME | 303 wxPD_AUTO_HIDE | wxPD_SMOOTH | wxPD_ELAPSED_TIME |
249 wxPD_REMAINING_TIME | wxPD_CAN_ABORT); 304 wxPD_REMAINING_TIME | wxPD_CAN_ABORT);
@@ -262,9 +317,9 @@ int UnzipFile(wxString src, wxString destdir, bool isInstall)
262 317
263 curfile++; 318 curfile++;
264 wxString name = entry->GetName(); 319 wxString name = entry->GetName();
265 progress_msg.Printf(_("Unpacking %s"), name.c_str()); 320 progress_msg.Printf(wxT("Unpacking %s"), name.c_str());
266 if (! progress->Update(curfile, progress_msg) ) { 321 if (! progress->Update(curfile, progress_msg) ) {
267 buf.Printf(_("Unpacking cancelled by user")); 322 buf.Printf(wxT("Unpacking cancelled by user"));
268 MESG_DIALOG(buf); 323 MESG_DIALOG(buf);
269 errnum = 1000; 324 errnum = 1000;
270 break; 325 break;
@@ -275,7 +330,7 @@ int UnzipFile(wxString src, wxString destdir, bool isInstall)
275 if (entry->IsDir() ) { 330 if (entry->IsDir() ) {
276 if (!wxDirExists(in_str) ) { 331 if (!wxDirExists(in_str) ) {
277 if (! wxMkdir(in_str, 0777) ) { 332 if (! wxMkdir(in_str, 0777) ) {
278 buf.Printf(_("Unable to create directory %s"), 333 buf.Printf(wxT("Unable to create directory %s"),
279 in_str.c_str() ); 334 in_str.c_str() );
280 errnum = 100; 335 errnum = 100;
281 break; 336 break;
@@ -288,7 +343,7 @@ int UnzipFile(wxString src, wxString destdir, bool isInstall)
288 wxFFileOutputStream* out = new wxFFileOutputStream(in_str); 343 wxFFileOutputStream* out = new wxFFileOutputStream(in_str);
289 if (! out->IsOk() ) 344 if (! out->IsOk() )
290 { 345 {
291 buf.Printf(_("Can't open file %s for writing"), in_str.c_str() ); 346 buf.Printf(wxT("Can't open file %s for writing"), in_str.c_str() );
292 delete out; 347 delete out;
293 return 100; 348 return 100;
294 } else if (isInstall) 349 } else if (isInstall)
@@ -298,19 +353,19 @@ int UnzipFile(wxString src, wxString destdir, bool isInstall)
298 353
299 in_zip->Read(*out); 354 in_zip->Read(*out);
300 if (! out->IsOk()) { 355 if (! out->IsOk()) {
301 buf.Printf(_("Can't write to %s (%d)"), in_str.c_str(), 356 buf.Printf(wxT("Can't write to %s (%d)"), in_str.c_str(),
302 errnum = out->GetLastError() ); 357 errnum = out->GetLastError() );
303 } 358 }
304 359
305 if (!in_zip->IsOk() && ! in_file->GetLastError() == wxSTREAM_EOF) 360 if (!in_zip->IsOk() && ! in_file->GetLastError() == wxSTREAM_EOF)
306 { 361 {
307 buf.Printf(_("Can't read from %s (%d)"), src.c_str(), 362 buf.Printf(wxT("Can't read from %s (%d)"), src.c_str(),
308 errnum = in_file->GetLastError() ); 363 errnum = in_file->GetLastError() );
309 } 364 }
310 365
311 if (! out->Close() && errnum == 0) 366 if (! out->Close() && errnum == 0)
312 { 367 {
313 buf.Printf(_("Unable to close %s (%d)"), in_str.c_str(), 368 buf.Printf(wxT("Unable to close %s (%d)"), in_str.c_str(),
314 errnum = out->GetLastError() ); 369 errnum = out->GetLastError() );
315 370
316 } 371 }
@@ -323,11 +378,11 @@ int UnzipFile(wxString src, wxString destdir, bool isInstall)
323 378
324 if (errnum) 379 if (errnum)
325 { 380 {
326 ERR_DIALOG(buf, _("Unzip File")); 381 ERR_DIALOG(buf, wxT("Unzip File"));
327 } 382 }
328 383
329 if (log) delete log; 384 if (log) delete log;
330 wxLogVerbose(_("=== end UnzipFile")); 385 wxLogVerbose(wxT("=== end UnzipFile"));
331 return(errnum); 386 return(errnum);
332} 387}
333 388
@@ -339,10 +394,10 @@ int Uninstall(const wxString dir, bool isFullUninstall) {
339 InstallLog *log = NULL; 394 InstallLog *log = NULL;
340 wxArrayString* FilesToRemove = NULL; 395 wxArrayString* FilesToRemove = NULL;
341 396
342 wxLogVerbose(_("=== begin Uninstall(%s,%i)"), dir.c_str(), isFullUninstall); 397 wxLogVerbose(wxT("=== begin Uninstall(%s,%i)"), dir.c_str(), isFullUninstall);
343 398
344 wxProgressDialog* progress = new wxProgressDialog(_("Uninstalling"), 399 wxProgressDialog* progress = new wxProgressDialog(wxT("Uninstalling"),
345 _("Reading uninstall data from jukebox"), 100, NULL, 400 wxT("Reading uninstall data from jukebox"), 100, NULL,
346 wxPD_APP_MODAL | wxPD_AUTO_HIDE | wxPD_SMOOTH | 401 wxPD_APP_MODAL | wxPD_AUTO_HIDE | wxPD_SMOOTH |
347 wxPD_ELAPSED_TIME | wxPD_REMAINING_TIME | wxPD_CAN_ABORT); 402 wxPD_ELAPSED_TIME | wxPD_REMAINING_TIME | wxPD_CAN_ABORT);
348 progress->Update(0); 403 progress->Update(0);
@@ -358,19 +413,19 @@ int Uninstall(const wxString dir, bool isFullUninstall) {
358 if (FilesToRemove == NULL || FilesToRemove->GetCount() < 1) { 413 if (FilesToRemove == NULL || FilesToRemove->GetCount() < 1) {
359 wxLogNull lognull; 414 wxLogNull lognull;
360 if ( wxMessageDialog(NULL, 415 if ( wxMessageDialog(NULL,
361 _("Rockbox Utility can't find any uninstall data on this " 416 wxT("Rockbox Utility can't find any uninstall data on this "
362 "jukebox.\n" 417 "jukebox.\n"
363 "Would you like to attempt a full uninstall?\n" 418 "Would you like to attempt a full uninstall?\n"
364 "(WARNING: A full uninstall removes all files in your Rockbox " 419 "(WARNING: A full uninstall removes all files in your Rockbox "
365 "folder)"), 420 "folder)"),
366 _("Standard uninstall not possible"), 421 wxT("Standard uninstall not possible"),
367 wxICON_EXCLAMATION | wxYES_NO | wxNO_DEFAULT).ShowModal() 422 wxICON_EXCLAMATION | wxYES_NO | wxNO_DEFAULT).ShowModal()
368 == wxID_YES) 423 == wxID_YES)
369 { 424 {
370 isFullUninstall = true; 425 isFullUninstall = true;
371 } 426 }
372 else { 427 else {
373 MESG_DIALOG(_("Uninstall cancelled by user")); 428 MESG_DIALOG(wxT("Uninstall cancelled by user"));
374 delete progress; 429 delete progress;
375 return 1000; 430 return 1000;
376 } 431 }
@@ -382,8 +437,8 @@ int Uninstall(const wxString dir, bool isFullUninstall) {
382 buf.Printf(wxT("%s" PATH_SEP ".rockbox"), dir.c_str()); 437 buf.Printf(wxT("%s" PATH_SEP ".rockbox"), dir.c_str());
383 if (rm_rf(buf) ) 438 if (rm_rf(buf) )
384 { 439 {
385 WARN_DIALOG(_("Unable to completely remove Rockbox directory"), 440 WARN_DIALOG(wxT("Unable to completely remove Rockbox directory"),
386 _("Full uninstall") ); 441 wxT("Full uninstall") );
387 errflag = true; 442 errflag = true;
388 } 443 }
389 444
@@ -413,8 +468,8 @@ int Uninstall(const wxString dir, bool isFullUninstall) {
413 { 468 {
414 if (! wxRemoveFile((*special)[i]) ) 469 if (! wxRemoveFile((*special)[i]) )
415 { 470 {
416 buf.Printf(_("Can't delete %s"), (*special)[i].c_str()); 471 buf.Printf(wxT("Can't delete %s"), (*special)[i].c_str());
417 WARN_DIALOG(buf.c_str(), _("Full uninstall")); 472 WARN_DIALOG(buf.c_str(), wxT("Full uninstall"));
418 errflag = true; 473 errflag = true;
419 } 474 }
420 } 475 }
@@ -441,11 +496,11 @@ int Uninstall(const wxString dir, bool isFullUninstall) {
441 496
442 wxString* buf2 = new wxString; 497 wxString* buf2 = new wxString;
443 buf.Printf("%s%s", dir.c_str() , FilesToRemove->Item(i).c_str() ); 498 buf.Printf("%s%s", dir.c_str() , FilesToRemove->Item(i).c_str() );
444 buf2->Format(_("Deleting %s"), buf.c_str()); 499 buf2->Format(wxT("Deleting %s"), buf.c_str());
445 500
446 if (! progress->Update((i + 1) * 100 / totalfiles, *buf2) ) 501 if (! progress->Update((i + 1) * 100 / totalfiles, *buf2) )
447 { 502 {
448 WARN_DIALOG(_("Cancelled by user"), _("Normal Uninstall")); 503 WARN_DIALOG(wxT("Cancelled by user"), wxT("Normal Uninstall"));
449 delete progress; 504 delete progress;
450 return true; 505 return true;
451 } 506 }
@@ -463,41 +518,41 @@ int Uninstall(const wxString dir, bool isFullUninstall) {
463 518
464 if ( rc = ! wxRmdir(buf) ) 519 if ( rc = ! wxRmdir(buf) )
465 { 520 {
466 buf = buf.Format(_("Can't remove directory %s"), 521 buf = buf.Format(wxT("Can't remove directory %s"),
467 buf.c_str()); 522 buf.c_str());
468 errflag = true; 523 errflag = true;
469 WARN_DIALOG(buf.c_str(), _("Standard uninstall")); 524 WARN_DIALOG(buf.c_str(), wxT("Standard uninstall"));
470 } 525 }
471 } else if (wxFileExists(buf) ) 526 } else if (wxFileExists(buf) )
472 { 527 {
473 if ( rc = ! wxRemoveFile(buf) ) 528 if ( rc = ! wxRemoveFile(buf) )
474 { 529 {
475 buf = buf.Format(_("Can't delete file %s"), 530 buf = buf.Format(wxT("Can't delete file %s"),
476 buf.c_str()); 531 buf.c_str());
477 errflag = true; 532 errflag = true;
478 WARN_DIALOG(buf.c_str(), _("Standard uninstall")); 533 WARN_DIALOG(buf.c_str(), wxT("Standard uninstall"));
479 } 534 }
480 } else 535 } else
481 { 536 {
482 errflag = true; 537 errflag = true;
483 buf = buf.Format(_("Can't find file or directory %s"), 538 buf = buf.Format(wxT("Can't find file or directory %s"),
484 buf.c_str() ); 539 buf.c_str() );
485 WARN_DIALOG(buf.c_str(), _("Standard uninstall") ); 540 WARN_DIALOG(buf.c_str(), wxT("Standard uninstall") );
486 } 541 }
487 542
488 uninst = uninst.AfterFirst('\n'); 543 uninst = uninst.AfterFirst('\n');
489 } 544 }
490 if (errflag) 545 if (errflag)
491 { 546 {
492 ERR_DIALOG(_("Unable to remove some files"), 547 ERR_DIALOG(wxT("Unable to remove some files"),
493 _("Standard uninstall")) ; 548 wxT("Standard uninstall")) ;
494 } 549 }
495 550
496 if (FilesToRemove != NULL) delete FilesToRemove; 551 if (FilesToRemove != NULL) delete FilesToRemove;
497 } 552 }
498 553
499 delete progress; 554 delete progress;
500 wxLogVerbose(_("=== end Uninstall")); 555 wxLogVerbose(wxT("=== end Uninstall"));
501 return errflag; 556 return errflag;
502} 557}
503 558
@@ -553,8 +608,8 @@ bool InstallRbutil(wxString dest)
553 if (! wxMkdir(destdir, 0777) ) 608 if (! wxMkdir(destdir, 0777) )
554 { 609 {
555 buf.Printf(wxT("%s (%s)"), 610 buf.Printf(wxT("%s (%s)"),
556 _("Unable to create directory for installer"), destdir.c_str()); 611 wxT("Unable to create directory for installer"), destdir.c_str());
557 WARN_DIALOG(buf , _("Portable install") ); 612 WARN_DIALOG(buf , wxT("Portable install") );
558 return false; 613 return false;
559 } 614 }
560 log->WriteFile(wxT("RockboxUtility"), true); 615 log->WriteFile(wxT("RockboxUtility"), true);
@@ -564,7 +619,7 @@ bool InstallRbutil(wxString dest)
564 wxDIR_FILES); 619 wxDIR_FILES);
565 if (filestocopy.GetCount() < 1) 620 if (filestocopy.GetCount() < 1)
566 { 621 {
567 WARN_DIALOG(_("No files to copy"), _("Portable install") ); 622 WARN_DIALOG(wxT("No files to copy"), wxT("Portable install") );
568 return false; 623 return false;
569 } 624 }
570 625
@@ -581,8 +636,8 @@ bool InstallRbutil(wxString dest)
581 if (! wxCopyFile(filestocopy[i], dstr) ) 636 if (! wxCopyFile(filestocopy[i], dstr) )
582 { 637 {
583 buf.Printf(wxT("%s (%s -> %s)"), 638 buf.Printf(wxT("%s (%s -> %s)"),
584 _("Error copying file"), filestocopy[i].c_str(), dstr.c_str()); 639 wxT("Error copying file"), filestocopy[i].c_str(), dstr.c_str());
585 WARN_DIALOG(buf, _("Portable Install") ); 640 WARN_DIALOG(buf, wxT("Portable Install") );
586 return false; 641 return false;
587 } 642 }
588 buf = dstr; 643 buf = dstr;
@@ -599,7 +654,7 @@ bool InstallRbutil(wxString dest)
599 { 654 {
600 buf.Printf(wxT("Can't copy program binary %s -> %s"), 655 buf.Printf(wxT("Can't copy program binary %s -> %s"),
601 str.c_str(), dstr.c_str() ); 656 str.c_str(), dstr.c_str() );
602 WARN_DIALOG(buf, _("Portable Install") ); 657 WARN_DIALOG(buf, wxT("Portable Install") );
603 return false; 658 return false;
604 } 659 }
605 buf = dstr; 660 buf = dstr;
@@ -613,9 +668,9 @@ bool InstallRbutil(wxString dest)
613 if (! wxCopyFile(gv->UserConfigFile, dstr) ) 668 if (! wxCopyFile(gv->UserConfigFile, dstr) )
614 { 669 {
615 buf.Printf(wxT("%s (%s -> %s)"), 670 buf.Printf(wxT("%s (%s -> %s)"),
616 _("Unable to install user config file"), gv->UserConfigFile.c_str(), 671 wxT("Unable to install user config file"), gv->UserConfigFile.c_str(),
617 dstr.c_str() ); 672 dstr.c_str() );
618 WARN_DIALOG(buf, _("Portable Install") ); 673 WARN_DIALOG(buf, wxT("Portable Install") );
619 return false; 674 return false;
620 } 675 }
621 buf = dstr; 676 buf = dstr;
@@ -628,7 +683,7 @@ bool InstallRbutil(wxString dest)
628 683
629bool rm_rf(wxString file) 684bool rm_rf(wxString file)
630{ 685{
631 wxLogVerbose(_("=== begin rm-rf(%s)"), file.c_str() ); 686 wxLogVerbose(wxT("=== begin rm-rf(%s)"), file.c_str() );
632 687
633 wxString buf; 688 wxString buf;
634 wxArrayString selected; 689 wxArrayString selected;
@@ -649,8 +704,8 @@ bool rm_rf(wxString file)
649 selected.Sort(true); 704 selected.Sort(true);
650 selected.Add(file); 705 selected.Add(file);
651 706
652 wxProgressDialog* progress = new wxProgressDialog(_("Removing files"), 707 wxProgressDialog* progress = new wxProgressDialog(wxT("Removing files"),
653 _("Deleting files"), selected.GetCount(), NULL, 708 wxT("Deleting files"), selected.GetCount(), NULL,
654 wxPD_APP_MODAL | wxPD_AUTO_HIDE | wxPD_SMOOTH | 709 wxPD_APP_MODAL | wxPD_AUTO_HIDE | wxPD_SMOOTH |
655 wxPD_ELAPSED_TIME | wxPD_REMAINING_TIME | wxPD_CAN_ABORT); 710 wxPD_ELAPSED_TIME | wxPD_REMAINING_TIME | wxPD_CAN_ABORT);
656 711
@@ -659,10 +714,10 @@ bool rm_rf(wxString file)
659 wxLogVerbose(selected[i]); 714 wxLogVerbose(selected[i]);
660 if (progress != NULL) 715 if (progress != NULL)
661 { 716 {
662 buf.Printf(_("Deleting %s"), selected[i].c_str() ); 717 buf.Printf(wxT("Deleting %s"), selected[i].c_str() );
663 if (! progress->Update(i, buf)) 718 if (! progress->Update(i, buf))
664 { 719 {
665 WARN_DIALOG(_("Cancelled by user"), _("Erase Files")); 720 WARN_DIALOG(wxT("Cancelled by user"), wxT("Erase Files"));
666 delete progress; 721 delete progress;
667 return true; 722 return true;
668 } 723 }
@@ -672,27 +727,27 @@ bool rm_rf(wxString file)
672 { 727 {
673 if (rc = ! wxRmdir(selected[i]) ) 728 if (rc = ! wxRmdir(selected[i]) )
674 { 729 {
675 buf.Printf(_("Can't remove directory %s"), 730 buf.Printf(wxT("Can't remove directory %s"),
676 selected[i].c_str()); 731 selected[i].c_str());
677 errflag = true; 732 errflag = true;
678 WARN_DIALOG(buf.c_str(), _("Erase files")); 733 WARN_DIALOG(buf.c_str(), wxT("Erase files"));
679 } 734 }
680 } else if (rc = ! wxRemoveFile(selected[i]) ) 735 } else if (rc = ! wxRemoveFile(selected[i]) )
681 { 736 {
682 buf.Printf(_("Error deleting file %s"), selected[i].c_str() ); 737 buf.Printf(wxT("Error deleting file %s"), selected[i].c_str() );
683 errflag = true; 738 errflag = true;
684 WARN_DIALOG(buf.c_str(),_("Erase files")); 739 WARN_DIALOG(buf.c_str(),wxT("Erase files"));
685 } 740 }
686 } 741 }
687 delete progress; 742 delete progress;
688 } else 743 } else
689 { 744 {
690 buf.Printf(_("Can't find expected file %s"), file.c_str()); 745 buf.Printf(wxT("Can't find expected file %s"), file.c_str());
691 WARN_DIALOG(buf.c_str(), _("Erase files")); 746 WARN_DIALOG(buf.c_str(), wxT("Erase files"));
692 return true; 747 return true;
693 } 748 }
694 749
695 wxLogVerbose(_("=== end rm-rf")); 750 wxLogVerbose(wxT("=== end rm-rf"));
696 return rc ? true : false; 751 return rc ? true : false;
697} 752}
698 753
diff --git a/rbutil/rbutil.h b/rbutil/rbutil.h
index b499f44e18..8d95c1c2d5 100644
--- a/rbutil/rbutil.h
+++ b/rbutil/rbutil.h
@@ -90,6 +90,7 @@ public:
90 wxArrayString plat_bootloadername; 90 wxArrayString plat_bootloadername;
91 wxArrayInt plat_autodetect; 91 wxArrayInt plat_autodetect;
92 wxArrayString plat_combinedname; 92 wxArrayString plat_combinedname;
93 wxArrayString plat_resolution;
93 wxString download_url; 94 wxString download_url;
94 wxString daily_url; 95 wxString daily_url;
95 wxString bleeding_url; 96 wxString bleeding_url;
@@ -98,6 +99,7 @@ public:
98 wxString last_release; 99 wxString last_release;
99 wxString prog_name; 100 wxString prog_name;
100 wxString bootloader_url; 101 wxString bootloader_url;
102 wxString themes_url;
101 103
102 // User configuration data. 104 // User configuration data.
103 wxString curplat; 105 wxString curplat;
@@ -110,6 +112,8 @@ public:
110 wxString curbootloadermethod; 112 wxString curbootloadermethod;
111 wxString curbootloader; 113 wxString curbootloader;
112 wxString curfirmware; 114 wxString curfirmware;
115 wxString curresolution;
116 wxArrayString themesToInstall;
113 117
114 // Global system variables 118 // Global system variables
115 wxFFile* logfile; 119 wxFFile* logfile;
@@ -126,6 +130,8 @@ int DownloadURL(wxString src, wxString dest);
126int UnzipFile(wxString src, wxString destdir, bool isInstall = false); 130int UnzipFile(wxString src, wxString destdir, bool isInstall = false);
127int Uninstall(const wxString dir, bool isFullUninstall = false); 131int Uninstall(const wxString dir, bool isFullUninstall = false);
128bool InstallRbutil(wxString dest); 132bool InstallRbutil(wxString dest);
133bool InstallTheme(wxString src);
134bool checkZip(wxString zipname);
129wxString stream_err_str(int errnum); 135wxString stream_err_str(int errnum);
130bool rm_rf(wxString file); 136bool rm_rf(wxString file);
131 137
diff --git a/rbutil/rbutil.ini b/rbutil/rbutil.ini
index 85cfb653e0..838edfb6d3 100644
--- a/rbutil/rbutil.ini
+++ b/rbutil/rbutil.ini
@@ -7,6 +7,7 @@ font_url=http://www.rockbox.org/daily/fonts/rockbox-fonts-
7last_release=2.5 7last_release=2.5
8prog_name=rockbox 8prog_name=rockbox
9bootloader_url=http://download.rockbox.org/bootloader 9bootloader_url=http://download.rockbox.org/bootloader
10themes_url=http://www.rockbox-themes.org/
10 11
11[platforms] 12[platforms]
12platform1=player 13platform1=player
@@ -44,6 +45,7 @@ bootloadermethod=
44bootloadername= 45bootloadername=
45autodetect=no 46autodetect=no
46combinedname= 47combinedname=
48resolution=11x2x1
47 49
48[recorder] 50[recorder]
49name=Archos Jukebox Recorder 10, 20 51name=Archos Jukebox Recorder 10, 20
@@ -54,6 +56,7 @@ bootloadermethod=
54bootloadername= 56bootloadername=
55autodetect=no 57autodetect=no
56combinedname= 58combinedname=
59resolution=112x64x1
57 60
58[recorder8mb] 61[recorder8mb]
59name=Archos Jukebox Recorder 10, 20 (with 8mb memory) 62name=Archos Jukebox Recorder 10, 20 (with 8mb memory)
@@ -64,6 +67,7 @@ bootloadermethod=
64bootloadername= 67bootloadername=
65autodetect=no 68autodetect=no
66combinedname= 69combinedname=
70resolution=112x64x1
67 71
68[recorderv2] 72[recorderv2]
69name=Archos Jukebox Recorder v2 (20GB) 73name=Archos Jukebox Recorder v2 (20GB)
@@ -74,6 +78,7 @@ bootloadermethod=
74bootloadername= 78bootloadername=
75autodetect=no 79autodetect=no
76combinedname= 80combinedname=
81resolution=112x64x1
77 82
78[fmrecorder] 83[fmrecorder]
79name=Archos Jukebox Recorder FM 84name=Archos Jukebox Recorder FM
@@ -84,6 +89,7 @@ bootloadermethod=
84bootloadername= 89bootloadername=
85autodetect=no 90autodetect=no
86combinedname= 91combinedname=
92resolution=112x64x1
87 93
88[fmrecorder8mb] 94[fmrecorder8mb]
89name=Archos Jukebox Recorder FM (with 8mb memory) 95name=Archos Jukebox Recorder FM (with 8mb memory)
@@ -94,6 +100,7 @@ bootloadermethod=
94bootloadername= 100bootloadername=
95autodetect=no 101autodetect=no
96combinedname= 102combinedname=
103resolution=112x64x1
97 104
98[ondiosp] 105[ondiosp]
99name=Archos Ondio SP 106name=Archos Ondio SP
@@ -104,6 +111,7 @@ bootloadermethod=
104bootloadername= 111bootloadername=
105autodetect=no 112autodetect=no
106combinedname= 113combinedname=
114resolution=112x64x1
107 115
108[ondiofm] 116[ondiofm]
109name=Archos Ondio FM 117name=Archos Ondio FM
@@ -114,6 +122,7 @@ bootloadermethod=
114bootloadername= 122bootloadername=
115autodetect=no 123autodetect=no
116combinedname= 124combinedname=
125resolution=112x64x1
117 126
118[h100] 127[h100]
119name=Iriver iHP100, iHP110 128name=Iriver iHP100, iHP110
@@ -124,6 +133,7 @@ bootloadermethod=fwpatcher
124bootloadername=bootloader-h100.bin 133bootloadername=bootloader-h100.bin
125autodetect=no 134autodetect=no
126combinedname= 135combinedname=
136resolution=160x128x2
127 137
128[h120] 138[h120]
129name=Iriver iHP120, iHP140, H120, H140 139name=Iriver iHP120, iHP140, H120, H140
@@ -134,6 +144,7 @@ bootloadermethod=fwpatcher
134bootloadername=bootloader-h120.bin 144bootloadername=bootloader-h120.bin
135autodetect=no 145autodetect=no
136combinedname= 146combinedname=
147resolution=160x128x2
137 148
138[h300] 149[h300]
139name=Iriver H320, H340 150name=Iriver H320, H340
@@ -144,9 +155,10 @@ bootloadermethod=fwpatcher
144bootloadername=bootloader-h300.bin 155bootloadername=bootloader-h300.bin
145autodetect=no 156autodetect=no
146combinedname= 157combinedname=
158resolution=220x176x16
147 159
148[h10_5gbums] 160[h10_5gbums]
149name=Iriver H10 (5GB) UMS 161name=Iriver H10 (5/6GB) UMS
150platform=h10_5gb 162platform=h10_5gb
151released=no 163released=no
152needsbootloader=yes 164needsbootloader=yes
@@ -154,9 +166,10 @@ bootloadermethod=h10
154bootloadername=H10.mi4 166bootloadername=H10.mi4
155autodetect=no 167autodetect=no
156combinedname= 168combinedname=
169resolution=128x128x16
157 170
158[h10_5gbmtp] 171[h10_5gbmtp]
159name=Iriver H10 (5GB) MTP 172name=Iriver H10 (5/6GB) MTP
160platform=h10_5gb 173platform=h10_5gb
161released=no 174released=no
162needsbootloader=yes 175needsbootloader=yes
@@ -164,6 +177,7 @@ bootloadermethod=h10
164bootloadername=H10_5GB-MTP/H10.mi4 177bootloadername=H10_5GB-MTP/H10.mi4
165autodetect=no 178autodetect=no
166combinedname= 179combinedname=
180resolution=128x128x16
167 181
168[h10] 182[h10]
169name=Iriver H10 (20GB) 183name=Iriver H10 (20GB)
@@ -174,6 +188,7 @@ bootloadermethod=h10
174bootloadername=H10_20GC.mi4 188bootloadername=H10_20GC.mi4
175autodetect=no 189autodetect=no
176combinedname= 190combinedname=
191resolution=160x128x16
177 192
178[ipodcolor] 193[ipodcolor]
179name=Apple Ipod Colour/Photo/U2 (4th gen) 194name=Apple Ipod Colour/Photo/U2 (4th gen)
@@ -184,6 +199,7 @@ bootloadermethod=ipodpatcher
184bootloadername=none 199bootloadername=none
185autodetect=yes 200autodetect=yes
186combinedname=Ipod mini 1g, mini 2g, 3g, 4g, color, video, nano 1g 201combinedname=Ipod mini 1g, mini 2g, 3g, 4g, color, video, nano 1g
202resolution=220x176x16
187 203
188[ipodnano] 204[ipodnano]
189name=Apple Ipod Nano (1st gen) 205name=Apple Ipod Nano (1st gen)
@@ -194,6 +210,7 @@ bootloadermethod=ipodpatcher
194bootloadername=none 210bootloadername=none
195autodetect=yes 211autodetect=yes
196combinedname=Ipod mini 1g, mini 2g, 3g, 4g, color, video, nano 1g 212combinedname=Ipod mini 1g, mini 2g, 3g, 4g, color, video, nano 1g
213resolution=176x132x16
197 214
198[ipod4gray] 215[ipod4gray]
199name=Apple Ipod (4th gen, greyscale) 216name=Apple Ipod (4th gen, greyscale)
@@ -204,6 +221,7 @@ bootloadermethod=ipodpatcher
204bootloadername=none 221bootloadername=none
205autodetect=yes 222autodetect=yes
206combinedname=Ipod mini 1g, mini 2g, 3g, 4g, color, video, nano 1g 223combinedname=Ipod mini 1g, mini 2g, 3g, 4g, color, video, nano 1g
224resolution=160x128x2
207 225
208[ipodvideo] 226[ipodvideo]
209name=Apple Ipod Video (5th gen) 227name=Apple Ipod Video (5th gen)
@@ -214,6 +232,7 @@ bootloadermethod=ipodpatcher
214bootloadername=none 232bootloadername=none
215autodetect=yes 233autodetect=yes
216combinedname=Ipod mini 1g, mini 2g, 3g, 4g, color, video, nano 1g 234combinedname=Ipod mini 1g, mini 2g, 3g, 4g, color, video, nano 1g
235resolution=320x240x16
217 236
218[ipod3g] 237[ipod3g]
219name=Apple Ipod (3rd gen) 238name=Apple Ipod (3rd gen)
@@ -224,6 +243,7 @@ bootloadermethod=ipodpatcher
224bootloadername=none 243bootloadername=none
225autodetect=yes 244autodetect=yes
226combinedname=Ipod mini 1g, mini 2g, 3g, 4g, color, video, nano 1g 245combinedname=Ipod mini 1g, mini 2g, 3g, 4g, color, video, nano 1g
246resolution=160x128x2
227 247
228[ipodmini1g] 248[ipodmini1g]
229name=Apple Ipod Mini (1st gen) 249name=Apple Ipod Mini (1st gen)
@@ -234,6 +254,7 @@ bootloadermethod=ipodpatcher
234bootloadername=none 254bootloadername=none
235autodetect=yes 255autodetect=yes
236combinedname=Ipod mini 1g, mini 2g, 3g, 4g, color, video, nano 1g 256combinedname=Ipod mini 1g, mini 2g, 3g, 4g, color, video, nano 1g
257resolution=138x110x2
237 258
238[ipodmini2g] 259[ipodmini2g]
239name=Apple Ipod Mini (2nd gen) 260name=Apple Ipod Mini (2nd gen)
@@ -244,6 +265,7 @@ bootloadermethod=ipodpatcher
244bootloadername=none 265bootloadername=none
245autodetect=yes 266autodetect=yes
246combinedname=Ipod mini 1g, mini 2g, 3g, 4g, color, video, nano 1g 267combinedname=Ipod mini 1g, mini 2g, 3g, 4g, color, video, nano 1g
268resolution=138x110x2
247 269
248[iaudiox5] 270[iaudiox5]
249name=Cowon iAudio X5 , X5L 271name=Cowon iAudio X5 , X5L
@@ -254,6 +276,7 @@ bootloadermethod=iaudio
254bootloadername=x5_fw.bin 276bootloadername=x5_fw.bin
255autodetect=no 277autodetect=no
256combinedname= 278combinedname=
279resolution=160x128x16
257 280
258[iaudiox5v] 281[iaudiox5v]
259name=Cowon iAudio X5V 282name=Cowon iAudio X5V
@@ -264,6 +287,7 @@ bootloadermethod=iaudio
264bootloadername=x5v_fw.bin 287bootloadername=x5v_fw.bin
265autodetect=no 288autodetect=no
266combinedname= 289combinedname=
290resolution=160x128x2
267 291
268[iaudiom5] 292[iaudiom5]
269name=Cowon iAudio M5 , M5L 293name=Cowon iAudio M5 , M5L
@@ -274,6 +298,7 @@ bootloadermethod=iaudio
274bootloadername=m5_fw.bin 298bootloadername=m5_fw.bin
275autodetect=no 299autodetect=no
276combinedname= 300combinedname=
301resolution=160x128x16
277 302
278[gigabeatf] 303[gigabeatf]
279name=Toshiba Gigabeat F , X 304name=Toshiba Gigabeat F , X
@@ -283,3 +308,4 @@ bootloadermethod=gigabeatf
283bootloadername=FWIMG01.DAT 308bootloadername=FWIMG01.DAT
284autodetect=no 309autodetect=no
285combinedname= 310combinedname=
311resolution=240x320x16
diff --git a/rbutil/rbutilApp.cpp b/rbutil/rbutilApp.cpp
index c30e5b4aaa..436e4ca0cb 100644
--- a/rbutil/rbutilApp.cpp
+++ b/rbutil/rbutilApp.cpp
@@ -27,7 +27,7 @@ IMPLEMENT_APP(rbutilFrmApp)
27 27
28bool rbutilFrmApp::OnInit() 28bool rbutilFrmApp::OnInit()
29{ 29{
30 wxString buf = ""; 30 wxString buf = wxT("");
31 31
32 wxLogVerbose(wxT("=== begin rbutilFrmApp::Oninit()")); 32 wxLogVerbose(wxT("=== begin rbutilFrmApp::Oninit()"));
33 33
@@ -48,7 +48,7 @@ bool rbutilFrmApp::OnInit()
48 wxLogNull lognull; 48 wxLogNull lognull;
49 if (! wxMkdir(buf, 0777)) 49 if (! wxMkdir(buf, 0777))
50 { 50 {
51 wxLogFatalError(_("Can't create data directory %s"), 51 wxLogFatalError(wxT("Can't create data directory %s"),
52 buf.c_str()); 52 buf.c_str());
53 } 53 }
54 } 54 }
@@ -56,7 +56,7 @@ bool rbutilFrmApp::OnInit()
56 buf += wxT(PATH_SEP "rbutil.log"); 56 buf += wxT(PATH_SEP "rbutil.log");
57 gv->logfile = new wxFFile(buf, "w"); 57 gv->logfile = new wxFFile(buf, "w");
58 if (! gv->logfile->IsOpened() ) 58 if (! gv->logfile->IsOpened() )
59 wxLogFatalError(_("Unable to open log file")); 59 wxLogFatalError(wxT("Unable to open log file"));
60 60
61 gv->loggui = new wxLogGui(); 61 gv->loggui = new wxLogGui();
62 gv->loggui->SetActiveTarget(gv->loggui); 62 gv->loggui->SetActiveTarget(gv->loggui);
@@ -73,7 +73,7 @@ bool rbutilFrmApp::OnInit()
73 73
74 if (!ReadGlobalConfig(NULL)) 74 if (!ReadGlobalConfig(NULL))
75 { 75 {
76 ERR_DIALOG(gv->ErrStr->GetData(), _("Rockbox Utility")); 76 ERR_DIALOG(gv->ErrStr->GetData(), wxT("Rockbox Utility"));
77 return FALSE; 77 return FALSE;
78 } 78 }
79 ReadUserConfig(); 79 ReadUserConfig();
@@ -83,6 +83,8 @@ bool rbutilFrmApp::OnInit()
83 myFrame->Show(TRUE); 83 myFrame->Show(TRUE);
84 84
85 initIpodpatcher(); // reserve mem for ipodpatcher 85 initIpodpatcher(); // reserve mem for ipodpatcher
86 wxInitAllImageHandlers(); //init Image handlers
87
86 wxLogVerbose(wxT("=== end rbUtilFrmApp::OnInit()")); 88 wxLogVerbose(wxT("=== end rbUtilFrmApp::OnInit()"));
87 return TRUE; 89 return TRUE;
88} 90}
@@ -136,7 +138,7 @@ bool rbutilFrmApp::ReadGlobalConfig(rbutilFrm* myFrame)
136 wxFileInputStream* cfgis = new wxFileInputStream(buf); 138 wxFileInputStream* cfgis = new wxFileInputStream(buf);
137 139
138 if (!cfgis->CanRead()) { 140 if (!cfgis->CanRead()) {
139 gv->ErrStr = new wxString(_("Unable to open configuration file")); 141 gv->ErrStr = new wxString(wxT("Unable to open configuration file"));
140 return false; 142 return false;
141 } 143 }
142 144
@@ -175,6 +177,9 @@ bool rbutilFrmApp::ReadGlobalConfig(rbutilFrm* myFrame)
175 gv->GlobalConfig->Read(buf.Format(wxT("/%s/combinedname"), 177 gv->GlobalConfig->Read(buf.Format(wxT("/%s/combinedname"),
176 cur.c_str()), &tmpstr); 178 cur.c_str()), &tmpstr);
177 gv->plat_combinedname.Add(tmpstr); 179 gv->plat_combinedname.Add(tmpstr);
180 gv->GlobalConfig->Read(buf.Format(wxT("/%s/resolution"),
181 cur.c_str()), &tmpstr);
182 gv->plat_resolution.Add(tmpstr);
178 183
179 i++; 184 i++;
180 } 185 }
@@ -210,6 +215,9 @@ bool rbutilFrmApp::ReadGlobalConfig(rbutilFrm* myFrame)
210 gv->GlobalConfig->Read(wxT("bootloader_url"), &tmpstr); 215 gv->GlobalConfig->Read(wxT("bootloader_url"), &tmpstr);
211 gv->bootloader_url = tmpstr; 216 gv->bootloader_url = tmpstr;
212 217
218 gv->GlobalConfig->Read(wxT("themes_url"), &tmpstr);
219 gv->themes_url = tmpstr;
220
213#ifdef __WXMSW__ 221#ifdef __WXMSW__
214 gv->curdestdir = wxT("D:\\"); 222 gv->curdestdir = wxT("D:\\");
215#else 223#else
diff --git a/rbutil/rbutilFrm.cpp b/rbutil/rbutilFrm.cpp
index c90930c47a..35c34e8dc2 100644
--- a/rbutil/rbutilFrm.cpp
+++ b/rbutil/rbutilFrm.cpp
@@ -27,6 +27,8 @@
27#include "fonts_3d.xpm" 27#include "fonts_3d.xpm"
28#include "tools2_3d.xpm" 28#include "tools2_3d.xpm"
29#include "rblogo.xpm" 29#include "rblogo.xpm"
30#include "untools2_3d.xpm"
31#include "themes_3d.xpm"
30 32
31#include "bootloaders.h" 33#include "bootloaders.h"
32 34
@@ -40,6 +42,7 @@ BEGIN_EVENT_TABLE(rbutilFrm,wxFrame)
40 EVT_BUTTON (ID_INSTALL_BTN, rbutilFrm::OnInstallBtn) 42 EVT_BUTTON (ID_INSTALL_BTN, rbutilFrm::OnInstallBtn)
41 EVT_BUTTON (ID_REMOVE_BTN, rbutilFrm::OnRemoveBtn) 43 EVT_BUTTON (ID_REMOVE_BTN, rbutilFrm::OnRemoveBtn)
42 EVT_BUTTON (ID_FONT_BTN, rbutilFrm::OnFontBtn) 44 EVT_BUTTON (ID_FONT_BTN, rbutilFrm::OnFontBtn)
45 EVT_BUTTON (ID_THEMES_BTN, rbutilFrm::OnThemesBtn)
43 EVT_BUTTON (ID_BOOTLOADER_BTN, rbutilFrm::OnBootloaderBtn) 46 EVT_BUTTON (ID_BOOTLOADER_BTN, rbutilFrm::OnBootloaderBtn)
44 EVT_BUTTON (ID_BOOTLOADERREMOVE_BTN, rbutilFrm::OnBootloaderRemoveBtn) 47 EVT_BUTTON (ID_BOOTLOADERREMOVE_BTN, rbutilFrm::OnBootloaderRemoveBtn)
45 48
@@ -83,7 +86,7 @@ void rbutilFrm::CreateGUIControls(void)
83 WxBoxSizer2->Add(WxStaticBitmap1,0,wxALIGN_CENTER_HORIZONTAL | wxALL,5); 86 WxBoxSizer2->Add(WxStaticBitmap1,0,wxALIGN_CENTER_HORIZONTAL | wxALL,5);
84 87
85 wxStaticBox* WxStaticBoxSizer3_StaticBoxObj = new wxStaticBox(WxPanel1, 88 wxStaticBox* WxStaticBoxSizer3_StaticBoxObj = new wxStaticBox(WxPanel1,
86 wxID_ANY, _("Please choose an option")); 89 wxID_ANY, wxT("Please choose an option"));
87 wxStaticBoxSizer* WxStaticBoxSizer3 = 90 wxStaticBoxSizer* WxStaticBoxSizer3 =
88 new wxStaticBoxSizer(WxStaticBoxSizer3_StaticBoxObj,wxHORIZONTAL); 91 new wxStaticBoxSizer(WxStaticBoxSizer3_StaticBoxObj,wxHORIZONTAL);
89 WxBoxSizer2->Add(WxStaticBoxSizer3,1,wxALIGN_CENTER_HORIZONTAL | wxALL, 5); 92 WxBoxSizer2->Add(WxStaticBoxSizer3,1,wxALIGN_CENTER_HORIZONTAL | wxALL, 5);
@@ -95,13 +98,13 @@ void rbutilFrm::CreateGUIControls(void)
95 WxBitmapButton4 = new wxBitmapButton(WxPanel1, ID_BOOTLOADER_BTN, 98 WxBitmapButton4 = new wxBitmapButton(WxPanel1, ID_BOOTLOADER_BTN,
96 BootloaderInstallButton, wxPoint(0,0), wxSize(64,54), 99 BootloaderInstallButton, wxPoint(0,0), wxSize(64,54),
97 wxRAISED_BORDER | wxBU_AUTODRAW); 100 wxRAISED_BORDER | wxBU_AUTODRAW);
98 WxBitmapButton4->SetToolTip(_("Instructions for installing the " 101 WxBitmapButton4->SetToolTip(wxT("Instructions for installing the "
99 "Rockbox bootloader on your audio device")); 102 "Rockbox bootloader on your audio device"));
100 WxFlexGridSizer1->Add(WxBitmapButton4, 0, 103 WxFlexGridSizer1->Add(WxBitmapButton4, 0,
101 wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxALL,5); 104 wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxALL,5);
102 105
103 wxStaticText* WxStaticText5 = new wxStaticText(WxPanel1, wxID_ANY, 106 wxStaticText* WxStaticText5 = new wxStaticText(WxPanel1, wxID_ANY,
104 _("Bootloader installation instructions\n\n" 107 wxT("Bootloader installation instructions\n\n"
105 "Before Rockbox can be installed on your audio player, you " 108 "Before Rockbox can be installed on your audio player, you "
106 "may have to\ninstall a bootloader. This can not currently " 109 "may have to\ninstall a bootloader. This can not currently "
107 "be done automatically, but is\nonly necessary the first time " 110 "be done automatically, but is\nonly necessary the first time "
@@ -114,12 +117,12 @@ void rbutilFrm::CreateGUIControls(void)
114 WxBitmapButton1_BITMAP, wxPoint(0,0), wxSize(64,54), 117 WxBitmapButton1_BITMAP, wxPoint(0,0), wxSize(64,54),
115 wxRAISED_BORDER | wxBU_AUTODRAW, wxDefaultValidator, 118 wxRAISED_BORDER | wxBU_AUTODRAW, wxDefaultValidator,
116 wxT("WxBitmapButton1")); 119 wxT("WxBitmapButton1"));
117 WxBitmapButton1->SetToolTip(_("Install Rockbox")); 120 WxBitmapButton1->SetToolTip(wxT("Install Rockbox"));
118 WxFlexGridSizer1->Add(WxBitmapButton1,0, 121 WxFlexGridSizer1->Add(WxBitmapButton1,0,
119 wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxALL,5); 122 wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxALL,5);
120 123
121 WxStaticText2 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT2, 124 WxStaticText2 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT2,
122 _("Install Rockbox on your audio player")); 125 wxT("Install Rockbox on your audio player"));
123 WxFlexGridSizer1->Add(WxStaticText2,0, 126 WxFlexGridSizer1->Add(WxStaticText2,0,
124 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL,5); 127 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL,5);
125 128
@@ -127,13 +130,13 @@ void rbutilFrm::CreateGUIControls(void)
127 WxBitmapButton3 = new wxBitmapButton(WxPanel1, ID_FONT_BTN, 130 WxBitmapButton3 = new wxBitmapButton(WxPanel1, ID_FONT_BTN,
128 FontInstallButton, wxPoint(0,0), wxSize(64,54), 131 FontInstallButton, wxPoint(0,0), wxSize(64,54),
129 wxRAISED_BORDER | wxBU_AUTODRAW); 132 wxRAISED_BORDER | wxBU_AUTODRAW);
130 WxBitmapButton3->SetToolTip(_("Download the most up to date " 133 WxBitmapButton3->SetToolTip(wxT("Download the most up to date "
131 "Rockbox fonts.")); 134 "Rockbox fonts."));
132 WxFlexGridSizer1->Add(WxBitmapButton3, 0, 135 WxFlexGridSizer1->Add(WxBitmapButton3, 0,
133 wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxALL,5); 136 wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxALL,5);
134 137
135 wxStaticText* WxStaticText4 = new wxStaticText(WxPanel1, wxID_ANY, 138 wxStaticText* WxStaticText4 = new wxStaticText(WxPanel1, wxID_ANY,
136 _("Install the Rockbox fonts package\n\n" 139 wxT("Install the Rockbox fonts package\n\n"
137 "This step is only needed if you have installed " 140 "This step is only needed if you have installed "
138 "a daily build and want\nthe full set of Rockbox fonts. You " 141 "a daily build and want\nthe full set of Rockbox fonts. You "
139 "will not need to download these\nagain unless you uninstall " 142 "will not need to download these\nagain unless you uninstall "
@@ -141,48 +144,62 @@ void rbutilFrm::CreateGUIControls(void)
141 WxFlexGridSizer1->Add(WxStaticText4, 0, 144 WxFlexGridSizer1->Add(WxStaticText4, 0,
142 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL,5); 145 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL,5);
143 146
147
148 wxBitmap ThemesInstallButton (themes_3d_xpm);
149 WxBitmapButton5 = new wxBitmapButton(WxPanel1, ID_THEMES_BTN,
150 ThemesInstallButton, wxPoint(0,0), wxSize(64,54),
151 wxRAISED_BORDER | wxBU_AUTODRAW);
152 WxBitmapButton5->SetToolTip(wxT("Download other Themes for Rockbox."));
153 WxFlexGridSizer1->Add(WxBitmapButton5, 0,
154 wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxALL,5);
155
156 wxStaticText* WxStaticText6 = new wxStaticText(WxPanel1, wxID_ANY,
157 wxT("Install more Themes for Rockbox.\n\n"));
158 WxFlexGridSizer1->Add(WxStaticText6, 0,
159 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL,5);
160
144 wxBitmap WxBitmapButton2_BITMAP (uninstall_3d_xpm); 161 wxBitmap WxBitmapButton2_BITMAP (uninstall_3d_xpm);
145 WxBitmapButton2 = new wxBitmapButton(WxPanel1, ID_REMOVE_BTN, 162 WxBitmapButton2 = new wxBitmapButton(WxPanel1, ID_REMOVE_BTN,
146 WxBitmapButton2_BITMAP, wxPoint(0,0), wxSize(64,54), 163 WxBitmapButton2_BITMAP, wxPoint(0,0), wxSize(64,54),
147 wxRAISED_BORDER | wxBU_AUTODRAW, wxDefaultValidator, 164 wxRAISED_BORDER | wxBU_AUTODRAW, wxDefaultValidator,
148 wxT("WxBitmapButton2")); 165 wxT("WxBitmapButton2"));
149 WxBitmapButton2->SetToolTip(_("Uninstall Rockbox")); 166 WxBitmapButton2->SetToolTip(wxT("Uninstall Rockbox"));
150 WxFlexGridSizer1->Add(WxBitmapButton2,0, 167 WxFlexGridSizer1->Add(WxBitmapButton2,0,
151 wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxALL,5); 168 wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxALL,5);
152 169
153 WxStaticText3 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT3, 170 WxStaticText3 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT3,
154 _("Remove Rockbox from your audio player")); 171 wxT("Remove Rockbox from your audio player"));
155 WxFlexGridSizer1->Add(WxStaticText3,0, 172 WxFlexGridSizer1->Add(WxStaticText3,0,
156 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL,5); 173 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL,5);
157 174
158 wxBitmap WxBitmapButton4_BITMAP (uninstall_3d_xpm); 175 wxBitmap WxBitmapButton4_BITMAP (untools2_3d_xpm);
159 WxBitmapButton4 = new wxBitmapButton(WxPanel1, ID_BOOTLOADERREMOVE_BTN, 176 WxBitmapButton4 = new wxBitmapButton(WxPanel1, ID_BOOTLOADERREMOVE_BTN,
160 WxBitmapButton4_BITMAP, wxPoint(0,0), wxSize(64,54), 177 WxBitmapButton4_BITMAP, wxPoint(0,0), wxSize(64,54),
161 wxRAISED_BORDER | wxBU_AUTODRAW, wxDefaultValidator, 178 wxRAISED_BORDER | wxBU_AUTODRAW, wxDefaultValidator,
162 wxT("WxBitmapButton4")); 179 wxT("WxBitmapButton4"));
163 WxBitmapButton4->SetToolTip(_("Uninstall Bootloader")); 180 WxBitmapButton4->SetToolTip(wxT("Uninstall Bootloader"));
164 WxFlexGridSizer1->Add(WxBitmapButton4,0, 181 WxFlexGridSizer1->Add(WxBitmapButton4,0,
165 wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxALL,5); 182 wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxALL,5);
166 183
167 WxStaticText4 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT4, 184 WxStaticText4 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT4,
168 _("Remove Rockbox Bootloader from your audio player")); 185 wxT("Remove Rockbox Bootloader from your audio player"));
169 WxFlexGridSizer1->Add(WxStaticText4,0, 186 WxFlexGridSizer1->Add(WxStaticText4,0,
170 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL,5); 187 wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL,5);
171 188
172 WxMenuBar1 = new wxMenuBar(); 189 WxMenuBar1 = new wxMenuBar();
173 wxMenu *ID_FILE_MENU_Mnu_Obj = new wxMenu(0); 190 wxMenu *ID_FILE_MENU_Mnu_Obj = new wxMenu(0);
174 WxMenuBar1->Append(ID_FILE_MENU_Mnu_Obj, _("&File")); 191 WxMenuBar1->Append(ID_FILE_MENU_Mnu_Obj, wxT("&File"));
175 192
176 ID_FILE_MENU_Mnu_Obj->Append(ID_FILE_WIPECACHE, 193 ID_FILE_MENU_Mnu_Obj->Append(ID_FILE_WIPECACHE,
177 _("&Empty local download cache"), wxT(""), wxITEM_NORMAL); 194 wxT("&Empty local download cache"), wxT(""), wxITEM_NORMAL);
178 if (! gv->portable ) 195 if (! gv->portable )
179 { 196 {
180 ID_FILE_MENU_Mnu_Obj->Append(ID_PORTABLE_INSTALL, 197 ID_FILE_MENU_Mnu_Obj->Append(ID_PORTABLE_INSTALL,
181 _("&Install Rockbox Utility on device"), wxT(""), wxITEM_NORMAL); 198 wxT("&Install Rockbox Utility on device"), wxT(""), wxITEM_NORMAL);
182 } 199 }
183 ID_FILE_MENU_Mnu_Obj->Append(ID_FILE_ABOUT, _("&About"), wxT(""), 200 ID_FILE_MENU_Mnu_Obj->Append(ID_FILE_ABOUT, wxT("&About"), wxT(""),
184 wxITEM_NORMAL); 201 wxITEM_NORMAL);
185 ID_FILE_MENU_Mnu_Obj->Append(ID_FILE_EXIT, _("E&xit\tCtrl+X"), wxT(""), 202 ID_FILE_MENU_Mnu_Obj->Append(ID_FILE_EXIT, wxT("E&xit\tCtrl+X"), wxT(""),
186 wxITEM_NORMAL); 203 wxITEM_NORMAL);
187 204
188 this->SetMenuBar(WxMenuBar1); 205 this->SetMenuBar(WxMenuBar1);
@@ -191,24 +208,24 @@ void rbutilFrm::CreateGUIControls(void)
191 GetSizer()->SetSizeHints(this); 208 GetSizer()->SetSizeHints(this);
192 if (gv->portable) 209 if (gv->portable)
193 { 210 {
194 this->SetTitle(_("Rockbox Utility (portable)")); 211 this->SetTitle(wxT("Rockbox Utility (portable)"));
195 } else 212 } else
196 { 213 {
197 this->SetTitle(_("Rockbox Utility")); 214 this->SetTitle(wxT("Rockbox Utility"));
198 } 215 }
199 this->Center(); 216 this->Center();
200 wxIcon rbutilFrm_ICON (rbutilFrm_XPM); 217 wxIcon rbutilFrm_ICON (rbutilFrm_XPM);
201 this->SetIcon(rbutilFrm_XPM); 218 this->SetIcon(rbutilFrm_XPM);
202 this->SetToolTip(wxT("Install Rockbox")); 219 this->SetToolTip(wxT("Install Rockbox"));
203 220
204 wxLogVerbose("=== end rbutilFrm::CreateGUIControls"); 221 wxLogVerbose(wxT("=== end rbutilFrm::CreateGUIControls"));
205} 222}
206 223
207void rbutilFrm::rbutilFrmClose(wxCloseEvent& event) 224void rbutilFrm::rbutilFrmClose(wxCloseEvent& event)
208{ 225{
209 wxLogVerbose("=== begin rbutilFrm::rbutilFrmClose(event)"); 226 wxLogVerbose(wxT("=== begin rbutilFrm::rbutilFrmClose(event)"));
210 Destroy(); 227 Destroy();
211 wxLogVerbose("=== end rbutilFrm::rbutilFrmClose"); 228 wxLogVerbose(wxT("=== end rbutilFrm::rbutilFrmClose"));
212} 229}
213 230
214 231
@@ -217,9 +234,9 @@ void rbutilFrm::rbutilFrmClose(wxCloseEvent& event)
217 */ 234 */
218void rbutilFrm::OnFileExit(wxCommandEvent& event) 235void rbutilFrm::OnFileExit(wxCommandEvent& event)
219{ 236{
220 wxLogVerbose("=== begin rbutilFrm::OnFileExit(event)"); 237 wxLogVerbose(wxT("=== begin rbutilFrm::OnFileExit(event)"));
221 Close(); 238 Close();
222 wxLogVerbose("=== end rbutilFrm::OnFileExit"); 239 wxLogVerbose(wxT("=== end rbutilFrm::OnFileExit"));
223} 240}
224 241
225// The routines this code uses are in the wxWidgets documentation, but 242// The routines this code uses are in the wxWidgets documentation, but
@@ -230,11 +247,11 @@ void rbutilFrm::OnFileAbout(wxCommandEvent& event)
230/* 247/*
231 wxAboutDialogInfo *info = new wxAboutDialogInfo(); 248 wxAboutDialogInfo *info = new wxAboutDialogInfo();
232 249
233 info->SetName(_(RBUTIL_FULLNAME)); 250 info->SetName(wxT(RBUTIL_FULLNAME));
234 info->SetVersion(_(RBUTIL_VERSION)); 251 info->SetVersion(wxT(RBUTIL_VERSION));
235 info->SetCopyright(_(RBUTIL_COPYRIGHT)); 252 info->SetCopyright(wxT(RBUTIL_COPYRIGHT));
236 info->SetDescription(_(RBUTIL_DESCRIPTION)); 253 info->SetDescription(wxT(RBUTIL_DESCRIPTION));
237 info->SetWebSite(_(RBUTIL_WEBSITE)); 254 info->SetWebSite(wxT(RBUTIL_WEBSITE));
238 255
239 long i = 0; 256 long i = 0;
240 while (rbutil_developers[i] != "") 257 while (rbutil_developers[i] != "")
@@ -256,8 +273,8 @@ void rbutilFrm::OnFileWipeCache(wxCommandEvent& event)
256 datadir = gv->stdpaths->GetUserDataDir(); 273 datadir = gv->stdpaths->GetUserDataDir();
257 if (datadir == "") 274 if (datadir == "")
258 { 275 {
259 ERR_DIALOG(_("Can't locate user data directory. Unable to delete " 276 ERR_DIALOG(wxT("Can't locate user data directory. Unable to delete "
260 "cache."), _("Delete download cache.") ); 277 "cache."), wxT("Delete download cache.") );
261 return; 278 return;
262 } 279 }
263 280
@@ -266,13 +283,13 @@ void rbutilFrm::OnFileWipeCache(wxCommandEvent& event)
266 283
267 if (! rm_rf(cacheloc) ) 284 if (! rm_rf(cacheloc) )
268 { 285 {
269 wxMessageDialog* msg = new wxMessageDialog(this, _("Local download cache has been deleted.") 286 wxMessageDialog* msg = new wxMessageDialog(this, wxT("Local download cache has been deleted.")
270 ,"Cache deletion", wxOK |wxICON_INFORMATION); 287 ,"Cache deletion", wxOK |wxICON_INFORMATION);
271 msg->ShowModal(); 288 msg->ShowModal();
272 delete msg; 289 delete msg;
273 } 290 }
274 else { 291 else {
275 MESG_DIALOG(_("Errors occured deleting the local download cache.")); 292 MESG_DIALOG(wxT("Errors occured deleting the local download cache."));
276 } 293 }
277 294
278 wxMkdir(cacheloc, 0777); 295 wxMkdir(cacheloc, 0777);
@@ -280,10 +297,10 @@ void rbutilFrm::OnFileWipeCache(wxCommandEvent& event)
280 297
281void rbutilFrm::OnBootloaderRemoveBtn(wxCommandEvent& event) 298void rbutilFrm::OnBootloaderRemoveBtn(wxCommandEvent& event)
282{ 299{
283 wxLogVerbose("=== begin rbutilFrm::OnBootloaderRemoveBtn(event)"); 300 wxLogVerbose(wxT("=== begin rbutilFrm::OnBootloaderRemoveBtn(event)"));
284 301
285 wxWizard *wizard = new wxWizard(this, wxID_ANY, 302 wxWizard *wizard = new wxWizard(this, wxID_ANY,
286 _("Rockbox Bootloader Uninstallation Wizard"), 303 wxT("Rockbox Bootloader Uninstallation Wizard"),
287 wxBitmap(wizard_xpm), 304 wxBitmap(wizard_xpm),
288 wxDefaultPosition, 305 wxDefaultPosition,
289 wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER); 306 wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER);
@@ -302,83 +319,83 @@ void rbutilFrm::OnBootloaderRemoveBtn(wxCommandEvent& event)
302 if (wizard->RunWizard(page1) ) 319 if (wizard->RunWizard(page1) )
303 { 320 {
304 // uninstall the bootloader 321 // uninstall the bootloader
305 if(gv->curbootloadermethod == "ipodpatcher") 322 if(gv->curbootloadermethod == wxT("ipodpatcher"))
306 { 323 {
307 324
308 if(ipodpatcher(BOOTLOADER_REM)) 325 if(ipodpatcher(BOOTLOADER_REM))
309 { 326 {
310 wxMessageDialog* msg = new wxMessageDialog(this, _("The Bootloader has been uninstalled.") 327 wxMessageDialog* msg = new wxMessageDialog(this, wxT("The Bootloader has been uninstalled.")
311 ,"Uninstallation", wxOK |wxICON_INFORMATION); 328 ,wxT("Uninstallation"), wxOK |wxICON_INFORMATION);
312 msg->ShowModal(); 329 msg->ShowModal();
313 delete msg; 330 delete msg;
314 } 331 }
315 else 332 else
316 { 333 {
317 MESG_DIALOG(_("The Uninstallation has failed.") ); 334 MESG_DIALOG(wxT("The Uninstallation has failed.") );
318 } 335 }
319 } 336 }
320 else if(gv->curbootloadermethod == "gigabeatf") 337 else if(gv->curbootloadermethod == wxT("gigabeatf"))
321 { 338 {
322 339
323 if(gigabeatf(BOOTLOADER_REM)) 340 if(gigabeatf(BOOTLOADER_REM))
324 { 341 {
325 wxMessageDialog* msg = new wxMessageDialog(this, _("The Bootloader has been uninstalled.") 342 wxMessageDialog* msg = new wxMessageDialog(this, wxT("The Bootloader has been uninstalled.")
326 ,"Uninstallation", wxOK |wxICON_INFORMATION); 343 ,wxT("Uninstallation"), wxOK |wxICON_INFORMATION);
327 msg->ShowModal(); 344 msg->ShowModal();
328 delete msg; 345 delete msg;
329 } 346 }
330 else 347 else
331 MESG_DIALOG(_("The Uninstallation has failed.") ); 348 MESG_DIALOG(wxT("The Uninstallation has failed.") );
332 } 349 }
333 else if(gv->curbootloadermethod == "h10") 350 else if(gv->curbootloadermethod == wxT("h10"))
334 { 351 {
335 if(h10(BOOTLOADER_REM)) 352 if(h10(BOOTLOADER_REM))
336 { 353 {
337 wxMessageDialog* msg = new wxMessageDialog(this, _("The Bootloader has been uninstalled.") 354 wxMessageDialog* msg = new wxMessageDialog(this, wxT("The Bootloader has been uninstalled.")
338 ,"Uninstallation", wxOK |wxICON_INFORMATION); 355 ,wxT("Uninstallation"), wxOK |wxICON_INFORMATION);
339 msg->ShowModal(); 356 msg->ShowModal();
340 delete msg; 357 delete msg;
341 } 358 }
342 else 359 else
343 MESG_DIALOG(_("The Uninstallation has failed.") ); 360 MESG_DIALOG(wxT("The Uninstallation has failed.") );
344 361
345 } 362 }
346 else if(gv->curbootloadermethod == "iaudio" ) 363 else if(gv->curbootloadermethod == wxT("iaudio") )
347 { 364 {
348 wxMessageDialog* msg = new wxMessageDialog(this, _("To uninstall the Bootloader on this Device,\n" 365 wxMessageDialog* msg = new wxMessageDialog(this, wxT("To uninstall the Bootloader on this Device,\n"
349 "you need to download and install an Original Firmware from the Manufacturer.") 366 "you need to download and install an Original Firmware from the Manufacturer.")
350 ,"Uninstallation", wxOK |wxICON_INFORMATION); 367 ,wxT("Uninstallation"), wxOK |wxICON_INFORMATION);
351 msg->ShowModal(); 368 msg->ShowModal();
352 delete msg; 369 delete msg;
353 } 370 }
354 else if(gv->curbootloadermethod == "fwpatcher" ) 371 else if(gv->curbootloadermethod == wxT("fwpatcher") )
355 { 372 {
356 wxMessageDialog* msg = new wxMessageDialog(this, _("To uninstall the Bootloader on this Device,\n" 373 wxMessageDialog* msg = new wxMessageDialog(this, wxT("To uninstall the Bootloader on this Device,\n"
357 "you need to download and install an original Firmware from the Manufacturer.\n" 374 "you need to download and install an original Firmware from the Manufacturer.\n"
358 "To do this, you need to boot into the original Firmware.") 375 "To do this, you need to boot into the original Firmware.")
359 ,"Uninstallation", wxOK |wxICON_INFORMATION); 376 ,wxT("Uninstallation"), wxOK |wxICON_INFORMATION);
360 msg->ShowModal(); 377 msg->ShowModal();
361 delete msg; 378 delete msg;
362 } 379 }
363 else 380 else
364 { 381 {
365 MESG_DIALOG(_("Unsupported Bootloader Method") ); 382 MESG_DIALOG(wxT("Unsupported Bootloader Method") );
366 } 383 }
367 } 384 }
368 else 385 else
369 { 386 {
370 MESG_DIALOG(_("The bootloader Uninstallation wizard was cancelled") ); 387 MESG_DIALOG(wxT("The bootloader Uninstallation wizard was cancelled") );
371 } 388 }
372 389
373 wxLogVerbose("=== end rbutilFrm::OnBootloaderRemoveBtn"); 390 wxLogVerbose(wxT("=== end rbutilFrm::OnBootloaderRemoveBtn"));
374} 391}
375 392
376void rbutilFrm::OnBootloaderBtn(wxCommandEvent& event) 393void rbutilFrm::OnBootloaderBtn(wxCommandEvent& event)
377{ 394{
378 wxLogVerbose("=== begin rbutilFrm::OnBootloaderBtn(event)"); 395 wxLogVerbose(wxT("=== begin rbutilFrm::OnBootloaderBtn(event)"));
379 396
380 wxWizard *wizard = new wxWizard(this, wxID_ANY, 397 wxWizard *wizard = new wxWizard(this, wxID_ANY,
381 _("Rockbox Installation Wizard"), 398 wxT("Rockbox Installation Wizard"),
382 wxBitmap(wizard_xpm), 399 wxBitmap(wizard_xpm),
383 wxDefaultPosition, 400 wxDefaultPosition,
384 wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER); 401 wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER);
@@ -399,84 +416,84 @@ void rbutilFrm::OnBootloaderBtn(wxCommandEvent& event)
399 if (wizard->RunWizard(page1) ) 416 if (wizard->RunWizard(page1) )
400 { 417 {
401 // start installation depending on player 418 // start installation depending on player
402 if(gv->curbootloadermethod == "ipodpatcher") 419 if(gv->curbootloadermethod == wxT("ipodpatcher"))
403 { 420 {
404 421
405 if(ipodpatcher(BOOTLOADER_ADD)) 422 if(ipodpatcher(BOOTLOADER_ADD))
406 { 423 {
407 wxMessageDialog* msg = new wxMessageDialog(this, _("The Bootloader has been installed on your device.") 424 wxMessageDialog* msg = new wxMessageDialog(this, wxT("The Bootloader has been installed on your device.")
408 ,"Installation", wxOK |wxICON_INFORMATION); 425 ,wxT("Installation"), wxOK |wxICON_INFORMATION);
409 msg->ShowModal(); 426 msg->ShowModal();
410 delete msg; 427 delete msg;
411 } 428 }
412 else 429 else
413 { 430 {
414 MESG_DIALOG(_("The installation has failed.") ); 431 MESG_DIALOG(wxT("The installation has failed.") );
415 } 432 }
416 } 433 }
417 else if(gv->curbootloadermethod == "gigabeatf") 434 else if(gv->curbootloadermethod == wxT("gigabeatf"))
418 { 435 {
419 436
420 if(gigabeatf(BOOTLOADER_ADD)) 437 if(gigabeatf(BOOTLOADER_ADD))
421 { 438 {
422 wxMessageDialog* msg = new wxMessageDialog(this, _("The Bootloader has been installed on your device.") 439 wxMessageDialog* msg = new wxMessageDialog(this, wxT("The Bootloader has been installed on your device.")
423 ,"Installation", wxOK |wxICON_INFORMATION); 440 ,wxT("Installation"), wxOK |wxICON_INFORMATION);
424 msg->ShowModal(); 441 msg->ShowModal();
425 delete msg; 442 delete msg;
426 } 443 }
427 else 444 else
428 MESG_DIALOG(_("The installation has failed.") ); 445 MESG_DIALOG(wxT("The installation has failed.") );
429 } 446 }
430 else if(gv->curbootloadermethod == "iaudio" ) 447 else if(gv->curbootloadermethod == wxT("iaudio") )
431 { 448 {
432 if(iaudiox5(BOOTLOADER_ADD)) 449 if(iaudiox5(BOOTLOADER_ADD))
433 { 450 {
434 wxMessageDialog* msg = new wxMessageDialog(this, _("The Bootloader has been installed on your device.\n" 451 wxMessageDialog* msg = new wxMessageDialog(this, wxT("The Bootloader has been installed on your device.\n"
435 "Now turn OFF your Device, unplug USB,and insert Charger\n" 452 "Now turn OFF your Device, unplug USB,and insert Charger\n"
436 "Your Device will automatically upgrade the flash with the Rockbox bootloader") 453 "Your Device will automatically upgrade the flash with the Rockbox bootloader")
437 ,"Installation", wxOK |wxICON_INFORMATION); 454 ,wxT("Installation"), wxOK |wxICON_INFORMATION);
438 msg->ShowModal(); 455 msg->ShowModal();
439 delete msg; 456 delete msg;
440 } 457 }
441 else 458 else
442 MESG_DIALOG(_("The installation has failed.") ); 459 MESG_DIALOG(wxT("The installation has failed.") );
443 } 460 }
444 else if(gv->curbootloadermethod == "fwpatcher") 461 else if(gv->curbootloadermethod == wxT("fwpatcher"))
445 { 462 {
446 if(fwpatcher(BOOTLOADER_ADD)) 463 if(fwpatcher(BOOTLOADER_ADD))
447 { 464 {
448 wxMessageDialog* msg = new wxMessageDialog(this, _("The Bootloader has been patched and copied on your device.\n" 465 wxMessageDialog* msg = new wxMessageDialog(this, wxT("The Bootloader has been patched and copied on your device.\n"
449 "Now use the Firmware upgrade option of your Device\n") 466 "Now use the Firmware upgrade option of your Device\n")
450 ,"Installation", wxOK |wxICON_INFORMATION); 467 ,wxT("Installation"), wxOK |wxICON_INFORMATION);
451 msg->ShowModal(); 468 msg->ShowModal();
452 delete msg; 469 delete msg;
453 } 470 }
454 else 471 else
455 MESG_DIALOG(_("The installation has failed.") ); 472 MESG_DIALOG(wxT("The installation has failed.") );
456 } 473 }
457 else if(gv->curbootloadermethod == "h10") 474 else if(gv->curbootloadermethod == wxT("h10"))
458 { 475 {
459 if(h10(BOOTLOADER_ADD)) 476 if(h10(BOOTLOADER_ADD))
460 { 477 {
461 wxMessageDialog* msg = new wxMessageDialog(this, _("The Bootloader has been patched and copied on your device.\n") 478 wxMessageDialog* msg = new wxMessageDialog(this, wxT("The Bootloader has been patched and copied on your device.\n")
462 ,"Installation", wxOK |wxICON_INFORMATION); 479 ,wxT("Installation"), wxOK |wxICON_INFORMATION);
463 msg->ShowModal(); 480 msg->ShowModal();
464 delete msg; 481 delete msg;
465 } 482 }
466 else 483 else
467 MESG_DIALOG(_("The installation has failed.") ); 484 MESG_DIALOG(wxT("The installation has failed.") );
468 } 485 }
469 else 486 else
470 { 487 {
471 MESG_DIALOG(_("Unsupported Bootloader Method") ); 488 MESG_DIALOG(wxT("Unsupported Bootloader Method") );
472 } 489 }
473 } 490 }
474 else 491 else
475 { 492 {
476 MESG_DIALOG(_("The bootloader installation wizard was cancelled") ); 493 MESG_DIALOG(wxT("The bootloader installation wizard was cancelled") );
477 } 494 }
478 495
479 wxLogVerbose("=== end rbutilFrm::OnBootloaderBtn"); 496 wxLogVerbose(wxT("=== end rbutilFrm::OnBootloaderBtn"));
480 497
481} 498}
482 499
@@ -485,13 +502,13 @@ void rbutilFrm::OnInstallBtn(wxCommandEvent& event)
485 wxString src, dest, buf; 502 wxString src, dest, buf;
486 wxDateTime date; 503 wxDateTime date;
487 wxTimeSpan day(24); 504 wxTimeSpan day(24);
488 wxLogVerbose("=== begin rbutilFrm::OnInstallBtn(event)"); 505 wxLogVerbose(wxT("=== begin rbutilFrm::OnInstallBtn(event)"));
489 wxFileSystem fs; 506 wxFileSystem fs;
490 wxFileConfig* buildinfo; 507 wxFileConfig* buildinfo;
491 wxDateSpan oneday; 508 wxDateSpan oneday;
492 509
493 wxWizard *wizard = new wxWizard(this, wxID_ANY, 510 wxWizard *wizard = new wxWizard(this, wxID_ANY,
494 _("Rockbox Installation Wizard"), 511 wxT("Rockbox Installation Wizard"),
495 wxBitmap(wizard_xpm), 512 wxBitmap(wizard_xpm),
496 wxDefaultPosition, 513 wxDefaultPosition,
497 wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER); 514 wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER);
@@ -511,20 +528,20 @@ void rbutilFrm::OnInstallBtn(wxCommandEvent& event)
511 { 528 {
512 case BUILD_RELEASE: 529 case BUILD_RELEASE:
513 // This is a URL - don't use PATH_SEP 530 // This is a URL - don't use PATH_SEP
514 src.Printf("%s%s-%s-%s.zip", 531 src.Printf(wxT("%s%s-%s-%s.zip"),
515 gv->download_url.c_str(), gv->prog_name.c_str(), 532 gv->download_url.c_str(), gv->prog_name.c_str(),
516 gv->last_release.c_str(), gv->curplat.c_str()); 533 gv->last_release.c_str(), gv->curplat.c_str());
517 dest.Printf("%s" PATH_SEP "download" PATH_SEP "%s-%s-%s.zip", 534 dest.Printf(wxT("%s" PATH_SEP "download" PATH_SEP "%s-%s-%s.zip"),
518 gv->stdpaths->GetUserDataDir().c_str(), 535 gv->stdpaths->GetUserDataDir().c_str(),
519 gv->prog_name.c_str(), gv->last_release.c_str(), 536 gv->prog_name.c_str(), gv->last_release.c_str(),
520 gv->curplat.c_str()); 537 gv->curplat.c_str());
521 break; 538 break;
522 case BUILD_DAILY: 539 case BUILD_DAILY:
523 dest.Printf("%s" PATH_SEP "download" PATH_SEP "build-info", 540 dest.Printf(wxT("%s" PATH_SEP "download" PATH_SEP "build-info"),
524 gv->stdpaths->GetUserDataDir().c_str()); 541 gv->stdpaths->GetUserDataDir().c_str());
525 if (DownloadURL(gv->server_conf_url, dest)) { 542 if (DownloadURL(gv->server_conf_url, dest)) {
526 WARN_DIALOG(_("Unable to download build status."), 543 WARN_DIALOG(wxT("Unable to download build status."),
527 _("Install")); 544 wxT("Install"));
528 buf = ""; 545 buf = "";
529 } else 546 } else
530 { 547 {
@@ -534,41 +551,41 @@ void rbutilFrm::OnInstallBtn(wxCommandEvent& event)
534 buildinfo->DeleteAll(); 551 buildinfo->DeleteAll();
535 552
536 if (buf.Len() != 8) { 553 if (buf.Len() != 8) {
537 dest.Printf(_("Invalid build date: %s"), buf.c_str()); 554 dest.Printf(wxT("Invalid build date: %s"), buf.c_str());
538 WARN_DIALOG(dest, _("Install")); 555 WARN_DIALOG(dest, wxT("Install"));
539 buf = ""; 556 buf = wxT("");
540 } 557 }
541 } 558 }
542 559
543 if (buf == "") { 560 if (buf == "") {
544 WARN_DIALOG(_("Can't get date of latest build from " 561 WARN_DIALOG(wxT("Can't get date of latest build from "
545 "server. Using yesterday's date."), _("Install") ); 562 "server. Using yesterday's date."), wxT("Install") );
546 date = wxDateTime::Now(); 563 date = wxDateTime::Now();
547 date.Subtract(oneday.Day()); 564 date.Subtract(oneday.Day());
548 buf = date.Format(wxT("%Y%m%d")); // yes, we want UTC 565 buf = date.Format(wxT("%Y%m%d")); // yes, we want UTC
549 } 566 }
550 567
551 src.Printf("%s%s/%s-%s-%s.zip", 568 src.Printf(wxT("%s%s/%s-%s-%s.zip"),
552 gv->daily_url.c_str(), gv->curplat.c_str(), 569 gv->daily_url.c_str(), gv->curplat.c_str(),
553 gv->prog_name.c_str(), gv->curplat.c_str(), 570 gv->prog_name.c_str(), gv->curplat.c_str(),
554 buf.c_str() ); 571 buf.c_str() );
555 572
556 dest.Printf("%s" PATH_SEP "download" PATH_SEP "%s-%s-%s.zip", 573 dest.Printf(wxT("%s" PATH_SEP "download" PATH_SEP "%s-%s-%s.zip"),
557 gv->stdpaths->GetUserDataDir().c_str(), 574 gv->stdpaths->GetUserDataDir().c_str(),
558 gv->prog_name.c_str(), 575 gv->prog_name.c_str(),
559 gv->curplat.c_str(), buf.c_str() ); 576 gv->curplat.c_str(), buf.c_str() );
560 break; 577 break;
561 case BUILD_BLEEDING: 578 case BUILD_BLEEDING:
562 src.Printf("%s%s/%s.zip", 579 src.Printf(wxT("%s%s/%s.zip"),
563 gv->bleeding_url.c_str(), gv->curplat.c_str(), 580 gv->bleeding_url.c_str(), gv->curplat.c_str(),
564 gv->prog_name.c_str() ); 581 gv->prog_name.c_str() );
565 dest.Printf("%s" PATH_SEP "download" PATH_SEP "%s.zip", 582 dest.Printf(wxT("%s" PATH_SEP "download" PATH_SEP "%s.zip"),
566 gv->stdpaths->GetUserDataDir().c_str(), 583 gv->stdpaths->GetUserDataDir().c_str(),
567 gv->prog_name.c_str() ); 584 gv->prog_name.c_str() );
568 break; 585 break;
569 default: 586 default:
570 ERR_DIALOG(_("Something seriously odd has happened."), 587 ERR_DIALOG(wxT("Something seriously odd has happened."),
571 _("Install")); 588 wxT("Install"));
572 return; 589 return;
573 break; 590 break;
574 } 591 }
@@ -578,30 +595,30 @@ void rbutilFrm::OnInstallBtn(wxCommandEvent& event)
578 if ( DownloadURL(src, dest) ) 595 if ( DownloadURL(src, dest) )
579 { 596 {
580 wxRemoveFile(dest); 597 wxRemoveFile(dest);
581 buf.Printf(_("Unable to download %s"), src.c_str() ); 598 buf.Printf(wxT("Unable to download %s"), src.c_str() );
582 ERR_DIALOG(buf, _("Install")); 599 ERR_DIALOG(buf, wxT("Install"));
583 return; 600 return;
584 } 601 }
585 } 602 }
586 603
587 if ( !UnzipFile(dest, gv->curdestdir, true) ) 604 if ( !UnzipFile(dest, gv->curdestdir, true) )
588 { 605 {
589 wxMessageDialog* msg = new wxMessageDialog(this, _("Rockbox has been installed on your device.") 606 wxMessageDialog* msg = new wxMessageDialog(this, wxT("Rockbox has been installed on your device.")
590 ,"Installation", wxOK |wxICON_INFORMATION); 607 ,wxT("Installation"), wxOK |wxICON_INFORMATION);
591 msg->ShowModal(); 608 msg->ShowModal();
592 delete msg; 609 delete msg;
593 } else 610 } else
594 { 611 {
595 wxRemoveFile(dest); 612 wxRemoveFile(dest);
596 buf.Printf(_("Unable to unzip %s"), dest.c_str() ); 613 buf.Printf(wxT("Unable to unzip %s"), dest.c_str() );
597 ERR_DIALOG(buf, _("Install")); 614 ERR_DIALOG(buf, wxT("Install"));
598 } 615 }
599 } else 616 } else
600 { 617 {
601 MESG_DIALOG(_("The installation wizard was cancelled") ); 618 MESG_DIALOG(wxT("The installation wizard was cancelled") );
602 } 619 }
603 620
604 wxLogVerbose("=== end rbutilFrm::OnInstallBtn"); 621 wxLogVerbose(wxT("=== end rbutilFrm::OnInstallBtn"));
605} 622}
606 623
607void rbutilFrm::OnFontBtn(wxCommandEvent& event) 624void rbutilFrm::OnFontBtn(wxCommandEvent& event)
@@ -609,13 +626,13 @@ void rbutilFrm::OnFontBtn(wxCommandEvent& event)
609 wxString src, dest, buf; 626 wxString src, dest, buf;
610 wxDateTime date; 627 wxDateTime date;
611 wxTimeSpan day(24); 628 wxTimeSpan day(24);
612 wxLogVerbose("=== begin rbutilFrm::OnFontBtn(event)"); 629 wxLogVerbose(wxT("=== begin rbutilFrm::OnFontBtn(event)"));
613 wxFileSystem fs; 630 wxFileSystem fs;
614 wxFileConfig* buildinfo; 631 wxFileConfig* buildinfo;
615 wxDateSpan oneday; 632 wxDateSpan oneday;
616 633
617 wxWizard *wizard = new wxWizard(this, wxID_ANY, 634 wxWizard *wizard = new wxWizard(this, wxID_ANY,
618 _("Rockbox Font Installation Wizard"), 635 wxT("Rockbox Font Installation Wizard"),
619 wxBitmap(wizard_xpm), 636 wxBitmap(wizard_xpm),
620 wxDefaultPosition, 637 wxDefaultPosition,
621 wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER); 638 wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER);
@@ -628,9 +645,9 @@ void rbutilFrm::OnFontBtn(wxCommandEvent& event)
628 buf.Printf(wxT("%s" PATH_SEP ".rockbox"), gv->curdestdir.c_str()) ; 645 buf.Printf(wxT("%s" PATH_SEP ".rockbox"), gv->curdestdir.c_str()) ;
629 if (! wxDirExists(buf) ) 646 if (! wxDirExists(buf) )
630 { 647 {
631 buf.Printf(_("Rockbox is not yet installed on %s - install " 648 buf.Printf(wxT("Rockbox is not yet installed on %s - install "
632 "Rockbox first."), buf.c_str() ); 649 "Rockbox first."), buf.c_str() );
633 WARN_DIALOG(buf, _("Can't install fonts") ); 650 WARN_DIALOG(buf, wxT("Can't install fonts") );
634 return; 651 return;
635 } 652 }
636 653
@@ -638,8 +655,8 @@ void rbutilFrm::OnFontBtn(wxCommandEvent& event)
638 gv->stdpaths->GetUserDataDir().c_str()); 655 gv->stdpaths->GetUserDataDir().c_str());
639 if (DownloadURL(gv->server_conf_url, dest)) 656 if (DownloadURL(gv->server_conf_url, dest))
640 { 657 {
641 WARN_DIALOG(_("Unable to download build status."), 658 WARN_DIALOG(wxT("Unable to download build status."),
642 _("Font Install")); 659 wxT("Font Install"));
643 buf = ""; 660 buf = "";
644 } else 661 } else
645 { 662 {
@@ -649,25 +666,25 @@ void rbutilFrm::OnFontBtn(wxCommandEvent& event)
649 buildinfo->DeleteAll(); 666 buildinfo->DeleteAll();
650 667
651 if (buf.Len() != 8) { 668 if (buf.Len() != 8) {
652 dest.Printf(_("Invalid build date: %s"), buf.c_str()); 669 dest.Printf(wxT("Invalid build date: %s"), buf.c_str());
653 WARN_DIALOG(dest, _("Font Install")); 670 WARN_DIALOG(dest, wxT("Font Install"));
654 buf = ""; 671 buf = "";
655 } 672 }
656 } 673 }
657 674
658 if (buf == "") { 675 if (buf == "") {
659 WARN_DIALOG(_("Can't get date of latest build from " 676 WARN_DIALOG(wxT("Can't get date of latest build from "
660 "server. Using yesterday's date."), 677 "server. Using yesterday's date."),
661 _("Font Install") ); 678 wxT("Font Install") );
662 date = wxDateTime::Now(); 679 date = wxDateTime::Now();
663 date.Subtract(oneday.Day()); 680 date.Subtract(oneday.Day());
664 buf = date.Format(wxT("%Y%m%d")); // yes, we want UTC 681 buf = date.Format(wxT("%Y%m%d")); // yes, we want UTC
665 } 682 }
666 683
667 src.Printf("%s%s.zip", gv->font_url.c_str(), buf.c_str() ); 684 src.Printf(wxT("%s%s.zip"), gv->font_url.c_str(), buf.c_str() );
668 685
669 dest.Printf("%s" PATH_SEP "download" PATH_SEP 686 dest.Printf(wxT("%s" PATH_SEP "download" PATH_SEP
670 "rockbox-fonts-%s.zip", gv->stdpaths->GetUserDataDir().c_str(), 687 "rockbox-fonts-%s.zip"), gv->stdpaths->GetUserDataDir().c_str(),
671 buf.c_str() ); 688 buf.c_str() );
672 689
673 if ( ! wxFileExists(dest) ) 690 if ( ! wxFileExists(dest) )
@@ -675,38 +692,88 @@ void rbutilFrm::OnFontBtn(wxCommandEvent& event)
675 if ( DownloadURL(src, dest) ) 692 if ( DownloadURL(src, dest) )
676 { 693 {
677 wxRemoveFile(dest); 694 wxRemoveFile(dest);
678 buf.Printf(_("Unable to download %s"), src.c_str() ); 695 buf.Printf(wxT("Unable to download %s"), src.c_str() );
679 ERR_DIALOG(buf, _("Font Install")); 696 ERR_DIALOG(buf, wxT("Font Install"));
680 return; 697 return;
681 } 698 }
682 } 699 }
683 700
684 if ( !UnzipFile(dest, gv->curdestdir, true) ) 701 if ( !UnzipFile(dest, gv->curdestdir, true) )
685 { 702 {
686 wxMessageDialog* msg = new wxMessageDialog(this, _("The Rockbox fonts have been installed on your device.") 703 wxMessageDialog* msg = new wxMessageDialog(this, wxT("The Rockbox fonts have been installed on your device.")
687 ,"Installation", wxOK |wxICON_INFORMATION); 704 ,wxT("Installation"), wxOK |wxICON_INFORMATION);
688 msg->ShowModal(); 705 msg->ShowModal();
689 delete msg; 706 delete msg;
690 } else 707 } else
691 { 708 {
692 wxRemoveFile(dest); 709 wxRemoveFile(dest);
693 buf.Printf(_("Unable to unzip %s"), dest.c_str() ); 710 buf.Printf(wxT("Unable to unzip %s"), dest.c_str() );
694 ERR_DIALOG(buf, _("Font Install")); 711 ERR_DIALOG(buf, wxT("Font Install"));
695 } 712 }
696 } else 713 } else
697 { 714 {
698 MESG_DIALOG(_("The font installation wizard was cancelled") ); 715 MESG_DIALOG(wxT("The font installation wizard was cancelled") );
699 } 716 }
700 717
701 wxLogVerbose("=== end rbutilFrm::OnFontBtn"); 718 wxLogVerbose(wxT("=== end rbutilFrm::OnFontBtn"));
702} 719}
703 720
721
722void rbutilFrm::OnThemesBtn(wxCommandEvent& event)
723{
724 wxString src, dest, buf;
725 wxTimeSpan day(24);
726 wxLogVerbose(wxT("=== begin rbutilFrm::OnThemesBtn(event)"));
727
728 wxWizard *wizard = new wxWizard(this, wxID_ANY,
729 wxT("Rockbox Themes Installation Wizard"),
730 wxBitmap(wizard_xpm),
731 wxDefaultPosition,
732 wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER);
733 wxPlatformPage* page1 = new wxPlatformPage(wizard);
734 wxLocationPage* page2 = new wxLocationPage(wizard);
735 wxThemesPage* page3 = new wxThemesPage(wizard);
736 page1->SetNext(page2);
737 page2->SetPrev(page1);
738 page2->SetNext(page3);
739 page3->SetPrev(page2);
740
741 wizard->GetPageAreaSizer()->Add(page1);
742
743 if (wizard->RunWizard(page1) )
744 {
745 bool success=true;
746 for(int i=0 ;i < gv->themesToInstall.GetCount();i++)
747 {
748 if(!InstallTheme(gv->themesToInstall[i]))
749 {
750 MESG_DIALOG(wxT("The Themes installation has failed") );
751 success=false;
752 break;
753 }
754 }
755 if(success)
756 {
757 MESG_DIALOG(wxT("The Theme installation completed successfully.") );
758 }
759
760
761 }
762 else
763 {
764 MESG_DIALOG(wxT("The Themes installation wizard was cancelled") );
765 }
766
767 wxLogVerbose(wxT("=== end rbutilFrm::OnThemesBtn(event)"));
768}
769
770
704void rbutilFrm::OnRemoveBtn(wxCommandEvent& event) 771void rbutilFrm::OnRemoveBtn(wxCommandEvent& event)
705{ 772{
706 wxLogVerbose("=== begin rbutilFrm::OnRemoveBtn(event)"); 773 wxLogVerbose(wxT("=== begin rbutilFrm::OnRemoveBtn(event)"));
707 774
708 wxWizard *wizard = new wxWizard(this, wxID_ANY, 775 wxWizard *wizard = new wxWizard(this, wxID_ANY,
709 _("Rockbox Uninstallation Wizard"), 776 wxT("Rockbox Uninstallation Wizard"),
710 wxBitmap(wizard_xpm), 777 wxBitmap(wizard_xpm),
711 wxDefaultPosition, 778 wxDefaultPosition,
712 wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER); 779 wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER);
@@ -722,33 +789,33 @@ void rbutilFrm::OnRemoveBtn(wxCommandEvent& event)
722 if (Uninstall(gv->curdestdir, gv->curisfull) ) 789 if (Uninstall(gv->curdestdir, gv->curisfull) )
723 { 790 {
724 MESG_DIALOG( 791 MESG_DIALOG(
725 _("The uninstallation wizard was cancelled or completed with " 792 wxT("The uninstallation wizard was cancelled or completed with "
726 "some errors.") ); 793 "some errors.") );
727 } else { 794 } else {
728 wxMessageDialog* msg = new wxMessageDialog(this, _("The uninstall wizard completed successfully\n" 795 wxMessageDialog* msg = new wxMessageDialog(this, wxT("The uninstall wizard completed successfully\n"
729 "Depending on which Device you own, you also have to uninstall the Bootloader") 796 "Depending on which Device you own, you also have to uninstall the Bootloader")
730 ,"Uninstallation", wxOK |wxICON_INFORMATION); 797 ,wxT("Uninstallation"), wxOK |wxICON_INFORMATION);
731 msg->ShowModal(); 798 msg->ShowModal();
732 delete msg; 799 delete msg;
733 } 800 }
734 } else 801 } else
735 { 802 {
736 MESG_DIALOG(_("The uninstallation wizard was cancelled.") ); 803 MESG_DIALOG(wxT("The uninstallation wizard was cancelled.") );
737 } 804 }
738 805
739 wxLogVerbose("=== end rbutilFrm::OnRemoveBtn"); 806 wxLogVerbose(wxT("=== end rbutilFrm::OnRemoveBtn"));
740} 807}
741 808
742void rbutilFrm::OnPortableInstall(wxCommandEvent& event) 809void rbutilFrm::OnPortableInstall(wxCommandEvent& event)
743{ 810{
744 wxString src, dest, buf; 811 wxString src, dest, buf;
745 wxLogVerbose("=== begin rbutilFrm::OnPortableInstall(event)"); 812 wxLogVerbose(wxT("=== begin rbutilFrm::OnPortableInstall(event)"));
746 wxFileSystem fs; 813 wxFileSystem fs;
747 wxFileConfig* buildinfo; 814 wxFileConfig* buildinfo;
748 wxDateSpan oneday; 815 wxDateSpan oneday;
749 816
750 wxWizard *wizard = new wxWizard(this, wxID_ANY, 817 wxWizard *wizard = new wxWizard(this, wxID_ANY,
751 _("Rockbox Utility Portable Installation Wizard"), 818 wxT("Rockbox Utility Portable Installation Wizard"),
752 wxBitmap(wizard_xpm), 819 wxBitmap(wizard_xpm),
753 wxDefaultPosition, 820 wxDefaultPosition,
754 wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER); 821 wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER);
@@ -760,24 +827,24 @@ void rbutilFrm::OnPortableInstall(wxCommandEvent& event)
760 { 827 {
761 if ( InstallRbutil(gv->curdestdir) ) 828 if ( InstallRbutil(gv->curdestdir) )
762 { 829 {
763 wxMessageDialog* msg = new wxMessageDialog(this, _("The Rockbox Utility has been installed on your device.") 830 wxMessageDialog* msg = new wxMessageDialog(this, wxT("The Rockbox Utility has been installed on your device.")
764 ,"Installation", wxOK |wxICON_INFORMATION); 831 ,wxT("Installation"), wxOK |wxICON_INFORMATION);
765 msg->ShowModal(); 832 msg->ShowModal();
766 delete msg; 833 delete msg;
767 } else 834 } else
768 { 835 {
769 ERR_DIALOG(_("Installation failed"), _("Portable Install")); 836 ERR_DIALOG(wxT("Installation failed"), wxT("Portable Install"));
770 } 837 }
771 } else 838 } else
772 { 839 {
773 MESG_DIALOG(_("The portable installation wizard was cancelled") ); 840 MESG_DIALOG(wxT("The portable installation wizard was cancelled") );
774 } 841 }
775 842
776 wxLogVerbose("=== end rbutilFrm::OnUnstallPortable"); 843 wxLogVerbose(wxT("=== end rbutilFrm::OnUnstallPortable"));
777} 844}
778 845
779AboutDlg::AboutDlg(rbutilFrm* parent) 846AboutDlg::AboutDlg(rbutilFrm* parent)
780 : wxDialog(parent, -1, _("About"), wxDefaultPosition, wxDefaultSize, 847 : wxDialog(parent, -1, wxT("About"), wxDefaultPosition, wxDefaultSize,
781 wxDEFAULT_DIALOG_STYLE) 848 wxDEFAULT_DIALOG_STYLE)
782{ 849{
783 wxBoxSizer* WxBoxSizer1 = new wxBoxSizer(wxVERTICAL); 850 wxBoxSizer* WxBoxSizer1 = new wxBoxSizer(wxVERTICAL);
@@ -792,13 +859,13 @@ AboutDlg::AboutDlg(rbutilFrm* parent)
792 WxBoxSizer2->Add(WxStaticBitmap1, 0, wxALL | wxCENTER, 5); 859 WxBoxSizer2->Add(WxStaticBitmap1, 0, wxALL | wxCENTER, 5);
793 860
794 wxStaticText* WxStaticText1 = new wxStaticText(this, wxID_ANY, 861 wxStaticText* WxStaticText1 = new wxStaticText(this, wxID_ANY,
795 _(RBUTIL_FULLNAME), wxDefaultPosition, wxDefaultSize, 862 wxT(RBUTIL_FULLNAME), wxDefaultPosition, wxDefaultSize,
796 wxALIGN_CENTER | wxST_NO_AUTORESIZE ); 863 wxALIGN_CENTER | wxST_NO_AUTORESIZE );
797 WxBoxSizer2->Add(WxStaticText1, 0, wxALL | wxCENTER, 5); 864 WxBoxSizer2->Add(WxStaticText1, 0, wxALL | wxCENTER, 5);
798 WxBoxSizer1->Add(WxBoxSizer2, 0, wxALL, 5); 865 WxBoxSizer1->Add(WxBoxSizer2, 0, wxALL, 5);
799 866
800 wxStaticText* WxStaticText2 = new wxStaticText(this, wxID_ANY, 867 wxStaticText* WxStaticText2 = new wxStaticText(this, wxID_ANY,
801 _(RBUTIL_VERSION "\n" RBUTIL_DESCRIPTION "\n\n" RBUTIL_COPYRIGHT)); 868 wxT(RBUTIL_VERSION "\n" RBUTIL_DESCRIPTION "\n\n" RBUTIL_COPYRIGHT));
802 WxStaticText2->Wrap(400); 869 WxStaticText2->Wrap(400);
803 WxBoxSizer1->Add(WxStaticText2, 0, wxALL, 5); 870 WxBoxSizer1->Add(WxStaticText2, 0, wxALL, 5);
804 871
@@ -806,7 +873,7 @@ AboutDlg::AboutDlg(rbutilFrm* parent)
806 wxT(RBUTIL_WEBSITE), wxT(RBUTIL_WEBSITE) ); 873 wxT(RBUTIL_WEBSITE), wxT(RBUTIL_WEBSITE) );
807 WxBoxSizer1->Add(WxHyperlink1, 0, wxALL, 5); 874 WxBoxSizer1->Add(WxHyperlink1, 0, wxALL, 5);
808 875
809 wxStaticBox* WxStaticBox1 = new wxStaticBox(this, wxID_ANY, _("Contributors:")); 876 wxStaticBox* WxStaticBox1 = new wxStaticBox(this, wxID_ANY, wxT("Contributors:"));
810 wxStaticBoxSizer* WxStaticBoxSizer2 = new wxStaticBoxSizer(WxStaticBox1, 877 wxStaticBoxSizer* WxStaticBoxSizer2 = new wxStaticBoxSizer(WxStaticBox1,
811 wxVERTICAL); 878 wxVERTICAL);
812 wxTextCtrl* WxTextCtrl1 = new wxTextCtrl(this, wxID_ANY, wxEmptyString, 879 wxTextCtrl* WxTextCtrl1 = new wxTextCtrl(this, wxID_ANY, wxEmptyString,
@@ -816,7 +883,7 @@ AboutDlg::AboutDlg(rbutilFrm* parent)
816 while ( rbutil_developers[i] != "") 883 while ( rbutil_developers[i] != "")
817 { 884 {
818 WxTextCtrl1->AppendText(rbutil_developers[i++]); 885 WxTextCtrl1->AppendText(rbutil_developers[i++]);
819 WxTextCtrl1->AppendText("\n"); 886 WxTextCtrl1->AppendText(wxT("\n"));
820 } 887 }
821 888
822 WxBoxSizer1->Add(WxStaticBoxSizer2, 1, wxGROW | wxALL, 5); 889 WxBoxSizer1->Add(WxStaticBoxSizer2, 1, wxGROW | wxALL, 5);
diff --git a/rbutil/rbutilFrm.h b/rbutil/rbutilFrm.h
index 9e75be3851..9f922cbbad 100644
--- a/rbutil/rbutilFrm.h
+++ b/rbutil/rbutilFrm.h
@@ -58,13 +58,13 @@ public:
58public: 58public:
59 wxMenuBar *WxMenuBar1; 59 wxMenuBar *WxMenuBar1;
60 wxStaticText *WxStaticText3; 60 wxStaticText *WxStaticText3;
61 wxStaticText *WxStaticText4;
62 wxBitmapButton *WxBitmapButton2; 61 wxBitmapButton *WxBitmapButton2;
63 wxStaticText *WxStaticText2; 62 wxStaticText *WxStaticText2;
64 wxBitmapButton *WxBitmapButton1; 63 wxBitmapButton *WxBitmapButton1;
65 wxBitmapButton *WxBitmapButton3; 64 wxBitmapButton *WxBitmapButton3;
66 wxBitmapButton *WxBitmapButton4; 65 wxBitmapButton *WxBitmapButton4;
67 wxBitmapButton *WxBitmapButton5; 66 wxBitmapButton *WxBitmapButton5;
67 wxBitmapButton *WxBitmapButton6;
68 wxFlexGridSizer *WxFlexGridSizer1; 68 wxFlexGridSizer *WxFlexGridSizer1;
69 wxStaticBoxSizer *WxStaticBoxSizer3; 69 wxStaticBoxSizer *WxStaticBoxSizer3;
70 wxStaticBitmap *WxStaticBitmap1; 70 wxStaticBitmap *WxStaticBitmap1;
@@ -87,6 +87,7 @@ public:
87 ID_INSTALL_BTN = 1028, 87 ID_INSTALL_BTN = 1028,
88 ID_WXSTATICBITMAP1 = 1053, 88 ID_WXSTATICBITMAP1 = 1053,
89 ID_FONT_BTN = 1128, 89 ID_FONT_BTN = 1128,
90 ID_THEMES_BTN = 1139,
90 ID_BOOTLOADER_BTN = 1129, 91 ID_BOOTLOADER_BTN = 1129,
91 ID_WXPANEL1 = 1064, 92 ID_WXPANEL1 = 1064,
92 93
@@ -102,6 +103,7 @@ public:
102 void OnInstallBtn(wxCommandEvent& event); 103 void OnInstallBtn(wxCommandEvent& event);
103 void OnRemoveBtn(wxCommandEvent& event); 104 void OnRemoveBtn(wxCommandEvent& event);
104 void OnFontBtn(wxCommandEvent& event); 105 void OnFontBtn(wxCommandEvent& event);
106 void OnThemesBtn(wxCommandEvent& event);
105 void OnBootloaderBtn(wxCommandEvent& event); 107 void OnBootloaderBtn(wxCommandEvent& event);
106 void OnPortableInstall(wxCommandEvent& event); 108 void OnPortableInstall(wxCommandEvent& event);
107 void OnBootloaderRemoveBtn(wxCommandEvent& event); 109 void OnBootloaderRemoveBtn(wxCommandEvent& event);
diff --git a/rbutil/uninstall_3d.xpm b/rbutil/uninstall_3d.xpm
index 1f93acc4b5..23c7fb05dc 100644
--- a/rbutil/uninstall_3d.xpm
+++ b/rbutil/uninstall_3d.xpm
@@ -1,286 +1,313 @@
1/* WxBitmapButton2 XPM */ 1/* XPM */
2static char *uninstall_3d_xpm[]={ 2static char * uninstall_3d_xpm[] = {
3"56 46 236 2", 3"56 46 264 2",
4" c None", 4" c #FFFFFF",
5" 0 c #BEBABE", 5". c #BEBABE",
6" 1 c #BEC3BE", 6"+ c #BEC3BE",
7" 2 c #000011", 7"@ c #000011",
8" 3 c #AEAAAE", 8"# c #AEAAAE",
9" 4 c #9E9A9E", 9"$ c #9E9A9E",
10" 5 c #C0B3AE", 10"% c #010101",
11" 6 c #C97577", 11"& c #79869E",
12" 7 c #C45759", 12"* c #C7BAC7",
13" 8 c #BF6B6D", 13"= c #5155FF",
14" 9 c #BEB9BD", 14"- c #5558FC",
15" a c #BFB1B5", 15"; c #6A66E3",
16" b c #C49793", 16"> c #5F3C3B",
17" c c #CE5254", 17", c #C67175",
18" d c #D81413", 18"' c #623841",
19" e c #DB0505", 19") c #949194",
20" f c #DB0303", 20"! c #BEBFBB",
21" g c #D81717", 21"~ c #BA7F82",
22" h c #CB6668", 22"{ c #C97173",
23" i c #C1A6AA", 23"] c #431C1D",
24" j c #C64E50", 24"^ c #241D1D",
25" k c #D71E1F", 25"/ c #ADAAAE",
26" l c #D31F1F", 26"( c #6E5EDE",
27" m c #CF4C4D", 27"_ c #BD8587",
28" n c #BA797D", 28": c #A25A94",
29" o c #C29EA2", 29"< c #C2344A",
30" p c #AFA4A8", 30"[ c #DA0909",
31" q c #C0AAAE", 31"} c #DB0302",
32" r c #C25C5E", 32"| c #D51617",
33" s c #D6201E", 33"1 c #9A8B98",
34" t c #DA0606", 34"2 c #AEAEB6",
35" u c #D81A1B", 35"3 c #C07B7E",
36" v c #CD5D5F", 36"4 c #D81111",
37" w c #D90E0D", 37"5 c #DA0707",
38" x c #D62423", 38"6 c #D71314",
39" y c #C68789", 39"7 c #D13434",
40" z c #010101", 40"8 c #C49094",
41" A c #130101", 41"9 c #C0BCB8",
42" B c #650101", 42"0 c #0D0D0D",
43" C c #C40202", 43"a c #5558FE",
44" D c #DA0202", 44"b c #5449BC",
45" E c #DB0202", 45"c c #A2484A",
46" F c #D42F30", 46"d c #CF1D26",
47" G c #D81516", 47"e c #DC0000",
48" H c #C3595B", 48"f c #DD0000",
49" I c #C2A49F", 49"g c #A1848F",
50" J c #D62424", 50"h c #CE5456",
51" K c #DA0607", 51"i c #DC0101",
52" L c #D14244", 52"j c #D01717",
53" M c #DB0404", 53"k c #943857",
54" N c #D90909", 54"l c #4B1A1A",
55" O c #A10101", 55"m c #524ACB",
56" P c #CA6B6D", 56"n c #4C4FEE",
57" Q c #070101", 57"o c #4A4DE5",
58" R c #3F000C", 58"p c #7D57A6",
59" S c #CD0202", 59"q c #D71F26",
60" T c #DB0203", 60"r c #DB0000",
61" U c #D90C0C", 61"s c #DC0100",
62" V c #CE5556", 62"t c #E20200",
63" W c #C0B2AD", 63"u c #E10000",
64" X c #C7BAC7", 64"v c #E00201",
65" Y c #C59591", 65"w c #D90707",
66" Z c #D41E1E", 66"x c #A13C3C",
67" & c #CE0203", 67"y c #868EA1",
68"0 c #A1246B", 68"z c #B6AEB6",
69"00 c #6F42C7", 69"A c #CFC7CF",
70"01 c #604BE2", 70"B c #452F2E",
71"02 c #9D2774", 71"C c #C92B2B",
72"03 c #D80409", 72"D c #DE0101",
73"04 c #B40202", 73"E c #DF0809",
74"05 c #AE3C48", 74"F c #B80E1A",
75"06 c #8E687A", 75"G c #7D308D",
76"07 c #AFA5A9", 76"H c #6E3FBA",
77"08 c #C49397", 77"I c #7F2C85",
78"09 c #D04546", 78"J c #C70102",
79"0a c #CB0202", 79"K c #DE0000",
80"0b c #DA0305", 80"L c #DD0302",
81"0c c #D60409", 81"M c #DE0203",
82"0d c #A91F5D", 82"N c #B00E28",
83"0e c #300101", 83"O c #AC2945",
84"0f c #BEB4B8", 84"P c #6C0E18",
85"0g c #8E8A8E", 85"Q c #B4949B",
86"0h c #79869E", 86"R c #222020",
87"0i c #B49194", 87"S c #A6989C",
88"0j c #C77D7F", 88"T c #A67578",
89"0k c #D41A1B", 89"U c #9D3234",
90"0l c #783CB5", 90"V c #C90D0D",
91"0m c #5552F7", 91"W c #E50B0B",
92"0n c #AEAEB6", 92"X c #E50202",
93"0o c #B19B9F", 93"Y c #E40304",
94"0p c #CC6163", 94"Z c #E40303",
95"0q c #CC0202", 95"` c #DF0303",
96"0r c #DA0A0A", 96" . c #DB0303",
97"0s c #932D85", 97".. c #D90306",
98"0t c #5155FF", 98"+. c #CE1723",
99"0u c #C16263", 99"@. c #753FC5",
100"0v c #D33432", 100"#. c #5449DC",
101"0w c #D90707", 101"$. c #5459F3",
102"0x c #C50F29", 102"%. c #100C0D",
103"0y c #6449DC", 103"&. c #48459B",
104"0z c #B6AEB6", 104"*. c #63376A",
105"0A c #CFC7CF", 105"=. c #B6374A",
106"0B c #B58D91", 106"-. c #D1171C",
107"0C c #CF0202", 107";. c #DB0202",
108"0D c #B21B4C", 108">. c #DE0202",
109"0E c #1F0101", 109",. c #9F206C",
110"0F c #C80202", 110"'. c #6660EB",
111"0G c #6847D4", 111"). c #202496",
112"0H c #BA0202", 112"!. c #202495",
113"0I c #D4060F", 113"~. c #343798",
114"0J c #86349C", 114"{. c #B48083",
115"0K c #C11130", 115"]. c #D80101",
116"0L c #D5070F", 116"^. c #DC0303",
117"0M c #773EB8", 117"/. c #DF0100",
118"0N c #202496", 118"(. c #DE0200",
119"0O c #252291", 119"_. c #DD0202",
120"0P c #541A6D", 120":. c #B31143",
121"0Q c #CE050D", 121"<. c #645CEB",
122"0R c #D10202", 122"[. c #9696AE",
123"0S c #5C4DE9", 123"}. c #1F2390",
124"0T c #CC0B1E", 124"|. c #867274",
125"0U c #D70509", 125"1. c #BB1C1D",
126"0V c #8335A0", 126"2. c #E40101",
127"0W c #9696AE", 127"3. c #AF1F58",
128"0X c #511A6E", 128"4. c #C51539",
129"0Y c #CD050E", 129"5. c #E30202",
130"0Z c #D90B0B", 130"6. c #DC0201",
131"0& c #400101", 131"7. c #A62566",
132"1 c #6B44CD", 132"8. c #5255FE",
133"10 c #D4070F", 133"9. c #7992B6",
134"11 c #CE091A", 134"0. c #717986",
135"12 c #7992B6", 135"a. c #8E6C81",
136"13 c #717986", 136"b. c #C40505",
137"14 c #3F1E7D", 137"c. c #E10100",
138"15 c #CE040C", 138"d. c #930000",
139"16 c #DA0909", 139"e. c #0D040A",
140"17 c #BA7B7E", 140"f. c #200610",
141"18 c #250101", 141"g. c #B30307",
142"19 c #D30202", 142"h. c #E20102",
143"1a c #D51919", 143"i. c #DD0001",
144"1b c #D81010", 144"j. c #891034",
145"1c c #CF4644", 145"k. c #080309",
146"1d c #C49894", 146"l. c #010103",
147"1e c #690101", 147"m. c #9B7795",
148"1f c #D80B0C", 148"n. c #D80B16",
149"1g c #B97D80", 149"o. c #E30201",
150"1h c #DA0203", 150"p. c #DB0201",
151"1i c #8B0101", 151"q. c #C84848",
152"1j c #060010", 152"r. c #938D8A",
153"1k c #B48F92", 153"s. c #887B78",
154"1l c #D60202", 154"t. c #D11111",
155"1m c #BEB1B5", 155"u. c #E00202",
156"1n c #D71918", 156"v. c #EE0100",
157"1o c #DA0B0B", 157"w. c #4D6A15",
158"1p c #C49194", 158"x. c #ADA9AD",
159"1q c #B19C9F", 159"y. c #28080B",
160"1r c #CE2222", 160"z. c #DD0D11",
161"1s c #7A0101", 161"A. c #DC0102",
162"1t c #CB6467", 162"B. c #9F3435",
163"1u c #DC0404", 163"C. c #322D2E",
164"1v c #DC0303", 164"D. c #060707",
165"1w c #D33435", 165"E. c #77312F",
166"1x c #FCEAEA", 166"F. c #8F2926",
167"1y c #C35C5E", 167"G. c #010111",
168"1z c #DA0404", 168"H. c #B0A6AA",
169"1A c #D90808", 169"I. c #B30807",
170"1B c #D81616", 170"J. c #C66265",
171"1C c #D20202", 171"K. c #292728",
172"1D c #570101", 172"L. c #B5A7AA",
173"1E c #9F9599", 173"M. c #D60B0B",
174"1F c #CC3839", 174"N. c #CF0303",
175"1G c #CB6967", 175"O. c #A89595",
176"1H c #970101", 176"P. c #A19CA0",
177"1I c #B78587", 177"Q. c #C35557",
178"1J c #BB0101", 178"R. c #E00101",
179"1K c #B48D91", 179"S. c #9E1717",
180"1L c #FBE9E9", 180"T. c #A9A2A6",
181"1M c #D9100F", 181"U. c #BFC4BF",
182"1N c #D40202", 182"V. c #CB6B6C",
183"1O c #3E0101", 183"W. c #DF0000",
184"1P c #C04444", 184"X. c #E35A59",
185"1Q c #D80202", 185"Y. c #BFC0BC",
186"1R c #AB777A", 186"Z. c #B28C90",
187"1S c #8D0202", 187"`. c #E80A0A",
188"1T c #9F0101", 188" + c #370C0D",
189"1U c #D41919", 189".+ c #C6BEBB",
190"1V c #D51617", 190"++ c #E12F2E",
191"1W c #867488", 191"@+ c #DE0303",
192"1X c #D70607", 192"#+ c #D60000",
193"1Y c #D40B0C", 193"$+ c #260000",
194"1Z c #7C0101", 194"%+ c #121213",
195"1& c #C0252C", 195"&+ c #C05B5C",
196"2 c #DA0304", 196"*+ c #963334",
197"20 c #8186A7", 197"=+ c #A6A1A5",
198"21 c #B8595B", 198"-+ c #BBB8BC",
199"22 c #B78487", 199";+ c #B05956",
200"23 c #B9787B", 200">+ c #E40202",
201"24 c #CF6B72", 201",+ c #AE1414",
202"25 c #CF3031", 202"'+ c #040101",
203"26 c #D80A0A", 203")+ c #AFA7AB",
204"27 c #CE0202", 204"!+ c #D30F0F",
205"28 c #D21F20", 205"~+ c #DC0202",
206"29 c #D51112", 206"{+ c #CC0203",
207"2a c #D02728", 207"]+ c #95898C",
208"2b c #CF2E2F", 208"^+ c #040404",
209"2c c #DA0303", 209"/+ c #BDB9BD",
210"2d c #B48E91", 210"(+ c #D0C9CB",
211"2e c #DA0505", 211"_+ c #D8171A",
212"2f c #BE4749", 212":+ c #261C23",
213"2g c #5E0101", 213"<+ c #513436",
214"2h c #B46163", 214"[+ c #E10101",
215"2i c #AC7578", 215"}+ c #AE4042",
216"2j c #310101", 216"|+ c #131212",
217"2k c #CE2122", 217"1+ c #090909",
218"2l c #C33E40", 218"2+ c #812A2D",
219"2m c #C50202", 219"3+ c #60333C",
220"2n c #D90202", 220"4+ c #C05658",
221"2o c #600101", 221"5+ c #E60303",
222"2p c #C63537", 222"6+ c #986365",
223"2q c #C94445", 223"7+ c #766775",
224"2r c #A69EA6", 224"8+ c #E30606",
225"2s c #7F7D93", 225"9+ c #D12829",
226"2t c #CF1215", 226"0+ c #82899D",
227"2u c #CA191D", 227"a+ c #B72223",
228"2v c #CA2C2D", 228"b+ c #DD0101",
229"2w c #DA0707", 229"c+ c #D20607",
230"2x c #D60F0F", 230"d+ c #A79194",
231"2y c #C43C3D", 231"e+ c #928B8F",
232"2z c #A58589", 232"f+ c #AF1113",
233"2A c #A97C7F", 233"g+ c #DB0101",
234"2B c #CE2223", 234"h+ c #DA0404",
235"2C c #A68589", 235"i+ c #9C8387",
236"2D c #A97D80", 236"j+ c #D01E1F",
237"2E c #B59093", 237"k+ c #E10202",
238"2F c #A09296", 238"l+ c #A50E0E",
239"2G c #9E999D", 239"m+ c #A49DA1",
240" 0", 240"n+ c #ADADB5",
241" 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 2", 241"o+ c #882C2D",
242" 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 2", 242"p+ c #EA0101",
243" 1 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 2", 243"q+ c #BD6063",
244" 3 0 3 0 4 1 0 3 3 1 3 0 4 1 0 3 3 1 3 0 4 1 0 3 3 1 3 0 4 1 0 3 3 1 3 0 4 5 6 7 8 5 3 0 4 1 0 3 3 1 3 0 3 1 2", 244"r+ c #ADAEB6",
245" 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 9 a b c d e f g h 1 0 1 0 1 0 1 0 0 1 0 0 2", 245"s+ c #D90708",
246" 3 0 3 0 3 0 3 0 3 i j k l m n o p 1 3 0 3 0 3 0 3 0 3 0 3 0 3 q r s t f f f f f f u 3 0 3 0 3 0 3 1 3 0 3 0 2", 246"t+ c #A9292A",
247" 0 1 0 1 0 3 0 0 1 v w f f f f x y 0 1 0 1 z z z z z z z z A B C D E E E E f f f f u 1 0 1 3 1 0 1 0 0 1 0 3 2", 247"u+ c #1D0203",
248" 3 0 4 1 3 0 3 1 4 F f f f f f E E G H q z 0 1 0 1 0 1 0 I J f f f f f f f E f f K h 3 0 3 0 4 0 3 0 4 0 3 0 2", 248"v+ c #D90102",
249" 0 1 0 3 0 1 0 3 0 L M f f f E f E f f N O P A z 2 z Q R S T E T E T E T f E f U V W 0 3 1 0 1 3 1 0 1 3 0 1 2", 249"w+ c #BE454A",
250" 3 0 3 0 3 X 4 1 3 Y Z f f E f f E f f f E f &0 00010203 f f f f f f f E t040506 p X 3 0 4 0 3 0 3 1 3 0 3 0 2", 250"x+ c #CF2121",
251" 0 3 0 1 0 3 1 3 00708090a f f E f E E f E f E f f0b f f f f f f f0c0d0e0f 20g0h 0 3 1 0 1 3 0 3 0 3 0 0 1 3 2", 251"y+ c #D51313",
252" 3 0 3 0 4 0 3 0 3 0 4 Q0i0j04 f f f E E E E E E f f f f f f f f0k0l0m z 1 20h0h0n 0 3 0 3 0 3 0 4 1 3 1 3 0 2", 252"z+ c #603A3B",
253" 0 3 X 3 0 3 0 3 0 3 1 z 1 z 00o0p0q f f f f E E f f f f f f0r0s W0t0t z 0 z0h0h 0 3 0 3 1 3 X 3 0 3 0 3 0 3 2", 253"A+ c #080808",
254" 3 1 3 1 3 0 3 0 3 0 3 z z 0 3 0 z W0u0v0w E f E f f f f f f0x0y 30t0t z 1 z0h0h0z 0 3 0 4 0 3 1 3 0 3 0 4 1 2", 254"B+ c #B4B1B6",
255" 3 3 0 3 3 30A 3 3 3 0 3 z 3 z z z z 00B0C f f E f f f f f f f0D 10t0t 2 0 z0h0h 3 3 0 3 3 3 0 3 3 3 X 3 3 3 2", 255"C+ c #BB6065",
256" 3 0 3 0 3 0 4 0 3 0 3 0 3 z 3 0 3 00E0F f f f E f f f f f f f f0G0t0t z 1 z 40h 3 0 3 1 3 0 3 0 3 0 3 0 3 0 2", 256"D+ c #DB0807",
257" 3 3 3 3 3 3 3 3 3 3 3 3 3 z z z z0E0H f f f f E0I0J0K f f f f f0L0M0m z 0 z0h0h 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2", 257"E+ c #5C3035",
258" 3 0 3 0 3 0 3 0 3 X 3 0 3 z0N0O0P0Q E f f f f0R0G0t0S0T f f f f f0U0V z 1 20h0W 3 0 3 0 3 0 4 1 3 0 3 0 3 0 2", 258"F+ c #AE9598",
259" 3 3 3 3 3 3 3 3 3 3 3 3 3 z0N0X0Y f E f f f0Z0&0t0t0t1 10 f f f f f11 z 0 z1213 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2", 259"G+ c #AC8083",
260" 3 3 3 0 3 3 3 0 3 3 3 0 3 z1415 f f E f f1617 Q z z z z1819 E E E E E Q 1 z0h0h0n 3 3 0 3 3 3 0 3 3 3 0 3 3 2", 260"H+ c #AE989C",
261" 3 3 3 3 3 3 3 3 3 3 3 3 3 A1a f f f E f1b17 3 z 1 1 1 1 11c f f f f f1d 0 z0h0h 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2", 261"I+ c #080707",
262" 3 3 3 3 3 3 3 3 3 3 3 3 31e f f f f E1f1g p 3 z z 2 z 2 z0&1h E E E T1i1j z z z 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2", 262"J+ c #050506",
263" 3 3 3 3 3 3 3 3 3 3 3 31k19 f f f f1l17 3 z 0 z 1 0 0 1 01m1n f f f f1o1p 1 0 0 z 3 3 3 3 3 3 3 3 3 3 3 3 3 2", 263"K+ c #141011",
264" 4 3 3 3 4 3 3 3 4 3 31q1r E f f f f1s p z 3 3 z 0 1 0 11t1u f f1v f1w1x 1 0 z0h 3 3 4 3 3 3 4 3 3 3 4 3 2", 264"L+ c #453133",
265" 3 3 3 3 3 3 3 3 3 3 31y1z E f f f1A A 3 3 z 3 z 1 0 0 1 0 0 W1B E E E E1C1D 0 0 z0h0h 3 3 3 3 3 3 3 3 3 3 3 2", 265"M+ c #453333",
266" 3 3 4 3 4 3 4 3 3 31E0k f E f E f1F z 3 z 3 4 z 0 1 0 1 0 1 01G M E E f E1H Q 1 z0h0h0z 4 3 4 3 3 3 4 3 4 3 2", 266"N+ c #090808",
267" 3 3 3 3 3 3 3 3 3 31I1z f E f f1J1K z 3 3 z 3 z 0 1 0 0 01L1M f E E E1N1O z z0h0h 3 3 3 3 3 3 3 3 3 3 3 2", 267"O+ c #A69EA6",
268" 4 3 4 3 4 3 4 3 4 31P f f E f1Q1R 3 z 3 z 3 4 z z z z z z z z z1S D E E E E1T z0h0h0h 3 4 3 4 3 4 3 4 3 4 3 2", 268" . ",
269" 3 3 3 3 3 3 3 3 3 31U f f E f1V Q 3 z 3 3 3 3 z0h0h0h0h0h0h0h0h1W1X f f f f1Y12130W0h 3 3 3 3 3 3 3 3 3 3 3 2", 269" . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + @ ",
270" 4 3 4 3 4 3 4 3 41q1z f f E f1Z 4 3 z 3 4 3 z z0h0h0h0W13120h0h0g1& f f f f2 201312 4 3 4 3 4 3 4 3 4 3 4 3 2", 270" + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . + . @ ",
271" 3 4 3 3 3 4 3 3 321 f f f E f22 z 4 z 3 3 z0h z z z z z z z z 20n23 f f f f f24 3 4 3 3 3 4 3 3 3 4 3 3 3 4 2", 271" + . . + . . . + . . . + . . . + . . . + . . . + . . . + . . . + . . . + . . . + . . . + . . . + . . . + . . @ ",
272" 4 3 4 3 4 3 4 3 425 f f f E26 Q 4 3 z 3 z0h0h z 4 0 0 0 3 0 z z z Q27 E E f f281E 3 4 3 4 3 4 3 4 3 4 3 4 3 2", 272" # . # . $ + . # # + # . $ + . # # + # . $ + . # # + # . $ + . # # + # . $ + . # # + # . $ + . # # + # . # + @ ",
273" 3 4 3 4 3 4 3 4 329 f f f E2a 4 3 4 z z0h0h0h0h z z z z z z z 3 0 02b f f E f2c2d 4 3 4 3 4 3 4 3 4 3 4 3 4 2", 273" . + . + . + . + . . + . + . + . + . . + . + . + . . + . + . + . + . . + . + . + . . + . + . + . + . . + . . @ ",
274" 4 3 4 3 4 3 4 31E2e f f f E2f 3 4 3 z0h0h0W130z 4 z z z z 0 z z z z2g E E E E f2h 3 4 3 4 3 4 3 4 3 4 3 4 3 2", 274" # . # . # . # . # . # . # . # . # + # . # . # . # . # . # . # . # + # . # . # . # . # . # . # . # + # . # . @ ",
275" 4 4 3 4 4 4 3 42i f f f f E2j z z z0W1312130n 4 4 4 z z z z z z z z A f E E E E2k 4 3 4 4 4 3 4 4 4 3 4 4 4 2", 275" . + . + . # . . + . + . + # . + . . + . + % % % % % % % % % % % % % % % % # . . + . + . + # + . + . . + . # @ ",
276" 4 3 4 3 4 3 4 32l f f f f f1E0h0h0h0h0h0h0z0W 3 4 3 40h z z z z z z z2m E E E E2n 3 4 3 4 3 4 3 4 3 4 3 4 3 2", 276" # . $ + # . # + $ . # . # . $ % % . # . % . + . + . + . + . + . + . . + . % # . $ . # . # . $ . # . $ . # . @ ",
277" 4 4 4 4 4 4 4 42k f f f f0w 40h0h0h0h0h 4 4 4 4 4 4 4 40h0h0h0h0h0h z2o E E E E E0h 4 4 4 4 4 4 4 4 4 4 4 4 2", 277" . + . # . + . # . . + # . + % # % + . # % . % % @ % % @ % @ % @ % @ % @ . % & # . + . # + . + # + . + # . + @ ",
278" 4 3 4 3 4 3 4 32p2e f f M2q 4 32r 3 40n 4 3 4 3 4 3 4 0 4 3 4 X 4 30h2s2t f f f2u0h0h 3 4 3 4 3 4 3 4 3 4 3 2", 278" # . # . # * $ + # + # . # % # . % . # . % + @ = = = = = = = = = = = = % + % & & # * # . $ . # . # + # . # . @ ",
279" 4 4 4 4 4 4 4 42i2v2w2x2y2z 4 4 4 42r 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 42A2B f2B2A 42r 4 4 4 4 4 4 4 4 4 4 4 2", 279" . # . + . # + # . # . . % # . % + % % + % . % = = = = = = = + = + - ; > , ' ) & . # + . + # . # . # . . + # @ ",
280" 4 4 4 3 4 4 4 31E2C2D2E2F2G 4 3 4 4 4 3 4 4 4 3 4 4 4 3 4 4 4 3 4 4 4 3 4 4 4 3 4 4 4 3 4 4 4 3 4 4 4 3 4 4 2", 280" # . # . $ . # . # . $ % # . % ! ~ { ] ^ % % % % = = = = = = / ( _ : < [ } | 1 & 2 . # . # . # . $ + # + # . @ ",
281" 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 2", 281" . # * # . # . # . # + % + % . 3 4 5 6 7 8 9 0 % = = = = a b c d e f f e f f g & . # . # + # * # . # . # . # @ ",
282" 4 3 4 4 4 4 4 4 4 3 4 4 4 4 4 4 4 3 4 4 4 4 4 4 4 3 4 4 4 4 4 4 4 3 4 4 4 4 4 4 4 3 4 4 4 4 4 4 4 3 4 4 4 4 2", 282" # + # + # . # . # . # % % . # h e i e e e j k l m n = o p q r e s t u v w x y & z . # . $ . # + # . # . $ + @ ",
283" 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 2", 283" # # . # # # A # # # . # % # % B C D e f e e f E F G H I J K L f M N O P Q R & & # # . # # # . # # # * # # # @ ",
284" 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 2", 284" # . # . # . $ . # . # . # % # . S T U V W e e e u X Y Z ` ...+.@.#.$.% + % $ & # . # + # . # . # . # . # . @ ",
285" 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2"}; 285" # # # # # # # # # # # # # % % % % % %.&.*.=.-. .;.;. . . .>.,.'.= = = % . % & & # # # # # # # # # # # # # # @ ",
286 286" # . # . # . # . # * # . # % ).).).).% ).!.~.{.].^.;./.(. ._.:.<.= = = % + @ & [.# . # . # . $ + # . # . # . @ ",
287" # # # # # # # # # # # # # % ).).).).% ).}.|.1.` } 2.3.4.5.} 6.7.8.= = % . % 9.0.# # # # # # # # # # # # # # @ ",
288" # # # . # # # . # # # . # % ).).).).% ).a.b.c. .e d.e.f.g.h.} i.j.k.% % + % & & 2 # # . # # # . # # # . # # @ ",
289" # # # # # # # # # # # # # % # # # # l.m.n.o.p.K q.r.+ + s.t.u.6.v.w.+ + . % & & # # # # # # # # # # # # # # @ ",
290" # # # # # # # # # # # # # % # # # x.y.z./.A.K B.C.@ % @ D.E.r .u F.G.% @ % % % # # # # # # # # # # # # # # @ ",
291" # # # # # # # # # # # # # % # # # H.I.c. .r J.K.+ . . + . L.M.i _.N.O.. . + . . % # # # # # # # # # # # # # @ ",
292" $ # # # $ # # # $ # # # $ % # # P.Q.R. .X S.T.% . + . U.V.e ;.W.X.Y.. + . % & # # $ # # # $ # # # $ # @ ",
293" # # # # # # # # # # # # # % # # Z.^.i i `. +# % + . . + . . .+++r @+#+$+% % . . % & & # # # # # # # # # # # @ ",
294" # # $ # $ # $ # # # $ # $ % $ %+&+K ;.K *+=+$ % . + . + . + -+;+e ;.>+,+'+% % + % & & z $ # $ # # # $ # $ # @ ",
295" # # # # # # # # # # # # # % # )+!+i ~+{+]+^+# % . + . . /+(+_+i ~+W.:+% % % % & & # # # # # # # # # # # @ ",
296" $ # $ # $ # $ # $ # $ # $ % $ <+e .[+}+|+# $ % % % % % % % % 1+2+K .W.3+% % % & & & # $ # $ # $ # $ # $ # @ ",
297" # # # # # # # # # # # # # % # 4+f ;.5+6+# # # % & & & & & & & & 7+8+;.e 9+0+& 9.0.[.& # # # # # # # # # # # @ ",
298" $ # $ # $ # $ # $ # $ # $ % $ a+f b+c+d+$ # % % & & & [.0.9.& & e+f+[+g+h+i+0.9.0.9.$ # $ # $ # $ # $ # $ # @ ",
299" # $ # # # $ # # # $ # # # % # j+f k+l+m+# % & % % % % % % % % @ n+o+p+;.f q+r+* # $ # # # $ # # # $ # # # $ @ ",
300" $ # $ # $ # $ # $ # $ # $ % $ s+s W.t+/ % & & % $ . . . # . % % % u+v+W.u w+$ # $ # $ # $ # $ # $ # $ # $ # @ ",
301" # $ # $ # $ # $ # $ # $ # % # x+f y+z+A+& & & & % % % % % % % # . B+C+b+D+E+# $ # $ # $ # $ # $ # $ # $ # $ @ ",
302" $ # $ # $ # $ # $ # $ # $ % $ F+G+H+I+& & [.0.z $ % % % % . % % % J+K+L+M+N+% # $ # $ # $ # $ # $ # $ # $ # @ ",
303" $ $ # $ $ $ # $ $ $ # $ $ % % % % % [.0.9.0.2 $ $ $ % % % % % % % % % $ % % % % $ $ # $ $ $ # $ $ $ # $ $ $ @ ",
304" $ # $ # $ # $ # $ # $ # $ # $ & & & & & & z [.# $ # $ & % % % % % % % % % % % % % # $ # $ # $ # $ # $ # $ # @ ",
305" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ & & & & & $ $ $ $ $ $ $ $ & & & & & & % % % % % % % & $ $ $ $ $ $ $ $ $ $ $ $ @ ",
306" $ # $ # $ # $ # $ # $ # $ # $ # O+# $ 2 $ # $ # $ # $ . $ # $ * $ # & & & & & & & & & # $ # $ # $ # $ # $ # @ ",
307" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ O+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ O+$ $ $ $ $ $ $ $ $ $ $ @ ",
308" $ $ $ # $ $ $ # $ $ $ # $ $ $ # $ $ $ # $ $ $ # $ $ $ # $ $ $ # $ $ $ # $ $ $ # $ $ $ # $ $ $ # $ $ $ # $ $ @ ",
309" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ ",
310" $ # $ $ $ $ $ $ $ # $ $ $ $ $ $ $ # $ $ $ $ $ $ $ # $ $ $ $ $ $ $ # $ $ $ $ $ $ $ # $ $ $ $ $ $ $ # $ $ $ $ @ ",
311" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ ",
312" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ ",
313"+ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ "};
diff --git a/rbutil/wizard_pages.cpp b/rbutil/wizard_pages.cpp
index 53d56634e8..1544675b18 100644
--- a/rbutil/wizard_pages.cpp
+++ b/rbutil/wizard_pages.cpp
@@ -21,12 +21,17 @@
21#include "wizard_pages.h" 21#include "wizard_pages.h"
22#include "bootloaders.h" 22#include "bootloaders.h"
23 23
24
25#include <wx/regex.h>
26#include <wx/tokenzr.h>
27
28/////// Bootplatform page ///////////////////////////////////77
24wxBootPlatformPage::wxBootPlatformPage(wxWizard *parent) : wxWizardPageSimple(parent) 29wxBootPlatformPage::wxBootPlatformPage(wxWizard *parent) : wxWizardPageSimple(parent)
25{ 30{
26 wxBoxSizer* WxBoxSizer1 = new wxBoxSizer(wxVERTICAL); 31 wxBoxSizer* WxBoxSizer1 = new wxBoxSizer(wxVERTICAL);
27 32
28 wxStaticText* WxStaticText1 = new wxStaticText(this, wxID_ANY, 33 wxStaticText* WxStaticText1 = new wxStaticText(this, wxID_ANY,
29 _("Please select the model of audio device that you would like to" 34 wxT("Please select the model of audio device that you would like to"
30 "\ninstall the Rockbox Bootloader on from the list below:")); 35 "\ninstall the Rockbox Bootloader on from the list below:"));
31 WxBoxSizer1->Add(WxStaticText1,0,wxGROW | wxALL,5); 36 WxBoxSizer1->Add(WxStaticText1,0,wxGROW | wxALL,5);
32 37
@@ -61,12 +66,12 @@ wxBootPlatformPage::wxBootPlatformPage(wxWizard *parent) : wxWizardPageSimple(pa
61 66
62wxWizardPage * wxBootPlatformPage::GetNext() const 67wxWizardPage * wxBootPlatformPage::GetNext() const
63{ 68{
64 if(gv->curbootloadermethod != "fwpatcher"&& gv->curbootloadermethod != "ipodpatcher") 69 if(gv->curbootloadermethod != wxT("fwpatcher")&& gv->curbootloadermethod != wxT("ipodpatcher"))
65 { 70 {
66 if(wxWizardPageSimple::GetNext()->GetNext() != NULL) // not iriver hx0 and ipod, skip one page 71 if(wxWizardPageSimple::GetNext()->GetNext() != NULL) // not iriver hx0 and ipod, skip one page
67 return wxWizardPageSimple::GetNext()->GetNext(); 72 return wxWizardPageSimple::GetNext()->GetNext();
68 } 73 }
69 else if(gv->curbootloadermethod == "ipodpatcher") 74 else if(gv->curbootloadermethod == wxT("ipodpatcher"))
70 { 75 {
71 if(wxWizardPageSimple::GetNext()->GetNext() != NULL) 76 if(wxWizardPageSimple::GetNext()->GetNext() != NULL)
72 if(wxWizardPageSimple::GetNext()->GetNext()->GetNext() != NULL) 77 if(wxWizardPageSimple::GetNext()->GetNext()->GetNext() != NULL)
@@ -83,8 +88,8 @@ bool wxBootPlatformPage::TransferDataFromWindow()
83{ 88{
84 if (BootPlatformListBox->GetSelection() == wxNOT_FOUND ) 89 if (BootPlatformListBox->GetSelection() == wxNOT_FOUND )
85 { 90 {
86 WARN_DIALOG(_("You must select an audio device type before proceeding"), 91 WARN_DIALOG(wxT("You must select an audio device type before proceeding"),
87 _("Select Platform")); 92 wxT("Select Platform"));
88 return false; 93 return false;
89 } else 94 } else
90 { 95 {
@@ -98,13 +103,13 @@ bool wxBootPlatformPage::TransferDataFromWindow()
98 return true; 103 return true;
99 } 104 }
100} 105}
101 106//// Plattfor Page //////////////////////////
102wxPlatformPage::wxPlatformPage(wxWizard *parent) : wxWizardPageSimple(parent) 107wxPlatformPage::wxPlatformPage(wxWizard *parent) : wxWizardPageSimple(parent)
103{ 108{
104 wxBoxSizer* WxBoxSizer1 = new wxBoxSizer(wxVERTICAL); 109 wxBoxSizer* WxBoxSizer1 = new wxBoxSizer(wxVERTICAL);
105 110
106 wxStaticText* WxStaticText1 = new wxStaticText(this, wxID_ANY, 111 wxStaticText* WxStaticText1 = new wxStaticText(this, wxID_ANY,
107 _("Please select the model of audio device that you would like to" 112 wxT("Please select the model of audio device that you would like to"
108 "\ninstall Rockbox on from the list below:")); 113 "\ninstall Rockbox on from the list below:"));
109 WxBoxSizer1->Add(WxStaticText1,0,wxGROW | wxALL,5); 114 WxBoxSizer1->Add(WxStaticText1,0,wxGROW | wxALL,5);
110 115
@@ -124,17 +129,274 @@ bool wxPlatformPage::TransferDataFromWindow()
124{ 129{
125 if (PlatformListBox->GetSelection() == wxNOT_FOUND ) 130 if (PlatformListBox->GetSelection() == wxNOT_FOUND )
126 { 131 {
127 WARN_DIALOG(_("You must select an audio device type before proceeding"), 132 WARN_DIALOG(wxT("You must select an audio device type before proceeding"),
128 _("Select Platform")); 133 wxT("Select Platform"));
129 return false; 134 return false;
130 } else 135 } else
131 { 136 {
132 gv->curplatnum = PlatformListBox->GetSelection(); 137 gv->curplatnum = PlatformListBox->GetSelection();
133 gv->curplat = gv->plat_id[gv->curplatnum]; 138 gv->curplat = gv->plat_id[gv->curplatnum];
139 gv->curresolution = gv->plat_resolution[gv->curplatnum];
134 return true; 140 return true;
135 } 141 }
136} 142}
137 143
144
145//////////////// ThemeImage Dialog /////////////////
146BEGIN_EVENT_TABLE(wxThemeImageDialog,wxDialog)
147 EVT_PAINT(wxThemeImageDialog::OnPaint)
148END_EVENT_TABLE();
149wxThemeImageDialog::wxThemeImageDialog(wxWindow* parent,wxWindowID id,wxString title,wxBitmap bmp) :
150 wxDialog(parent, id, title)
151{
152 wxBoxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
153 m_bitmap = bmp;
154
155 sizerTop->SetMinSize(m_bitmap.GetWidth(),m_bitmap.GetHeight());
156
157 SetSizer(sizerTop);
158
159 sizerTop->SetSizeHints(this);
160 sizerTop->Fit(this);
161
162}
163
164void wxThemeImageDialog::OnPaint(wxPaintEvent& WXUNUSED(event))
165{
166 wxPaintDC dc( this );
167 dc.DrawBitmap( m_bitmap, 0, 0, true /* use mask */ );
168}
169
170////////////////// Themes page ////////////////////////
171BEGIN_EVENT_TABLE(wxThemesPage,wxWizardPageSimple)
172 EVT_WIZARD_PAGE_CHANGED (wxID_ANY, wxThemesPage::OnPageShown)
173 EVT_WIZARD_PAGE_CHANGING (wxID_ANY, wxThemesPage::OnWizardPageChanging)
174 EVT_LISTBOX (ID_LISTBOX,wxThemesPage::OnListBox)
175 EVT_BUTTON (ID_PREVIEW_BTN, wxThemesPage::OnPreviewBtn)
176 EVT_CHECKBOX (ID_INSTALLCHECKBOX, wxThemesPage::OnCheckBox)
177END_EVENT_TABLE();
178
179wxThemesPage::wxThemesPage(wxWizard *parent) : wxWizardPageSimple(parent)
180{
181 m_parent = parent;
182 wxSizer* mainSizer = new wxBoxSizer(wxVERTICAL);
183
184 wxStaticText* WxStaticText1 = new wxStaticText(this, wxID_ANY,
185 wxT("Please select the Theme you would like to"
186 "\ninstall on your Device from the list below:"));
187 mainSizer->Add(WxStaticText1,0,wxGROW | wxALL,5);
188
189 // create theme listbox
190 wxArrayString list;
191 for(int i = 0; i< 35;i++)
192 list.Add("");
193 ThemesListBox= new wxListBox(this, ID_LISTBOX, wxDefaultPosition,
194 wxDefaultSize,list, wxLB_SINGLE);
195 mainSizer->Add(ThemesListBox,10,wxGROW | wxALL,5);
196
197 // create groupbox
198 wxStaticBox* groupbox= new wxStaticBox(this,wxID_ANY,wxT("Selected Theme:"));
199 wxBoxSizer* styleSizer = new wxStaticBoxSizer( groupbox, wxVERTICAL );
200 mainSizer->Add(styleSizer,11,wxGROW | wxALL,5);
201
202 // horizontal sizer
203 wxBoxSizer* wxBoxSizer2 = new wxBoxSizer(wxHORIZONTAL);
204 styleSizer->Add(wxBoxSizer2,0,wxGROW | wxALL,0);
205
206 // preview button
207 m_previewBtn = new wxButton(this, ID_PREVIEW_BTN, wxT("Preview"),
208 wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator,
209 wxT("PreviewBtn"));
210 wxBoxSizer2->Add(m_previewBtn,0,wxGROW | wxALL,5);
211
212 // checkbox for Install
213 m_InstallCheckBox= new wxCheckBox(this,ID_INSTALLCHECKBOX,wxT("Install")
214 ,wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator,
215 wxT("InstallCheckbox"));
216 wxBoxSizer2->Add(m_InstallCheckBox,0,wxGROW | wxALL,5);
217
218 // horizontal sizer
219 wxBoxSizer* wxBoxSizer3 = new wxBoxSizer(wxHORIZONTAL);
220 styleSizer->Add(wxBoxSizer3,0,wxGROW | wxALL,0);
221
222 // File size
223 wxStaticText* size= new wxStaticText(this,wxID_ANY,wxT("Filesize:"));
224 wxBoxSizer3->Add(size,0,wxGROW | wxALL,5);
225
226 m_size= new wxStaticText(this,wxID_ANY,wxT(""));
227 wxBoxSizer3->Add(m_size,0,wxGROW | wxALL,5);
228
229 // Description
230 wxStaticText* desc= new wxStaticText(this,wxID_ANY,wxT("Description:"));
231 styleSizer->Add(desc,0,wxGROW | wxALL,5);
232
233 m_desc= new wxStaticText(this,wxID_ANY,wxT(""));
234 styleSizer->Add(m_desc,0,wxGROW | wxALL,5);
235
236 SetSizer(mainSizer);
237 mainSizer->Fit(this);
238
239}
240
241bool wxThemesPage::TransferDataFromWindow()
242{
243 gv->themesToInstall.Clear();
244
245 for(int i=0; i < m_installTheme.GetCount(); i++)
246 {
247 if(m_installTheme[i])
248 {
249 gv->themesToInstall.Add(m_Themes_path[i]);
250 }
251 }
252
253 return true;
254
255}
256
257void wxThemesPage::OnWizardPageChanging(wxWizardEvent& event)
258{
259 if(event.GetDirection()) // going forwards in the Wizard
260 {
261 if(gv->themesToInstall.GetCount() == 0)
262 {
263 WARN_DIALOG(wxT("You have not selected a Theme to Install"), wxT("Select a Theme"));
264 event.Veto();
265 }
266 }
267}
268
269void wxThemesPage::OnCheckBox(wxCommandEvent& event)
270{
271 int index = ThemesListBox->GetSelection(); //get Index
272 if(index == wxNOT_FOUND)
273 return;
274
275 m_installTheme[index]= ! m_installTheme[index]; // Toggle install
276
277}
278
279void wxThemesPage::OnListBox(wxCommandEvent& event)
280{
281 int index = ThemesListBox->GetSelection(); //get Index
282 if(index == wxNOT_FOUND)
283 return;
284
285 m_desc->SetLabel(m_Themes_desc[index]); //set Desc
286 m_desc->Wrap(270); // wrap desc
287 m_size->SetLabel(m_Themes_size[index]+wxT(" kb")); //set file size
288 m_InstallCheckBox->SetValue(m_installTheme[index]); // set the install checkbox
289
290 this->GetSizer()->Layout();
291
292}
293
294void wxThemesPage::OnPreviewBtn(wxCommandEvent& event)
295{
296
297 int index = ThemesListBox->GetSelection();
298 if(index == wxNOT_FOUND)
299 return;
300
301 wxString src,dest;
302
303 int pos = m_Themes_image[index].Find('/',true);
304 wxString filename = m_Themes_image[index](pos+1,m_Themes_image[index].Length());
305
306 dest.Printf(wxT("%s" PATH_SEP "download" PATH_SEP "%s"),
307 gv->stdpaths->GetUserDataDir().c_str(),gv->curresolution.c_str());
308
309 if(!wxDirExists(dest))
310 wxMkdir(dest);
311
312 //this is a URL no PATH_SEP
313 src.Printf("%s/data/%s/%s",gv->themes_url.c_str(),gv->curresolution.c_str(),filename.c_str());
314 dest.Printf(wxT("%s" PATH_SEP "download" PATH_SEP "%s" PATH_SEP "%s"),
315 gv->stdpaths->GetUserDataDir().c_str(),gv->curresolution.c_str(),filename.c_str());
316
317 if(DownloadURL(src, dest))
318 {
319 MESG_DIALOG(wxT("Unable to download image."));
320 return;
321 }
322
323 wxBitmap bmp;
324 bmp.LoadFile(dest,wxBITMAP_TYPE_PNG);
325
326 wxThemeImageDialog dlg(this,wxID_ANY,wxT("Preview"),bmp);
327 dlg.ShowModal();
328
329}
330
331void wxThemesPage::OnPageShown(wxWizardEvent& event)
332{
333 // clear Theme info
334 m_Themes.Clear();
335 m_Themes_image.Clear();
336 m_Themes_path.Clear();
337 m_Themes_desc.Clear();
338 m_Themes_size.Clear();
339 m_installTheme.Clear();
340 m_desc->SetLabel(wxT(""));
341 m_size->SetLabel(wxT(""));
342 m_InstallCheckBox->SetValue(false);
343
344 //get correct Themes list
345 wxString src,dest,err;
346
347 src.Printf("%srbutil.php?res=%s",gv->themes_url.c_str(),gv->curresolution.c_str());
348 dest.Printf(wxT("%s" PATH_SEP "download" PATH_SEP "%s.list"),
349 gv->stdpaths->GetUserDataDir().c_str(),gv->curresolution.c_str());
350
351 if(DownloadURL(src, dest))
352 {
353 MESG_DIALOG(wxT("Unable to download themes list."));
354 return;
355 }
356
357 //read and parse Themes list
358 wxString themelistraw;
359 wxFFile themefile;
360 if(!themefile.Open(dest)) //open file
361 {
362 MESG_DIALOG(wxT("Unable to open themes list."));
363 return;
364 }
365 if(!themefile.ReadAll(&themelistraw)) //read complete file
366 {
367 MESG_DIALOG(wxT("Unable to read themes list."));
368 return;
369 }
370 wxRegEx reAll(wxT("<body >(.+)</body>")); //extract body part
371 if(! reAll.Matches(themelistraw))
372 {
373 MESG_DIALOG(wxT("Themes list is in wrong Format."));
374 return;
375 }
376 wxString lines = reAll.GetMatch(themelistraw,1);
377
378 // prepare text
379 lines.Replace(wxT("<br />"),wxT(""),true); //replace <br /> with nothing
380 lines.Replace(wxT("\n"),wxT(""),true); //replace \n with nothing
381 lines.Trim(true); //strip WS at end
382 lines.Trim(false); //strip WS at beginning
383 wxStringTokenizer tkz(lines,wxT("|")); //tokenize it
384
385 while ( tkz.HasMoreTokens() ) // read all entrys
386 {
387 m_Themes.Add(tkz.GetNextToken()); //Theme name
388 m_Themes_path.Add(tkz.GetNextToken()); //Theme path
389 m_Themes_size.Add(tkz.GetNextToken()); //File size
390 m_Themes_image.Add(tkz.GetNextToken()); //Screenshot
391 m_Themes_desc.Add(tkz.GetNextToken()); //Description
392 m_installTheme.Add(false); //Theme should be installed ?
393 }
394
395 // set ThemeList
396 ThemesListBox->Set(m_Themes);
397}
398
399 //////////////////// Ipod Locaction Page /////////////////////////////
138BEGIN_EVENT_TABLE(wxIpodLocationPage,wxWizardPageSimple) 400BEGIN_EVENT_TABLE(wxIpodLocationPage,wxWizardPageSimple)
139 EVT_BUTTON (ID_IPODLOCATION_BTN, wxIpodLocationPage::OnIpodLocationBtn) 401 EVT_BUTTON (ID_IPODLOCATION_BTN, wxIpodLocationPage::OnIpodLocationBtn)
140 EVT_WIZARD_PAGE_CHANGING(wxID_ANY, wxIpodLocationPage::OnWizardPageChanging) 402 EVT_WIZARD_PAGE_CHANGING(wxID_ANY, wxIpodLocationPage::OnWizardPageChanging)
@@ -178,7 +440,7 @@ wxIpodLocationPage::wxIpodLocationPage(wxWizard* parent) : wxWizardPageSimple(pa
178 440
179wxWizardPage* wxIpodLocationPage::GetPrev() const 441wxWizardPage* wxIpodLocationPage::GetPrev() const
180{ 442{
181 if(gv->curbootloadermethod == "ipodpatcher") //if ipod, skip previous 443 if(gv->curbootloadermethod == wxT("ipodpatcher")) //if ipod, skip previous
182 { 444 {
183 if(wxWizardPageSimple::GetPrev()->GetPrev() != NULL) 445 if(wxWizardPageSimple::GetPrev()->GetPrev() != NULL)
184 return wxWizardPageSimple::GetPrev()->GetPrev(); 446 return wxWizardPageSimple::GetPrev()->GetPrev();
@@ -190,13 +452,13 @@ void wxIpodLocationPage::OnWizardPageChanging(wxWizardEvent& event)
190{ 452{
191 if(event.GetDirection()) // going forwards in the Wizard 453 if(event.GetDirection()) // going forwards in the Wizard
192 { 454 {
193 if(gv->curbootloadermethod=="ipodpatcher") 455 if(gv->curbootloadermethod==wxT("ipodpatcher"))
194 { 456 {
195 if(IpodLocationText->GetLabel() == "no Ipod found" || 457 if(IpodLocationText->GetLabel() == wxT("no Ipod found") ||
196 IpodLocationText->GetLabel() =="More than 1 Ipod found" || 458 IpodLocationText->GetLabel() ==wxT("More than 1 Ipod found") ||
197 IpodLocationText->GetLabel() =="") 459 IpodLocationText->GetLabel() ==wxT(""))
198 { 460 {
199 WARN_DIALOG(_("No valid ipod found!"), _("Select Location")); 461 WARN_DIALOG(wxT("No valid ipod found!"), wxT("Select Location"));
200 event.Veto(); //stop pagechanging 462 event.Veto(); //stop pagechanging
201 } 463 }
202 } 464 }
@@ -205,27 +467,27 @@ void wxIpodLocationPage::OnWizardPageChanging(wxWizardEvent& event)
205 467
206void wxIpodLocationPage::OnIpodLocationBtn(wxCommandEvent& event) 468void wxIpodLocationPage::OnIpodLocationBtn(wxCommandEvent& event)
207{ 469{
208 wxLogVerbose("=== begin wxIpodLocationPage::OnIpodLocationBtn"); 470 wxLogVerbose(wxT("=== begin wxIpodLocationPage::OnIpodLocationBtn"));
209 struct ipod_t ipod; 471 struct ipod_t ipod;
210 int n = ipod_scan(&ipod); 472 int n = ipod_scan(&ipod);
211 gv->curbootloader=""; 473 gv->curbootloader=wxT("");
212 474
213 if(n == 0) 475 if(n == 0)
214 IpodLocationText->SetLabel("no Ipod found"); 476 IpodLocationText->SetLabel(wxT("no Ipod found"));
215 else if( n==1) 477 else if( n==1)
216 { 478 {
217 gv->curbootloader="bootloader-"; 479 gv->curbootloader=wxT("bootloader-");
218 gv->curbootloader.Append(ipod.targetname); 480 gv->curbootloader.Append(ipod.targetname);
219 IpodLocationText->SetLabel(ipod.modelstr); 481 IpodLocationText->SetLabel(ipod.modelstr);
220 } 482 }
221 else 483 else
222 IpodLocationText->SetLabel("More than 1 Ipod found"); 484 IpodLocationText->SetLabel(wxT("More than 1 Ipod found"));
223 485
224 if(ipod.macpod) 486 if(ipod.macpod)
225 IpodLocationExtraText->SetLabel("This Ipod is a Mac formated Ipod\n" 487 IpodLocationExtraText->SetLabel(wxT("This Ipod is a Mac formated Ipod\n"
226 "Rockbox will not work on this.\n" 488 "Rockbox will not work on this.\n"
227 "You have to convert it first to Fat32"); 489 "You have to convert it first to Fat32"));
228 wxLogVerbose("=== end wxIpodLocationPage::OnIpodLocationBtn"); 490 wxLogVerbose(wxT("=== end wxIpodLocationPage::OnIpodLocationBtn"));
229 491
230} 492}
231 493
@@ -251,7 +513,7 @@ wxBootLocationPage::wxBootLocationPage(wxWizard* parent) : wxWizardPageSimple(pa
251 WxBoxSizer1->Add(WxBoxSizer3,0, 513 WxBoxSizer1->Add(WxBoxSizer3,0,
252 wxGROW | wxALIGN_CENTER_VERTICAL | wxALL, 5); 514 wxGROW | wxALIGN_CENTER_VERTICAL | wxALL, 5);
253 515
254 if (gv->curdestdir == wxT("")) gv->curdestdir = _("<none>"); 516 if (gv->curdestdir == wxT("")) gv->curdestdir = wxT("<none>");
255 BootLocationText = new wxStaticText(this, wxID_ANY, gv->curdestdir, 517 BootLocationText = new wxStaticText(this, wxID_ANY, gv->curdestdir,
256 wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); 518 wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT);
257 WxBoxSizer3->Add(BootLocationText,1, 519 WxBoxSizer3->Add(BootLocationText,1,
@@ -269,7 +531,7 @@ wxBootLocationPage::wxBootLocationPage(wxWizard* parent) : wxWizardPageSimple(pa
269 531
270wxWizardPage* wxBootLocationPage::GetPrev() const 532wxWizardPage* wxBootLocationPage::GetPrev() const
271{ 533{
272 if(gv->curbootloadermethod != "fwpatcher") 534 if(gv->curbootloadermethod != wxT("fwpatcher"))
273 { 535 {
274 if(wxWizardPageSimple::GetPrev()->GetPrev() != NULL) 536 if(wxWizardPageSimple::GetPrev()->GetPrev() != NULL)
275 return wxWizardPageSimple::GetPrev()->GetPrev(); 537 return wxWizardPageSimple::GetPrev()->GetPrev();
@@ -281,7 +543,7 @@ wxWizardPage* wxBootLocationPage::GetPrev() const
281 543
282wxWizardPage* wxBootLocationPage::GetNext() const 544wxWizardPage* wxBootLocationPage::GetNext() const
283{ 545{
284 if(gv->curbootloadermethod == "ipodpatcher") 546 if(gv->curbootloadermethod == wxT("ipodpatcher"))
285 { 547 {
286 return wxWizardPageSimple::GetNext(); // if ipod then this is not the last page 548 return wxWizardPageSimple::GetNext(); // if ipod then this is not the last page
287 } 549 }
@@ -294,8 +556,8 @@ void wxBootLocationPage::OnWizardPageChanging(wxWizardEvent& event)
294 { 556 {
295 if(!wxDirExists(BootLocationText->GetLabel())) 557 if(!wxDirExists(BootLocationText->GetLabel()))
296 { 558 {
297 WARN_DIALOG(_("You have not selected a valid location for your audio " 559 WARN_DIALOG(wxT("You have not selected a valid location for your audio "
298 "device"), _("Select Location")); 560 "device"), wxT("Select Location"));
299 event.Veto(); 561 event.Veto();
300 } 562 }
301 563
@@ -313,13 +575,13 @@ bool wxBootLocationPage::TransferDataFromWindow()
313void wxBootLocationPage::OnBootLocationBtn(wxCommandEvent& event) 575void wxBootLocationPage::OnBootLocationBtn(wxCommandEvent& event)
314{ 576{
315 const wxString& temp = wxDirSelector( 577 const wxString& temp = wxDirSelector(
316 _("Please select the location of your audio device"), gv->curdestdir); 578 wxT("Please select the location of your audio device"), gv->curdestdir);
317 wxLogVerbose("=== begin wxBootLocationPage::OnBootLocationBtn(event)"); 579 wxLogVerbose(wxT("=== begin wxBootLocationPage::OnBootLocationBtn(event)"));
318 if (!temp.empty()) 580 if (!temp.empty())
319 { 581 {
320 BootLocationText->SetLabel(temp); 582 BootLocationText->SetLabel(temp);
321 } 583 }
322 wxLogVerbose("=== end wxBootLocationPage::OnBootLocationBtn"); 584 wxLogVerbose(wxT("=== end wxBootLocationPage::OnBootLocationBtn"));
323 585
324} 586}
325 587
@@ -368,8 +630,8 @@ void wxFirmwareLocationPage::OnWizardPageChanging(wxWizardEvent& event)
368 { 630 {
369 if( !wxFileExists(gv->curfirmware)) 631 if( !wxFileExists(gv->curfirmware))
370 { 632 {
371 WARN_DIALOG(_("You have not selected a valid location for the firmware " 633 WARN_DIALOG(wxT("You have not selected a valid location for the firmware "
372 "file"), _("Select File")); 634 "file"), wxT("Select File"));
373 event.Veto(); 635 event.Veto();
374 } 636 }
375 } 637 }
@@ -379,8 +641,8 @@ void wxFirmwareLocationPage::OnWizardPageChanging(wxWizardEvent& event)
379void wxFirmwareLocationPage::OnFirmwareFilenameBtn(wxCommandEvent& event) 641void wxFirmwareLocationPage::OnFirmwareFilenameBtn(wxCommandEvent& event)
380{ 642{
381 wxString temp = wxFileSelector( 643 wxString temp = wxFileSelector(
382 _("Please select the location of the original Firmware"), gv->curdestdir,"","","*.hex"); 644 wxT("Please select the location of the original Firmware"), gv->curdestdir,"","","*.hex");
383 wxLogVerbose("=== begin wxFirmwareLocationPage::OnFirmwareFilenameBtn(event)"); 645 wxLogVerbose(wxT("=== begin wxFirmwareLocationPage::OnFirmwareFilenameBtn(event)"));
384 if (!temp.empty()) 646 if (!temp.empty())
385 { 647 {
386 gv->curfirmware=temp; 648 gv->curfirmware=temp;
@@ -391,7 +653,7 @@ void wxFirmwareLocationPage::OnFirmwareFilenameBtn(wxCommandEvent& event)
391 } 653 }
392 FirmwareLocationFilename->SetLabel(temp); 654 FirmwareLocationFilename->SetLabel(temp);
393 } 655 }
394 wxLogVerbose("=== end wxFirmwareLocationPage::OnFirmwareFilenameBtn"); 656 wxLogVerbose(wxT("=== end wxFirmwareLocationPage::OnFirmwareFilenameBtn"));
395} 657}
396 658
397BEGIN_EVENT_TABLE(wxLocationPage,wxWizardPageSimple) 659BEGIN_EVENT_TABLE(wxLocationPage,wxWizardPageSimple)
@@ -413,7 +675,7 @@ wxLocationPage::wxLocationPage(wxWizard* parent) : wxWizardPageSimple(parent)
413 WxBoxSizer1->Add(WxBoxSizer3,0, 675 WxBoxSizer1->Add(WxBoxSizer3,0,
414 wxGROW | wxALIGN_CENTER_VERTICAL | wxALL, 5); 676 wxGROW | wxALIGN_CENTER_VERTICAL | wxALL, 5);
415 677
416 if (gv->curdestdir == wxT("")) gv->curdestdir = _("<none>"); 678 if (gv->curdestdir == wxT("")) gv->curdestdir = wxT("<none>");
417 LocationText = new wxStaticText(this, wxID_ANY, gv->curdestdir, 679 LocationText = new wxStaticText(this, wxID_ANY, gv->curdestdir,
418 wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); 680 wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT);
419 WxBoxSizer3->Add(LocationText,1, 681 WxBoxSizer3->Add(LocationText,1,
@@ -436,8 +698,8 @@ void wxLocationPage::OnWizardPageChanging(wxWizardEvent& event)
436 { 698 {
437 if(!wxDirExists(LocationText->GetLabel())) 699 if(!wxDirExists(LocationText->GetLabel()))
438 { 700 {
439 WARN_DIALOG(_("You have not selected a valid location for your audio " 701 WARN_DIALOG(wxT("You have not selected a valid location for your audio "
440 "device"), _("Select Location")); 702 "device"), wxT("Select Location"));
441 event.Veto(); 703 event.Veto();
442 } 704 }
443 } 705 }
@@ -452,13 +714,13 @@ bool wxLocationPage::TransferDataFromWindow()
452void wxLocationPage::OnLocationBtn(wxCommandEvent& event) 714void wxLocationPage::OnLocationBtn(wxCommandEvent& event)
453{ 715{
454 const wxString& temp = wxDirSelector( 716 const wxString& temp = wxDirSelector(
455 _("Please select the location of your audio device"), gv->curdestdir); 717 wxT("Please select the location of your audio device"), gv->curdestdir);
456 wxLogVerbose("=== begin wxLocationPage::OnLocationBtn(event)"); 718 wxLogVerbose(wxT("=== begin wxLocationPage::OnLocationBtn(event)"));
457 if (!temp.empty()) 719 if (!temp.empty())
458 { 720 {
459 LocationText->SetLabel(temp); 721 LocationText->SetLabel(temp);
460 } 722 }
461 wxLogVerbose("=== end wxLocationPage::OnLocationBtn"); 723 wxLogVerbose(wxT("=== end wxLocationPage::OnLocationBtn"));
462} 724}
463 725
464BEGIN_EVENT_TABLE(wxBuildPage,wxWizardPageSimple) 726BEGIN_EVENT_TABLE(wxBuildPage,wxWizardPageSimple)
@@ -479,17 +741,17 @@ wxBuildPage::wxBuildPage(wxWizard *parent) : wxWizardPageSimple(parent)
479 WxBoxSizer1->Add(WxStaticText1,0,wxGROW | wxALL,5); 741 WxBoxSizer1->Add(WxStaticText1,0,wxGROW | wxALL,5);
480 742
481 wxArrayString* array = new wxArrayString(); 743 wxArrayString* array = new wxArrayString();
482 buf.Printf(_("Rockbox stable version (%s)") , gv->last_release.c_str()); 744 buf.Printf(wxT("Rockbox stable version (%s)") , gv->last_release.c_str());
483 array->Add(buf); 745 array->Add(buf);
484 array->Add(_("Archived Build")); 746 array->Add(wxT("Archived Build"));
485 array->Add(_("Current Build ")); 747 array->Add(wxT("Current Build "));
486 748
487 BuildRadioBox = new wxRadioBox(this, ID_BUILD_BOX, _("Version"), 749 BuildRadioBox = new wxRadioBox(this, ID_BUILD_BOX, wxT("Version"),
488 wxDefaultPosition, wxDefaultSize, *array, 0, wxRA_SPECIFY_ROWS); 750 wxDefaultPosition, wxDefaultSize, *array, 0, wxRA_SPECIFY_ROWS);
489 WxBoxSizer1->Add(BuildRadioBox, 0, wxGROW | wxALL, 5); 751 WxBoxSizer1->Add(BuildRadioBox, 0, wxGROW | wxALL, 5);
490 delete array; 752 delete array;
491 753
492 wxStaticBox* WxStaticBox1 = new wxStaticBox(this, wxID_ANY, _("Details:")); 754 wxStaticBox* WxStaticBox1 = new wxStaticBox(this, wxID_ANY, wxT("Details:"));
493 wxStaticBoxSizer* WxStaticBoxSizer2 = new wxStaticBoxSizer(WxStaticBox1, 755 wxStaticBoxSizer* WxStaticBoxSizer2 = new wxStaticBoxSizer(WxStaticBox1,
494 wxVERTICAL); 756 wxVERTICAL);
495 DetailText = new wxStaticText(this, wxID_ANY, wxT("")); 757 DetailText = new wxStaticText(this, wxID_ANY, wxT(""));
@@ -497,13 +759,13 @@ wxBuildPage::wxBuildPage(wxWizard *parent) : wxWizardPageSimple(parent)
497 WxStaticBoxSizer2->Add(DetailText, 1, wxGROW | wxALL, 5); 759 WxStaticBoxSizer2->Add(DetailText, 1, wxGROW | wxALL, 5);
498 760
499 wxStaticText* WxStaticText2 = new wxStaticText(this, wxID_ANY, 761 wxStaticText* WxStaticText2 = new wxStaticText(this, wxID_ANY,
500 _("Rockbox Utility stores copies of Rockbox it has downloaded on the\n" 762 wxT("Rockbox Utility stores copies of Rockbox it has downloaded on the\n"
501 "local hard disk to save network traffic. If your local copy is\n" 763 "local hard disk to save network traffic. If your local copy is\n"
502 "no longer working, tick this box to download a fresh copy.") ); 764 "no longer working, tick this box to download a fresh copy.") );
503 WxBoxSizer1->Add(WxStaticText2, 0 , wxALL, 5); 765 WxBoxSizer1->Add(WxStaticText2, 0 , wxALL, 5);
504 766
505 NoCacheCheckBox = new wxCheckBox(this, wxID_ANY, 767 NoCacheCheckBox = new wxCheckBox(this, wxID_ANY,
506 _("Don't use locally cached copies of Rockbox") ); 768 wxT("Don't use locally cached copies of Rockbox") );
507 WxBoxSizer1->Add(NoCacheCheckBox, 0, wxALL, 5); 769 WxBoxSizer1->Add(NoCacheCheckBox, 0, wxALL, 5);
508 770
509 SetSizer(WxBoxSizer1); 771 SetSizer(WxBoxSizer1);
@@ -577,7 +839,7 @@ wxFullUninstallPage::wxFullUninstallPage(wxWizard* parent) :
577 wxBoxSizer* WxBoxSizer1 = new wxBoxSizer(wxVERTICAL); 839 wxBoxSizer* WxBoxSizer1 = new wxBoxSizer(wxVERTICAL);
578 840
579 wxStaticText* WxStaticText1 = new wxStaticText(this, wxID_ANY, 841 wxStaticText* WxStaticText1 = new wxStaticText(this, wxID_ANY,
580 _("Rockbox Utility normally uninstalls Rockbox using an uninstall\n" 842 wxT("Rockbox Utility normally uninstalls Rockbox using an uninstall\n"
581 "file created during installation. This means that when Rockbox is\n" 843 "file created during installation. This means that when Rockbox is\n"
582 "uninstalled all your configuration files are preserved. However,\n" 844 "uninstalled all your configuration files are preserved. However,\n"
583 "you can also perform a full uninstall, which will completely\n" 845 "you can also perform a full uninstall, which will completely\n"
@@ -588,7 +850,7 @@ wxFullUninstallPage::wxFullUninstallPage(wxWizard* parent) :
588 WxBoxSizer1->Add(WxStaticText1,0,wxGROW | wxALL,5); 850 WxBoxSizer1->Add(WxStaticText1,0,wxGROW | wxALL,5);
589 851
590 FullCheckBox = new wxCheckBox(this, wxID_ANY, 852 FullCheckBox = new wxCheckBox(this, wxID_ANY,
591 _("Perform a full uninstall")); 853 wxT("Perform a full uninstall"));
592 WxBoxSizer1->Add(FullCheckBox, 0, wxALL, 5); 854 WxBoxSizer1->Add(FullCheckBox, 0, wxALL, 5);
593 855
594 SetSizer(WxBoxSizer1); 856 SetSizer(WxBoxSizer1);
diff --git a/rbutil/wizard_pages.h b/rbutil/wizard_pages.h
index 1b6dc5be78..d866024881 100644
--- a/rbutil/wizard_pages.h
+++ b/rbutil/wizard_pages.h
@@ -24,6 +24,60 @@
24 24
25#include "rbutil.h" 25#include "rbutil.h"
26 26
27
28////// Dialog for Preview of Theme //////////////
29class wxThemeImageDialog : public wxDialog
30{
31private:
32 DECLARE_EVENT_TABLE()
33
34public:
35 wxThemeImageDialog(wxWindow* parent,wxWindowID id,wxString title,wxBitmap bmp);
36 void OnPaint(wxPaintEvent& WXUNUSED(event));
37
38private:
39 wxBitmap m_bitmap;
40};
41
42
43
44class wxThemesPage : public wxWizardPageSimple
45{
46private:
47 DECLARE_EVENT_TABLE()
48
49public:
50 enum {
51 ID_PREVIEW_BTN = 1000,
52 ID_LISTBOX = 1001,
53 ID_INSTALLCHECKBOX = 1002,
54 };
55
56public:
57 wxThemesPage(wxWizard *parent);
58 virtual bool TransferDataFromWindow(void);
59 void OnPageShown(wxWizardEvent& event);
60 void OnPreviewBtn(wxCommandEvent& event);
61 void OnListBox(wxCommandEvent& event);
62 void OnCheckBox(wxCommandEvent& event);
63 void OnWizardPageChanging(wxWizardEvent& event);
64
65public:
66 wxListBox* ThemesListBox;
67 wxButton* m_previewBtn;
68 wxStaticText* m_desc;
69 wxStaticText* m_size;
70 wxCheckBox* m_InstallCheckBox;
71
72 wxArrayString m_Themes;
73 wxArrayString m_Themes_path;
74 wxArrayString m_Themes_image;
75 wxArrayString m_Themes_desc;
76 wxArrayString m_Themes_size;
77 wxArrayInt m_installTheme;
78
79};
80
27class wxBootPlatformPage : public wxWizardPageSimple 81class wxBootPlatformPage : public wxWizardPageSimple
28{ 82{
29public: 83public: