21# include <sys/times.h>
78 if (blendfile_path[0] !=
'\0') {
107 MEM_callocN(
sizeof(*asset_params),
"FileAssetSelectParams"));
116 base_params->
file[0] =
'\0';
217 if (is_directory ==
true && is_filename ==
false && is_filepath ==
false && is_files ==
false)
286 if (glob[0] !=
'\0') {
291 params->filter_glob[0] =
'\0';
294 if (
params->filter != 0) {
336 if (is_relative_path) {
352 params->filter_glob[0] =
'\0';
410 if (asset_params ==
nullptr) {
438 base_params->
dir[0] =
'\0';
442 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) {
521 return *file->
asset->get_import_method();
527 std::optional import_method = file->
asset->get_import_method();
528 return import_method ? *import_method : -1;
552 ID *asset_id = (
ID *)custom_data;
578 if (file ==
nullptr) {
582 params->active_file = file_index;
591 const char *relative_path =
static_cast<const char *
>(custom_data);
611 for (
int file_index = 0; file_index < num_files_filtered; ++file_index) {
615 params->active_file = file_index;
631#define PARAMS_FLAGS_REMEMBERED (FILE_HIDE_DOT)
648 return (sfile->
op ==
nullptr) ||
656 return (sfile->
op ==
nullptr) ||
716 if (memcmp(sfile_udata_new, &sfile_udata_old,
sizeof(sfile_udata_old)) != 0) {
717 U.runtime.is_dirty =
true;
752 const int x_over = x_item - (x_view % x_item);
753 numfiles = int(
float(x_view + x_over) /
float(x_item));
754 return numfiles * layout->
rows;
759 const int y_over = y_item - (y_view % y_item);
760 numfiles = int(
float(y_view + y_over) /
float(y_item));
766 return ((
x >= 0) && (
x < cols) && (
y >= 0) && (
y < rows));
771 int colmin, colmax, rowmin, rowmax;
775 if (layout ==
nullptr) {
800 sel.
first = layout->
rows * colmin + rowmin;
811 sel.
last = layout->
rows * colmax + rowmax;
823 int offsetx, offsety;
826 if (layout ==
nullptr) {
837 if (offsety > layout->
rows - 1) {
842 active_file = layout->
rows * offsetx + offsety;
928 if (offset_tile > -1) {
946 if (
IN_RANGE(rel_x, pos_x, pos_x + width)) {
983 "23 Dec 6789, 23:59") +
995 int remwidth = layout->
tile_w;
1006 remwidth -= columns[column_type].
width;
1037 if (sfile->
layout ==
nullptr) {
1075 layout->
rows = numfiles;
1100 layout->
rows = std::max(rowcount, numfiles);
1125 if (layout->
rows > 0) {
1138 layout->
dirty =
false;
1163 params->filter_search[0] =
'\0';
1164 params->active_file = -1;
1206 for (
int i = 0;
i < n;
i++) {
1210 if (fnmatch(pattern, relpath, 0) == 0) {
1242 while ((de =
readdir(dir)) !=
nullptr) {
1281 for (
int i = 0;
i < nentries;
i++) {
1301 params->highlight_file = -1;
1317 params->highlight_file = -1;
1329 sfile->
op =
nullptr;
1337 sfile->
files =
nullptr;
1379 params->renamefile[0] =
'\0';
1380 params->rename_id =
nullptr;
1408 params->active_file = idx;
1423 params->active_file = idx;
1443 if (sfile->
op == file_operator) {
1477 if (blendfile_path[0] ==
'\0') {
1481 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
#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)
File and directory operations.
int BLI_stat(const char *path, BLI_stat_t *buffer) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
MINLINE int round_fl_to_int(float a)
MINLINE uint divide_ceil_u(uint a, uint b)
#define BLI_SCOPED_DEFER(function_to_defer)
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
void BLI_path_slash_native(char *path) 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_is_rel(const char *path) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT
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)
char * STRNCPY(char(&dst)[N], const char *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 STRNCPY_UTF8(dst, src)
#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_SORT_ASSET_CATALOG
@ 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
@ FILE_ASSET_IMPORT_INSTANCE_COLLECTIONS_ON_LINK
#define FILE_MAX_LIBEXTRA
#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_fontstyle_height_max(const uiFontStyle *fs)
int UI_autocomplete_end(AutoComplete *autocpl, char *autoname)
const uiStyle * UI_style_get()
void UI_fontstyle_set(const uiFontStyle *fs)
void UI_autocomplete_update_name(AutoComplete *autocpl, blender::StringRef name)
AutoComplete * UI_autocomplete_begin(const char *startname, size_t maxncpy)
#define ICON_DEFAULT_WIDTH_SCALE
#define ICON_DEFAULT_HEIGHT_SCALE
#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)]
void append(const T &value)
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_file_get_full_path(const FileList *filelist, const FileDirEntry *file, char r_filepath[1282])
const char * filelist_dir(const FileList *filelist)
FileDirEntry * filelist_file_ex(FileList *filelist, int index, bool use_request)
blender::asset_system::AssetLibrary * filelist_asset_library(FileList *filelist)
bool filelist_needs_force_reset(const FileList *filelist)
void filelist_clear_from_reset_tag(FileList *filelist)
bool filelist_pending(const FileList *filelist)
void filelist_setdir(FileList *filelist, char dirpath[1282])
void filelist_entry_select_index_set(FileList *filelist, int index, FileSelType select, eDirEntry_SelectFlag flag, FileCheckType check)
void filelist_free(FileList *filelist)
void filelist_clear(FileList *filelist)
const char * filelist_entry_get_relpath(const FileList *filelist, int index)
void filelist_tag_reload_asset_library(FileList *filelist)
ID * filelist_file_get_id(const FileDirEntry *file)
int filelist_file_find_path(FileList *filelist, const char *filename)
int filelist_file_find_id(const FileList *filelist, const ID *id)
void filelist_readjob_stop(FileList *filelist, wmWindowManager *wm)
void filelist_entries_select_index_range_set(FileList *filelist, FileSelection *sel, FileSelType select, eDirEntry_SelectFlag flag, FileCheckType check)
void filelist_tag_force_reset_mainfiles(FileList *filelist)
bool filelist_is_dir(const FileList *filelist, const char *path)
int filelist_files_ensure(FileList *filelist)
bool filelist_entry_is_selected(FileList *filelist, int index)
FileDirEntry * filelist_file(FileList *filelist, int index)
bool filelist_is_ready(const FileList *filelist)
unsigned int filelist_entry_select_set(const FileList *filelist, const FileDirEntry *entry, FileSelType select, const eDirEntry_SelectFlag flag, FileCheckType check)
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)
void ED_fileselect_params_to_userdef(SpaceFile *sfile)
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)
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)
blender::Vector< std::string > ED_fileselect_selected_files_full_paths(const SpaceFile *sfile)
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)
void ED_fileselect_clear_main_assets(wmWindowManager *wm, SpaceFile *sfile)
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)
const ccl_global KernelWorkTile * tile
void * MEM_callocN(size_t len, const char *str)
void MEM_freeN(void *vmemh)
StringRefNull essentials_directory_path()
VecBase< int32_t, 2 > int2
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_property_boolean_set(PointerRNA *ptr, PropertyRNA *prop, bool value)
std::string RNA_string_get(PointerRNA *ptr, const char *name)
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
AssetRepresentationHandle * asset
FileAttributeColumn attribute_columns[ATTRIBUTE_COLUMN_MAX]
int attribute_column_header_h
unsigned short list_column_size
unsigned short list_thumbnail_size
unsigned short thumbnail_size
struct wmTimer * smoothscroll_timer
struct FileLayout * layout
FileSelectParams * params
FileAssetSelectParams * asset_params
Universally Unique Identifier according to RFC4122.
struct wmOperatorType * type
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_dpi_set_userdef(const wmWindow *win)
wmTimer * WM_event_timer_add(wmWindowManager *wm, wmWindow *win, const wmEventType event_type, const double time_step)
bool WM_window_is_maximized(const wmWindow *win)
void WM_event_timer_remove(wmWindowManager *wm, wmWindow *, wmTimer *timer)
bScreen * WM_window_get_active_screen(const wmWindow *win)