65
65
#include "DNA_image_types.h"
66
66
#include "DNA_ipo_types.h"
67
67
#include "DNA_vfont_types.h"
68
#include "DNA_material_types.h"
68
69
#include "DNA_mesh_types.h"
69
70
#include "DNA_object_types.h"
70
71
#include "DNA_texture_types.h"
310
316
if ((entry1->type & S_IFMT) < (entry2->type & S_IFMT)) return (-1);
311
317
if ((entry1->type & S_IFMT) > (entry2->type & S_IFMT)) return (1);
312
return (strcasecmp(entry1->relname,entry2->relname));
319
/* make sure "." and ".." are always first */
320
if( strcmp(entry1->relname, ".")==0 ) return (-1);
321
if( strcmp(entry2->relname, ".")==0 ) return (1);
322
if( strcmp(entry1->relname, "..")==0 ) return (-1);
324
return (BLI_strcasecmp(entry1->relname,entry2->relname));
315
327
static int compare_date(const void *a1, const void *a2)
331
343
if ((entry1->type & S_IFMT) < (entry2->type & S_IFMT)) return (-1);
332
344
if ((entry1->type & S_IFMT) > (entry2->type & S_IFMT)) return (1);
335
if ( entry1->s.st_ctime < entry2->s.st_ctime) return 1;
336
if ( entry1->s.st_ctime > entry2->s.st_ctime) return -1;
346
/* make sure "." and ".." are always first */
347
if( strcmp(entry1->relname, ".")==0 ) return (-1);
348
if( strcmp(entry2->relname, ".")==0 ) return (1);
349
if( strcmp(entry1->relname, "..")==0 ) return (-1);
338
351
if ( entry1->s.st_mtime < entry2->s.st_mtime) return 1;
339
352
if ( entry1->s.st_mtime > entry2->s.st_mtime) return -1;
340
else return strcasecmp(entry1->relname,entry2->relname);
354
else return BLI_strcasecmp(entry1->relname,entry2->relname);
343
357
static int compare_size(const void *a1, const void *a2)
359
373
if ((entry1->type & S_IFMT) < (entry2->type & S_IFMT)) return (-1);
360
374
if ((entry1->type & S_IFMT) > (entry2->type & S_IFMT)) return (1);
376
/* make sure "." and ".." are always first */
377
if( strcmp(entry1->relname, ".")==0 ) return (-1);
378
if( strcmp(entry2->relname, ".")==0 ) return (1);
379
if( strcmp(entry1->relname, "..")==0 ) return (-1);
362
381
if ( entry1->s.st_size < entry2->s.st_size) return 1;
363
382
if ( entry1->s.st_size > entry2->s.st_size) return -1;
364
else return strcasecmp(entry1->relname,entry2->relname);
383
else return BLI_strcasecmp(entry1->relname,entry2->relname);
543
565
|| BLI_testextensie(file->relname, ".pict")
544
566
|| BLI_testextensie(file->relname, ".pntg") //macpaint
545
567
|| BLI_testextensie(file->relname, ".qtif")
546
#ifdef WITH_FREEIMAGE
547
|| BLI_testextensie(file->relname, ".jng")
548
|| BLI_testextensie(file->relname, ".mng")
549
|| BLI_testextensie(file->relname, ".pbm")
550
|| BLI_testextensie(file->relname, ".pgm")
551
|| BLI_testextensie(file->relname, ".ppm")
552
|| BLI_testextensie(file->relname, ".wbmp")
553
|| BLI_testextensie(file->relname, ".cut")
554
|| BLI_testextensie(file->relname, ".ico")
555
|| BLI_testextensie(file->relname, ".koala")
556
|| BLI_testextensie(file->relname, ".pcd")
557
|| BLI_testextensie(file->relname, ".pcx")
558
|| BLI_testextensie(file->relname, ".ras")
560
568
|| BLI_testextensie(file->relname, ".sgi")) {
561
569
file->flags |= IMAGEFILE;
575
583
|| BLI_testextensie(file->relname, ".png")
576
584
|| BLI_testextensie(file->relname, ".iff")
577
585
|| BLI_testextensie(file->relname, ".lbm")
578
#ifdef WITH_FREEIMAGE
579
|| BLI_testextensie(file->relname, ".jng")
580
|| BLI_testextensie(file->relname, ".mng")
581
|| BLI_testextensie(file->relname, ".pbm")
582
|| BLI_testextensie(file->relname, ".pgm")
583
|| BLI_testextensie(file->relname, ".ppm")
584
|| BLI_testextensie(file->relname, ".wbmp")
585
|| BLI_testextensie(file->relname, ".cut")
586
|| BLI_testextensie(file->relname, ".ico")
587
|| BLI_testextensie(file->relname, ".koala")
588
|| BLI_testextensie(file->relname, ".pcd")
589
|| BLI_testextensie(file->relname, ".pcx")
590
|| BLI_testextensie(file->relname, ".ras")
591
|| BLI_testextensie(file->relname, ".gif")
592
|| BLI_testextensie(file->relname, ".psd")
593
|| BLI_testextensie(file->relname, ".tif")
594
|| BLI_testextensie(file->relname, ".tiff")
596
586
|| BLI_testextensie(file->relname, ".sgi")) {
597
587
file->flags |= IMAGEFILE;
851
841
if(sfile->collums<1) sfile->collums= 1;
852
842
else if(sfile->collums>8) sfile->collums= 8;
854
if((U.flag & USER_FSCOLLUM)==0) if(sfile->type!=FILE_MAIN) sfile->collums= 1;
844
/* this flag aint yet defined in user menu, needed? */
845
// if((U.flag & USER_FSCOLLUM)==0) sfile->collums= 1;
856
847
collumwidth= (textrct.xmax-textrct.xmin)/sfile->collums;
1009
static int calc_filesel_regel(SpaceFile *sfile, int nr, int *valx, int *valy)
1000
static int calc_filesel_line(SpaceFile *sfile, int nr, int *valx, int *valy)
1011
/* get screen coordinate of a 'regel', dutch for line */
1002
/* get screen coordinate of a line */
1014
1005
nr-= sfile->ofs;
1070
glDrawBuffer(GL_FRONT);
1072
glScissor(curarea->winrct.xmin, curarea->winrct.ymin, curarea->winx-12, curarea->winy);
1074
if( calc_filesel_regel(sfile, old, &x, &y) ) {
1076
printregel(sfile, sfile->filelist+old, x, y);
1078
if( calc_filesel_regel(sfile, newi, &x, &y) ) {
1079
printregel(sfile, sfile->filelist+newi, x, y);
1082
glScissor(curarea->winrct.xmin, curarea->winrct.ymin, curarea->winx, curarea->winy);
1084
glFinish(); /* for geforce, to show it in the frontbuffer */
1085
glDrawBuffer(GL_BACK);
1058
// removed frontbuffer draw here
1088
1060
scrarea_queue_winredraw(curarea);
1125
1097
files= sfile->filelist+sfile->ofs;
1126
1098
for(a= sfile->ofs; a<sfile->totfile; a++, files++) {
1128
if( calc_filesel_regel(sfile, a, &x, &y)==0 ) break;
1100
if( calc_filesel_line(sfile, a, &x, &y)==0 ) break;
1130
printregel(sfile, files, x, y);
1102
print_line(sfile, files, x, y);
1133
1105
/* clear drawing errors, with text at the right hand side: */
1167
1139
else calc_file_rcts(sfile);
1170
sprintf(name, "win %d", curarea->win);
1171
block= uiNewBlock(&curarea->uiblocks, name, UI_EMBOSS, UI_HELV, curarea->win);
1142
sprintf(name, "win %d", sa->win);
1143
block= uiNewBlock(&sa->uiblocks, name, UI_EMBOSS, UI_HELV, sa->win);
1173
1145
uiSetButLock( sfile->type==FILE_MAIN && sfile->returnfunc, NULL);
1200
1172
draw_filetext(sfile);
1202
1174
/* others diskfree etc ? */
1203
scrarea_queue_headredraw(curarea);
1175
scrarea_queue_headredraw(sa);
1205
1177
myortho2(-0.375, (float)(sa->winx)-0.375, -0.375, (float)(sa->winy)-0.375);
1206
1178
draw_area_emboss(sa);
1208
curarea->win_swap= WIN_BACK_OK;
1180
sa->win_swap= WIN_BACK_OK;
1211
1183
static void do_filescroll(SpaceFile *sfile)
1326
1296
else if(type==FILE_LOADLIB) {
1327
1297
strcpy(sfile->dir, name);
1328
1298
if( is_a_library(sfile, temp, group) ) {
1329
/* to force a reload of the library-filelist */
1330
if(sfile->libfiledata==0) {
1331
freefilelist(sfile);
1299
/* force a reload of the library-filelist */
1300
freefilelist(sfile);
1335
1303
split_sfile(sfile, name);
1336
1304
if(sfile->libfiledata) BLO_blendhandle_close(sfile->libfiledata);
1337
sfile->libfiledata= 0;
1305
sfile->libfiledata= NULL;
1340
1308
else { /* FILE_BLENDER */
1543
1511
sfile->returnfunc((char*) (long)sfile->retval);
1546
if(strncmp(sfile->title, "SAVE", 4)==0) free_filesel_spec(sfile->dir);
1514
if(strncmp(sfile->title, "Save", 4)==0) free_filesel_spec(sfile->dir);
1515
if(strncmp(sfile->title, "Export", 6)==0) free_filesel_spec(sfile->dir);
1548
1517
strcpy(name, sfile->dir);
1549
1518
strcat(name, sfile->file);
1832
1801
sfile= curarea->spacedata.first;
1833
1802
if(sfile==0) return;
1834
1803
if(sfile->filelist==0) {
1835
/* but do buttons */
1836
if(val && event==LEFTMOUSE) {
1837
/* FrontbufferButs(TRUE); */
1838
/* event= DoButtons(); */
1839
/* FrontbufferButs(FALSE); */
1840
/* NIET de headerbuttons! */
1841
/* if(event) do_filesel_buttons(event, sfile); */
1907
/* FrontbufferButs(TRUE); */
1908
/* event= DoButtons(); */
1909
/* FrontbufferButs(FALSE); */
1910
/* NOT the headerbuttons! */
1911
/* if(event) do_filesel_buttons(event, sfile); */
1914
1868
case RIGHTMOUSE:
1915
1869
act= find_active_file(sfile, mval[0], mval[1]);
2284
2238
static void library_to_filelist(SpaceFile *sfile)
2240
LinkNode *l, *names;
2241
int ok, i, nnames, idcode;
2242
char filename[FILE_MAXDIR+FILE_MAXFILE];
2286
2243
char dir[FILE_MAXDIR], group[24];
2287
int ok, i, nnames, idcode;
2288
LinkNode *l, *names;
2290
2245
/* name test */
2291
2246
ok= is_a_library(sfile, dir, group);
2254
BLI_strncpy(filename, G.sce, sizeof(filename)); // G.sce = last file loaded, for UI
2299
2256
/* there we go */
2300
2257
/* for the time being only read filedata when libfiledata==0 */
2301
2258
if (sfile->libfiledata==0) {
2302
sfile->libfiledata= BLO_blendhandle_from_file(dir);
2259
sfile->libfiledata= BLO_blendhandle_from_file(dir); // this sets G.sce, we dont want it
2303
2261
if(sfile->libfiledata==0) return;
2319
2277
sfile->filelist= malloc(sfile->totfile * sizeof(*sfile->filelist));
2320
2278
memset(sfile->filelist, 0, sfile->totfile * sizeof(*sfile->filelist));
2322
sfile->filelist[0].relname= strdup(".");
2280
sfile->filelist[0].relname= BLI_strdup(".");
2323
2281
sfile->filelist[0].type |= S_IFDIR;
2324
sfile->filelist[1].relname= strdup("..");
2282
sfile->filelist[1].relname= BLI_strdup("..");
2325
2283
sfile->filelist[1].type |= S_IFDIR;
2327
2285
for (i=0, l= names; i<nnames; i++, l= l->next) {
2328
char *blockname= l->link;
2286
char *blockname= BLI_strdup(l->link);
2330
2288
sfile->filelist[i + 2].relname= blockname;
2332
2290
sfile->filelist[i + 2].type |= S_IFDIR;
2335
BLI_linklist_free(names, NULL);
2293
BLI_linklist_free(names, free);
2337
2295
qsort(sfile->filelist, sfile->totfile, sizeof(struct direntry), compare_name);
2440
2402
sfile->filelist[a].type |= S_IFDIR;
2443
sfile->filelist[0].relname= strdup("..");
2444
sfile->filelist[1].relname= strdup(".");
2445
sfile->filelist[2].relname= strdup("Scene");
2446
sfile->filelist[3].relname= strdup("Object");
2447
sfile->filelist[4].relname= strdup("Mesh");
2448
sfile->filelist[5].relname= strdup("Curve");
2449
sfile->filelist[6].relname= strdup("Metaball");
2450
sfile->filelist[7].relname= strdup("Material");
2451
sfile->filelist[8].relname= strdup("Texture");
2452
sfile->filelist[9].relname= strdup("Image");
2453
sfile->filelist[10].relname= strdup("Ika");
2454
sfile->filelist[11].relname= strdup("Wave");
2455
sfile->filelist[12].relname= strdup("Lattice");
2456
sfile->filelist[13].relname= strdup("Lamp");
2457
sfile->filelist[14].relname= strdup("Camera");
2458
sfile->filelist[15].relname= strdup("Ipo");
2459
sfile->filelist[16].relname= strdup("World");
2460
sfile->filelist[17].relname= strdup("Screen");
2461
sfile->filelist[18].relname= strdup("VFont");
2462
sfile->filelist[19].relname= strdup("Text");
2463
sfile->filelist[20].relname= strdup("Armature");
2464
sfile->filelist[21].relname= strdup("Action");
2405
sfile->filelist[0].relname= BLI_strdup("..");
2406
sfile->filelist[1].relname= BLI_strdup(".");
2407
sfile->filelist[2].relname= BLI_strdup("Scene");
2408
sfile->filelist[3].relname= BLI_strdup("Object");
2409
sfile->filelist[4].relname= BLI_strdup("Mesh");
2410
sfile->filelist[5].relname= BLI_strdup("Curve");
2411
sfile->filelist[6].relname= BLI_strdup("Metaball");
2412
sfile->filelist[7].relname= BLI_strdup("Material");
2413
sfile->filelist[8].relname= BLI_strdup("Texture");
2414
sfile->filelist[9].relname= BLI_strdup("Image");
2415
sfile->filelist[10].relname= BLI_strdup("Ika");
2416
sfile->filelist[11].relname= BLI_strdup("Wave");
2417
sfile->filelist[12].relname= BLI_strdup("Lattice");
2418
sfile->filelist[13].relname= BLI_strdup("Lamp");
2419
sfile->filelist[14].relname= BLI_strdup("Camera");
2420
sfile->filelist[15].relname= BLI_strdup("Ipo");
2421
sfile->filelist[16].relname= BLI_strdup("World");
2422
sfile->filelist[17].relname= BLI_strdup("Screen");
2423
sfile->filelist[18].relname= BLI_strdup("VFont");
2424
sfile->filelist[19].relname= BLI_strdup("Text");
2425
sfile->filelist[20].relname= BLI_strdup("Armature");
2426
sfile->filelist[21].relname= BLI_strdup("Action");
2465
2427
qsort(sfile->filelist, sfile->totfile, sizeof(struct direntry), compare_name);
2492
2454
if(sfile->returnfunc==0) {
2493
2455
memset( &(sfile->filelist[0]), 0 , sizeof(struct direntry));
2494
sfile->filelist[0].relname= strdup(".");
2456
sfile->filelist[0].relname= BLI_strdup(".");
2495
2457
sfile->filelist[0].type |= S_IFDIR;
2496
2458
memset( &(sfile->filelist[1]), 0 , sizeof(struct direntry));
2497
sfile->filelist[1].relname= strdup("..");
2459
sfile->filelist[1].relname= BLI_strdup("..");
2498
2460
sfile->filelist[1].type |= S_IFDIR;