[Bf-blender-cvs] [d079990] asset-experiments: Merge branch 'master' into asset-experiments

Bastien Montagne noreply at git.blender.org
Tue May 5 14:27:10 CEST 2015


Commit: d0799901f70f0ef66eb05c10d809b862ff100454
Author: Bastien Montagne
Date:   Tue May 5 14:23:01 2015 +0200
Branches: asset-experiments
https://developer.blender.org/rBd0799901f70f0ef66eb05c10d809b862ff100454

Merge branch 'master' into asset-experiments

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



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

diff --cc source/blender/editors/space_file/filelist.c
index f54a9a4,2853ee9..14c5062
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@@ -844,1029 -679,158 +844,1029 @@@ static ImBuf *filelist_geticon_image_ex
  	return ibuf;
  }
  
 -/* ********** Main ********** */
 +ImBuf *filelist_geticon_image(struct FileList *filelist, const int index)
 +{
 +	FileDirEntry *file = filelist_geticon_get_file(filelist, index);
  
 -FileList *filelist_new(short type)
 +	return filelist_geticon_image_ex(file->typeflag, file->relpath);
 +}
 +
 +static int filelist_geticon_ex(
 +        const int typeflag, const int blentype, const char *relpath, const bool is_main, const bool ignore_libdir)
  {
 -	FileList *p = MEM_callocN(sizeof(*p), __func__);
 +	if ((typeflag & FILE_TYPE_DIR) && !(ignore_libdir && (typeflag & (FILE_TYPE_BLENDERLIB | FILE_TYPE_BLENDER)))) {
 +		if (FILENAME_IS_PARENT(relpath)) {
 +			return is_main ? ICON_FILE_PARENT : ICON_NONE;
 +		}
 +		else if (typeflag & FILE_TYPE_APPLICATIONBUNDLE) {
 +			return ICON_UGLYPACKAGE;
 +		}
 +		else if (typeflag & 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;
 +		}
 +	}
  
 -	switch (type) {
 -		case FILE_MAIN:
 -			p->readf = filelist_read_main;
 -			p->filterf = is_filtered_main;
 -			break;
 -		case FILE_LOADLIB:
 -			p->readf = filelist_read_library;
 -			p->filterf = is_filtered_lib;
 -			break;
 -		default:
 -			p->readf = filelist_read_dir;
 -			p->filterf = is_filtered_file;
 -			break;
 +	if (typeflag & FILE_TYPE_BLENDER)
 +		return ICON_FILE_BLEND;
 +	else if (typeflag & FILE_TYPE_BLENDER_BACKUP)
 +		return ICON_FILE_BACKUP;
 +	else if (typeflag & FILE_TYPE_IMAGE)
 +		return ICON_FILE_IMAGE;
 +	else if (typeflag & FILE_TYPE_MOVIE)
 +		return ICON_FILE_MOVIE;
 +	else if (typeflag & FILE_TYPE_PYSCRIPT)
 +		return ICON_FILE_SCRIPT;
 +	else if (typeflag & FILE_TYPE_SOUND)
 +		return ICON_FILE_SOUND;
 +	else if (typeflag & FILE_TYPE_FTFONT)
 +		return ICON_FILE_FONT;
 +	else if (typeflag & FILE_TYPE_BTX)
 +		return ICON_FILE_BLANK;
 +	else if (typeflag & FILE_TYPE_COLLADA)
 +		return ICON_FILE_BLANK;
 +	else if (typeflag & FILE_TYPE_TEXT)
 +		return ICON_FILE_TEXT;
 +	else if (typeflag & FILE_TYPE_BLENDERLIB) {
 +		/* TODO: this should most likely be completed and moved to UI_interface_icons.h ? unless it already exists somewhere... */
 +		switch (blentype) {
 +			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 p;
 +	return is_main ? ICON_FILE_BLANK : ICON_NONE;
  }
  
 -void filelist_free(struct FileList *filelist)
 +int filelist_geticon(struct FileList *filelist, const int index, const bool is_main)
  {
 -	if (!filelist) {
 -		printf("Attempting to delete empty filelist.\n");
 -		return;
 -	}
 -	
 -	MEM_SAFE_FREE(filelist->fidx);
 -	filelist->numfiltered = 0;
 -	memset(&filelist->filter_data, 0, sizeof(filelist->filter_data));
 +	FileDirEntry *file = filelist_geticon_get_file(filelist, index);
  
 -	filelist->need_sorting = false;
 -	filelist->sort = FILE_SORT_NONE;
 +	return filelist_geticon_ex(file->typeflag, file->blentype, file->relpath, is_main, false);
 +}
 +
 +/* ********** Main ********** */
  
 -	BLI_filelist_free(filelist->filelist, filelist->numfiles, NULL);
 -	filelist->numfiles = 0;
 -	filelist->filelist = NULL;
 +static void filelist_checkdir_dir(struct FileList *UNUSED(filelist), char *r_dir)
 +{
 +	BLI_make_exist(r_dir);
  }
  
 -void filelist_freelib(struct FileList *filelist)
 +static void filelist_checkdir_lib(struct FileList *UNUSED(filelist), char *r_dir)
  {
 -	if (filelist->libfiledata)
 -		BLO_blendhandle_close(filelist->libfiledata);
 -	filelist->libfiledata = NULL;
 +	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);
 +	}
  }
  
 -BlendHandle *filelist_lib(struct FileList *filelist)
 +static void filelist_checkdir_main(struct FileList *filelist, char *r_dir)
  {
 -	return filelist->libfiledata;
 +	/* TODO */
 +	filelist_checkdir_lib(filelist, r_dir);
  }
  
 -int filelist_numfiles(struct FileList *filelist)
 +static void filelist_entry_clear(FileDirEntry *entry)
  {
 -	return filelist->numfiltered;
 +	if (entry->name) {
 +		MEM_freeN(entry->name);
 +	}
 +	if (entry->description) {
 +		MEM_freeN(entry->description);
 +	}
 +	if (entry->relpath) {
 +		MEM_freeN(entry->relpath);
 +	}
 +	if (entry->image) {
 +		IMB_freeImBuf(entry->image);
 +	}
 +	/* For now, consider FileDirEntryRevision::poin as not owned here, so no need to do anything about it */
 +
 +	if (!BLI_listbase_is_empty(&entry->variants)) {
 +		FileDirEntryVariant *var;
 +
 +		for (var = entry->variants.first; var; var = var->next) {
 +			if (var->name) {
 +				MEM_freeN(var->name);
 +			}
 +			if (var->description) {
 +				MEM_freeN(var->description);
 +			}
 +
 +			if (!BLI_listbase_is_empty(&var->revisions)) {
 +				FileDirEntryRevision *rev;
 +
 +				for (rev = var->revisions.first; rev; rev = rev->next) {
 +					if (rev->comment) {
 +						MEM_freeN(rev->comment);
 +					}
 +				}
 +
 +				BLI_freelistN(&var->revisions);
 +			}
 +		}
 +
 +		/* TODO: tags! */
 +
 +		BLI_freelistN(&entry->variants);
 +	}
 +	else if (entry->entry){
 +		MEM_freeN(entry->entry);
 +	}
  }
  
 -const char *filelist_dir(struct FileList *filelist)
 +static void filelist_entry_free(FileDirEntry *entry)
  {
 -	return filelist->dir;
 +	filelist_entry_clear(entry);
 +	MEM_freeN(entry);
  }
  
 -void filelist_setdir(struct FileList *filelist, const char *dir)
 +static void filelist_direntryarr_free(FileDirEntryArr *array)
  {
 -	BLI_strncpy(filelist->dir, dir, sizeof(filelist->dir));
 +	FileDirEntry *entry, *entry_next;
 +
 +	for (entry = array->entries.first; entry; entry = entry_next) {
 +		entry_next = entry->next;
 +		filelist_entry_free(entry);
 +	}
 +	BLI_listbase_clear(&array->entries);
 +	array->nbr_entries = 0;
 +	array->nbr_entries_filtered = -1;
 +	array->entry_idx_start = -1;
 +	array->entry_idx_end = -1;
  }
  
 -short filelist_changed(struct FileList *filelist)
 +static void filelist_intern_entry_free(FileListInternEntry *entry)
  {
 -	return filelist->changed;
 +	if (entry->relpath) {
 +		MEM_freeN(entry->relpath);
 +	}
 +	if (entry->name) {
 +		MEM_freeN(entry->name);
 +	}
 +	MEM_freeN(entry);
  }
  
 -struct direntry *filelist_file(struct FileList *filelist, int index)
 +static void filelist_intern_free(FileListIntern *filelist_intern)
  {
 -	int fidx = 0;
 -	
 -	if ((index < 0) || (index >= filelist->numfiltered)) {
 -		return NULL;
 +	FileListInternEntry *entry, *entry_next;
 +
 +	for (entry = filelist_intern->entries.first; entry; entry = entry_next) {
 +		entry_next = entry->next;
 +		filelist_intern_entry_free(entry);
  	}
 -	fidx = filelist->fidx[index];
 +	BLI_listbase_clear(&filelist_intern->entries);
  
 -	return &filelist->filelist[fidx];
 +	MEM_SAFE_FREE(filelist_intern->filtered);
  }
  
 -int filelist_find(struct FileList *filelist, const char *filename)
 +static void filelist_cache_previewf(TaskPool *pool, void *taskdata, int threadid)
  {
 -	int fidx = -1;
 -	
 -	if (!filelist->fidx) 
 -		return fidx;
 +	FileListEntryCache *cache = taskdata;
 +	FileListEntryPreview *preview;
  
 -	for (fidx = 0; fidx < filelist->numfiltered; fidx++) {
 -		int index = filelist->fidx[fidx];
 +	printf("%s: Start (%d)...\n", __func__, threadid);
  
 -		if (STREQ(filelist->filelist[index].relname, filename)) {
 -			return fidx;
 +	/* Note we wait on queue here. */
 +	while (!BLI_task_pool_canceled(pool) && (preview = BLI_thread_queue_pop(cache->previews_todo))) {
 +		ThumbSource source = 0;
 +
 +//		printf("%s: %d - %s - %p\n", __func__, preview->index, preview->path, preview->img);
 +		BLI_assert(preview->flags & (FILE_TYPE_IMAGE | FILE_TYPE_MOVIE | FILE_TYPE_FTFONT |
 +		                             FILE_TYPE_BLENDER | FILE_TYPE_BLENDER_BACKUP | FILE_TYPE_BLENDERLIB));
 +		if (preview->flags & FILE_TYPE_IMAGE) {
 +			source = THB_SOURCE_IMAGE;
 +		}
 +		else if (preview->flags & (FILE_TYPE_BLENDER | FILE_TYPE_BLENDER_BACKUP | FILE_TYPE_BLENDERLIB)) {
 +			source = THB_SOURCE_BLEND;
 +		}
 +		else if (preview->flags & FILE_TYPE_MOVIE) {
 +			source = THB_SOURCE_MOVIE;
 +		}
 +		else if (preview->flags & FILE_TYPE_FTFONT) {
 +			source = THB_SOURCE_FONT;
  		}
 +		preview->img = IMB_thumb_manage(preview->path, THB_LARGE, source);
 +		BLI_thread_queue_push(cache->previews_done, preview);
  	}
  
 -	return -1;
 +	printf("%s: End (%d)...\n", __func__, threadid);
  }
  
 -/* would recognize .blend as well */
 -static bool file_is_blend_backup(const char *str)
 +static void filelist_cache_previews_clear(FileListEntryCache *cache)
  {
 -	const size_t a = strlen(str);


@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list