[Bf-blender-cvs] [51a3024] asset-engine: Merge branch 'asset-experiments' into asset-engine
Bastien Montagne
noreply at git.blender.org
Mon May 11 09:46:29 CEST 2015
Commit: 51a3024f330b9e0b8292fd194109741c8e7fa51f
Author: Bastien Montagne
Date: Mon May 11 09:41:54 2015 +0200
Branches: asset-engine
https://developer.blender.org/rB51a3024f330b9e0b8292fd194109741c8e7fa51f
Merge branch 'asset-experiments' into asset-engine
Conflicts:
source/blender/editors/space_file/filelist.c
===================================================================
===================================================================
diff --cc source/blender/editors/space_file/filelist.c
index 25d9cbc,45ef4e1..3041ea9
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@@ -659,96 -735,6 +663,96 @@@ void filelist_setfilter_options(FileLis
}
}
+
+void filelist_sort_filter(struct FileList *filelist, FileSelectParams *params)
+{
+ if (filelist->ae) {
+ if (filelist->ae->type->sort_filter) {
+ const bool changed = filelist->ae->type->sort_filter(filelist->ae, true, true,
+ params, &filelist->filelist);
+ printf("%s: changed: %d\n", __func__, changed);
+ }
- filelist_cache_clear(&filelist->filelist_cache);
++ filelist_cache_clear(&filelist->filelist_cache, filelist->filelist_cache.size);
+ filelist->need_sorting = false;
+ filelist->need_filtering = false;
+ }
+ else {
+ if (filelist_need_sorting(filelist)) {
+ filelist->need_sorting = false;
+
+ switch (filelist->sort) {
+ case FILE_SORT_ALPHA:
+ BLI_listbase_sort_r(&filelist->filelist_intern.entries, NULL, compare_name);
+ break;
+ case FILE_SORT_TIME:
+ BLI_listbase_sort_r(&filelist->filelist_intern.entries, NULL, compare_date);
+ break;
+ case FILE_SORT_SIZE:
+ BLI_listbase_sort_r(&filelist->filelist_intern.entries, NULL, compare_size);
+ break;
+ case FILE_SORT_EXTENSION:
+ BLI_listbase_sort_r(&filelist->filelist_intern.entries, NULL, compare_extension);
+ break;
+ case FILE_SORT_NONE: /* Should never reach this point! */
+ default:
+ BLI_assert(0);
+ }
+
+ filelist_filter_clear(filelist);
+ }
+
+ {
+ int num_filtered = 0;
+ const int num_files = filelist->filelist.nbr_entries;
+ FileListInternEntry **filtered_tmp, *file;
+
+ if (filelist->filelist.nbr_entries == 0) {
+ return;
+ }
+
+ if (!filelist->need_filtering) {
+ /* Assume it has already been filtered, nothing else to do! */
+ return;
+ }
+
+ filelist->filter_data.hide_lib_dir = false;
+ if (filelist->max_recursion) {
+ /* Never show lib ID 'categories' directories when we are in 'flat' mode, unless
+ * root path is a blend file. */
+ char dir[FILE_MAXDIR];
+ if (!filelist_islibrary(filelist, dir, NULL)) {
+ filelist->filter_data.hide_lib_dir = true;
+ }
+ }
+
+ filtered_tmp = MEM_mallocN(sizeof(*filtered_tmp) * (size_t)num_files, __func__);
+
+ /* Filter remap & count how many files are left after filter in a single loop. */
+ for (file = filelist->filelist_intern.entries.first; file; file = file->next) {
+ if (filelist->filterf(file, filelist->filelist.root, &filelist->filter_data)) {
+ filtered_tmp[num_filtered++] = file;
+ }
+ }
+
+ if (filelist->filelist_intern.filtered) {
+ MEM_freeN(filelist->filelist_intern.filtered);
+ }
+ filelist->filelist_intern.filtered = MEM_mallocN(sizeof(*filelist->filelist_intern.filtered) * (size_t)num_filtered,
+ __func__);
+ memcpy(filelist->filelist_intern.filtered, filtered_tmp,
+ sizeof(*filelist->filelist_intern.filtered) * (size_t)num_filtered);
+ filelist->filelist.nbr_entries_filtered = num_filtered;
+ // printf("Filetered: %d over %d entries\n", num_filtered, filelist->filelist.nbr_entries);
+
- filelist_cache_clear(&filelist->filelist_cache);
++ filelist_cache_clear(&filelist->filelist_cache, filelist->filelist_cache.size);
+ filelist->need_filtering = false;
+
+ MEM_freeN(filtered_tmp);
+ }
+ }
+}
+
+
/* ********** Icon/image helpers ********** */
void filelist_init_icons(void)
@@@ -1485,23 -1457,22 +1506,24 @@@ static FileDirEntry *filelist_file_ex(s
/* Else, we have to add new entry to 'misc' cache - and possibly make room for it first! */
ret = filelist_file_create_entry(filelist, index);
- old_index = cache->misc_entries_indices[cache->misc_cursor];
- if ((old = BLI_ghash_popkey(cache->misc_entries, SET_INT_IN_POINTER(old_index), NULL))) {
- BLI_ghash_remove(cache->uuids, old->uuid, NULL, NULL);
- filelist_file_release_entry(filelist, old);
- }
- BLI_ghash_insert(cache->misc_entries, SET_INT_IN_POINTER(index), ret);
- BLI_ghash_insert(cache->uuids, ret->uuid, ret);
+ if (ret) {
+ old_index = cache->misc_entries_indices[cache->misc_cursor];
+ if ((old = BLI_ghash_popkey(cache->misc_entries, SET_INT_IN_POINTER(old_index), NULL))) {
+ BLI_ghash_remove(cache->uuids, old->uuid, NULL, NULL);
+ filelist_file_release_entry(filelist, old);
+ }
+ BLI_ghash_insert(cache->misc_entries, SET_INT_IN_POINTER(index), ret);
+ BLI_ghash_insert(cache->uuids, ret->uuid, ret);
+
- cache->misc_entries_indices[cache->misc_cursor] = index;
- cache->misc_cursor = (cache->misc_cursor + 1) % cache_size;
+ cache->misc_entries_indices[cache->misc_cursor] = index;
- cache->misc_cursor = (cache->misc_cursor + 1) % FILELIST_ENTRYCACHESIZE;
++ cache->misc_cursor = (cache->misc_cursor + 1) % cache_size;
#if 0 /* Actually no, only block cached entries should have preview imho. */
- if (cache->previews_pool) {
- filelist_cache_previews_push(filelist, ret, index);
- }
+ if (cache->previews_pool) {
+ filelist_cache_previews_push(filelist, ret, index);
+ }
#endif
+ }
return ret;
}
diff --cc source/blender/editors/space_file/filelist.h
index fda2795,e0bb431..a170c00
--- a/source/blender/editors/space_file/filelist.h
+++ b/source/blender/editors/space_file/filelist.h
@@@ -89,9 -90,10 +89,10 @@@ void filelist_setdir(str
int filelist_empty(struct FileList *filelist);
int filelist_numfiles(struct FileList *filelist);
-FileDirEntry * filelist_file(struct FileList *filelist, int index);
+struct FileDirEntry *filelist_file(struct FileList *filelist, int index);
int filelist_file_findpath(struct FileList *filelist, const char *file);
FileDirEntry * filelist_entry_find_uuid(struct FileList *filelist, const int uuid[4]);
+ void filelist_file_cache_slidingwindow_set(struct FileList *filelist, size_t window_size);
bool filelist_file_cache_block(struct FileList *filelist, const int index);
bool filelist_force_reset(struct FileList *filelist);
More information about the Bf-blender-cvs
mailing list