18#include "RNA_prototypes.hh"
71 props,
"files", &RNA_OperatorFileListElement);
74 for (
const auto &index : supported_paths) {
76 STRNCPY(file, paths[index].c_str());
85 const bool has_any_filepath_prop = filepath_prop || directory_prop || files_prop;
86 if (!has_any_filepath_prop) {
88 "The '%s' file handler import operator ('%s') is missing the required operator "
93 if (directory_prop && !files_prop) {
96 "The '%s' file handler import operator ('%s') is missing the 'files' operator property.",
100 if (!directory_prop && files_prop) {
102 "The '%s' file handler import operator ('%s') is missing the 'directory' operator "
112 if (paths.is_empty()) {
117 if (file_handlers.is_empty()) {
137 if (paths.is_empty()) {
142 if (file_handlers.size() == 1) {
154 for (
auto *file_handler : file_handlers) {
170 ot->name =
"Drop to Import File";
171 ot->description =
"Operator that allows file handlers to receive file drops";
172 ot->idname =
"WM_OT_drop_import_file";
180 ot->srna,
"directory",
nullptr,
FILE_MAX,
"Directory",
"Directory of the file");
208 if (file_handlers.size() == 1) {
213 return TIP_(
"Multiple file handlers can be used, drop to pick which to use");
220 "WM_OT_drop_import_file",
#define BLI_assert_msg(a, msg)
bool BLI_path_is_rel(const char *path) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT
void void BLI_path_split_dir_part(const char *filepath, char *dir, size_t dir_maxncpy) ATTR_NONNULL(1
bool void BLI_path_rel(char path[FILE_MAX], const char *basepath) ATTR_NONNULL(1)
char * STRNCPY(char(&dst)[N], const char *src)
#define CTX_TIP_(context, msgid)
#define CLOG_WARN(clg_ref,...)
void UI_popup_menu_end(bContext *C, uiPopupMenu *pup)
uiPopupMenu * UI_popup_menu_begin(bContext *C, const char *title, int icon) ATTR_NONNULL()
uiLayout * UI_popup_menu_layout(uiPopupMenu *pup)
static wmOperatorStatus wm_drop_import_file_invoke(bContext *C, wmOperator *op, const wmEvent *)
static blender::Vector< blender::bke::FileHandlerType * > drop_import_file_poll_file_handlers(const bContext *C, const blender::Span< std::string > paths, const bool quiet=true)
static std::string drop_import_file_tooltip(bContext *C, wmDrag *drag, const int[2], wmDropBox *)
static void file_handler_import_operator_write_ptr(const blender::bke::FileHandlerType *file_handler, PointerRNA &props, const blender::Span< std::string > paths)
static wmOperatorStatus wm_drop_import_file_exec(bContext *C, wmOperator *op)
void WM_OT_drop_import_file(wmOperatorType *ot)
static void drop_import_file_copy(bContext *, wmDrag *drag, wmDropBox *drop)
static bool drop_import_file_poll(bContext *C, wmDrag *drag, const wmEvent *)
void ED_dropbox_drop_import_file()
blender::Vector< FileHandlerType * > file_handlers_poll_file_drop(const bContext *C, const blender::Span< std::string > paths)
Vector< std::string > paths_from_operator_properties(PointerRNA *ptr)
void paths_to_operator_properties(PointerRNA *ptr, const Span< std::string > paths)
PropertyRNA * RNA_struct_find_collection_property_check(PointerRNA &props, const char *name, const StructRNA *struct_type_check)
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
PropertyRNA * RNA_struct_find_property_check(PointerRNA &props, const char *name, const PropertyType property_type_check)
void RNA_property_collection_add(PointerRNA *ptr, PropertyRNA *prop, PointerRNA *r_ptr)
void RNA_property_collection_clear(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_string_set(PointerRNA *ptr, PropertyRNA *prop, const char *value)
PropertyRNA * RNA_def_collection_runtime(StructOrFunctionRNA *cont_, const char *identifier, StructRNA *type, const char *ui_name, const char *ui_description)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
PropertyRNA * RNA_def_string_dir_path(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, const int maxlen, const char *ui_name, const char *ui_description)
char idname[OP_MAX_TYPENAME]
char import_operator[OP_MAX_TYPENAME]
blender::Vector< int64_t > filter_supported_paths(const blender::Span< std::string > paths) const
void operator_context_set(blender::wm::OpCallContext opcontext)
PointerRNA op(wmOperatorType *ot, std::optional< blender::StringRef > name, int icon, blender::wm::OpCallContext context, eUI_Item_Flag flag)
wmDropBox * WM_dropbox_add(ListBase *lb, const char *idname, bool(*poll)(bContext *C, wmDrag *drag, const wmEvent *event), void(*copy)(bContext *C, wmDrag *drag, wmDropBox *drop), void(*cancel)(Main *bmain, wmDrag *drag, wmDropBox *drop), WMDropboxTooltipFunc tooltip)
blender::Span< std::string > WM_drag_get_paths(const wmDrag *drag)
ListBase * WM_dropboxmap_find(const char *idname, int spaceid, int regionid)
wmOperatorStatus WM_operator_name_call_ptr(bContext *C, wmOperatorType *ot, blender::wm::OpCallContext context, PointerRNA *properties, const wmEvent *event)
wmOperatorType * WM_operatortype_find(const char *idname, bool quiet)
void WM_operator_properties_create_ptr(PointerRNA *ptr, wmOperatorType *ot)
void WM_operator_properties_free(PointerRNA *ptr)