Commit: 12a77b7ac7d200c954e13729af997f92a63d508a
Author: Antony Riakiotakis
Date:   Fri Jun 5 13:54:26 2015 +0200
Branches: gooseberry
https://developer.blender.org/rB12a77b7ac7d200c954e13729af997f92a63d508a

Collapsed images:

* Icon of collapsed images is same as a movie
* Size displayed is cummulative size of all images
* Frame range is displayed in the filename

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

M       source/blender/blenlib/BLI_fileops.h
M       source/blender/blenlib/BLI_fileops_types.h
M       source/blender/blenlib/intern/BLI_filelist.c
M       source/blender/blenlib/intern/path_util.c
M       source/blender/editors/space_file/file_draw.c
M       source/blender/editors/space_file/filelist.c
M       source/blender/editors/space_file/filesel.c

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

diff --git a/source/blender/blenlib/BLI_fileops.h 
b/source/blender/blenlib/BLI_fileops.h
index 01aa5d3..642896a 100644
--- a/source/blender/blenlib/BLI_fileops.h
+++ b/source/blender/blenlib/BLI_fileops.h
@@ -106,6 +106,7 @@ int    BLI_access(const char *filename, int mode) 
ATTR_WARN_UNUSED_RESULT ATTR_N
 
 bool   BLI_file_is_writable(const char *file) ATTR_WARN_UNUSED_RESULT 
ATTR_NONNULL();
 bool   BLI_file_touch(const char *file) ATTR_NONNULL();
+void   BLI_file_size_string(off_t st_size, char *size, size_t len);
 
 #if 0  /* UNUSED */
 int    BLI_file_gzip(const char *from, const char *to) ATTR_WARN_UNUSED_RESULT 
ATTR_NONNULL();
diff --git a/source/blender/blenlib/BLI_fileops_types.h 
b/source/blender/blenlib/BLI_fileops_types.h
index 917f6ff..73d0c50 100644
--- a/source/blender/blenlib/BLI_fileops_types.h
+++ b/source/blender/blenlib/BLI_fileops_types.h
@@ -75,6 +75,12 @@ struct direntry {
         * ideally we should store this to a struct in a customdata pointer.
         * Maybe poin can be used instead */
        ListBase list;
+       /* it sucks to store this as well but it's needed */
+       off_t realsize;
+       off_t collapsedsize;
+       int minframe;
+       int maxframe;
+       int numdigits;
 };
 
 struct dirlink {
diff --git a/source/blender/blenlib/intern/BLI_filelist.c 
b/source/blender/blenlib/intern/BLI_filelist.c
index 1dc308c..7d59f05 100644
--- a/source/blender/blenlib/intern/BLI_filelist.c
+++ b/source/blender/blenlib/intern/BLI_filelist.c
@@ -218,7 +218,6 @@ static void bli_adddirstrings(struct BuildDirCtx *dir_ctx)
        const char *types[8] = {"---", "--x", "-w-", "-wx", "r--", "r-x", 
"rw-", "rwx"};
        /* symbolic display, indexed by mode field value */
        int num;
-       off_t st_size;
        struct direntry *file;
        struct tm *tm;
        time_t zero = 0;
@@ -288,20 +287,25 @@ static void bli_adddirstrings(struct BuildDirCtx *dir_ctx)
                 * will buy us some time until files get bigger than 4GB or 
until
                 * everyone starts using __USE_FILE_OFFSET64 or equivalent.
                 */
-               st_size = file->s.st_size;
+               file->realsize = file->s.st_size;
 
-               if (st_size > 1024 * 1024 * 1024) {
-                       BLI_snprintf(file->size, sizeof(file->size), "%.2f 
GiB", ((double)st_size) / (1024 * 1024 * 1024));
-               }
-               else if (st_size > 1024 * 1024) {
-                       BLI_snprintf(file->size, sizeof(file->size), "%.1f 
MiB", ((double)st_size) / (1024 * 1024));
-               }
-               else if (st_size > 1024) {
-                       BLI_snprintf(file->size, sizeof(file->size), "%d KiB", 
(int)(st_size / 1024));
-               }
-               else {
-                       BLI_snprintf(file->size, sizeof(file->size), "%d B", 
(int)st_size);
-               }
+               BLI_file_size_string(file->realsize, file->size, 
sizeof(file->size));
+       }
+}
+
+void BLI_file_size_string(off_t st_size, char *size, size_t len)
+{
+       if (st_size > 1024 * 1024 * 1024) {
+               BLI_snprintf(size, len, "%.2f GiB", ((double)st_size) / (1024 * 
1024 * 1024));
+       }
+       else if (st_size > 1024 * 1024) {
+               BLI_snprintf(size, len, "%.1f MiB", ((double)st_size) / (1024 * 
1024));
+       }
+       else if (st_size > 1024) {
+               BLI_snprintf(size, len, "%d KiB", (int)(st_size / 1024));
+       }
+       else {
+               BLI_snprintf(size, len, "%d B", (int)st_size);
        }
 }
 
diff --git a/source/blender/blenlib/intern/path_util.c 
b/source/blender/blenlib/intern/path_util.c
index f9c899a..0f1500e 100644
--- a/source/blender/blenlib/intern/path_util.c
+++ b/source/blender/blenlib/intern/path_util.c
@@ -947,17 +947,34 @@ bool BLI_path_frame_strip(char *path, bool setsharp, char 
*ext)
                c++;
 
                if(numdigits) {
-                       /* replace the number with the suffix and terminate the 
string */
-                       while (numdigits--) {
-                               if (ext) *ext++ = *suffix;
-
-                               if (setsharp) *c++ = '#';
-                               else *c++ = *suffix;
+                       /* logic here is a bit complex. Idea is: if ext has 
been provided,
+                        * fill it with the extension part and do not keep it 
in filename
+                        * if no ext has been provided, just strip the number 
or fill it with #
+                        */
+                       if (ext) {
+                               while (*suffix) {
+                                       *ext++ = *suffix++;
+                               }
+                               *ext = 0;
 
-                               suffix++;
+                               if (setsharp) {
+                                       while (numdigits--) {
+                                               *c++ = '#';
+                                       }
+                               }
+                               *c = 0;
+                       }
+                       else {
+                               if (setsharp) {
+                                       while (numdigits--) {
+                                               *c++ = '#';
+                                       }
+                               }
+                               while (*suffix) {
+                                       *c++ = *suffix++;
+                               }
+                               *c = 0;
                        }
-                       *c = 0;
-                       if (ext) *ext = 0;
 
                        return true;
                }
diff --git a/source/blender/editors/space_file/file_draw.c 
b/source/blender/editors/space_file/file_draw.c
index 0e4d885..879e372 100644
--- a/source/blender/editors/space_file/file_draw.c
+++ b/source/blender/editors/space_file/file_draw.c
@@ -254,8 +254,13 @@ static int get_file_icon(struct direntry *file)
                return ICON_FILE_BLEND;
        else if (file->flags & FILE_TYPE_BLENDER_BACKUP)
                return ICON_FILE_BACKUP;
-       else if (file->flags & FILE_TYPE_IMAGE)
-               return ICON_FILE_IMAGE;
+       else if (file->flags & FILE_TYPE_IMAGE) {
+               if (file->selflag & FILE_SEL_COLLAPSED) {
+                       return ICON_FILE_MOVIE;
+               }
+               else
+                       return ICON_FILE_IMAGE;
+       }
        else if (file->flags & FILE_TYPE_MOVIE)
                return ICON_FILE_MOVIE;
        else if (file->flags & FILE_TYPE_PYSCRIPT)
@@ -605,43 +610,68 @@ void file_draw_list(const bContext *C, ARegion *ar)
 
                if (!(file->selflag & FILE_SEL_EDITING)) {
                        int tpos = (FILE_IMGDISPLAY == params->display) ? sy - 
layout->tile_h + layout->textheight : sy;
-                       file_draw_string(sx + 1, tpos, file->relname, 
(float)textwidth, textheight, align);
+                       if (file->selflag & FILE_SEL_COLLAPSED) {
+                               char fname[PATH_MAX];
+                               char finalname[PATH_MAX];
+                               char ext[PATH_MAX];
+                               BLI_strncpy(fname, file->relname, 
sizeof(fname));
+                               BLI_path_frame_strip(fname, false, ext);
+                               BLI_snprintf(finalname, sizeof(finalname), 
"%s%.*d-%.*d%s",
+                                            fname, file->numdigits, 
file->minframe, file->numdigits, file->maxframe, ext);
+                               file_draw_string(sx + 1, tpos, finalname, 
(float)textwidth, textheight, align);
+                       }
+                       else
+                               file_draw_string(sx + 1, tpos, file->relname, 
(float)textwidth, textheight, align);
                }
 
                if (params->display == FILE_SHORTDISPLAY) {
                        sx += (int)layout->column_widths[COLUMN_NAME] + 
column_space;
                        if (!(file->type & S_IFDIR)) {
-                               file_draw_string(sx, sy, file->size, 
layout->column_widths[COLUMN_SIZE], layout->tile_h, align);
+                               if (file->selflag & FILE_SEL_COLLAPSED) {
+                                       char sizestr[16];
+                                       
BLI_file_size_string(file->collapsedsize, sizestr, sizeof(sizestr));
+                                       file_draw_string(sx, sy, sizestr, 
layout->column_widths[COLUMN_SIZE], layout->tile_h, align);
+                               }
+                               else
+                                       file_draw_string(sx, sy, file->size, 
layout->column_widths[COLUMN_SIZE], layout->tile_h, align);
                                sx += (int)layout->column_widths[COLUMN_SIZE] + 
column_space;
                        }
                }
                else if (params->display == FILE_LONGDISPLAY) {
                        sx += (int)layout->column_widths[COLUMN_NAME] + 
column_space;
 
+                       /* for collapsed files it doesn't make sense to display 
all info */
+                       if (file->selflag & FILE_SEL_COLLAPSED) {
+                               char sizestr[16];
+                               BLI_file_size_string(file->collapsedsize, 
sizestr, sizeof(sizestr));
+                               file_draw_string(sx, sy, sizestr, 
layout->column_widths[COLUMN_SIZE], layout->tile_h, align);
+                       }
+                       else {
 #ifndef WIN32
-                       /* rwx rwx rwx */
-                       file_draw_string(sx, sy, file->mode1, 
layout->column_widths[COLUMN_MODE1], layout->tile_h, align); 
-                       sx += layout->column_widths[COLUMN_MODE1] + 
column_space;
+                               /* rwx rwx rwx */
+                               file_draw_string(sx, sy, file->mode1, 
layout->column_widths[COLUMN_MODE1], layout->tile_h, align);
+                               sx += layout->column_widths[COLUMN_MODE1] + 
column_space;
 
-                       file_draw_string(sx, sy, file->mode2, 
layout->column_widths[COLUMN_MODE2], layout->tile_h, align);
-                       sx += layout->column_widths[COLUMN_MODE2] + 
column_space;
+                               file_draw_string(sx, sy, file->mode2, 
layout->column_widths[COLUMN_MODE2], layout->tile_h, align);
+                               sx += layout->column_widths[COLUMN_MODE2] + 
column_space;
 
-                       file_draw_string(sx, sy, file->mode3, 
layout->column_widths[COLUMN_MODE3], layout->tile_h, align);
-                       sx += layout->column_widths[COLUMN_MODE3] + 
column_space;
+                               file_draw_string(sx, sy, file->mode3, 
layout->column_widths[COLUMN_MODE3], layout->tile_h, align);
+                               sx += layout->column_widths[COLUMN_MODE3] + 
column_space;
 
-                       file_draw_string(sx, sy, file->owner, 
layout->column_widths[COLUMN_OWNER], layout->tile_h, align);
-                       sx += layout->column_widths[COLUMN_OWNER] + 
column_space;
+                               file_draw_string(sx, sy, file->owner, 
layout->column_widths[COLUMN_OWNER], layout->tile_h, align);
+                               sx += layout->column_widths[COLUMN_OWNER] + 
column_space;
 #endif
 
-                       file_draw_string(sx, sy, file->date, 
layout->column_widths[COLUMN_DATE], layout->tile_h, align);
-                       sx += (int)layout->column_widths[COLUMN_DATE] + 
column_space;
+                               file_draw_string(sx, sy, file->date, 
layout->column_widths[COLUMN_DATE], layout->tile_h, align);
+                               sx += (int)layout->column_widths[COLUMN_DATE] + 
column_space;
 
-                       file_draw_string(sx, sy, file->time, 
layout->column_widths[COLUMN_TIME], layout->tile_h, align);
-                       sx += (int)layout->column_widths[COLUMN_TIME] + 
column_space;
+                               file_draw_string(sx, sy, file->time, 
layout->column_widths[COLUMN_TIME], layout->tile_h, align);
+                               sx += (int)layout->column_widths[COLUMN_TIME] + 
column_space;
 
-                       if (!(file->type & S_IFDIR)) {
-                               file_draw_string(sx, sy, file->size, 
layout->column_widths[COLUMN_SIZE], layout->tile_h, align);
-                               sx += (int)layout->column_widths[COLUMN_SIZE] + 
column_space;
+                               if (!(file->type & S_IFDIR)) {
+                                       file_draw_string(sx, sy, file->size, 
layout->column_widths[COLUMN_SIZE], layout->tile_h, align);
+                                       sx += 
(int)layout->column_widths[COLUMN_SIZE] + column_space;
+                               }
                        }
                }
        }
diff --git a/source/blender/editors/space_file/filelist.c 
b/source/blender/editors/space_file/filelist.c
index a0213f0..0df9aa0 100644
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@ -469,22 +469,32 @@ static bool is_filtered_file(struct direntry *file, const 
char *UNUSED(root), Fi
        }
 
        if (is_filtered && filter->collapse_ima_seq) {
-               char filename[PATH_MAX];
-
                if (file->relname) {
                        struct direntry *ofile;
-                       BLI_strncpy(filename, file->relname, sizeof(filename));
+                       int frame, numdigits;
+
+                       if (BLI_path_frame_get(file->relname, &frame, 
&numdigits)) {
+                               char filename[PATH_MAX];
 


@@ 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