[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32095] trunk/blender: patch [#23968] filter_filetypes property to allow operators to filter by file extensions in the file selector

Campbell Barton ideasman42 at gmail.com
Fri Sep 24 09:05:43 CEST 2010


Revision: 32095
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32095
Author:   campbellbarton
Date:     2010-09-24 09:05:43 +0200 (Fri, 24 Sep 2010)

Log Message:
-----------
patch [#23968] filter_filetypes property to allow operators to filter by file extensions in the file selector
modified the patch to store the string internally rather then an array of allocated string pointers, less hassle with memory allocation.
changed to use fnmatch, so *.foo is needed (not .foo as with the patch)

Modified Paths:
--------------
    trunk/blender/release/scripts/op/io_anim_bvh/__init__.py
    trunk/blender/release/scripts/op/io_scene_3ds/__init__.py
    trunk/blender/release/scripts/op/io_scene_obj/__init__.py
    trunk/blender/release/scripts/op/io_shape_mdd/__init__.py
    trunk/blender/release/scripts/ui/space_filebrowser.py
    trunk/blender/release/scripts/ui/space_userpref.py
    trunk/blender/source/blender/editors/space_file/filelist.c
    trunk/blender/source/blender/editors/space_file/filelist.h
    trunk/blender/source/blender/editors/space_file/filesel.c
    trunk/blender/source/blender/editors/space_file/space_file.c
    trunk/blender/source/blender/makesdna/DNA_space_types.h
    trunk/blender/source/blender/makesrna/intern/rna_space.c

Modified: trunk/blender/release/scripts/op/io_anim_bvh/__init__.py
===================================================================
--- trunk/blender/release/scripts/op/io_anim_bvh/__init__.py	2010-09-24 06:20:43 UTC (rev 32094)
+++ trunk/blender/release/scripts/op/io_anim_bvh/__init__.py	2010-09-24 07:05:43 UTC (rev 32095)
@@ -36,6 +36,7 @@
     bl_label = "Import BVH"
     
     filename_ext = ".bvh"
+    filter_glob = StringProperty(default="*.bvh", options={'HIDDEN'})
 
     scale = FloatProperty(name="Scale", description="Scale the BVH by this value", min=0.0001, max=1000000.0, soft_min=0.001, soft_max=100.0, default=0.1)
     frame_start = IntProperty(name="Start Frame", description="Starting frame for the animation", default=1)

Modified: trunk/blender/release/scripts/op/io_scene_3ds/__init__.py
===================================================================
--- trunk/blender/release/scripts/op/io_scene_3ds/__init__.py	2010-09-24 06:20:43 UTC (rev 32094)
+++ trunk/blender/release/scripts/op/io_scene_3ds/__init__.py	2010-09-24 07:05:43 UTC (rev 32095)
@@ -36,6 +36,7 @@
     bl_label = 'Import 3DS'
 
     filename_ext = ".3ds"
+    filter_glob = StringProperty(default="*.3ds", options={'HIDDEN'})
 
     constrain_size = FloatProperty(name="Size Constraint", description="Scale the model by 10 until it reacehs the size constraint. Zero Disables.", min=0.0, max=1000.0, soft_min=0.0, soft_max=1000.0, default=10.0)
     use_image_search = BoolProperty(name="Image Search", description="Search subdirectories for any assosiated images (Warning, may be slow)", default=True)

Modified: trunk/blender/release/scripts/op/io_scene_obj/__init__.py
===================================================================
--- trunk/blender/release/scripts/op/io_scene_obj/__init__.py	2010-09-24 06:20:43 UTC (rev 32094)
+++ trunk/blender/release/scripts/op/io_scene_obj/__init__.py	2010-09-24 07:05:43 UTC (rev 32095)
@@ -37,6 +37,7 @@
     bl_label = "Import OBJ"
 
     filename_ext = ".obj"
+    filter_glob = StringProperty(default="*.obj;*.mtl", options={'HIDDEN'})
 
     CREATE_SMOOTH_GROUPS = BoolProperty(name="Smooth Groups", description="Surround smooth groups by sharp edges", default= True)
     CREATE_FGONS = BoolProperty(name="NGons as FGons", description="Import faces with more then 4 verts as fgons", default= True)

Modified: trunk/blender/release/scripts/op/io_shape_mdd/__init__.py
===================================================================
--- trunk/blender/release/scripts/op/io_shape_mdd/__init__.py	2010-09-24 06:20:43 UTC (rev 32094)
+++ trunk/blender/release/scripts/op/io_shape_mdd/__init__.py	2010-09-24 07:05:43 UTC (rev 32095)
@@ -37,6 +37,8 @@
     bl_label = "Import MDD"
 
     filename_ext = ".mdd"
+    filter_glob = StringProperty(default="*.mdd", options={'HIDDEN'})
+
     frame_start = IntProperty(name="Start Frame", description="Start frame for inserting animation", min=-300000, max=300000, default=0)
     frame_step = IntProperty(name="Step", min=1, max=1000, default=1)
 

Modified: trunk/blender/release/scripts/ui/space_filebrowser.py
===================================================================
--- trunk/blender/release/scripts/ui/space_filebrowser.py	2010-09-24 06:20:43 UTC (rev 32094)
+++ trunk/blender/release/scripts/ui/space_filebrowser.py	2010-09-24 07:05:43 UTC (rev 32095)
@@ -57,15 +57,21 @@
 
             row = layout.row(align=True)
             row.active = params.use_filter
-
+            
             row.prop(params, "use_filter_folder", text="")
-            row.prop(params, "use_filter_blender", text="")
-            row.prop(params, "use_filter_image", text="")
-            row.prop(params, "use_filter_movie", text="")
-            row.prop(params, "use_filter_script", text="")
-            row.prop(params, "use_filter_font", text="")
-            row.prop(params, "use_filter_sound", text="")
-            row.prop(params, "use_filter_text", text="")
+            
+            if params.filter_glob:
+                #if st.operator and hasattr(st.operator, "filter_glob"):
+                #    row.prop(params, "filter_glob", text="")
+                row.label(params.filter_glob)
+            else:
+                row.prop(params, "use_filter_blender", text="")
+                row.prop(params, "use_filter_image", text="")
+                row.prop(params, "use_filter_movie", text="")
+                row.prop(params, "use_filter_script", text="")
+                row.prop(params, "use_filter_font", text="")
+                row.prop(params, "use_filter_sound", text="")
+                row.prop(params, "use_filter_text", text="")
 
 
 def register():

Modified: trunk/blender/release/scripts/ui/space_userpref.py
===================================================================
--- trunk/blender/release/scripts/ui/space_userpref.py	2010-09-24 06:20:43 UTC (rev 32094)
+++ trunk/blender/release/scripts/ui/space_userpref.py	2010-09-24 07:05:43 UTC (rev 32095)
@@ -1085,6 +1085,7 @@
     filepath = StringProperty(name="File Path", description="File path to write file to")
     filter_folder = BoolProperty(name="Filter folders", description="", default=True, options={'HIDDEN'})
     filter_python = BoolProperty(name="Filter python", description="", default=True, options={'HIDDEN'})
+    filter_glob = StringProperty(default="*.py;*.zip", options={'HIDDEN'})
 
     def execute(self, context):
         import traceback

Modified: trunk/blender/source/blender/editors/space_file/filelist.c
===================================================================
--- trunk/blender/source/blender/editors/space_file/filelist.c	2010-09-24 06:20:43 UTC (rev 32094)
+++ trunk/blender/source/blender/editors/space_file/filelist.c	2010-09-24 07:05:43 UTC (rev 32095)
@@ -108,6 +108,7 @@
 	short prv_h;
 	short hide_dot;
 	unsigned int filter;
+	char filter_glob[64];
 	short changed;
 
 	struct BlendHandle *libfiledata;
@@ -547,6 +548,7 @@
 	free(filelist->filelist);
 	filelist->filelist = 0;	
 	filelist->filter = 0;
+	filelist->filter_glob[0] = '\0';
 	filelist->numfiltered =0;
 	filelist->hide_dot =0;
 }
@@ -713,6 +715,11 @@
 	filelist->filter = filter;
 }
 
+void filelist_setfilter_types(struct FileList* filelist, const char *filter_glob)
+{
+	BLI_strncpy(filelist->filter_glob, filter_glob, sizeof(filelist->filter_glob));
+}
+
 static void filelist_read_dir(struct FileList* filelist)
 {
 	char wdir[FILE_MAX];
@@ -824,6 +831,9 @@
 			file->flags |= MOVIEFILE;			
 		} else if(BLI_testextensie_array(file->relname, imb_ext_audio)) {
 			file->flags |= SOUNDFILE;
+		} else if(filelist->filter_glob
+					&& BLI_testextensie_glob(file->relname, filelist->filter_glob)) {
+			file->flags |= OPERATORFILE;
 		}
 	}
 }

Modified: trunk/blender/source/blender/editors/space_file/filelist.h
===================================================================
--- trunk/blender/source/blender/editors/space_file/filelist.h	2010-09-24 06:20:43 UTC (rev 32094)
+++ trunk/blender/source/blender/editors/space_file/filelist.h	2010-09-24 07:05:43 UTC (rev 32095)
@@ -58,6 +58,7 @@
 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_setfilter_types(struct FileList* filelist, const char *filter_glob);
 void				filelist_filter(struct FileList* filelist);
 void				filelist_swapselect(struct FileList* filelist);
 void				filelist_imgsize(struct FileList* filelist, short w, short h);

Modified: trunk/blender/source/blender/editors/space_file/filesel.c
===================================================================
--- trunk/blender/source/blender/editors/space_file/filesel.c	2010-09-24 06:20:43 UTC (rev 32094)
+++ trunk/blender/source/blender/editors/space_file/filesel.c	2010-09-24 07:05:43 UTC (rev 32095)
@@ -105,6 +105,7 @@
 		sfile->params= MEM_callocN(sizeof(FileSelectParams), "fileselparams");
 		/* set path to most recently opened .blend */
 		BLI_split_dirfile(G.sce, sfile->params->dir, sfile->params->file);
+		sfile->params->filter_glob[0] = '\0';
 	}
 
 	params = sfile->params;
@@ -168,6 +169,11 @@
 			params->filter |= RNA_boolean_get(op->ptr, "filter_btx") ? BTXFILE : 0;
 		if(RNA_struct_find_property(op->ptr, "filter_collada"))
 			params->filter |= RNA_boolean_get(op->ptr, "filter_collada") ? COLLADAFILE : 0;
+		if (RNA_struct_find_property(op->ptr, "filter_glob")) {
+			RNA_string_get(op->ptr, "filter_glob", params->filter_glob);
+			params->filter |= (OPERATORFILE|FOLDERFILE);
+		}
+
 		if (params->filter != 0) {
 			if (U.uiflag & USER_FILTERFILEEXTS) {
 				params->flag |= FILE_FILTER;

Modified: trunk/blender/source/blender/editors/space_file/space_file.c
===================================================================
--- trunk/blender/source/blender/editors/space_file/space_file.c	2010-09-24 06:20:43 UTC (rev 32094)
+++ trunk/blender/source/blender/editors/space_file/space_file.c	2010-09-24 07:05:43 UTC (rev 32095)
@@ -192,6 +192,7 @@
 	}
 	filelist_hidedot(sfile->files, params->flag & FILE_HIDE_DOT);
 	filelist_setfilter(sfile->files, params->flag & FILE_FILTER ? params->filter : 0);	
+	filelist_setfilter_types(sfile->files, params->filter_glob);
 	if (filelist_empty(sfile->files))
 	{
 		thumbnails_stop(sfile->files, C);

Modified: trunk/blender/source/blender/makesdna/DNA_space_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_space_types.h	2010-09-24 06:20:43 UTC (rev 32094)
+++ trunk/blender/source/blender/makesdna/DNA_space_types.h	2010-09-24 07:05:43 UTC (rev 32095)
@@ -163,6 +163,8 @@
 	char renamefile[80];
 	char renameedit[80]; /* annoying but the first is only used for initialization */
 
+	char filter_glob[64]; /* list of filetypes to filter */
+
 	short type; /* XXXXX for now store type here, should be moved to the operator */
 	short flag; /* settings for filter, hiding dots files,...  */
 	short sort; /* sort order */
@@ -725,6 +727,7 @@
 #define FOLDERFILE			(1<<11) /* represents folders for filtering */
 #define BTXFILE				(1<<12)
 #define COLLADAFILE			(1<<13)
+#define OPERATORFILE		(1<<14) /* from filter_glob operator property */
 
 /* SpaceImage->dt_uv */
 #define SI_UVDT_OUTLINE	0

Modified: trunk/blender/source/blender/makesrna/intern/rna_space.c

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list