31 [idname](
const std::unique_ptr<FileHandlerType> &file_handler) {
32 return idname == file_handler->idname;
45 const char char_separator =
';';
46 const char *char_begin = file_handler->file_extensions_str;
48 while (char_begin[0]) {
49 if (char_end - char_begin > 1) {
50 std::string file_extension(char_begin, char_end - char_begin);
51 file_handler->file_extensions.append(file_extension);
53 char_begin = char_end[0] ? char_end + 1 : char_end;
63 [file_handler](
const std::unique_ptr<FileHandlerType> &test_file_handler) {
64 return test_file_handler.get() == file_handler;
72 for (
const std::string &path : paths) {
81 for (
const std::unique_ptr<FileHandlerType> &file_handler_ptr :
file_handlers()) {
84 bool support_any_extension =
false;
85 for (
const std::string &extension : path_extensions) {
86 auto test_fn = [&extension](
const std::string &test_extension) {
87 return BLI_strcaseeq(extension.c_str(), test_extension.c_str()) == 1;
89 support_any_extension = std::any_of(file_extensions.begin(), file_extensions.end(), test_fn);
90 if (support_any_extension) {
94 if (!support_any_extension) {
102 result.append(&file_handler);
117 auto test_fn = [extension](
const std::string &test_extension) {
118 return BLI_strcaseeq(extension, test_extension.c_str()) == 1;
131 const bool all_blank =
name.is_empty() ||
132 std::all_of(
name.begin(),
name.end(), [](
char c) { return c ==
' '; });
bool BLI_path_extension_ensure(char *path, size_t path_maxncpy, const char *ext) ATTR_NONNULL(1
bool BLI_path_make_safe_filename(char *filename) ATTR_NONNULL(1)
const char * BLI_path_extension(const char *filepath) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT
char char size_t char const char * BLI_strchr_or_end(const char *str, char ch) ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL ATTR_NONNULL(1)
char * STRNCPY(char(&dst)[N], const char *src)
int BLI_strcaseeq(const char *a, const char *b) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
constexpr IndexRange index_range() const
void append_non_duplicates(const T &value)
FileHandlerType * file_handler_find(StringRef idname)
void file_handler_add(std::unique_ptr< FileHandlerType > file_handler)
static Vector< std::unique_ptr< FileHandlerType > > & file_handlers_vector()
blender::Vector< FileHandlerType * > file_handlers_poll_file_drop(const bContext *C, const blender::Span< std::string > paths)
void file_handler_remove(FileHandlerType *file_handler)
Span< std::unique_ptr< FileHandlerType > > file_handlers()
std::string get_default_filename(StringRefNull name)
Vector< std::string > file_extensions
bool(* poll_drop)(const bContext *C, FileHandlerType *file_handle_type)
blender::Vector< int64_t > filter_supported_paths(const blender::Span< std::string > paths) const