[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21943] branches/blender2.5/blender/source /blender: 2.5 file browser

Andrea Weikert elubie at gmx.net
Mon Jul 27 21:06:33 CEST 2009


Revision: 21943
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21943
Author:   elubie
Date:     2009-07-27 21:06:33 +0200 (Mon, 27 Jul 2009)

Log Message:
-----------
2.5 file browser
New:
* added filter and display to some operator properties. Now file browser opens showing only .blend files and folders on file->open and on image->open changes to image display and only shows images and movies.
Fixes:
* fixed stupid removal of wrong prototype in last commit
* fixed a few warnings

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/include/ED_fileselect.h
    branches/blender2.5/blender/source/blender/editors/space_file/file_panels.c
    branches/blender2.5/blender/source/blender/editors/space_file/filelist.c
    branches/blender2.5/blender/source/blender/editors/space_file/filelist.h
    branches/blender2.5/blender/source/blender/editors/space_file/filesel.c
    branches/blender2.5/blender/source/blender/editors/space_file/fsmenu.c
    branches/blender2.5/blender/source/blender/editors/space_file/space_file.c
    branches/blender2.5/blender/source/blender/editors/space_image/image_ops.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_fileselect.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_fileselect.h	2009-07-27 18:50:10 UTC (rev 21942)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_fileselect.h	2009-07-27 19:06:33 UTC (rev 21943)
@@ -70,8 +70,7 @@
 
 struct FileSelectParams* ED_fileselect_get_params(struct SpaceFile *sfile);
 
-short ED_fileselect_set_params(struct SpaceFile *sfile, const char *title, const char *dir, const char *path, 
-						   short flag, short display, short filter, short sort);
+short ED_fileselect_set_params(struct SpaceFile *sfile);
 
 void ED_fileselect_reset_params(struct SpaceFile *sfile);
 

Modified: branches/blender2.5/blender/source/blender/editors/space_file/file_panels.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_file/file_panels.c	2009-07-27 18:50:10 UTC (rev 21942)
+++ branches/blender2.5/blender/source/blender/editors/space_file/file_panels.c	2009-07-27 19:06:33 UTC (rev 21943)
@@ -121,7 +121,10 @@
 				continue;
 			if(strcmp(RNA_property_identifier(prop), "filename") == 0)
 				continue;
-
+			if(strcmp(RNA_property_identifier(prop), "display") == 0)
+				continue;
+			if(strncmp(RNA_property_identifier(prop), "filter", 6) == 0)
+				continue;
 			uiItemFullR(pa->layout, NULL, 0, op->ptr, prop, -1, 0, 0, 0, 0);
 		}
 		RNA_STRUCT_END;

Modified: branches/blender2.5/blender/source/blender/editors/space_file/filelist.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_file/filelist.c	2009-07-27 18:50:10 UTC (rev 21942)
+++ branches/blender2.5/blender/source/blender/editors/space_file/filelist.c	2009-07-27 19:06:33 UTC (rev 21943)
@@ -903,9 +903,6 @@
 
 void filelist_sort(struct FileList* filelist, short sort)
 {
-	struct direntry *file;
-	int num;/*  , act= 0; */
-
 	switch(sort) {
 	case FILE_SORT_ALPHA:
 		qsort(filelist->filelist, filelist->numfiles, sizeof(struct direntry), compare_name);	

Modified: branches/blender2.5/blender/source/blender/editors/space_file/filelist.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_file/filelist.h	2009-07-27 18:50:10 UTC (rev 21942)
+++ branches/blender2.5/blender/source/blender/editors/space_file/filelist.h	2009-07-27 19:06:33 UTC (rev 21943)
@@ -54,7 +54,7 @@
 int					filelist_numfiles(struct FileList* filelist);
 const char *		filelist_dir(struct FileList* filelist);
 void				filelist_setdir(struct FileList* filelist, const char *dir);
-void				filelist_end_edit(struct FileList* filelist, int index);
+struct direntry *	filelist_file(struct FileList* filelist, int index);
 void				filelist_hidedot(struct FileList* filelist, short hide);
 void				filelist_setfilter(struct FileList* filelist, unsigned int filter);
 void				filelist_filter(struct FileList* filelist);

Modified: branches/blender2.5/blender/source/blender/editors/space_file/filesel.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_file/filesel.c	2009-07-27 18:50:10 UTC (rev 21942)
+++ branches/blender2.5/blender/source/blender/editors/space_file/filesel.c	2009-07-27 19:06:33 UTC (rev 21943)
@@ -73,6 +73,8 @@
 #include "BIF_gl.h"
 #include "BIF_glutil.h"
 
+#include "RNA_access.h"
+
 #include "UI_interface.h"
 #include "UI_resources.h"
 #include "UI_view2d.h"
@@ -95,43 +97,62 @@
 FileSelectParams* ED_fileselect_get_params(struct SpaceFile *sfile)
 {
 	if (!sfile->params) {
-		ED_fileselect_set_params(sfile, "", NULL, "/", 0, FILE_SHORTDISPLAY, 0, FILE_SORT_ALPHA);
+		ED_fileselect_set_params(sfile);
 	}
 	return sfile->params;
 }
 
-short ED_fileselect_set_params(SpaceFile *sfile, const char *title, const char *last_dir, const char *path,
-							   short flag, short display, short filter, short sort)
+short ED_fileselect_set_params(SpaceFile *sfile)
 {
 	char name[FILE_MAX], dir[FILE_MAX], file[FILE_MAX];
 	FileSelectParams *params;
+	wmOperator *op = sfile->op;
 
+	/* create new parameters if necessary */
 	if (!sfile->params) {
 		sfile->params= MEM_callocN(sizeof(FileSelectParams), "fileselparams");
+		/* set path to most recently opened .blend */
+		BLI_strncpy(sfile->params->dir, G.sce, sizeof(sfile->params->dir));
+		BLI_split_dirfile(G.sce, dir, file);
+		BLI_strncpy(sfile->params->file, file, sizeof(sfile->params->file));
+		BLI_make_file_string(G.sce, sfile->params->dir, dir, ""); /* XXX needed ? - also solve G.sce */
 	}
 
 	params = sfile->params;
 
-	params->flag = flag;
-	params->display = display;
-	params->filter = filter;
-	params->sort = sort;
-
-	BLI_strncpy(params->title, title, sizeof(params->title));
-
-	if(last_dir){
-		BLI_strncpy(params->dir, last_dir, sizeof(params->dir));
+	/* set the parameters from the operator, if it exists */
+	if (op) {
+		BLI_strncpy(params->title, op->type->name, sizeof(params->title));
+		params->filter = 0;
+		params->filter |= RNA_boolean_get(op->ptr, "filter_folder") ? FOLDERFILE : 0;
+		params->filter |= RNA_boolean_get(op->ptr, "filter_blender") ? BLENDERFILE : 0;
+		params->filter |= RNA_boolean_get(op->ptr, "filter_image") ? IMAGEFILE : 0;
+		params->filter |= RNA_boolean_get(op->ptr, "filter_movie") ? MOVIEFILE : 0;
+		if (params->filter != 0)
+			params->flag |= FILE_FILTER;
+		
+		if (RNA_property_is_set(op->ptr, "display")) {
+			params->display= RNA_int_get(op->ptr, "display");
+		} else {
+			params->display = FILE_SHORTDISPLAY;
+		}
+		
+		/* if operator has path set, use it, otherwise keep the last */
+		if (RNA_property_is_set(op->ptr, "filename")) {
+			RNA_string_get(op->ptr, "filename", name);
+			BLI_convertstringcode(name, G.sce);
+			BLI_split_dirfile(name, dir, file);
+			BLI_strncpy(params->file, file, sizeof(params->file));
+			BLI_make_file_string(G.sce, params->dir, dir, ""); /* XXX needed ? - also solve G.sce */		
+		}
+	} else {
+		/* default values, if no operator */
+		params->flag = 0;
+		params->display = FILE_SHORTDISPLAY;
+		params->filter = 0;
+		params->sort = FILE_SORT_ALPHA;
 	}
-	else {
-		BLI_strncpy(name, path, sizeof(name));
-		BLI_convertstringcode(name, G.sce);
 
-		BLI_split_dirfile(name, dir, file);
-		BLI_strncpy(params->file, file, sizeof(params->file));
-		BLI_strncpy(params->dir, dir, sizeof(params->dir));
-		BLI_make_file_string(G.sce, params->dir, dir, ""); /* XXX needed ? - also solve G.sce */			
-	}
-
 	return 1;
 }
 
@@ -144,7 +165,6 @@
 int ED_fileselect_layout_numfiles(FileLayout* layout, struct ARegion *ar)
 {
 	int numfiles;
-	short width, height;
 
 	if (layout->flag & FILE_LAYOUT_HOR) {
 		short width = ar->v2d.cur.xmax - ar->v2d.cur.xmin - 2*layout->tile_border_x;

Modified: branches/blender2.5/blender/source/blender/editors/space_file/fsmenu.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_file/fsmenu.c	2009-07-27 18:50:10 UTC (rev 21942)
+++ branches/blender2.5/blender/source/blender/editors/space_file/fsmenu.c	2009-07-27 19:06:33 UTC (rev 21943)
@@ -310,7 +310,9 @@
 				if (line[len-1] == '\n') {
 					line[len-1] = '\0';
 				}
-				fsmenu_insert_entry(fsmenu, category, line, 0, 1);
+				if (BLI_exist(line)) {
+					fsmenu_insert_entry(fsmenu, category, line, 0, 1);
+				}
 			}
 		}
 	}

Modified: branches/blender2.5/blender/source/blender/editors/space_file/space_file.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_file/space_file.c	2009-07-27 18:50:10 UTC (rev 21942)
+++ branches/blender2.5/blender/source/blender/editors/space_file/space_file.c	2009-07-27 19:06:33 UTC (rev 21943)
@@ -195,11 +195,11 @@
 		params->active_file = -1; // added this so it opens nicer (ton)
 	}
 	filelist_hidedot(sfile->files, params->flag & FILE_HIDE_DOT);
+	filelist_setfilter(sfile->files, params->flag & FILE_FILTER ? params->filter : 0);	
 	if (filelist_empty(sfile->files))
 	{
 		filelist_readdir(sfile->files);
 	}
-	filelist_setfilter(sfile->files, params->flag & FILE_FILTER ? params->filter : 0);	
 	if(params->sort!=FILE_SORT_NONE) filelist_sort(sfile->files, params->sort);		
 
 	if (sfile->layout) sfile->layout->dirty= 1;

Modified: branches/blender2.5/blender/source/blender/editors/space_image/image_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_image/image_ops.c	2009-07-27 18:50:10 UTC (rev 21942)
+++ branches/blender2.5/blender/source/blender/editors/space_image/image_ops.c	2009-07-27 19:06:33 UTC (rev 21943)
@@ -609,6 +609,10 @@
 static void image_filesel(bContext *C, wmOperator *op, const char *path)
 {
 	RNA_string_set(op->ptr, "filename", path);
+	RNA_boolean_set(op->ptr, "filter_image", 1);
+	RNA_boolean_set(op->ptr, "filter_movie", 1);
+	RNA_boolean_set(op->ptr, "filter_folder", 1);
+	RNA_enum_set(op->ptr, "display", FILE_IMGDISPLAY);
 	WM_event_add_fileselect(C, op); 
 }
 
@@ -649,6 +653,14 @@
 
 void IMAGE_OT_open(wmOperatorType *ot)
 {
+	PropertyRNA *prop;
+
+	static EnumPropertyItem file_display_items[] = {
+		{FILE_SHORTDISPLAY, "FILE_SHORTDISPLAY", ICON_SHORTDISPLAY, "Short List", "Display files as short list"},
+		{FILE_LONGDISPLAY, "FILE_LONGDISPLAY", ICON_LONGDISPLAY, "Long List", "Display files as a detailed list"},
+		{FILE_IMGDISPLAY, "FILE_IMGDISPLAY", ICON_IMGDISPLAY, "Thumbnails", "Display files as thumbnails"},
+		{0, NULL, 0, NULL, NULL}};
+
 	/* identifiers */
 	ot->name= "Open";
 	ot->idname= "IMAGE_OT_open";
@@ -663,6 +675,19 @@
 
 	/* properties */
 	RNA_def_string_file_path(ot->srna, "filename", "", FILE_MAX, "Filename", "File path of image to open.");
+
+	prop= RNA_def_boolean(ot->srna, "filter_image", 0, "Show image files", "");
+	RNA_def_property_boolean_sdna(prop, NULL, "filter", IMAGEFILE);
+	prop= RNA_def_boolean(ot->srna, "filter_movie", 0, "Show movie files", "");
+	RNA_def_property_boolean_sdna(prop, NULL, "filter", MOVIEFILE);
+	prop= RNA_def_boolean(ot->srna, "filter_folder", 0, "Show folders", "");
+	RNA_def_property_boolean_sdna(prop, NULL, "filter", FOLDERFILE);
+
+	prop= RNA_def_property(ot->srna, "display", PROP_ENUM, PROP_NONE);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list