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)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to