Commit: b3c0b59825023477827162beb3ea426f67cc842f
Author: Bastien Montagne
Date:   Mon Jan 26 17:18:43 2015 +0100
Branches: asset-experiments
https://developer.blender.org/rBb3c0b59825023477827162beb3ea426f67cc842f

Merge branch 'master' into asset-experiments

Conflicts:
        source/blender/blenloader/intern/readfile.c
        source/blender/editors/space_file/file_draw.c
        source/blender/editors/space_file/file_ops.c
        source/blender/editors/space_file/filelist.c

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



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

diff --cc source/blender/editors/space_file/file_draw.c
index 465c84f,98e0a17..9dabee4
--- a/source/blender/editors/space_file/file_draw.c
+++ b/source/blender/editors/space_file/file_draw.c
@@@ -512,10 -538,9 +512,10 @@@ void file_draw_list(const bContext *C, 
                UI_draw_roundbox_corner_set(UI_CNR_NONE);
  
                /* don't drag parent or refresh items */
-               do_drag = !(STREQ(file->relname, "..") || STREQ(file->relname, 
"."));
+               do_drag = !(FILENAME_IS_CURRPAR(file->relname));
  
                if (FILE_IMGDISPLAY == params->display) {
 +                      const int icon = filelist_geticon(files, i, false);
                        is_icon = 0;
                        imb = filelist_getimage(files, i);
                        if (!imb) {
diff --cc source/blender/editors/space_file/file_ops.c
index 93f52cd,ba6f91e..64158c5
--- a/source/blender/editors/space_file/file_ops.c
+++ b/source/blender/editors/space_file/file_ops.c
@@@ -178,8 -178,6 +178,8 @@@ static FileSelect file_select_do(bConte
                params->active_file = selected_idx;
  
                if (S_ISDIR(file->type)) {
-                       const bool is_parent_dir = STREQ(file->relname, "..");
++                      const bool is_parent_dir = 
FILENAME_IS_PARENT(file->relname);
 +
                        if (do_diropen == false) {
                                params->file[0] = '\0';
                                retval = FILE_SELECT_DIR;
diff --cc source/blender/editors/space_file/filelist.c
index 0f893ad,edf0bb0..c2c08d2
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@@ -545,17 -463,12 +542,17 @@@ static bool is_filtered_file(struct dir
  
  static bool is_filtered_lib(struct direntry *file, const char *root, 
FileListFilter *filter)
  {
 -      bool is_filtered = !is_hidden_file(file->relname, filter);
 -      char dir[FILE_MAXDIR], group[BLO_GROUP_MAX];
 +      bool is_filtered;
 +      char path[FILE_MAX_LIBEXTRA], dir[FILE_MAXDIR], *group;
  
 -      if (BLO_is_a_library(root, dir, group)) {
 +      BLI_join_dirfile(path, sizeof(path), root, file->relname);
 +
 +      if (BLO_library_path_explode(path, dir, &group, NULL)) {
                is_filtered = !is_hidden_file(file->relname, filter);
-               if (is_filtered && filter->filter && 
!FILENAME_IS_BREADCRUMBS(file->relname)) {
+               if (is_filtered && filter->filter && 
!FILENAME_IS_CURRPAR(file->relname)) {
 +                      if ((file->type & S_IFDIR) && !(filter->filter & 
FILE_TYPE_FOLDER)) {
 +                              is_filtered = false;
 +                      }
                        if (is_filtered && (filter->filter_search[0] != '\0')) {
                                if (fnmatch(filter->filter_search, 
file->relname, FNM_CASEFOLD) != 0) {
                                        is_filtered = false;
@@@ -696,29 -601,40 +693,29 @@@ void filelist_imgsize(struct FileList *
        filelist->prv_h = h;
  }
  
 -ImBuf *filelist_getimage(struct FileList *filelist, const int index)
 +static struct direntry *filelist_geticon_get_file(struct FileList *filelist, 
const int index)
  {
 -      ImBuf *ibuf = NULL;
 -      int fidx = 0;
 -
        BLI_assert(G.background == false);
  
 -      if ((index < 0) || (index >= filelist->numfiltered)) {
 -              return NULL;
 -      }
 -      fidx = filelist->fidx[index];
 -      ibuf = filelist->filelist[fidx].image;
 +      return filelist_file(filelist, index);
 +}
  
 -      return ibuf;
 +ImBuf *filelist_getimage(struct FileList *filelist, const int index)
 +{
 +      struct direntry *file = filelist_geticon_get_file(filelist, index);
 +
 +      return file->image;
  }
  
 -ImBuf *filelist_geticon(struct FileList *filelist, const int index)
 +static ImBuf *filelist_geticon_image_ex(const unsigned int type, const 
unsigned int flags, const char *relname)
  {
        ImBuf *ibuf = NULL;
 -      struct direntry *file = NULL;
 -      int fidx = 0;
 -
 -      BLI_assert(G.background == false);
  
 -      if ((index < 0) || (index >= filelist->numfiltered)) {
 -              return NULL;
 -      }
 -      fidx = filelist->fidx[index];
 -      file = &filelist->filelist[fidx];
 -      if (file->type & S_IFDIR) {
 -              if (FILENAME_IS_PARENT(filelist->filelist[fidx].relname)) {
 +      if (type & S_IFDIR) {
-               if (strcmp(relname, "..") == 0) {
++              if (FILENAME_IS_PARENT(relname)) {
                        ibuf = gSpecialFileImages[SPECIAL_IMG_PARENT];
                }
-               else if (strcmp(relname, ".") == 0) {
 -              else if (FILENAME_IS_CURRENT(filelist->filelist[fidx].relname)) 
{
++              else if (FILENAME_IS_CURRENT(relname)) {
                        ibuf = gSpecialFileImages[SPECIAL_IMG_REFRESH];
                }
                else {
@@@ -759,150 -673,8 +756,150 @@@
        return ibuf;
  }
  
 +ImBuf *filelist_geticon_image(struct FileList *filelist, const int index)
 +{
 +      struct direntry *file = filelist_geticon_get_file(filelist, index);
 +
 +      return filelist_geticon_image_ex(file->type, file->flags, 
file->relname);
 +}
 +
 +static int filelist_geticon_ex(
 +        const unsigned int type, const unsigned int flags, const char *path, 
const char *relname,
 +        const bool is_main, const bool ignore_libdir)
 +{
 +      if (type & S_IFDIR && !(ignore_libdir && (flags & (FILE_TYPE_BLENDERLIB 
| FILE_TYPE_BLENDER)))) {
-               if (strcmp(relname, "..") == 0) {
++              if (FILENAME_IS_PARENT(relname)) {
 +                      return is_main ? ICON_FILE_PARENT : ICON_NONE;
 +              }
 +              else if (flags & FILE_TYPE_APPLICATIONBUNDLE) {
 +                      return ICON_UGLYPACKAGE;
 +              }
 +              else if (flags & FILE_TYPE_BLENDER) {
 +                      return ICON_FILE_BLEND;
 +              }
 +              else if (is_main) {
 +                      /* Do not return icon for folders if icons are not 
'main' draw type (e.g. when used over previews). */
 +                      return ICON_FILE_FOLDER;
 +              }
 +      }
 +
 +      if (flags & FILE_TYPE_BLENDER)
 +              return ICON_FILE_BLEND;
 +      else if (flags & FILE_TYPE_BLENDER_BACKUP)
 +              return ICON_FILE_BACKUP;
 +      else if (flags & FILE_TYPE_IMAGE)
 +              return ICON_FILE_IMAGE;
 +      else if (flags & FILE_TYPE_MOVIE)
 +              return ICON_FILE_MOVIE;
 +      else if (flags & FILE_TYPE_PYSCRIPT)
 +              return ICON_FILE_SCRIPT;
 +      else if (flags & FILE_TYPE_SOUND)
 +              return ICON_FILE_SOUND;
 +      else if (flags & FILE_TYPE_FTFONT)
 +              return ICON_FILE_FONT;
 +      else if (flags & FILE_TYPE_BTX)
 +              return ICON_FILE_BLANK;
 +      else if (flags & FILE_TYPE_COLLADA)
 +              return ICON_FILE_BLANK;
 +      else if (flags & FILE_TYPE_TEXT)
 +              return ICON_FILE_TEXT;
 +      else if (flags & FILE_TYPE_BLENDERLIB) {
 +              char lib[FILE_MAXDIR], *group;
 +
 +              if (BLO_library_path_explode(path, lib, &group, NULL) && group) 
{
 +                      int idcode = groupname_to_code(group);
 +
 +                      /* TODO: this should most likely be completed and moved 
to UI_interface_icons.h ? unless it already exists somewhere... */
 +                      switch (idcode) {
 +                              case ID_AC:
 +                                      return ICON_ANIM_DATA;
 +                              case ID_AR:
 +                                      return ICON_ARMATURE_DATA;
 +                              case ID_BR:
 +                                      return ICON_BRUSH_DATA;
 +                              case ID_CA:
 +                                      return ICON_CAMERA_DATA;
 +                              case ID_CU:
 +                                      return ICON_CURVE_DATA;
 +                              case ID_GD:
 +                                      return ICON_GREASEPENCIL;
 +                              case ID_GR:
 +                                      return ICON_GROUP;
 +                              case ID_IM:
 +                                      return ICON_IMAGE_DATA;
 +                              case ID_LA:
 +                                      return ICON_LAMP_DATA;
 +                              case ID_LS:
 +                                      return ICON_LINE_DATA;
 +                              case ID_LT:
 +                                      return ICON_LATTICE_DATA;
 +                              case ID_MA:
 +                                      return ICON_MATERIAL_DATA;
 +                              case ID_MB:
 +                                      return ICON_META_DATA;
 +                              case ID_MC:
 +                                      return ICON_CLIP;
 +                              case ID_ME:
 +                                      return ICON_MESH_DATA;
 +                              case ID_MSK:
 +                                      return ICON_MOD_MASK;  /* TODO! this 
would need its own icon! */
 +                              case ID_NT:
 +                                      return ICON_NODETREE;
 +                              case ID_OB:
 +                                      return ICON_OBJECT_DATA;
 +                              case ID_PAL:
 +                                      return ICON_COLOR;  /* TODO! this would 
need its own icon! */
 +                              case ID_PC:
 +                                      return ICON_CURVE_BEZCURVE;  /* TODO! 
this would need its own icon! */
 +                              case ID_SCE:
 +                                      return ICON_SCENE_DATA;
 +                              case ID_SPK:
 +                                      return ICON_SPEAKER;
 +                              case ID_SO:
 +                                      return ICON_SOUND;
 +                              case ID_TE:
 +                                      return ICON_TEXTURE_DATA;
 +                              case ID_TXT:
 +                                      return ICON_TEXT;
 +                              case ID_VF:
 +                                      return ICON_FONT_DATA;
 +                              case ID_WO:
 +                                      return ICON_WORLD_DATA;
 +                      }
 +              }
 +      }
 +      return is_main ? ICON_FILE_BLANK : ICON_NONE;
 +}
 +
 +int filelist_geticon(struct FileList *filelist, const int index, const bool 
is_main)
 +{
 +      struct direntry *file = filelist_geticon_get_file(filelist, index);
 +
 +      return filelist_geticon_ex(file->type, file->flags, file->path, 
file->relname, is_main, false);
 +}
 +
  /* ********** Main ********** */
  
 +static void filelist_checkdir_dir(struct FileList *UNUSED(filelist), char 
*r_dir)
 +{
 +      BLI_make_exist(r_dir);
 +}
 +
 +static void filelist_checkdir_lib(struct FileList *UNUSED(filelist), char 
*r_dir)
 +{
 +      char dir[FILE_MAXDIR];
 +      if (!BLO_library_path_explode(r_dir, dir, NULL, NULL)) {
 +              /* if not a valid library, we need it to be a valid directory! 
*/
 +              BLI_make_exist(r_dir);
 +      }
 +}
 +
 +static void filelist_checkdir_main(struct FileList *filelist, char *r_dir)
 +{
 +      /* TODO */
 +      filelist_checkdir_lib(filelist, r_dir);
 +}
 +
  FileList *filelist_new(short type)
  {
        FileList *p = MEM_callocN(sizeof(FileList), "filelist");
@@@ -1009,57 -737,14 +1006,57 @@@ const char *filelist_dir(struct FileLis
        return filelist->dir;
  }
  
 -void filelist_setdir(struct FileList *filelist, const char *dir)
 +/**
-  * May modifies in place given r_dir, which is expected to be 
FILE_MAX_LIBEXTRA length.
++ * May modify in place given r_dir, which is expected to be FILE_MAX_LIBEXTRA 
length.
 + */
 +void filelist_setdir(struct FileList *filelist, char *r_dir)
  {
 -      BLI_strncpy(filelist->dir, dir, sizeof(filelist->dir));
 +#ifndef NDEBUG
 +      size_t len = strlen(r_dir);
 +      BLI_assert((len < FILE_MAX_LIBEXTRA - 1) || r_dir[len - 1] == '/');
 +#endif
 +
 +      BLI_cleanup_dir(G.main->name, r_dir);
 +      BLI_add_slash(r_dir);
 +      filelist->checkdirf(filelist, r_dir);
 +
 +      if (!STREQ(filelist->dir, r_dir)) {
 +              BLI_strncpy(filelist->dir, r_dir, sizeof(filelist->dir));
 +              filelist->force_reset = true;
 +      }
 +}
 +
 +void filelist_setrecursion(struct FileList *filelist, const int 
recursion_level)
 +{
 +      if (filelist->max_recursion != recursion_level) {
 +              filelist->max_recursion = recursion_level;
 +              filelist->force_reset = true;
 +      }
 +}
 +
 +bool filelist_force_reset(struct FileList *filelist)
 +{
 +      return filelist->force_reset;
 +}
 +
 +bool filelist_is_ready(struct FileList *filelist)
 +{
 +      return filelist->filelist_ready;
 +}
 +
 +bool filelist_pending(struct FileList *filelist)
 +{
 +      return filelist->filelist_pending;
  }
  
 -short filelist_changed(struct FileList *filelist)
 +bool filelist_need_refresh(struct FileList *filelist)
  {
 -      return filelist->changed;
 +      return (!

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