Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_file/filelist.c
| Show First 20 Lines • Show All 902 Lines • ▼ Show 20 Lines | |||||
| static bool is_filtered_file(FileListInternEntry *file, | static bool is_filtered_file(FileListInternEntry *file, | ||||
| const char *UNUSED(root), | const char *UNUSED(root), | ||||
| FileListFilter *filter) | FileListFilter *filter) | ||||
| { | { | ||||
| return is_filtered_file_type(file, filter) && | return is_filtered_file_type(file, filter) && | ||||
| (is_filtered_file_relpath(file, filter) || is_filtered_file_name(file, filter)); | (is_filtered_file_relpath(file, filter) || is_filtered_file_name(file, filter)); | ||||
| } | } | ||||
| static bool is_filtered_id_file_type(const FileListInternEntry *file, | static bool is_filtered_id_type(const char *id_group, | ||||
| const char *id_group, | |||||
| const char *name, | const char *name, | ||||
| const FileListFilter *filter) | const FileListFilter *filter) | ||||
| { | { | ||||
| if (!is_filtered_file_type(file, filter)) { | |||||
| return false; | |||||
| } | |||||
| /* We only check for types if some type are enabled in filtering. */ | /* We only check for types if some type are enabled in filtering. */ | ||||
| if ((filter->filter || filter->filter_id) && (filter->flags & FLF_DO_FILTER)) { | if ((filter->filter || filter->filter_id) && (filter->flags & FLF_DO_FILTER)) { | ||||
| if (id_group) { | if (id_group) { | ||||
| if (!name && (filter->flags & FLF_HIDE_LIB_DIR)) { | if (!name && (filter->flags & FLF_HIDE_LIB_DIR)) { | ||||
| return false; | return false; | ||||
| } | } | ||||
| uint64_t filter_id = groupname_to_filter_id(id_group); | uint64_t filter_id = groupname_to_filter_id(id_group); | ||||
| ▲ Show 20 Lines • Show All 82 Lines • ▼ Show 20 Lines | static bool is_filtered_lib_type(FileListInternEntry *file, | ||||
| const char *root, | const char *root, | ||||
| FileListFilter *filter) | FileListFilter *filter) | ||||
| { | { | ||||
| char path[FILE_MAX_LIBEXTRA], dir[FILE_MAX_LIBEXTRA], *group, *name; | char path[FILE_MAX_LIBEXTRA], dir[FILE_MAX_LIBEXTRA], *group, *name; | ||||
| BLI_join_dirfile(path, sizeof(path), root, file->relpath); | BLI_join_dirfile(path, sizeof(path), root, file->relpath); | ||||
| if (BLO_library_path_explode(path, dir, &group, &name)) { | if (BLO_library_path_explode(path, dir, &group, &name)) { | ||||
| return is_filtered_id_file_type(file, group, name, filter); | return is_filtered_file_type(file, filter) && is_filtered_id_type(group, name, filter); | ||||
| } | } | ||||
| return is_filtered_file_type(file, filter); | return is_filtered_file_type(file, filter); | ||||
| } | } | ||||
| static bool is_filtered_lib(FileListInternEntry *file, const char *root, FileListFilter *filter) | static bool is_filtered_lib(FileListInternEntry *file, const char *root, FileListFilter *filter) | ||||
| { | { | ||||
| return is_filtered_lib_type(file, root, filter) && is_filtered_file_relpath(file, filter); | return is_filtered_lib_type(file, root, filter) && is_filtered_file_relpath(file, filter); | ||||
| } | } | ||||
| static bool is_filtered_asset_library(FileListInternEntry *file, | static bool is_filtered_asset_library(FileListInternEntry *file, | ||||
| const char *root, | const char *root, | ||||
| FileListFilter *filter) | FileListFilter *filter) | ||||
| { | { | ||||
| return is_filtered_lib_type(file, root, filter) && is_filtered_asset(file, filter); | if (!is_filtered_file_type(file, filter)) { | ||||
| return false; | |||||
| } | |||||
| char path[FILE_MAX_LIBEXTRA], dir[FILE_MAX_LIBEXTRA], *group, *name; | |||||
| BLI_join_dirfile(path, sizeof(path), root, file->relpath); | |||||
| /* Most asset libraries will filter files in the first branch. However if I have opened a | |||||
| * blend file that is also in an asset library directory, BLO_library_path_explode returns | |||||
| * false because there is a BLI_is_dir check for the path variable. If the path leads to an | |||||
| * existing directory we have opened a blend file that is already in an asset library | |||||
| * directory, so we use the file->relpath and file->name like in is_filtered_main_assets. */ | |||||
| if (BLO_library_path_explode(path, dir, &group, &name)) { | |||||
| if (!is_filtered_id_type(group, name, filter)) { | |||||
| return false; | |||||
| } | |||||
| } | |||||
| else { | |||||
| if (!is_filtered_id_type(file->relpath, file->name, filter)) { | |||||
| return false; | |||||
| } | |||||
| } | |||||
| if (!is_filtered_asset(file, filter)) { | |||||
| return false; | |||||
| } | |||||
| return true; | |||||
| } | } | ||||
| static bool is_filtered_main(FileListInternEntry *file, | static bool is_filtered_main(FileListInternEntry *file, | ||||
| const char *UNUSED(dir), | const char *UNUSED(dir), | ||||
| FileListFilter *filter) | FileListFilter *filter) | ||||
| { | { | ||||
| return !is_filtered_hidden(file->relpath, filter, file); | return !is_filtered_hidden(file->relpath, filter, file); | ||||
| } | } | ||||
| static bool is_filtered_main_assets(FileListInternEntry *file, | static bool is_filtered_main_assets(FileListInternEntry *file, | ||||
| const char *UNUSED(dir), | const char *UNUSED(dir), | ||||
| FileListFilter *filter) | FileListFilter *filter) | ||||
| { | { | ||||
| /* "Filtered" means *not* being filtered out... So return true if the file should be visible. */ | /* "Filtered" means *not* being filtered out... So return true if the file should be visible. */ | ||||
| return is_filtered_id_file_type(file, file->relpath, file->name, filter) && | return is_filtered_file_type(file, filter) && | ||||
| is_filtered_asset(file, filter); | is_filtered_id_type(file->relpath, file->name, filter) && is_filtered_asset(file, filter); | ||||
| } | } | ||||
| void filelist_tag_needs_filtering(FileList *filelist) | void filelist_tag_needs_filtering(FileList *filelist) | ||||
| { | { | ||||
| filelist->flags |= FL_NEED_FILTERING; | filelist->flags |= FL_NEED_FILTERING; | ||||
| } | } | ||||
| void filelist_filter(FileList *filelist) | void filelist_filter(FileList *filelist) | ||||
| ▲ Show 20 Lines • Show All 3,060 Lines • Show Last 20 Lines | |||||