29 [idname](
const std::unique_ptr<FileHandlerType> &file_handler) {
30 return idname == file_handler->idname;
43 const char char_separator =
';';
44 const char *char_begin = file_handler->file_extensions_str;
46 while (char_begin[0]) {
47 if (char_end - char_begin > 1) {
48 std::string file_extension(char_begin, char_end - char_begin);
49 file_handler->file_extensions.append(file_extension);
51 char_begin = char_end[0] ? char_end + 1 : char_end;
61 [file_handler](
const std::unique_ptr<FileHandlerType> &test_file_handler) {
62 return test_file_handler.get() == file_handler;
70 for (
const std::string &path : paths) {
79 for (
const std::unique_ptr<FileHandlerType> &file_handler_ptr :
file_handlers()) {
82 bool support_any_extension =
false;
83 for (
const std::string &extension : path_extensions) {
84 auto test_fn = [&extension](
const std::string &test_extension) {
85 return BLI_strcaseeq(extension.c_str(), test_extension.c_str()) == 1;
87 support_any_extension = std::any_of(file_extensions.begin(), file_extensions.end(), test_fn);
88 if (support_any_extension) {
92 if (!support_any_extension) {
100 result.append(&file_handler);
110 for (
const int idx : paths.index_range()) {
115 auto test_fn = [extension](
const std::string &test_extension) {
116 return BLI_strcaseeq(extension, test_extension.c_str()) == 1;
129 const bool all_blank = name.is_empty() ||
130 std::all_of(name.begin(), name.end(), [](
char c) { return c ==
' '; });
133 STRNCPY(filename, all_blank ?
"untitled" : name.c_str());
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
#define STRNCPY(dst, src)
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)
int BLI_strcaseeq(const char *a, const char *b) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
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()
Vector< std::string > file_extensions
bool(* poll_drop)(const bContext *C, FileHandlerType *file_handle_type)
std::string get_default_filename(const StringRefNull name)
blender::Vector< int64_t > filter_supported_paths(const blender::Span< std::string > paths) const