[Bf-blender-cvs] [0715b73] asset-experiments: Recursive listdir: let user set level of recursion...

Bastien Montagne noreply at git.blender.org
Tue Jan 13 16:51:06 CET 2015


Commit: 0715b73e185ce483a245bd428b2dc86625deb7cd
Author: Bastien Montagne
Date:   Tue Jan 13 15:41:10 2015 +0100
Branches: asset-experiments
https://developer.blender.org/rB0715b73e185ce483a245bd428b2dc86625deb7cd

Recursive listdir: let user set level of recursion...

===================================================================

M	release/scripts/startup/bl_ui/space_filebrowser.py
M	source/blender/editors/space_file/file_ops.c
M	source/blender/editors/space_file/filelist.c
M	source/blender/editors/space_file/filelist.h
M	source/blender/editors/space_file/space_file.c
M	source/blender/makesdna/DNA_space_types.h
M	source/blender/makesrna/intern/rna_space.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/space_filebrowser.py b/release/scripts/startup/bl_ui/space_filebrowser.py
index 0af5d10..c99d00b 100644
--- a/release/scripts/startup/bl_ui/space_filebrowser.py
+++ b/release/scripts/startup/bl_ui/space_filebrowser.py
@@ -57,8 +57,8 @@ class FILEBROWSER_HT_header(Header):
             layout.prop(params, "display_type", expand=True, text="")
             layout.prop(params, "sort_method", expand=True, text="")
 
+            layout.prop(params, "recursion_level", slider=True)
             layout.prop(params, "show_hidden")
-            layout.prop(params, "use_flat_view")
             layout.prop(params, "use_filter", text="", icon='FILTER')
 
             row = layout.row(align=True)
diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c
index c72810b..93f52cd 100644
--- a/source/blender/editors/space_file/file_ops.c
+++ b/source/blender/editors/space_file/file_ops.c
@@ -193,10 +193,10 @@ static FileSelect file_select_do(bContext *C, int selected_idx, bool do_diropen)
 					/* avoids /../../ */
 					BLI_parent_dir(params->dir);
 
-					if (params->flag & FILE_SHOWFLAT) {
-						/* Disable 'show flat' when going up in tree! */
-						params->flag &= ~FILE_SHOWFLAT;
-						filelist_setrecursive(sfile->files, false);
+					if (params->recursion_level > 1) {
+						/* Disable 'dirtree' recursion when going up in tree! */
+						params->recursion_level = 1;
+						filelist_setrecursion(sfile->files, params->recursion_level);
 					}
 				}
 				else {
@@ -1046,10 +1046,10 @@ int file_parent_exec(bContext *C, wmOperator *UNUSED(unused))
 			else {
 				file_change_dir(C, 1);
 			}
-			if (sfile->params->flag & FILE_SHOWFLAT) {
-				/* Disable 'show flat' when going up in tree! */
-				sfile->params->flag &= ~FILE_SHOWFLAT;
-				filelist_setrecursive(sfile->files, false);
+			if (sfile->params->recursion_level > 1) {
+				/* Disable 'dirtree' recursion when going up in tree! */
+				sfile->params->recursion_level = 1;
+				filelist_setrecursion(sfile->files, sfile->params->recursion_level);
 			}
 			WM_event_add_notifier(C, NC_SPACE | ND_SPACE_FILE_LIST, NULL);
 		}
diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c
index 011a536..1fcb66f 100644
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@ -244,7 +244,7 @@ typedef struct FileList {
 
 	bool need_thumbnails;
 
-	bool use_recursion;
+	short max_recursion;
 	short recursion_level;
 
 	struct BlendHandle *libfiledata;
@@ -259,8 +259,6 @@ typedef struct FileList {
 	bool (*filterf)(struct direntry *, const char *, FileListFilter *);
 } FileList;
 
-#define FILELIST_MAX_RECURSION 3
-
 #define FILENAME_IS_BREADCRUMBS(_n) \
 	((_n)[0] == '.' && ((_n)[1] == '\0' || ((_n)[1] == '.' && (_n)[2] == '\0')))
 
@@ -1029,10 +1027,10 @@ void filelist_setdir(struct FileList *filelist, char *r_dir)
 	}
 }
 
-void filelist_setrecursive(struct FileList *filelist, const bool use_recursion)
+void filelist_setrecursion(struct FileList *filelist, const int recursion_level)
 {
-	if (filelist->use_recursion != use_recursion) {
-		filelist->use_recursion = use_recursion;
+	if (filelist->max_recursion != recursion_level) {
+		filelist->max_recursion = recursion_level;
 		filelist->force_reset = true;
 	}
 }
@@ -1684,7 +1682,7 @@ static void filelist_readjob_dir_lib_rec(
 	*do_update = true;
 
 	/* in case it's a lib we don't care anymore about max recursion level... */
-	if (!*stop && filelist->use_recursion && ((do_lib && is_lib) || (recursion_level < FILELIST_MAX_RECURSION))) {
+	if (!*stop && filelist->max_recursion && ((do_lib && is_lib) || (recursion_level < filelist->max_recursion))) {
 		for (i = 0, file = files; i < num_files && !*stop; i++, file++) {
 			char subdir[FILE_MAX];
 
diff --git a/source/blender/editors/space_file/filelist.h b/source/blender/editors/space_file/filelist.h
index 04af8b5..de9ddb4 100644
--- a/source/blender/editors/space_file/filelist.h
+++ b/source/blender/editors/space_file/filelist.h
@@ -107,7 +107,7 @@ void                filelist_select(struct FileList *filelist, FileSelection *se
 void                filelist_select_file(struct FileList *filelist, int index, FileSelType select, unsigned int flag, FileCheckType check);
 bool                filelist_is_selected(struct FileList *filelist, int index, FileCheckType check);
 
-void                filelist_setrecursive(struct FileList *filelist, const bool use_recursion);
+void                filelist_setrecursion(struct FileList *filelist, const int recursion_level);
 
 struct BlendHandle *filelist_lib(struct FileList *filelist);
 bool                filelist_islibrary(struct FileList *filelist, char *dir, char **group);
diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c
index d1c0049..02e3dd2 100644
--- a/source/blender/editors/space_file/space_file.c
+++ b/source/blender/editors/space_file/space_file.c
@@ -202,7 +202,7 @@ static void file_refresh(const bContext *C, ScrArea *UNUSED(sa))
 		params->active_file = -1; /* added this so it opens nicer (ton) */
 	}
 	filelist_setdir(sfile->files, params->dir);
-	filelist_setrecursive(sfile->files, (params->flag & FILE_SHOWFLAT) != 0);
+	filelist_setrecursion(sfile->files, params->recursion_level);
 	filelist_setsorting(sfile->files, params->sort);
 	filelist_setfilter_options(sfile->files, params->flag & FILE_HIDE_DOT,
 	                                         false, /* TODO hide_parent, should be controllable? */
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index 67056e5..13bc3cf 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -599,9 +599,10 @@ typedef struct FileSelectParams {
 	short display; /* display mode flag */
 	int filter; /* filter when (flags & FILE_FILTER) is true */
 
+	short recursion_level;  /* max number of levels in dirtree to show at once, 0 to disable recursion. */
+
 	/* XXX --- still unused -- */
 	short f_fp; /* show font preview */
-	short pad_s1;
 	char fp_str[8]; /* string to use for font preview */
 
 	/* XXX --- end unused -- */
@@ -700,7 +701,6 @@ typedef enum eFileSel_Params_Flag {
 	FILE_FILTER         = (1 << 8),
 	FILE_BOOKMARKS      = (1 << 9),
 	FILE_GROUP_INSTANCE = (1 << 10),
-	FILE_SHOWFLAT       = (1 << 11),
 } eFileSel_Params_Flag;
 
 
@@ -732,6 +732,8 @@ typedef enum eDirEntry_SelectFlag {
 	FILE_SEL_EDITING        = (1 << 4),
 } eDirEntry_SelectFlag;
 
+#define FILE_LIST_MAX_RECURSION 4
+
 /* Image/UV Editor ======================================== */
 
 /* Image/UV Editor */
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index 9068f54..343e48c 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -3512,9 +3512,13 @@ static void rna_def_fileselect_params(BlenderRNA *brna)
 	RNA_def_property_ui_text(prop, "Display Mode", "Display mode for the file list");
 	RNA_def_property_update(prop, NC_SPACE | ND_SPACE_FILE_PARAMS, NULL);
 
-	prop = RNA_def_property(srna, "use_flat_view", PROP_BOOLEAN, PROP_NONE);
-	RNA_def_property_boolean_sdna(prop, NULL, "flag", FILE_SHOWFLAT);
-	RNA_def_property_ui_text(prop, "Use Flat View", "Display all items found recursively from current position");
+	prop = RNA_def_property(srna, "recursion_level", PROP_INT, PROP_NONE);
+	RNA_def_property_int_sdna(prop, NULL, "recursion_level");
+	RNA_def_property_range(prop, 0, FILE_LIST_MAX_RECURSION);
+	RNA_def_property_ui_range(prop, 0, 3, 1, 1);
+	RNA_def_property_ui_text(prop, "Recursion Level",
+	                         "Numbers of dirtree levels to show simultaneously "
+	                         "(use '1' to only show .blend content flat, and '0' to disable completely)");
 	RNA_def_property_update(prop, NC_SPACE | ND_SPACE_FILE_PARAMS, NULL);
 
 	prop = RNA_def_property(srna, "use_filter", PROP_BOOLEAN, PROP_NONE);




More information about the Bf-blender-cvs mailing list