| 1337 | int (*menufilesortcmp[])(const char **, const char **) = { stringsort, stringsortrev, stringsortignorecase, stringsortignorecaserev }; |
| 1338 | |
| 1339 | void gmenu::init() |
| 1340 | { |
| 1341 | if(!menuseldescbgcolor) menuseldescbgcolor = new color(0.2f, 0.2f, 0.2f, 0.2f); |
| 1342 | if(dirlist && dirlist->dir && dirlist->ext) |
| 1343 | { |
| 1344 | items.deletecontents(); |
| 1345 | |
| 1346 | if(dirlist->subdiraction) |
| 1347 | { |
| 1348 | vector<char *> subdirs; |
| 1349 | if(dirlist->subdirdots) subdirs.add(newstring("..")); |
| 1350 | listsubdirs(dirlist->dir, subdirs, stringsort); |
| 1351 | loopv(subdirs) |
| 1352 | { |
| 1353 | defformatstring(cdir)("\fs\f1[%s]\fr", subdirs[i]); |
| 1354 | defformatstring(act)("%s %s", dirlist->subdiraction, escapestring(subdirs[i])); |
| 1355 | items.add(new mitemtext(this, newstring(cdir), newstring(act), NULL, NULL, NULL)); |
| 1356 | } |
| 1357 | } |
| 1358 | |
| 1359 | defformatstring(sortorderalias)("menufilesort_%s", dirlist->ext); |
| 1360 | int sortorderindex = 0; |
| 1361 | const char *customsortorder = getalias(sortorderalias); |
| 1362 | if(customsortorder) sortorderindex = getlistindex(customsortorder, menufilesortorders, true, 0); |
| 1363 | |
| 1364 | vector<char *> files; |
| 1365 | listfiles(dirlist->dir, dirlist->ext, files, menufilesortcmp[sortorderindex]); |
| 1366 | |
| 1367 | string searchfileuc; |
| 1368 | if(dirlist->searchfile) |
| 1369 | { |
| 1370 | const char *searchfilealias = getalias(dirlist->searchfile); |
| 1371 | copystring(searchfileuc, searchfilealias ? searchfilealias : dirlist->searchfile); |
| 1372 | strtoupper(searchfileuc); |
| 1373 | } |
| 1374 | |
| 1375 | loopv(files) |
| 1376 | { |
| 1377 | char *f = files[i], *d = (strcmp(dirlist->ext, "cgz") || dirlist->searchfile) && browsefiledesc ? getfiledesc(dirlist->dir, f, dirlist->ext) : NULL; |
| 1378 | bool filefound = false; |
| 1379 | if(dirlist->searchfile) |
| 1380 | { |
| 1381 | string fuc, duc; |
| 1382 | copystring(fuc, f); |
| 1383 | strtoupper(fuc); |
| 1384 | copystring(duc, d ? d : ""); |
| 1385 | strtoupper(duc); |
| 1386 | if(strstr(fuc, searchfileuc) || strstr(duc, searchfileuc)) filefound = true; |
| 1387 | } |
| 1388 | |
| 1389 | if(dirlist->image) |
| 1390 | { |
| 1391 | string fullname = ""; |
| 1392 | if(dirlist->dir[0]) formatstring(fullname)("%s/%s", dirlist->dir, f); |
| 1393 | else copystring(fullname, f); |
| 1394 | if(dirlist->ext) |
| 1395 | { |
| 1396 | concatstring(fullname, "."); |
no test coverage detected