[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37552] trunk/blender/source/blender: directory only filesel for operators which don' t have a filepath or filename property.

Campbell Barton ideasman42 at gmail.com
Thu Jun 16 17:01:22 CEST 2011


Revision: 37552
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37552
Author:   campbellbarton
Date:     2011-06-16 15:01:22 +0000 (Thu, 16 Jun 2011)
Log Message:
-----------
directory only filesel for operators which don't have a filepath or filename property.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_file/file_draw.c
    trunk/blender/source/blender/editors/space_file/file_ops.c
    trunk/blender/source/blender/editors/space_file/filelist.c
    trunk/blender/source/blender/editors/space_file/filesel.c
    trunk/blender/source/blender/makesdna/DNA_space_types.h

Modified: trunk/blender/source/blender/editors/space_file/file_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_file/file_draw.c	2011-06-16 13:24:44 UTC (rev 37551)
+++ trunk/blender/source/blender/editors/space_file/file_draw.c	2011-06-16 15:01:22 UTC (rev 37552)
@@ -185,16 +185,18 @@
 		uiButSetCompleteFunc(but, autocomplete_directory, NULL);
 		uiButSetFlag(but, UI_BUT_NO_UTF8);
 
-		but = uiDefBut(block, TEX, B_FS_FILENAME, "",
-				 min_x, line2_y, line2_w-chan_offs, btn_h,
-				 params->file, 0.0, (float)FILE_MAXFILE-1, 0, 0, 
-				 overwrite_alert ?"File name, overwrite existing." : "File name.");
-		uiButSetCompleteFunc(but, autocomplete_file, NULL);
-		uiButSetFlag(but, UI_BUT_NO_UTF8);
-		
-		/* check if this overrides a file and if the operator option is used */
-		if(overwrite_alert) {
-			uiButSetFlag(but, UI_BUT_REDALERT);
+		if((params->flag & FILE_DIRSEL_ONLY) == 0) {
+			but = uiDefBut(block, TEX, B_FS_FILENAME, "",
+					 min_x, line2_y, line2_w-chan_offs, btn_h,
+					 params->file, 0.0, (float)FILE_MAXFILE-1, 0, 0,
+					 overwrite_alert ?"File name, overwrite existing." : "File name.");
+			uiButSetCompleteFunc(but, autocomplete_file, NULL);
+			uiButSetFlag(but, UI_BUT_NO_UTF8);
+
+			/* check if this overrides a file and if the operator option is used */
+			if(overwrite_alert) {
+				uiButSetFlag(but, UI_BUT_REDALERT);
+			}
 		}
 		
 		/* clear func */
@@ -202,7 +204,7 @@
 	}
 	
 	/* Filename number increment / decrement buttons. */
-	if (fnumbuttons) {
+	if (fnumbuttons && (params->flag & FILE_DIRSEL_ONLY) == 0) {
 		uiBlockBeginAlign(block);
 		but = uiDefIconButO(block, BUT, "FILE_OT_filenum", 0, ICON_ZOOMOUT,
 				min_x + line2_w + separator - chan_offs, line2_y, 

Modified: trunk/blender/source/blender/editors/space_file/file_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_file/file_ops.c	2011-06-16 13:24:44 UTC (rev 37551)
+++ trunk/blender/source/blender/editors/space_file/file_ops.c	2011-06-16 15:01:22 UTC (rev 37552)
@@ -205,9 +205,10 @@
 	SpaceFile *sfile= CTX_wm_space_file(C);
 	FileSelect retval = FILE_SELECT_NOTHING;
 	FileSelection sel= file_selection_get(C, rect, fill); /* get the selection */
+	const FileCheckType check_type= (sfile->params->flag & FILE_DIRSEL_ONLY) ? CHECK_DIRS : CHECK_ALL;
 	
 	/* flag the files as selected in the filelist */
-	filelist_select(sfile->files, &sel, select, SELECTED_FILE, CHECK_ALL);
+	filelist_select(sfile->files, &sel, select, SELECTED_FILE, check_type);
 	
 	/* Don't act on multiple selected files */
 	if (sel.first != sel.last) select = 0;
@@ -216,7 +217,7 @@
 	if ( (sel.last >= 0) && ((select == FILE_SEL_ADD) || (select == FILE_SEL_TOGGLE)) )
 	{
 		/* Check last selection, if selected, act on the file or dir */
-		if (filelist_is_selected(sfile->files, sel.last, CHECK_ALL)) {
+		if (filelist_is_selected(sfile->files, sel.last, check_type)) {
 			retval = file_select_do(C, sel.last);
 		}
 	}
@@ -378,9 +379,11 @@
 	/* select all only if previously no file was selected */
 	if (is_selected) {
 		filelist_select(sfile->files, &sel, FILE_SEL_REMOVE, SELECTED_FILE, CHECK_ALL);
-	} else {
-		filelist_select(sfile->files, &sel, FILE_SEL_ADD, SELECTED_FILE, CHECK_FILES);
 	}
+	else {
+		const FileCheckType check_type= (sfile->params->flag & FILE_DIRSEL_ONLY) ? CHECK_DIRS : CHECK_FILES;
+		filelist_select(sfile->files, &sel, FILE_SEL_ADD, SELECTED_FILE, check_type);
+	}
 	ED_area_tag_redraw(sa);
 	return OPERATOR_FINISHED;
 }

Modified: trunk/blender/source/blender/editors/space_file/filelist.c
===================================================================
--- trunk/blender/source/blender/editors/space_file/filelist.c	2011-06-16 13:24:44 UTC (rev 37551)
+++ trunk/blender/source/blender/editors/space_file/filelist.c	2011-06-16 15:01:22 UTC (rev 37552)
@@ -915,6 +915,8 @@
 		int check_ok = 0; 
 		switch (check) {
 			case CHECK_DIRS:
+				check_ok = S_ISDIR(file->type);
+				break;
 			case CHECK_ALL:
 				check_ok = 1;
 				break;

Modified: trunk/blender/source/blender/editors/space_file/filesel.c
===================================================================
--- trunk/blender/source/blender/editors/space_file/filesel.c	2011-06-16 13:24:44 UTC (rev 37551)
+++ trunk/blender/source/blender/editors/space_file/filesel.c	2011-06-16 15:01:22 UTC (rev 37552)
@@ -121,6 +121,9 @@
 
 	/* set the parameters from the operator, if it exists */
 	if (op) {
+		short is_filename= FALSE;
+		short is_dir= FALSE;
+
 		BLI_strncpy(params->title, op->type->name, sizeof(params->title));
 
 		if(RNA_struct_find_property(op->ptr, "filemode"))
@@ -128,7 +131,7 @@
 		else
 			params->type = FILE_SPECIAL;
 
-		if (RNA_struct_find_property(op->ptr, "filepath") && RNA_property_is_set(op->ptr, "filepath")) {
+		if ((is_dir= is_filename= RNA_struct_find_property(op->ptr, "filepath")!=NULL) && RNA_property_is_set(op->ptr, "filepath")) {
 			char name[FILE_MAX];
 			RNA_string_get(op->ptr, "filepath", name);
 			if (params->type == FILE_LOADLIB) {
@@ -140,12 +143,13 @@
 			}
 		}
 		else {
-			if (RNA_struct_find_property(op->ptr, "directory") && RNA_property_is_set(op->ptr, "directory")) {
+			if ((is_dir= RNA_struct_find_property(op->ptr, "directory")!=NULL) && RNA_property_is_set(op->ptr, "directory")) {
 				RNA_string_get(op->ptr, "directory", params->dir);
 				sfile->params->file[0]= '\0';
+				is_dir= TRUE;
 			}
 
-			if (RNA_struct_find_property(op->ptr, "filename") && RNA_property_is_set(op->ptr, "filename")) {
+			if ((is_filename= RNA_struct_find_property(op->ptr, "filename")!=NULL) && RNA_property_is_set(op->ptr, "filename")) {
 				RNA_string_get(op->ptr, "filename", params->file);
 			}
 		}
@@ -155,6 +159,10 @@
 			BLI_path_abs(params->dir, G.main->name);
 		}
 
+		if(is_dir==TRUE && is_filename==FALSE) {
+			params->flag |= FILE_DIRSEL_ONLY;
+		}
+
 		params->filter = 0;
 		if(RNA_struct_find_property(op->ptr, "filter_blender"))
 			params->filter |= RNA_boolean_get(op->ptr, "filter_blender") ? BLENDERFILE : 0;

Modified: trunk/blender/source/blender/makesdna/DNA_space_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_space_types.h	2011-06-16 13:24:44 UTC (rev 37551)
+++ trunk/blender/source/blender/makesdna/DNA_space_types.h	2011-06-16 15:01:22 UTC (rev 37552)
@@ -696,19 +696,20 @@
 #define FILE_OPENFILE		0
 #define FILE_SAVE			1
 
-/* sfile->flag and simasel->flag */
-#define FILE_SHOWSHORT		1
-#define FILE_RELPATH		2 /* was FILE_STRINGCODE */
-#define FILE_LINK			4
-#define FILE_HIDE_DOT		8
-#define FILE_AUTOSELECT		16
-#define FILE_ACTIVELAY		32
-#define FILE_ATCURSOR		64
-#define FILE_SYNCPOSE		128
-#define FILE_FILTER			256
-#define FILE_BOOKMARKS		512
-#define FILE_GROUP_INSTANCE	1024
+/* sfile->params->flag and simasel->flag */
+#define FILE_SHOWSHORT		(1<<0)
+#define FILE_RELPATH		(1<<1) /* was FILE_STRINGCODE */
+#define FILE_LINK			(1<<2)
+#define FILE_HIDE_DOT		(1<<3)
+#define FILE_AUTOSELECT		(1<<4)
+#define FILE_ACTIVELAY		(1<<5)
+#define FILE_ATCURSOR		(1<<6)
+#define FILE_DIRSEL_ONLY	(1<<7)
+#define FILE_FILTER			(1<<8)
+#define FILE_BOOKMARKS		(1<<9)
+#define FILE_GROUP_INSTANCE	(1<<10)
 
+
 /* files in filesel list: file types */
 #define BLENDERFILE			(1<<2)
 #define BLENDERFILE_BACKUP	(1<<3)




More information about the Bf-blender-cvs mailing list