diff --git a/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj b/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj index 6fcefedaaeb..9f0b8798724 100644 --- a/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj +++ b/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj @@ -649,10 +649,6 @@ RelativePath="..\..\..\source\blender\blenkernel\intern\modifier.c" > - - diff --git a/source/blender/editors/include/ED_fileselect.h b/source/blender/editors/include/ED_fileselect.h index 55399691b3d..05307848088 100644 --- a/source/blender/editors/include/ED_fileselect.h +++ b/source/blender/editors/include/ED_fileselect.h @@ -51,9 +51,6 @@ typedef struct FileSelectParams { char *pupmenu; /* allows menu for save options - result stored in menup */ short menu; /* currently selected option in pupmenu */ /* XXX --- end unused -- */ - - struct FileList *files; - } FileSelectParams; FileSelectParams* ED_fileselect_get_params(const struct bContext *C); diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index 5bf5718f97f..78e4116faef 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -159,11 +159,9 @@ void file_draw_buttons(const bContext *C, ARegion *ar) slen = UI_GetStringWidth(G.font, sfile->params->title, 0); loadbutton= slen > 60 ? slen + 20 : MAX2(80, 20+UI_GetStringWidth(G.font, params->title, 0)); if(ar->v2d.mask.xmax-ar->v2d.mask.xmin > loadbutton+20) { - /* XXX - if(simasel->title[0]==0) { + if(params->title[0]==0) { loadbutton= 0; } - */ } else { loadbutton= 0; @@ -295,7 +293,7 @@ void file_calc_previews(const bContext *C, ARegion *ar) sfile->tile_h = sfile->prv_h + 2*sfile->prv_border_y + U.fontsize*3/2; width= (v2d->cur.xmax - v2d->cur.xmin - 2*sfile->tile_border_x); columns= file_view_columns(sfile, v2d); - rows= filelist_numfiles(params->files)/columns + 1; // XXX dirty, modulo is zero + rows= filelist_numfiles(sfile->files)/columns + 1; // XXX dirty, modulo is zero height= rows*(sfile->tile_h+sfile->tile_border_y) + sfile->tile_border_y*2; } else { sfile->prv_w = 0; @@ -308,7 +306,7 @@ void file_calc_previews(const bContext *C, ARegion *ar) sfile->tile_h = U.fontsize*3/2; height= v2d->cur.ymax - v2d->cur.ymin; rows = file_view_rows(sfile, v2d); - columns = filelist_numfiles(params->files)/rows + 1; // XXX dirty, modulo is zero + columns = filelist_numfiles(sfile->files)/rows + 1; // XXX dirty, modulo is zero width = columns * (sfile->tile_w + sfile->tile_border_x) + sfile->tile_border_x*2; } @@ -321,7 +319,7 @@ void file_draw_previews(const bContext *C, ARegion *ar) FileSelectParams* params=sfile->params; View2D *v2d= &ar->v2d; static double lasttime= 0; - struct FileList* files = params->files; + struct FileList* files = sfile->files; int numfiles; struct direntry *file; @@ -474,7 +472,7 @@ void file_draw_list(const bContext *C, ARegion *ar) { SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); FileSelectParams* params = sfile->params; - struct FileList* files = params->files; + struct FileList* files = sfile->files; struct direntry *file; int numfiles; int colorid = 0; diff --git a/source/blender/editors/space_file/file_header.c b/source/blender/editors/space_file/file_header.c index 5ed0504e69e..2aeb8ed0684 100644 --- a/source/blender/editors/space_file/file_header.c +++ b/source/blender/editors/space_file/file_header.c @@ -103,7 +103,7 @@ static void do_file_header_buttons(bContext *C, void *arg, int event) SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); switch(event) { case B_SORTIMASELLIST: - filelist_sort(sfile->params->files, sfile->params->sort); + filelist_sort(sfile->files, sfile->params->sort); WM_event_add_notifier(C, NC_WINDOW, NULL); break; case B_RELOADIMASELDIR: diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c index 3b5843f4c28..d9e831c84da 100644 --- a/source/blender/editors/space_file/file_ops.c +++ b/source/blender/editors/space_file/file_ops.c @@ -67,7 +67,7 @@ static void set_active_file_thumbs(SpaceFile *sfile, FileSelectParams* params, s int active_file = -1; struct direntry* file; int offsetx, offsety; - int numfiles = filelist_numfiles(params->files); + int numfiles = filelist_numfiles(sfile->files); int columns; View2D* v2d = &ar->v2d; @@ -82,7 +82,7 @@ static void set_active_file_thumbs(SpaceFile *sfile, FileSelectParams* params, s { params->active_file = active_file; if (params->selstate & ACTIVATE) { - file = filelist_file(params->files, params->active_file); + file = filelist_file(sfile->files, params->active_file); file->flags |= ACTIVE; } } @@ -94,7 +94,7 @@ static void set_active_file(SpaceFile *sfile, FileSelectParams* params, struct A int offsetx, offsety; float x,y; int active_file = -1; - int numfiles = filelist_numfiles(params->files); + int numfiles = filelist_numfiles(sfile->files); int rows; struct direntry* file; @@ -109,7 +109,7 @@ static void set_active_file(SpaceFile *sfile, FileSelectParams* params, struct A { params->active_file = active_file; if (params->selstate & ACTIVATE) { - file = filelist_file(params->files, params->active_file); + file = filelist_file(sfile->files, params->active_file); file->flags |= ACTIVE; } } @@ -128,7 +128,7 @@ static void set_active_bookmark(SpaceFile *sfile, FileSelectParams* params, stru static void mouse_select(SpaceFile* sfile, FileSelectParams* params, ARegion* ar, short *mval) { - int numfiles = filelist_numfiles(params->files); + int numfiles = filelist_numfiles(sfile->files); if(mval[0]>ar->v2d.mask.xmin && mval[0]v2d.mask.xmax && mval[1]>ar->v2d.mask.ymin && mval[1]v2d.mask.ymax) { params->selstate = NOTACTIVE; @@ -138,7 +138,7 @@ static void mouse_select(SpaceFile* sfile, FileSelectParams* params, ARegion* ar set_active_file(sfile, params, ar, mval); } if (params->active_file >= 0 && params->active_file < numfiles) { - struct direntry* file = filelist_file(params->files, params->active_file); + struct direntry* file = filelist_file(sfile->files, params->active_file); if(file && S_ISDIR(file->type)) { /* the path is too long and we are not going up! */ @@ -157,8 +157,8 @@ static void mouse_select(SpaceFile* sfile, FileSelectParams* params, ARegion* ar params->file[0] = '\0'; BLI_cleanup_dir(G.sce, params->dir); } - filelist_setdir(params->files, params->dir); - filelist_free(params->files); + filelist_setdir(sfile->files, params->dir); + filelist_free(sfile->files); params->active_file = -1; } } @@ -194,8 +194,8 @@ static void mouse_select_bookmark(SpaceFile* sfile, ARegion* ar, short *mval) FileSelectParams* params = sfile->params; BLI_strncpy(params->dir, selected, sizeof(params->dir)); BLI_cleanup_dir(G.sce, params->dir); - filelist_free(params->files); - filelist_setdir(params->files, params->dir); + filelist_free(sfile->files); + filelist_setdir(sfile->files, params->dir); params->file[0] = '\0'; params->active_file = -1; } @@ -208,9 +208,6 @@ static int file_select_invoke(bContext *C, wmOperator *op, wmEvent *event) SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); short mval[2]; - /* note; otherwise opengl select won't work. do this for every glSelectBuffer() */ - wmSubWindowSet(CTX_wm_window(C), ar->swinid); - mval[0]= event->x - ar->winrct.xmin; mval[1]= event->y - ar->winrct.ymin; mouse_select(sfile, sfile->params, ar, mval); @@ -238,9 +235,6 @@ static int bookmark_select_invoke(bContext *C, wmOperator *op, wmEvent *event) SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); short mval[2]; - /* note; otherwise opengl select won't work. do this for every glSelectBuffer() */ - wmSubWindowSet(CTX_wm_window(C), ar->swinid); - mval[0]= event->x - ar->winrct.xmin; mval[1]= event->y - ar->winrct.ymin; mouse_select_bookmark(sfile, ar, mval); diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c index fade08992c9..404fddd9d48 100644 --- a/source/blender/editors/space_file/filesel.c +++ b/source/blender/editors/space_file/filesel.c @@ -104,7 +104,6 @@ short ED_fileselect_set_params(const struct bContext *C, int type, const char *t if (!sfile->params) { sfile->params = MEM_callocN(sizeof(FileSelectParams), "fileselparams"); - sfile->params->files = filelist_new(); } params = sfile->params; @@ -132,14 +131,14 @@ short ED_fileselect_set_params(const struct bContext *C, int type, const char *t BLI_strncpy(params->dir, dir, sizeof(params->dir)); BLI_make_file_string(G.sce, params->dir, dir, ""); /* XXX needed ? - also solve G.sce */ - filelist_settype(params->files, type); - filelist_setdir(params->files, params->dir); + filelist_settype(sfile->files, type); + filelist_setdir(sfile->files, params->dir); BLI_cleanup_dir(G.sce, params->dir); /* XXX solve G.sce */ /* free: filelist and libfiledata became incorrect */ - if (params->files) { - filelist_free(params->files); - filelist_freelib(params->files); + if (sfile->files) { + filelist_free(sfile->files); + filelist_freelib(sfile->files); } } break; diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c index d5d16c07417..ab3554261d3 100644 --- a/source/blender/editors/space_file/space_file.c +++ b/source/blender/editors/space_file/space_file.c @@ -76,19 +76,11 @@ static SpaceLink *file_new(const bContext *C) sfile= MEM_callocN(sizeof(SpaceFile), "initfile"); sfile->spacetype= SPACE_FILE; sfile->params= MEM_callocN(sizeof(FileSelectParams), "fileselparams"); - sfile->params->files = filelist_new(); - - // ED_fileselect_set_params(C, FILE_UNIX, "Load File", "F:\\photos\\2008_Kos", NULL, NULL, 0, 0, 0); - - /* XXX move to context - sfile->dir[0]= '/'; - strcpy(sfile->dir, "F:\\photos\\2008_Kos"); - sfile->type= FILE_UNIX; - strcpy(sfile->title, "Load"); - sfile->prv_h = 96; - sfile->prv_w = 96; - sfile->files = NULL; - */ + sfile->files = filelist_new(); + + ED_fileselect_set_params(C, FILE_UNIX, "", "/", 0, 0, 0); + filelist_setdir(sfile->files, sfile->params->dir); + filelist_settype(sfile->files, sfile->params->type); /* header */ ar= MEM_callocN(sizeof(ARegion), "header for file"); @@ -126,38 +118,49 @@ static void file_free(SpaceLink *sl) { SpaceFile *sfile= (SpaceFile *) sl; + if(sfile->files) { + filelist_free(sfile->files); + filelist_freelib(sfile->files); + MEM_freeN(sfile->files); + sfile->files = 0; + } + if (sfile->params) { - if(sfile->params->files) { - filelist_free(sfile->params->files); - filelist_freelib(sfile->params->files); - MEM_freeN(sfile->params->files); - sfile->params->files = 0; - } if(sfile->params->pupmenu) MEM_freeN(sfile->params->pupmenu); MEM_freeN(sfile->params); sfile->params = 0; } + if (sfile->op) { + WM_operator_free(sfile->op); + } } /* spacetype; init callback */ static void file_init(struct wmWindowManager *wm, ScrArea *sa) -{ +{ } static SpaceLink *file_duplicate(SpaceLink *sl) { + SpaceFile *sfileo= (SpaceFile*)sl; SpaceFile *sfilen= MEM_dupallocN(sl); /* clear or remove stuff from old */ - + sfilen->op = NULL; // XXX check if operator can be duplicated + + sfilen->params= MEM_dupallocN(sfileo->params); + sfilen->params->pupmenu = NULL; + sfilen->files = filelist_new(); + filelist_setdir(sfilen->files, sfilen->params->dir); + filelist_settype(sfilen->files, sfilen->params->type); + return (SpaceLink *)sfilen; } - /* add handlers, stuff you only do once or on area/region changes */ static void file_main_area_init(wmWindowManager *wm, ARegion *ar) { @@ -173,32 +176,32 @@ static void file_main_area_init(wmWindowManager *wm, ARegion *ar) static void file_main_area_draw(const bContext *C, ARegion *ar) { /* draw entirely, view changes should be handled here */ -// SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); FileSelectParams* params = ED_fileselect_get_params(C); View2D *v2d= &ar->v2d; View2DScrollers *scrollers; float col[3]; - if (!params->files) { - params->files = filelist_new(); - filelist_setdir(params->files, params->dir); - filelist_settype(params->files, params->type); + if (!sfile->files) { + sfile->files = filelist_new(); + filelist_setdir(sfile->files, params->dir); + filelist_settype(sfile->files, params->type); } - if (filelist_empty(params->files)) + if (filelist_empty(sfile->files)) { unsigned int filter = 0; - filelist_hidedot(params->files, params->flag & FILE_HIDE_DOT); + filelist_hidedot(sfile->files, params->flag & FILE_HIDE_DOT); if (params->flag & FILE_FILTER) { filter = params->filter ; } else { filter = 0; } - filelist_setfilter(params->files, filter); - filelist_readdir(params->files); + filelist_setfilter(sfile->files, filter); + filelist_readdir(sfile->files); - if(params->sort!=FILE_SORTALPHA) filelist_sort(params->files, params->sort); + if(params->sort!=FILE_SORTALPHA) filelist_sort(sfile->files, params->sort); } diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 3943d552d41..e0e210fd8dd 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -165,6 +165,8 @@ typedef struct SpaceFile { struct FileSelectParams* params; /* config and input for file select */ + struct FileList *files; /* holds the list of files to show */ + /* operator that is invoking fileselect op->exec() will be called on the 'Load' button. if operator provides op->cancel(), then this will be invoked