[Bf-blender-cvs] [57786fd] asset-experiments: Merge branch 'master' into asset-experiments
Bastien Montagne
noreply at git.blender.org
Wed Apr 8 14:38:30 CEST 2015
Commit: 57786fda426fed9e21864f12511d4ea374a5df23
Author: Bastien Montagne
Date: Wed Apr 8 14:38:18 2015 +0200
Branches: asset-experiments
https://developer.blender.org/rB57786fda426fed9e21864f12511d4ea374a5df23
Merge branch 'master' into asset-experiments
Conflicts:
source/blender/editors/space_file/filelist.c
===================================================================
===================================================================
diff --cc source/blender/editors/space_file/filelist.c
index ed2ed8a,d5092ef..4d712b3
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@@ -809,1043 -647,181 +809,1038 @@@ static ImBuf *filelist_geticon_image_ex
ibuf = gSpecialFileImages[SPECIAL_IMG_FOLDER];
}
}
- else {
- ibuf = gSpecialFileImages[SPECIAL_IMG_UNKNOWNFILE];
- }
-
- if (file->flags & FILE_TYPE_BLENDER) {
+ else if (typeflag & FILE_TYPE_BLENDER) {
ibuf = gSpecialFileImages[SPECIAL_IMG_BLENDFILE];
}
- else if (file->flags & FILE_TYPE_MOVIE) {
+ else if (typeflag & FILE_TYPE_BLENDERLIB) {
+ ibuf = gSpecialFileImages[SPECIAL_IMG_UNKNOWNFILE];
+ }
- else if (typeflag & (FILE_TYPE_MOVIE | FILE_TYPE_MOVIE_ICON)) {
++ else if (typeflag & (FILE_TYPE_MOVIE)) {
ibuf = gSpecialFileImages[SPECIAL_IMG_MOVIEFILE];
}
- else if (file->flags & FILE_TYPE_SOUND) {
+ else if (typeflag & FILE_TYPE_SOUND) {
ibuf = gSpecialFileImages[SPECIAL_IMG_SOUNDFILE];
}
- else if (file->flags & FILE_TYPE_PYSCRIPT) {
+ else if (typeflag & FILE_TYPE_PYSCRIPT) {
ibuf = gSpecialFileImages[SPECIAL_IMG_PYTHONFILE];
}
- else if (file->flags & FILE_TYPE_FTFONT) {
+ else if (typeflag & FILE_TYPE_FTFONT) {
ibuf = gSpecialFileImages[SPECIAL_IMG_FONTFILE];
}
- else if (file->flags & FILE_TYPE_TEXT) {
+ else if (typeflag & FILE_TYPE_TEXT) {
ibuf = gSpecialFileImages[SPECIAL_IMG_TEXTFILE];
}
- else if (file->flags & FILE_TYPE_IMAGE) {
+ else if (typeflag & FILE_TYPE_IMAGE) {
ibuf = gSpecialFileImages[SPECIAL_IMG_LOADING];
}
- else if (file->flags & FILE_TYPE_BLENDER_BACKUP) {
+ else if (typeflag & FILE_TYPE_BLENDER_BACKUP) {
ibuf = gSpecialFileImages[SPECIAL_IMG_BACKUP];
}
+ else {
+ ibuf = gSpecialFileImages[SPECIAL_IMG_UNKNOWNFILE];
+ }
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;
+
+ for (entry = array->entries.first; entry; entry = 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;
+ FileDirEntry *tmp_entry, *tmp_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);
+
+ for (tmp_entry = filelist_intern->tmp_entries.first; tmp_entry; tmp_entry = tmp_entry_next) {
+ tmp_entry_next = tmp_entry->next;
+ filelist_entry_free(tmp_entry);
+ }
+ BLI_listbase_clear(&filelist_intern->tm
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list