Commit: e28fb661868af9e23f43818075e5a7fb786e319e
Author: Bastien Montagne
Date:   Mon Dec 8 18:51:38 2014 +0100
Branches: asset-experiments
https://developer.blender.org/rBe28fb661868af9e23f43818075e5a7fb786e319e

More sorting fixes and tweaks (things should work rather OK now).

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

M       source/blender/blenloader/intern/readfile.c
M       source/blender/editors/space_file/file_draw.c
M       source/blender/editors/space_file/filelist.c
M       source/blender/editors/space_file/filelist.h

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

diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index d470010..14e61ae 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -1150,7 +1150,7 @@ bool BLO_library_path_explode(const char *path, char 
*r_dir, char **r_group, cha
 {
        /* We might get some data names with slashes, so we have to go up in 
path until we find blend file itself,
         * then we now next path item is group, and everything else is data 
name. */
-       char *slash, *prev_slash = NULL;
+       char *slash = NULL, *prev_slash = NULL;
 
        r_dir[0] = '\0';
        if (r_group) {
diff --git a/source/blender/editors/space_file/file_draw.c 
b/source/blender/editors/space_file/file_draw.c
index eb4e571..332b8c5 100644
--- a/source/blender/editors/space_file/file_draw.c
+++ b/source/blender/editors/space_file/file_draw.c
@@ -471,7 +471,7 @@ void file_draw_list(const bContext *C, ARegion *ar)
        align = (FILE_IMGDISPLAY == params->display) ? UI_STYLE_TEXT_CENTER : 
UI_STYLE_TEXT_LEFT;
 
        for (i = offset; (i < numfiles) && (i < offset + numfiles_layout); i++) 
{
-               char path[FILE_MAX_LIBEXTRA], dir[FILE_MAXDIR], *group, *name;
+               char path[FILE_MAX_LIBEXTRA], dir[FILE_MAXDIR], *name;
                ED_fileselect_layout_tilepos(layout, i, &sx, &sy);
                sx += (int)(v2d->tot.xmin + 0.1f * UI_UNIT_X);
                sy = (int)(v2d->tot.ymax - sy);
@@ -479,15 +479,7 @@ void file_draw_list(const bContext *C, ARegion *ar)
                file = filelist_file(files, i);
 
                BLI_join_dirfile(path, sizeof(path), filelist_dir(files), 
file->relname);
-               if (BLO_library_path_explode(path, dir, &group, &name)) {
-                       if (!name) {
-                               name = group;
-                       }
-                       BLI_assert(name);
-               }
-               else {
-                       name = file->relname;
-               }
+               name = fileentry_uiname(file, dir);
 
                UI_ThemeColor4(TH_TEXT);
 
diff --git a/source/blender/editors/space_file/filelist.c 
b/source/blender/editors/space_file/filelist.c
index a849c1f..a6f7876 100644
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@ -177,6 +177,8 @@ static bool compare_is_directory(const struct direntry 
*entry)
 static int compare_name(const void *a1, const void *a2)
 {
        const struct direntry *entry1 = a1, *entry2 = a2;
+       char dir1[FILE_MAX_LIBEXTRA], dir2[FILE_MAX_LIBEXTRA];
+       char *name1, *name2;
 
        /* type is equal to stat.st_mode */
 
@@ -200,14 +202,19 @@ static int compare_name(const void *a1, const void *a2)
        if (strcmp(entry2->relname, ".") == 0) return (1);
        if (strcmp(entry1->relname, "..") == 0) return (-1);
        if (strcmp(entry2->relname, "..") == 0) return (1);
-       
-       return (BLI_natstrcmp(entry1->relname, entry2->relname));
+
+       name1 = fileentry_uiname(entry1, dir1);
+       name2 = fileentry_uiname(entry2, dir2);
+
+       return BLI_natstrcmp(name1, name2);
 }
 
 static int compare_date(const void *a1, const void *a2)        
 {
        const struct direntry *entry1 = a1, *entry2 = a2;
-       
+       char dir1[FILE_MAX_LIBEXTRA], dir2[FILE_MAX_LIBEXTRA];
+       char *name1, *name2;
+
        /* type is equal to stat.st_mode */
 
        if (compare_is_directory(entry1)) {
@@ -233,13 +240,18 @@ static int compare_date(const void *a1, const void *a2)
        
        if (entry1->s.st_mtime < entry2->s.st_mtime) return 1;
        if (entry1->s.st_mtime > entry2->s.st_mtime) return -1;
-       
-       else return BLI_natstrcmp(entry1->relname, entry2->relname);
+
+       name1 = fileentry_uiname(entry1, dir1);
+       name2 = fileentry_uiname(entry2, dir2);
+
+       return BLI_natstrcmp(name1, name2);
 }
 
 static int compare_size(const void *a1, const void *a2)        
 {
        const struct direntry *entry1 = a1, *entry2 = a2;
+       char dir1[FILE_MAX_LIBEXTRA], dir2[FILE_MAX_LIBEXTRA];
+       char *name1, *name2;
 
        /* type is equal to stat.st_mode */
 
@@ -266,7 +278,11 @@ static int compare_size(const void *a1, const void *a2)
        
        if (entry1->s.st_size < entry2->s.st_size) return 1;
        if (entry1->s.st_size > entry2->s.st_size) return -1;
-       else return BLI_natstrcmp(entry1->relname, entry2->relname);
+
+       name1 = fileentry_uiname(entry1, dir1);
+       name2 = fileentry_uiname(entry2, dir2);
+
+       return BLI_natstrcmp(name1, name2);
 }
 
 static int compare_extension(const void *a1, const void *a2)
@@ -291,6 +307,21 @@ static int compare_extension(const void *a1, const void 
*a2)
                if (compare_is_directory(entry2)) return (1);
        }
 
+       if (S_ISREG(entry1->type)) {
+               if (S_ISREG(entry2->type) == 0) return (-1);
+       }
+       else {
+               if (S_ISREG(entry2->type)) return (1);
+       }
+       if ((entry1->type & S_IFMT) < (entry2->type & S_IFMT)) return (-1);
+       if ((entry1->type & S_IFMT) > (entry2->type & S_IFMT)) return (1);
+
+       /* make sure "." and ".." are always first */
+       if (strcmp(entry1->relname, ".") == 0) return (-1);
+       if (strcmp(entry2->relname, ".") == 0) return (1);
+       if (strcmp(entry1->relname, "..") == 0) return (-1);
+       if (strcmp(entry2->relname, "..") == 0) return (1);
+
        if ((entry1->flags & BLENDERLIB) && !(entry2->flags & BLENDERLIB)) 
return -1;
        if (!(entry1->flags & BLENDERLIB) && (entry2->flags & BLENDERLIB)) 
return 1;
        if ((entry1->flags & BLENDERLIB) && (entry2->flags & BLENDERLIB)) {
@@ -318,22 +349,7 @@ static int compare_extension(const void *a1, const void 
*a2)
                return BLI_strcasecmp(name1, name2);
        }
 
-       if (S_ISREG(entry1->type)) {
-               if (S_ISREG(entry2->type) == 0) return (-1);
-       }
-       else {
-               if (S_ISREG(entry2->type)) return (1);
-       }
-       if ((entry1->type & S_IFMT) < (entry2->type & S_IFMT)) return (-1);
-       if ((entry1->type & S_IFMT) > (entry2->type & S_IFMT)) return (1);
-
-       /* make sure "." and ".." are always first */
-       if (strcmp(entry1->relname, ".") == 0) return (-1);
-       if (strcmp(entry2->relname, ".") == 0) return (1);
-       if (strcmp(entry1->relname, "..") == 0) return (-1);
-       if (strcmp(entry2->relname, "..") == 0) return (1);
-
-       return (BLI_strcasecmp(sufix1, sufix2));
+       return BLI_strcasecmp(sufix1, sufix2);
 }
 
 
@@ -666,6 +682,28 @@ int filelist_numfiles(struct FileList *filelist)
        return filelist->numfiltered;
 }
 
+char *fileentry_uiname(const struct direntry *entry, char *dir)
+{
+       char *name;
+
+       if (entry->path && entry->flags & BLENDERLIB) {
+               char *group;
+               BLO_library_path_explode(entry->path, dir, &group, &name);
+               if (!name) {
+                       name = group;
+               }
+       }
+       else if (entry->type & S_IFDIR) {
+               name = entry->relname;
+       }
+       else {
+               name = (char *)BLI_path_basename(entry->relname);
+       }
+       BLI_assert(name);
+
+       return name;
+}
+
 const char *filelist_dir(struct FileList *filelist)
 {
        return filelist->dir;
diff --git a/source/blender/editors/space_file/filelist.h 
b/source/blender/editors/space_file/filelist.h
index cb5fbe8..05b8398 100644
--- a/source/blender/editors/space_file/filelist.h
+++ b/source/blender/editors/space_file/filelist.h
@@ -93,6 +93,8 @@ void                filelist_from_main(struct FileList 
*filelist);
 void                filelist_freelib(struct FileList *filelist);
 void                filelist_hideparent(struct FileList *filelist, short hide);
 
+char               *fileentry_uiname(const struct direntry *entry, char *dir);
+
 
 struct ListBase *   folderlist_new(void);
 void                folderlist_free(struct ListBase *folderlist);

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

Reply via email to