[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