23# include <sys/times.h>
70#define VERTLIST_MAJORCOLUMN_WIDTH (25 * UI_UNIT_X)
80 if (blendfile_path[0] !=
'\0') {
109 MEM_callocN(
sizeof(*asset_params),
"FileAssetSelectParams"));
117 base_params->
file[0] =
'\0';
120 base_params->
flag &= ~FILE_DIRSEL_ONLY;
213 if (is_directory ==
true && is_filename ==
false && is_filepath ==
false && is_files ==
false)
280 op->
ptr, prop,
params->filter_glob,
sizeof(
params->filter_glob),
nullptr);
281 if (tmp !=
params->filter_glob) {
292 params->filter_glob[0] =
'\0';
295 if (
params->filter != 0) {
300 params->flag &= ~FILE_FILTER;
308 params->flag &= ~FILE_HIDE_DOT;
337 if (is_relative_path) {
349 params->flag &= ~FILE_DIRSEL_ONLY;
353 params->filter_glob[0] =
'\0';
411 if (asset_params ==
nullptr) {
439 base_params->
dir[0] =
'\0';
443 base_params->
dir[0] =
'\0';
487 if (sfile->
files ==
nullptr) {
493 if (file ==
nullptr) {
508 params->catalog_id = catalog_id;
519 if (file->asset->may_override_import_method() ==
false) {
520 BLI_assert(file->asset->get_import_method().has_value());
521 return *file->asset->get_import_method();
527 std::optional import_method = file->asset->get_import_method();
528 return import_method ? *import_method : -1;
550 ID *asset_id = (
ID *)custom_data;
576 if (file ==
nullptr) {
580 params->active_file = file_index;
589 const char *relative_path =
static_cast<const char *
>(custom_data);
609 for (
int file_index = 0; file_index < num_files_filtered; ++file_index) {
612 if (
STREQ(file->relpath, relative_path)) {
613 params->active_file = file_index;
628#define PARAMS_FLAGS_REMEMBERED (FILE_HIDE_DOT)
645 return (sfile->
op ==
nullptr) ||
653 return (sfile->
op ==
nullptr) ||
675 params->flag = (
params->flag & ~PARAMS_FLAGS_REMEMBERED) |
689 const int temp_win_size[2],
690 const bool is_maximized)
710 sfile_udata_new->
flag = (sfile_udata_new->
flag & ~FILE_SORT_INVERT) |
714 if (temp_win_size && !is_maximized) {
720 if (memcmp(sfile_udata_new, &sfile_udata_old,
sizeof(sfile_udata_old)) != 0) {
721 U.runtime.is_dirty =
true;
728 if (file && file->relpath && file->relpath[0] && !(file->typeflag &
FILE_TYPE_DIR)) {
756 const int x_over = x_item - (x_view % x_item);
757 numfiles =
int(
float(x_view + x_over) /
float(x_item));
758 return numfiles * layout->
rows;
763 const int y_over = y_item - (y_view % y_item);
764 numfiles =
int(
float(y_view + y_over) /
float(y_item));
770 return ((x >= 0) && (x < cols) && (y >= 0) && (y < rows));
775 int colmin, colmax, rowmin, rowmax;
779 if (layout ==
nullptr) {
802 sel.
first = layout->
rows * colmin + rowmin;
813 sel.
last = layout->
rows * colmax + rowmax;
825 int offsetx, offsety;
828 if (layout ==
nullptr) {
838 if (offsety > layout->
rows - 1) {
843 active_file = layout->
rows * offsetx + offsety;
929 if (offset_tile > -1) {
947 if (
IN_RANGE(rel_x, pos_x, pos_x + width)) {
1000 int remwidth = layout->
tile_w;
1011 remwidth -= columns[column_type].
width;
1041 View2D *v2d = ®ion->v2d;
1045 if (sfile->
layout ==
nullptr) {
1059 const float pad_fac = compact ? 0.15f : 0.3f;
1078 layout->
rows = numfiles;
1092 layout->
tile_h = textheight * 3 / 2;
1102 layout->
rows = std::max(rowcount, numfiles);
1116 layout->
tile_h = textheight * 3 / 2;
1126 if (layout->
rows > 0) {
1137 layout->
dirty =
false;
1162 params->filter_search[0] =
'\0';
1163 params->active_file = -1;
1205 for (
int i = 0; i < n; i++) {
1209 if (fnmatch(pattern, relpath, 0) == 0) {
1240 while ((de =
readdir(dir)) !=
nullptr) {
1250 if (
BLI_stat(dirpath, &status) == 0) {
1251 if (
S_ISDIR(status.st_mode)) {
1279 for (
int i = 0; i < nentries; i++) {
1299 params->highlight_file = -1;
1324 sfile->
op =
nullptr;
1333 sfile->
files =
nullptr;
1375 params->renamefile[0] =
'\0';
1376 params->rename_id =
nullptr;
1404 params->active_file = idx;
1419 params->active_file = idx;
1439 if (sfile->
op == file_operator) {
1473 if (blendfile_path[0] ==
'\0') {
1477 STRNCPY(filepath, blendfile_path);
Main runtime representation of an asset.
const char * BKE_appdir_folder_default() ATTR_WARN_UNUSED_RESULT
SpaceFile * CTX_wm_space_file(const bContext *C)
ScrArea * CTX_wm_area(const bContext *C)
Main * CTX_data_main(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
const char * BKE_main_blendfile_path(const Main *bmain) ATTR_NONNULL()
const char * BKE_main_blendfile_path_from_global()
struct bUserAssetLibrary * BKE_preferences_asset_library_find_index(const struct UserDef *userdef, int index) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT
float BLF_height(int fontid, const char *str, size_t str_len, ResultBLF *r_info=nullptr) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(2)
#define BLF_DRAW_STR_DUMMY_MAX
float BLF_width(int fontid, const char *str, size_t str_len, ResultBLF *r_info=nullptr) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(2)
#define BLI_assert_unreachable()
#define BLI_assert_msg(a, msg)
int BLI_stat(const char *path, BLI_stat_t *buffer) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
MINLINE uint divide_ceil_u(uint a, uint b)
bool BLI_path_abs(char path[FILE_MAX], const char *basepath) ATTR_NONNULL(1
int BLI_path_normalize_dir(char *dir, size_t dir_maxncpy) ATTR_NONNULL(1)
bool BLI_path_extension_replace(char *path, size_t path_maxncpy, const char *ext) ATTR_NONNULL(1
#define BLI_path_join(...)
#define FILENAME_IS_CURRPAR(_n)
void BLI_path_split_dir_file(const char *filepath, char *dir, size_t dir_maxncpy, char *file, size_t file_maxncpy) ATTR_NONNULL(1
bool BLI_path_extension_glob_validate(char *ext_fnmatch) ATTR_NONNULL(1)
void void BLI_path_split_dir_part(const char *filepath, char *dir, size_t dir_maxncpy) ATTR_NONNULL(1
int BLI_path_slash_ensure(char *path, size_t path_maxncpy) ATTR_NONNULL(1)
bool BLI_rcti_isect_pt(const struct rcti *rect, int x, int y)
bool BLI_rcti_isect(const struct rcti *src1, const struct rcti *src2, struct rcti *dest)
BLI_INLINE float BLI_rctf_size_x(const struct rctf *rct)
BLI_INLINE float BLI_rctf_size_y(const struct rctf *rct)
#define STRNCPY(dst, src)
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
char * BLI_strncpy_utf8(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
#define IN_RANGE(a, b, c)
Compatibility-like things for windows.
struct dirent * readdir(DIR *dp)
const char * dirname(char *path)
DIR * opendir(const char *path)
@ ASSET_IMPORT_APPEND_REUSE
@ ASSET_LIBRARY_ESSENTIALS
@ FILE_TYPE_BLENDER_BACKUP
@ FILE_PARAMS_RENAME_POSTSCROLL_PENDING
@ FILE_PARAMS_RENAME_ACTIVE
@ FILE_PARAMS_RENAME_POSTSCROLL_ACTIVE
@ FILE_PARAMS_RENAME_PENDING
@ FILE_ASSET_IMPORT_APPEND_REUSE
@ FILE_ASSET_IMPORT_APPEND
@ FILE_ASSET_IMPORT_FOLLOW_PREFS
@ FILE_SHOW_ASSETS_FROM_CATALOG
@ FILE_BROWSE_MODE_ASSETS
#define FILE_SELECT_MAX_RECURSIONS
#define ED_screen_areas_iter(win, screen, area_name)
Read Guarded memory(de)allocation.
#define AUTOCOMPLETE_FULL_MATCH
#define AUTOCOMPLETE_NO_MATCH
int UI_autocomplete_end(AutoComplete *autocpl, char *autoname)
const uiStyle * UI_style_get()
void UI_fontstyle_set(const uiFontStyle *fs)
AutoComplete * UI_autocomplete_begin(const char *startname, size_t maxncpy)
void UI_autocomplete_update_name(AutoComplete *autocpl, const char *name)
#define V2D_SCROLL_HEIGHT
void UI_view2d_region_to_view(const View2D *v2d, float x, float y, float *r_view_x, float *r_view_y) ATTR_NONNULL()
#define ND_SPACE_ASSET_PARAMS
#define ND_SPACE_FILE_PARAMS
#define ND_SPACE_FILE_LIST
int pad[32 - sizeof(int)]
constexpr const char * c_str() const
draw_view in_light_buf[] float
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
bool folderlist_clear_next(SpaceFile *sfile)
void folder_history_list_ensure_for_active_browse_mode(SpaceFile *sfile)
#define FILE_LAYOUT_HIDE_SIZE(_layout)
#define FILE_LAYOUT_COMPACT(_layout)
void file_on_reload_callback_register(SpaceFile *sfile, onReloadFn callback, onReloadFnData custom_data)
void folder_history_list_free(SpaceFile *sfile)
void folderlist_pushdir(ListBase *folderlist, const char *dir)
void file_draw_check_ex(bContext *C, ScrArea *area)
void file_sfile_to_operator(bContext *C, Main *bmain, wmOperator *op, SpaceFile *sfile)
#define ATTRIBUTE_COLUMN_PADDING
void folderlist_free(ListBase *folderlist)
#define FILE_LAYOUT_HIDE_DATE(_layout)
void filelist_freelib(FileList *filelist)
void filelist_entries_select_index_range_set(FileList *filelist, FileSelection *sel, FileSelType select, const eDirEntry_SelectFlag flag, FileCheckType check)
const char * filelist_dir(const FileList *filelist)
blender::asset_system::AssetLibrary * filelist_asset_library(FileList *filelist)
bool filelist_needs_force_reset(const FileList *filelist)
bool filelist_pending(const FileList *filelist)
void filelist_free(FileList *filelist)
void filelist_clear(FileList *filelist)
const char * filelist_entry_get_relpath(const FileList *filelist, int index)
void filelist_setdir(FileList *filelist, char dirpath[FILE_MAX_LIBEXTRA])
ID * filelist_file_get_id(const FileDirEntry *file)
int filelist_file_find_path(FileList *filelist, const char *filename)
void filelist_entry_select_index_set(FileList *filelist, const int index, FileSelType select, const eDirEntry_SelectFlag flag, FileCheckType check)
int filelist_file_find_id(const FileList *filelist, const ID *id)
FileDirEntry * filelist_file_ex(FileList *filelist, const int index, const bool use_request)
void filelist_readjob_stop(FileList *filelist, wmWindowManager *wm)
bool filelist_is_dir(const FileList *filelist, const char *path)
int filelist_files_ensure(FileList *filelist)
FileDirEntry * filelist_file(FileList *filelist, int index)
bool filelist_is_ready(const FileList *filelist)
uint filelist_entry_select_set(const FileList *filelist, const FileDirEntry *entry, FileSelType select, const eDirEntry_SelectFlag flag, FileCheckType check)
void ED_fileselect_params_to_userdef(SpaceFile *sfile, const int temp_win_size[2], const bool is_maximized)
void file_params_smoothscroll_timer_clear(wmWindowManager *wm, wmWindow *win, SpaceFile *sfile)
bool ED_fileselect_is_file_browser(const SpaceFile *sfile)
void ED_fileselect_activate_by_relpath(SpaceFile *sfile, const char *relative_path)
bool file_attribute_column_type_enabled(const FileSelectParams *params, FileAttributeColumnType column, const FileLayout *layout)
int ED_fileselect_layout_numfiles(FileLayout *layout, ARegion *region)
FileSelectParams * ED_fileselect_get_active_params(const SpaceFile *sfile)
bool ED_fileselect_is_local_asset_library(const SpaceFile *sfile)
ID * ED_fileselect_active_asset_get(const SpaceFile *sfile)
void file_params_rename_end(wmWindowManager *wm, wmWindow *win, SpaceFile *sfile, const FileDirEntry *rename_file)
void ED_file_change_dir_ex(bContext *C, ScrArea *area)
void file_params_invoke_rename_postscroll(wmWindowManager *wm, wmWindow *win, SpaceFile *sfile)
int ED_fileselect_layout_offset(FileLayout *layout, int x, int y)
float file_string_width(const char *str)
static void fileselect_ensure_updated_asset_params(SpaceFile *sfile)
bool file_attribute_column_header_is_inside(const View2D *v2d, const FileLayout *layout, int x, int y)
static FileSelectParams * fileselect_ensure_updated_file_params(SpaceFile *sfile)
ScrArea * ED_fileselect_handler_area_find(const wmWindow *win, const wmOperator *file_operator)
#define VERTLIST_MAJORCOLUMN_WIDTH
void ED_fileselect_activate_asset_catalog(const SpaceFile *sfile, const bUUID catalog_id)
void file_params_renamefile_clear(FileSelectParams *params)
int file_select_match(SpaceFile *sfile, const char *pattern, char *matched_file)
ScrArea * ED_fileselect_handler_area_find_any_with_op(const wmWindow *win)
FileSelectParams * ED_fileselect_get_file_params(const SpaceFile *sfile)
static bool is_inside(int x, int y, int cols, int rows)
static void fileselect_initialize_params_common(SpaceFile *sfile, FileSelectParams *params)
void fileselect_refresh_params(SpaceFile *sfile)
FileLayout * ED_fileselect_get_layout(SpaceFile *sfile, ARegion *region)
FileAttributeColumnType file_attribute_column_type_find_isect(const View2D *v2d, const FileSelectParams *params, FileLayout *layout, int x)
void ED_fileselect_ensure_default_filepath(bContext *C, wmOperator *op, const char *extension)
FileSelectParams * ED_fileselect_ensure_active_params(SpaceFile *sfile)
void file_select_deselect_all(SpaceFile *sfile, const eDirEntry_SelectFlag flag)
int autocomplete_file(bContext *C, char *str, void *)
void ED_fileselect_exit(wmWindowManager *wm, SpaceFile *sfile)
bool ED_fileselect_is_asset_browser(const SpaceFile *sfile)
void ED_fileselect_deselect_all(SpaceFile *sfile)
FileSelection ED_fileselect_layout_offset_rect(FileLayout *layout, const rcti *rect)
void ED_fileselect_activate_by_id(SpaceFile *sfile, ID *asset_id, const bool deferred)
FileAssetSelectParams * ED_fileselect_get_asset_params(const SpaceFile *sfile)
void ED_fileselect_set_params_from_userdef(SpaceFile *sfile)
static void file_attribute_columns_init(const FileSelectParams *params, FileLayout *layout)
float file_font_pointsize()
bool ED_fileselect_layout_is_inside_pt(const FileLayout *layout, const View2D *v2d, int x, int y)
blender::asset_system::AssetLibrary * ED_fileselect_active_asset_library_get(const SpaceFile *sfile)
void ED_fileselect_window_params_get(const wmWindow *win, int r_win_size[2], bool *r_is_maximized)
#define PARAMS_FLAGS_REMEMBERED
static void on_reload_select_by_relpath(SpaceFile *sfile, onReloadFnData custom_data)
static void fileselect_refresh_asset_params(FileAssetSelectParams *asset_params)
static int file_params_find_renamed(const FileSelectParams *params, FileList *filelist)
int autocomplete_directory(bContext *C, char *str, void *)
void file_params_renamefile_activate(SpaceFile *sfile, FileSelectParams *params)
void fileselect_file_set(bContext *C, SpaceFile *sfile, const int index)
static bool file_select_use_default_display_type(const SpaceFile *sfile)
static void on_reload_activate_by_id(SpaceFile *sfile, onReloadFnData custom_data)
static void file_attribute_columns_widths(const FileSelectParams *params, FileLayout *layout)
void ED_fileselect_init_layout(SpaceFile *sfile, ARegion *region)
bool ED_fileselect_layout_isect_rect(const FileLayout *layout, const View2D *v2d, const rcti *rect, rcti *r_dst)
void ED_fileselect_clear(wmWindowManager *wm, SpaceFile *sfile)
void ED_fileselect_layout_maskrect(const FileLayout *layout, const View2D *v2d, rcti *r_rect)
void ED_fileselect_layout_tilepos(const FileLayout *layout, int tile, int *x, int *y)
int ED_fileselect_asset_import_method_get(const SpaceFile *sfile, const FileDirEntry *file)
void ED_file_change_dir(bContext *C)
static bool file_select_use_default_sort_type(const SpaceFile *sfile)
ccl_global const KernelWorkTile * tile
void MEM_freeN(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
StringRefNull essentials_directory_path()
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
bool RNA_property_is_set_ex(PointerRNA *ptr, PropertyRNA *prop, bool use_ghost)
bool RNA_struct_property_is_set_ex(PointerRNA *ptr, const char *identifier, bool use_ghost)
char * RNA_property_string_get_alloc(PointerRNA *ptr, PropertyRNA *prop, char *fixedbuf, int fixedlen, int *r_len)
bool RNA_property_boolean_get(PointerRNA *ptr, PropertyRNA *prop)
int RNA_property_int_get(PointerRNA *ptr, PropertyRNA *prop)
void RNA_string_get(PointerRNA *ptr, const char *name, char *value)
void RNA_property_boolean_set(PointerRNA *ptr, PropertyRNA *prop, bool value)
int RNA_property_enum_get(PointerRNA *ptr, PropertyRNA *prop)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
AssetLibraryReference asset_library_ref
FileSelectParams base_params
FileAttributeColumn attribute_columns[ATTRIBUTE_COLUMN_MAX]
int attribute_column_header_h
unsigned short thumbnail_size
struct wmTimer * smoothscroll_timer
struct FileLayout * layout
FileSelectParams * params
FileAssetSelectParams * asset_params
UserDef_FileSpaceData file_space_data
Universally Unique Identifier according to RFC4122.
struct wmOperatorType * type
struct wmWindow * winactive
void WM_main_add_notifier(uint type, void *reference)
void WM_event_fileselect_event(wmWindowManager *wm, void *ophandle, const int eventval)
@ EVT_FILESELECT_EXTERNAL_CANCEL
std::string WM_operatortype_name(wmOperatorType *ot, PointerRNA *properties)
blender::int2 WM_window_native_pixel_size(const wmWindow *win)
void WM_window_set_dpi(const wmWindow *win)
bool WM_window_is_temp_screen(const wmWindow *win)
bool WM_window_is_maximized(const wmWindow *win)
void WM_event_timer_remove(wmWindowManager *wm, wmWindow *, wmTimer *timer)
wmTimer * WM_event_timer_add(wmWindowManager *wm, wmWindow *win, const int event_type, const double time_step)
bScreen * WM_window_get_active_screen(const wmWindow *win)