Revision: 21973
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21973
Author:   blendix
Date:     2009-07-28 18:46:14 +0200 (Tue, 28 Jul 2009)

Log Message:
-----------
2.5: File browser

* Side panels now use list widgets.
* Enabled theme colors for side panel.
* Add button in bookmarks panel.
* Operator panel title now uses operator name.
* For unix, added / to system, and home and desktop to bookmarks.

* For opening fileselect with filter, cleaned up the code a bit,
  adding WM_operator_properties_filesel instead of duplicating code.
* Also added filter for all operators calling fileselect, only image
  and file open did it before.
* Hide . files by default, and also hide files ending with ~.

* Added back .. (but not .) in the file list, I really missed this.
* File highlight now only happens when you're actually over a file,
  instead staying after you move the mouse away.
* Fix some redraw/refresh issues.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenlib/intern/storage.c
    branches/blender2.5/blender/source/blender/editors/curve/editfont.c
    branches/blender2.5/blender/source/blender/editors/screen/screendump.c
    branches/blender2.5/blender/source/blender/editors/space_file/file_draw.c
    branches/blender2.5/blender/source/blender/editors/space_file/file_ops.c
    branches/blender2.5/blender/source/blender/editors/space_file/file_panels.c
    branches/blender2.5/blender/source/blender/editors/space_file/filesel.c
    branches/blender2.5/blender/source/blender/editors/space_file/fsmenu.c
    branches/blender2.5/blender/source/blender/editors/space_file/space_file.c
    branches/blender2.5/blender/source/blender/editors/space_image/image_ops.c
    branches/blender2.5/blender/source/blender/editors/space_info/info_ops.c
    
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_add.c
    branches/blender2.5/blender/source/blender/editors/space_text/text_ops.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_space_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_space.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_ui.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_userdef.c
    branches/blender2.5/blender/source/blender/windowmanager/WM_api.h
    
branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c
    
branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: branches/blender2.5/blender/source/blender/blenlib/intern/storage.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenlib/intern/storage.c 
2009-07-28 16:33:02 UTC (rev 21972)
+++ branches/blender2.5/blender/source/blender/blenlib/intern/storage.c 
2009-07-28 16:46:14 UTC (rev 21973)
@@ -218,7 +218,7 @@
 {
        struct dirent *fname;
        struct dirlink *dlink;
-       int rellen, newnum = 0;
+       int rellen, newnum = 0, len;
        char buf[256];
        DIR *dir;
 
@@ -237,13 +237,11 @@
 
        if ( (dir = (DIR *)opendir(".")) ){
                while ((fname = (struct dirent*) readdir(dir)) != NULL) {
+                       len= strlen(fname->d_name);
                        
-                       if(hide_dot && fname->d_name[0]=='.' && 
fname->d_name[1]!='.' && fname->d_name[1]!=0) {
-                       }
-                       else if ( ( (fname->d_name[0] == '.') && 
(fname->d_name[1] == 0) ) ||
-                                         ( (fname->d_name[0] == '.') && 
(fname->d_name[1] == '.') && (fname->d_name[2] == 0)) ) {
-                               /* ignore '.' and '..' */
-                       }
+                       if(hide_dot && fname->d_name[0]=='.' && 
fname->d_name[1]!='.' && fname->d_name[1]!=0); /* ignore .file */
+                       else if(hide_dot && len && fname->d_name[len-1]=='~'); 
/* ignore file~ */
+                       else if (((fname->d_name[0] == '.') && 
(fname->d_name[1] == 0) )); /* ignore . */
                        else {
                                dlink = (struct dirlink *)malloc(sizeof(struct 
dirlink));
                                if (dlink){

Modified: branches/blender2.5/blender/source/blender/editors/curve/editfont.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/curve/editfont.c 
2009-07-28 16:33:02 UTC (rev 21972)
+++ branches/blender2.5/blender/source/blender/editors/curve/editfont.c 
2009-07-28 16:46:14 UTC (rev 21973)
@@ -416,7 +416,7 @@
        ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 
        /* properties */
-       RNA_def_string_file_path(ot->srna, "filename", "", 0, "Filename", "File 
path of text file to load.");
+       WM_operator_properties_filesel(ot, FOLDERFILE|TEXTFILE);
 }
 
 /******************* paste buffer operator ********************/

Modified: branches/blender2.5/blender/source/blender/editors/screen/screendump.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screendump.c      
2009-07-28 16:33:02 UTC (rev 21972)
+++ branches/blender2.5/blender/source/blender/editors/screen/screendump.c      
2009-07-28 16:46:14 UTC (rev 21973)
@@ -173,7 +173,7 @@
        
        ot->flag= 0;
        
-       RNA_def_property(ot->srna, "filename", PROP_STRING, PROP_FILEPATH);
+       WM_operator_properties_filesel(ot, FOLDERFILE|IMAGEFILE);
        RNA_def_boolean(ot->srna, "full", 1, "Full Screen", "");
 }
 

Modified: 
branches/blender2.5/blender/source/blender/editors/space_file/file_draw.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_file/file_draw.c   
2009-07-28 16:33:02 UTC (rev 21972)
+++ branches/blender2.5/blender/source/blender/editors/space_file/file_draw.c   
2009-07-28 16:46:14 UTC (rev 21973)
@@ -153,7 +153,7 @@
        
        uiBut*            but;
        uiBlock*          block;
-       SpaceFile*        sfile  = (SpaceFile*) CTX_wm_space_data(C);
+       SpaceFile*        sfile  = CTX_wm_space_file(C);
        FileSelectParams* params = ED_fileselect_get_params(sfile);
        
        /* Initialize UI block. */
@@ -345,7 +345,7 @@
 
 void file_calc_previews(const bContext *C, ARegion *ar)
 {
-       SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
+       SpaceFile *sfile= CTX_wm_space_file(C);
        View2D *v2d= &ar->v2d;
        
        ED_fileselect_init_layout(sfile, ar);
@@ -354,7 +354,7 @@
 
 void file_draw_previews(const bContext *C, ARegion *ar)
 {
-       SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
+       SpaceFile *sfile= CTX_wm_space_file(C);
        FileSelectParams* params= ED_fileselect_get_params(sfile);
        FileLayout* layout= ED_fileselect_get_layout(sfile, ar);
        View2D *v2d= &ar->v2d;
@@ -517,7 +517,7 @@
 
 void file_draw_list(const bContext *C, ARegion *ar)
 {
-       SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
+       SpaceFile *sfile= CTX_wm_space_file(C);
        FileSelectParams* params = ED_fileselect_get_params(sfile);
        FileLayout* layout= ED_fileselect_get_layout(sfile, ar);
        View2D *v2d= &ar->v2d;

Modified: 
branches/blender2.5/blender/source/blender/editors/space_file/file_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_file/file_ops.c    
2009-07-28 16:33:02 UTC (rev 21972)
+++ branches/blender2.5/blender/source/blender/editors/space_file/file_ops.c    
2009-07-28 16:46:14 UTC (rev 21973)
@@ -143,14 +143,20 @@
                params->active_file = last_file;
 
                if(file && S_ISDIR(file->type)) {
-                       /* the path is too long! */
-                       if (strlen(params->dir) + strlen(file->relname) >= 
FILE_MAX ) 
+                       /* the path is too long and we are not going up! */
+                       if (strcmp(file->relname, "..") && strlen(params->dir) 
+ strlen(file->relname) >= FILE_MAX ) 
                        {
                                // XXX error("Path too long, cannot enter this 
directory");
                        } else {
-                               BLI_cleanup_dir(G.sce, params->dir);
-                               strcat(params->dir, file->relname);
-                               BLI_add_slash(params->dir);
+                               if (strcmp(file->relname, "..")==0) {    
+                                       /* avoids /../../ */     
+                                       BLI_parent_dir(params->dir);     
+                               } else {
+                                       BLI_cleanup_dir(G.sce, params->dir);
+                                       strcat(params->dir, file->relname);
+                                       BLI_add_slash(params->dir);
+                               }
+
                                params->file[0] = '\0';
                                file_change_dir(sfile);
                                retval = FILE_SELECT_DIR;
@@ -172,7 +178,7 @@
 static int file_border_select_exec(bContext *C, wmOperator *op)
 {
        ARegion *ar= CTX_wm_region(C);
-       SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
+       SpaceFile *sfile= CTX_wm_space_file(C);
        short val;
        rcti rect;
 
@@ -216,24 +222,31 @@
 static int file_select_invoke(bContext *C, wmOperator *op, wmEvent *event)
 {
        ARegion *ar= CTX_wm_region(C);
-       SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
+       SpaceFile *sfile= CTX_wm_space_file(C);
        short val;
        rcti rect;
 
+       if(ar->regiontype != RGN_TYPE_WINDOW)
+               return OPERATOR_CANCELLED;
+
        rect.xmin = rect.xmax = event->x - ar->winrct.xmin;
        rect.ymin = rect.ymax = event->y - ar->winrct.ymin;
        val = event->val;
 
-       if (BLI_in_rcti(&ar->v2d.mask, rect.xmin, rect.ymin)) { 
+       if(!BLI_in_rcti(&ar->v2d.mask, rect.xmin, rect.ymin))
+               return OPERATOR_CANCELLED;
 
-               /* single select, deselect all selected first */
-               file_deselect_all(sfile);
-               if (FILE_SELECT_DIR == file_select(sfile, ar, &rect, val )) {
-                       WM_event_add_notifier(C, NC_FILE|ND_FILELIST, NULL);
-               } else {
-                       WM_event_add_notifier(C, NC_FILE|ND_PARAMS, NULL);
-               }
-       }
+       /* single select, deselect all selected first */
+       file_deselect_all(sfile);
+
+       if (FILE_SELECT_DIR == file_select(sfile, ar, &rect, val ))
+               WM_event_add_notifier(C, NC_FILE|ND_FILELIST, NULL);
+       else
+               WM_event_add_notifier(C, NC_FILE|ND_PARAMS, NULL);
+
+       WM_event_add_mousemove(C); /* for directory changes */
+       WM_event_add_notifier(C, NC_FILE|ND_PARAMS, NULL);
+
        return OPERATOR_FINISHED;
 }
 
@@ -254,7 +267,7 @@
 static int file_select_all_invoke(bContext *C, wmOperator *op, wmEvent *event)
 {
        ScrArea *sa= CTX_wm_area(C);
-       SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
+       SpaceFile *sfile= CTX_wm_space_file(C);
        int numfiles = filelist_numfiles(sfile->files);
        int i;
        int select = 1;
@@ -299,7 +312,7 @@
 
 static int bookmark_select_invoke(bContext *C, wmOperator *op, wmEvent *event)
 {
-       SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
+       SpaceFile *sfile= CTX_wm_space_file(C);
 
        if(RNA_struct_find_property(op->ptr, "dir")) {
                char entry[256];
@@ -333,7 +346,7 @@
 static int bookmark_add_invoke(bContext *C, wmOperator *op, wmEvent *event)
 {
        ScrArea *sa= CTX_wm_area(C);
-       SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
+       SpaceFile *sfile= CTX_wm_space_file(C);
        struct FSMenu* fsmenu = fsmenu_get();
        struct FileSelectParams* params= ED_fileselect_get_params(sfile);
 
@@ -398,7 +411,7 @@
 static int loadimages_invoke(bContext *C, wmOperator *op, wmEvent *event)
 {
        ScrArea *sa= CTX_wm_area(C);
-       SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
+       SpaceFile *sfile= CTX_wm_space_file(C);
        if (sfile->files) {
                filelist_loadimage_timer(sfile->files);
                if (filelist_changed(sfile->files)) {
@@ -425,32 +438,42 @@
 int file_hilight_set(SpaceFile *sfile, ARegion *ar, int mx, int my)
 {
        FileSelectParams* params;
-       int numfiles, actfile;
+       int numfiles, actfile, origfile;
        
        if(sfile==NULL || sfile->files==NULL) return 0;
-       
+
        numfiles = filelist_numfiles(sfile->files);
        params = ED_fileselect_get_params(sfile);
 
-       actfile = find_file_mouse(sfile, ar, mx , my, 0);
-       
-       if (params && (actfile >= 0) && (actfile < numfiles) ) {
-               params->active_file=actfile;
-               return 1;
-       } 
-       params->active_file= -1;
-       return 0;
+       origfile= params->active_file;
+
+       mx -= ar->winrct.xmin;
+       my -= ar->winrct.ymin;
+
+       if(BLI_in_rcti(&ar->v2d.mask, mx, my)) {
+               actfile = find_file_mouse(sfile, ar, mx , my, 0);
+
+               if((actfile >= 0) && (actfile < numfiles))
+                       params->active_file=actfile;
+               else
+                       params->active_file= -1;
+       }
+       else
+               params->active_file= -1;
+
+       return (params->active_file != origfile);
 }
 
 static int file_highlight_invoke(bContext *C, wmOperator *op, wmEvent *event)
 {
        ARegion *ar= CTX_wm_region(C);
-       SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
+       SpaceFile *sfile= CTX_wm_space_file(C);
+
+       if(!file_hilight_set(sfile, ar, event->x, event->y))
+               return OPERATOR_CANCELLED;
+
+       ED_area_tag_redraw(CTX_wm_area(C));
        
-       if( file_hilight_set(sfile, ar, event->x - ar->winrct.xmin, event->y - 
ar->winrct.ymin)) {
-               ED_area_tag_redraw(CTX_wm_area(C));
-       }
-       
        return OPERATOR_FINISHED;
 }
 
@@ -467,7 +490,7 @@
 
 int file_cancel_exec(bContext *C, wmOperator *unused)
 {
-       SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
+       SpaceFile *sfile= CTX_wm_space_file(C);
 
        folderlist_free(sfile->folders_prev);
        folderlist_free(sfile->folders_next);
@@ -492,7 +515,7 @@
 /* sends events now, so things get handled on windowqueue level */
 int file_exec(bContext *C, wmOperator *unused)
 {
-       SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
+       SpaceFile *sfile= CTX_wm_space_file(C);
        char name[FILE_MAX];
        
        if(sfile->op) {
@@ -559,7 +582,7 @@
 
 int file_parent_exec(bContext *C, wmOperator *unused)
 {
-       SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
+       SpaceFile *sfile= CTX_wm_space_file(C);
        
        if(sfile->params) {
                if (BLI_has_parent(sfile->params->dir)) {
@@ -589,7 +612,7 @@
 

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to