Blender  V3.3
Macros | Functions
filesel.c File Reference
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>
#include <sys/times.h>
#include <unistd.h>
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
#include "DNA_userdef_types.h"
#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_fnmatch.h"
#include "BLI_math_base.h"
#include "BLI_utildefines.h"
#include "BLO_readfile.h"
#include "BLT_translation.h"
#include "BKE_appdir.h"
#include "BKE_context.h"
#include "BKE_idtype.h"
#include "BKE_main.h"
#include "BKE_preferences.h"
#include "BLF_api.h"
#include "ED_fileselect.h"
#include "ED_screen.h"
#include "WM_api.h"
#include "WM_types.h"
#include "RNA_access.h"
#include "UI_interface.h"
#include "UI_interface_icons.h"
#include "UI_view2d.h"
#include "file_intern.h"
#include "filelist.h"

Go to the source code of this file.

Macros

#define VERTLIST_MAJORCOLUMN_WIDTH   (25 * UI_UNIT_X)
 
#define PARAMS_FLAGS_REMEMBERED   (FILE_HIDE_DOT)
 

Functions

static void fileselect_initialize_params_common (SpaceFile *sfile, FileSelectParams *params)
 
static void fileselect_ensure_updated_asset_params (SpaceFile *sfile)
 
static FileSelectParams * fileselect_ensure_updated_file_params (SpaceFile *sfile)
 
FileSelectParams * ED_fileselect_ensure_active_params (SpaceFile *sfile)
 
FileSelectParams * ED_fileselect_get_active_params (const SpaceFile *sfile)
 
FileSelectParams * ED_fileselect_get_file_params (const SpaceFile *sfile)
 
FileAssetSelectParams * ED_fileselect_get_asset_params (const SpaceFile *sfile)
 
bool ED_fileselect_is_local_asset_library (const SpaceFile *sfile)
 
static void fileselect_refresh_asset_params (FileAssetSelectParams *asset_params)
 
void fileselect_refresh_params (SpaceFile *sfile)
 
bool ED_fileselect_is_file_browser (const SpaceFile *sfile)
 
bool ED_fileselect_is_asset_browser (const SpaceFile *sfile)
 
struct AssetLibrary * ED_fileselect_active_asset_library_get (const SpaceFile *sfile)
 
struct ID * ED_fileselect_active_asset_get (const SpaceFile *sfile)
 
void ED_fileselect_activate_asset_catalog (const SpaceFile *sfile, const bUUID catalog_id)
 
static void on_reload_activate_by_id (SpaceFile *sfile, onReloadFnData custom_data)
 
void ED_fileselect_activate_by_id (SpaceFile *sfile, ID *asset_id, const bool deferred)
 
static void on_reload_select_by_relpath (SpaceFile *sfile, onReloadFnData custom_data)
 
void ED_fileselect_activate_by_relpath (SpaceFile *sfile, const char *relative_path)
 
void ED_fileselect_deselect_all (SpaceFile *sfile)
 
void ED_fileselect_window_params_get (const wmWindow *win, int win_size[2], bool *is_maximized)
 
static bool file_select_use_default_display_type (const SpaceFile *sfile)
 
static bool file_select_use_default_sort_type (const SpaceFile *sfile)
 
void ED_fileselect_set_params_from_userdef (SpaceFile *sfile)
 
void ED_fileselect_params_to_userdef (SpaceFile *sfile, const int temp_win_size[2], const bool is_maximized)
 
void fileselect_file_set (SpaceFile *sfile, const int index)
 
int ED_fileselect_layout_numfiles (FileLayout *layout, ARegion *region)
 
static bool is_inside (int x, int y, int cols, int rows)
 
FileSelection ED_fileselect_layout_offset_rect (FileLayout *layout, const rcti *rect)
 
int ED_fileselect_layout_offset (FileLayout *layout, int x, int y)
 
void ED_fileselect_layout_maskrect (const FileLayout *layout, const View2D *v2d, rcti *r_rect)
 
bool ED_fileselect_layout_is_inside_pt (const FileLayout *layout, const View2D *v2d, int x, int y)
 
bool ED_fileselect_layout_isect_rect (const FileLayout *layout, const View2D *v2d, const rcti *rect, rcti *r_dst)
 
void ED_fileselect_layout_tilepos (const FileLayout *layout, int tile, int *x, int *y)
 
bool file_attribute_column_header_is_inside (const View2D *v2d, const FileLayout *layout, int x, int y)
 
bool file_attribute_column_type_enabled (const FileSelectParams *params, FileAttributeColumnType column)
 
FileAttributeColumnType file_attribute_column_type_find_isect (const View2D *v2d, const FileSelectParams *params, FileLayout *layout, int x)
 
float file_string_width (const char *str)
 
float file_font_pointsize (void)
 
static void file_attribute_columns_widths (const FileSelectParams *params, FileLayout *layout)
 
static void file_attribute_columns_init (const FileSelectParams *params, FileLayout *layout)
 
void ED_fileselect_init_layout (struct SpaceFile *sfile, ARegion *region)
 
FileLayout * ED_fileselect_get_layout (struct SpaceFile *sfile, ARegion *region)
 
void ED_file_change_dir_ex (bContext *C, ScrArea *area)
 
void ED_file_change_dir (bContext *C)
 
void file_select_deselect_all (SpaceFile *sfile, uint flag)
 
int file_select_match (struct SpaceFile *sfile, const char *pattern, char *matched_file)
 
int autocomplete_directory (struct bContext *C, char *str, void *UNUSED(arg_v))
 
int autocomplete_file (struct bContext *C, char *str, void *UNUSED(arg_v))
 
void ED_fileselect_clear (wmWindowManager *wm, SpaceFile *sfile)
 
void ED_fileselect_exit (wmWindowManager *wm, SpaceFile *sfile)
 
void file_params_smoothscroll_timer_clear (wmWindowManager *wm, wmWindow *win, SpaceFile *sfile)
 
void file_params_invoke_rename_postscroll (wmWindowManager *wm, wmWindow *win, SpaceFile *sfile)
 
void file_params_rename_end (wmWindowManager *wm, wmWindow *win, SpaceFile *sfile, FileDirEntry *rename_file)
 
void file_params_renamefile_clear (FileSelectParams *params)
 
static int file_params_find_renamed (const FileSelectParams *params, struct FileList *filelist)
 
void file_params_renamefile_activate (SpaceFile *sfile, FileSelectParams *params)
 
ScrArea * ED_fileselect_handler_area_find (const wmWindow *win, const wmOperator *file_operator)
 
ScrArea * ED_fileselect_handler_area_find_any_with_op (const wmWindow *win)
 

Macro Definition Documentation

◆ PARAMS_FLAGS_REMEMBERED

#define PARAMS_FLAGS_REMEMBERED   (FILE_HIDE_DOT)

Definition at line 572 of file filesel.c.

◆ VERTLIST_MAJORCOLUMN_WIDTH

#define VERTLIST_MAJORCOLUMN_WIDTH   (25 * UI_UNIT_X)

Definition at line 64 of file filesel.c.

Function Documentation

◆ autocomplete_directory()

int autocomplete_directory ( struct bContext *  C,
char *  str,
void *  UNUSEDarg_v 
)

◆ autocomplete_file()

int autocomplete_file ( struct bContext *  C,
char *  str,
void *  UNUSEDarg_v 
)

◆ ED_file_change_dir()

void ED_file_change_dir ( bContext *  C)

◆ ED_file_change_dir_ex()

void ED_file_change_dir_ex ( struct bContext *  C,
struct ScrArea *  area 
)

Support updating the directory even when this isn't the active space needed so RNA properties update function isn't context sensitive, see T70255.

Definition at line 1072 of file filesel.c.

References blender::compositor::area(), BLI_strncpy(), C, CTX_wm_manager(), ED_fileselect_clear(), ED_fileselect_get_active_params(), file_draw_check_ex(), filelist_dir(), filelist_is_dir(), filelist_setdir(), SpaceFile::files, folderlist_clear_next(), folderlist_free(), folderlist_pushdir(), SpaceFile::folders_next, SpaceFile::folders_prev, params, SPACE_FILE, and UNLIKELY.

Referenced by ED_file_change_dir().

◆ ED_fileselect_activate_asset_catalog()

void ED_fileselect_activate_asset_catalog ( const SpaceFile *  sfile,
const bUUID  catalog_id 
)

◆ ED_fileselect_activate_by_id()

void ED_fileselect_activate_by_id ( struct SpaceFile *  sfile,
struct ID *  asset_id,
bool  deferred 
)

◆ ED_fileselect_activate_by_relpath()

void ED_fileselect_activate_by_relpath ( SpaceFile *  sfile,
const char *  relative_path 
)

◆ ED_fileselect_active_asset_get()

struct ID* ED_fileselect_active_asset_get ( const SpaceFile *  sfile)

◆ ED_fileselect_active_asset_library_get()

struct AssetLibrary* ED_fileselect_active_asset_library_get ( const SpaceFile *  sfile)

◆ ED_fileselect_clear()

void ED_fileselect_clear ( wmWindowManager *  wm,
SpaceFile *  sfile 
)

◆ ED_fileselect_deselect_all()

void ED_fileselect_deselect_all ( SpaceFile *  sfile)

◆ ED_fileselect_ensure_active_params()

FileSelectParams* ED_fileselect_ensure_active_params ( struct SpaceFile *  sfile)

◆ ED_fileselect_exit()

void ED_fileselect_exit ( wmWindowManager *  wm,
SpaceFile *  sfile 
)

◆ ED_fileselect_get_active_params()

FileSelectParams* ED_fileselect_get_active_params ( const SpaceFile *  sfile)

◆ ED_fileselect_get_asset_params()

FileAssetSelectParams* ED_fileselect_get_asset_params ( const SpaceFile *  sfile)

◆ ED_fileselect_get_file_params()

FileSelectParams* ED_fileselect_get_file_params ( const SpaceFile *  sfile)

Definition at line 389 of file filesel.c.

References SpaceFile::browse_mode, FILE_BROWSE_MODE_FILES, NULL, and SpaceFile::params.

◆ ED_fileselect_get_layout()

FileLayout* ED_fileselect_get_layout ( struct SpaceFile *  sfile,
ARegion *  region 
)

◆ ED_fileselect_handler_area_find()

ScrArea* ED_fileselect_handler_area_find ( const wmWindow *  win,
const wmOperator *  file_operator 
)

◆ ED_fileselect_handler_area_find_any_with_op()

ScrArea* ED_fileselect_handler_area_find_any_with_op ( const wmWindow *  win)

◆ ED_fileselect_init_layout()

void ED_fileselect_init_layout ( struct SpaceFile *  sfile,
ARegion *  region 
)

◆ ED_fileselect_is_asset_browser()

bool ED_fileselect_is_asset_browser ( const SpaceFile *  sfile)

◆ ED_fileselect_is_file_browser()

bool ED_fileselect_is_file_browser ( const SpaceFile *  sfile)

Definition at line 446 of file filesel.c.

References SpaceFile::browse_mode, and FILE_BROWSE_MODE_FILES.

◆ ED_fileselect_is_local_asset_library()

bool ED_fileselect_is_local_asset_library ( const SpaceFile *  sfile)

◆ ED_fileselect_layout_is_inside_pt()

bool ED_fileselect_layout_is_inside_pt ( const FileLayout *  layout,
const View2D *  v2d,
int  x,
int  y 
)

Definition at line 794 of file filesel.c.

References BLI_rcti_isect_pt(), ED_fileselect_layout_maskrect(), x, and y.

◆ ED_fileselect_layout_isect_rect()

bool ED_fileselect_layout_isect_rect ( const FileLayout *  layout,
const View2D *  v2d,
const rcti *  rect,
rcti *  r_dst 
)

Definition at line 801 of file filesel.c.

References BLI_rcti_isect(), and ED_fileselect_layout_maskrect().

◆ ED_fileselect_layout_maskrect()

void ED_fileselect_layout_maskrect ( const FileLayout *  layout,
const View2D *  v2d,
rcti *  r_rect 
)

◆ ED_fileselect_layout_numfiles()

int ED_fileselect_layout_numfiles ( FileLayout *  layout,
ARegion *  region 
)

◆ ED_fileselect_layout_offset()

int ED_fileselect_layout_offset ( FileLayout *  layout,
int  x,
int  y 
)

◆ ED_fileselect_layout_offset_rect()

FileSelection ED_fileselect_layout_offset_rect ( FileLayout *  layout,
const rcti *  rect 
)

◆ ED_fileselect_layout_tilepos()

void ED_fileselect_layout_tilepos ( const FileLayout *  layout,
int  tile,
int *  x,
int *  y 
)

◆ ED_fileselect_params_to_userdef()

void ED_fileselect_params_to_userdef ( struct SpaceFile *  sfile,
const int  temp_win_size[2],
bool  is_maximized 
)

Update the user-preference data for the file space. In fact, this also contains some non-FileSelectParams data, but we can safely ignore this.

Parameters
temp_win_sizeIf the browser was opened in a temporary window, pass its size here so we can store that in the preferences. Otherwise NULL.

Definition at line 631 of file filesel.c.

References UserDef_FileSpaceData::details_flags, UserDef_FileSpaceData::display_type, ED_fileselect_get_active_params(), file_select_use_default_display_type(), file_select_use_default_sort_type(), FILE_SORT_INVERT, UserDef_FileSpaceData::filter_id, UserDef_FileSpaceData::flag, params, PARAMS_FLAGS_REMEMBERED, UserDef_FileSpaceData::sort_type, UserDef_FileSpaceData::temp_win_sizex, UserDef_FileSpaceData::temp_win_sizey, and UserDef_FileSpaceData::thumbnail_size.

Referenced by ED_fileselect_exit(), and wm_handler_fileselect_do().

◆ ED_fileselect_set_params_from_userdef()

void ED_fileselect_set_params_from_userdef ( SpaceFile *  sfile)

◆ ED_fileselect_window_params_get()

void ED_fileselect_window_params_get ( const wmWindow *  win,
int  win_size[2],
bool *  is_maximized 
)

◆ file_attribute_column_header_is_inside()

bool file_attribute_column_header_is_inside ( const View2D *  v2d,
const FileLayout *  layout,
int  x,
int  y 
)

◆ file_attribute_column_type_enabled()

bool file_attribute_column_type_enabled ( const FileSelectParams *  params,
FileAttributeColumnType  column 
)

◆ file_attribute_column_type_find_isect()

FileAttributeColumnType file_attribute_column_type_find_isect ( const View2D *  v2d,
const FileSelectParams *  params,
FileLayout *  layout,
int  x 
)

◆ file_attribute_columns_init()

static void file_attribute_columns_init ( const FileSelectParams *  params,
FileLayout *  layout 
)
static

◆ file_attribute_columns_widths()

static void file_attribute_columns_widths ( const FileSelectParams *  params,
FileLayout *  layout 
)
static

◆ file_font_pointsize()

float file_font_pointsize ( void  )

◆ file_params_find_renamed()

static int file_params_find_renamed ( const FileSelectParams *  params,
struct FileList *  filelist 
)
static

Definition at line 1304 of file filesel.c.

References filelist_file_find_id(), filelist_file_find_path(), NULL, and params.

Referenced by file_params_renamefile_activate().

◆ file_params_invoke_rename_postscroll()

void file_params_invoke_rename_postscroll ( struct wmWindowManager *  wm,
struct wmWindow *  win,
SpaceFile *  sfile 
)

Set the renaming-state to FILE_PARAMS_RENAME_POSTSCROLL_PENDING and trigger the smooth-scroll timer. To be used right after a file was renamed. Note that the caller is responsible for setting the correct rename-file info (FileSelectParams.renamefile or FileSelectParams.rename_id).

Definition at line 1267 of file filesel.c.

References ED_fileselect_get_active_params(), FILE_PARAMS_RENAME_POSTSCROLL_PENDING, file_params_smoothscroll_timer_clear(), NULL, params, SpaceFile::scroll_offset, SpaceFile::smoothscroll_timer, TIMER1, and WM_event_add_timer().

Referenced by file_directory_new_exec(), file_listener(), file_params_rename_end(), and renamebutton_cb().

◆ file_params_rename_end()

void file_params_rename_end ( struct wmWindowManager *  wm,
struct wmWindow *  win,
SpaceFile *  sfile,
struct FileDirEntry *  rename_file 
)

◆ file_params_renamefile_activate()

void file_params_renamefile_activate ( struct SpaceFile *  sfile,
struct FileSelectParams *  params 
)

◆ file_params_renamefile_clear()

void file_params_renamefile_clear ( FileSelectParams *  params)

Definition at line 1297 of file filesel.c.

References NULL, and params.

Referenced by file_params_renamefile_activate(), and file_smoothscroll_invoke().

◆ file_params_smoothscroll_timer_clear()

void file_params_smoothscroll_timer_clear ( wmWindowManager *  wm,
wmWindow *  win,
SpaceFile *  sfile 
)

◆ file_select_deselect_all()

void file_select_deselect_all ( SpaceFile *  sfile,
uint  flag 
)

◆ file_select_match()

int file_select_match ( struct SpaceFile *  sfile,
const char *  pattern,
char *  matched_file 
)

◆ file_select_use_default_display_type()

static bool file_select_use_default_display_type ( const SpaceFile *  sfile)
static

◆ file_select_use_default_sort_type()

static bool file_select_use_default_sort_type ( const SpaceFile *  sfile)
static

◆ file_string_width()

float file_string_width ( const char *  str)

◆ fileselect_ensure_updated_asset_params()

static void fileselect_ensure_updated_asset_params ( SpaceFile *  sfile)
static

◆ fileselect_ensure_updated_file_params()

static FileSelectParams* fileselect_ensure_updated_file_params ( SpaceFile *  sfile)
static
Note
RNA_struct_property_is_set_ex is used here because we want the previously used settings to be used here rather than overriding them

Definition at line 131 of file filesel.c.

References BKE_main_blendfile_path_from_global(), BLI_assert, BLI_path_abs(), BLI_path_extension_glob_validate(), BLI_path_normalize_dir(), BLI_split_dirfile(), BLI_strncpy(), BLI_strncpy_utf8(), SpaceFile::browse_mode, FileSelectParams::details_flags, UserDef_FileSpaceData::details_flags, FileSelectParams::dir, UserDef_FileSpaceData::display_type, FileSelectParams::file, FILE_ACTIVE_COLLECTION, FILE_AUTOSELECT, FILE_BROWSE_MODE_FILES, FILE_CHECK_EXISTING, FILE_DEFAULTDISPLAY, FILE_DIRSEL_ONLY, FILE_FILTER, FILE_HIDE_DOT, FILE_HIDE_TOOL_PROPS, FILE_LINK, FILE_LOADLIB, FILE_MAX, FILE_PATH_TOKENS_ALLOW, FILE_SORT_ALPHA, FILE_SORT_DEFAULT, UserDef::file_space_data, FILE_SPECIAL, FILE_TYPE_ALEMBIC, FILE_TYPE_ARCHIVE, FILE_TYPE_BLENDER, FILE_TYPE_BLENDER_BACKUP, FILE_TYPE_BLENDERLIB, FILE_TYPE_BTX, FILE_TYPE_COLLADA, FILE_TYPE_FOLDER, FILE_TYPE_FTFONT, FILE_TYPE_IMAGE, FILE_TYPE_MOVIE, FILE_TYPE_OBJECT_IO, FILE_TYPE_OPERATOR, FILE_TYPE_PYSCRIPT, FILE_TYPE_SOUND, FILE_TYPE_TEXT, FILE_TYPE_USD, FILE_TYPE_VOLUME, FILE_UNIX, FILE_VERTICALDISPLAY, fileselect_initialize_params_common(), FileSelectParams::filter_glob, FileSelectParams::filter_id, UserDef_FileSpaceData::filter_id, UserDef_FileSpaceData::flag, MEM_callocN, MEM_freeN, NULL, SpaceFile::op, params, SpaceFile::params, wmOperator::ptr, RNA_boolean_get(), RNA_property_boolean_get(), RNA_property_boolean_set(), RNA_property_enum_get(), RNA_property_int_get(), RNA_property_is_set_ex(), RNA_property_string_get_alloc(), RNA_string_get(), RNA_struct_find_property(), RNA_struct_property_is_set_ex(), UserDef_FileSpaceData::sort_type, FileSelectParams::thumbnail_size, UserDef_FileSpaceData::thumbnail_size, wmOperator::type, U_default, USER_FILTERFILEEXTS, USER_HIDE_DOT, USER_RELPATHS, and WM_operatortype_name().

Referenced by ED_fileselect_ensure_active_params(), and ED_fileselect_set_params_from_userdef().

◆ fileselect_file_set()

void fileselect_file_set ( SpaceFile *  sfile,
int  index 
)

◆ fileselect_initialize_params_common()

static void fileselect_initialize_params_common ( SpaceFile *  sfile,
FileSelectParams *  params 
)
static

◆ fileselect_refresh_asset_params()

static void fileselect_refresh_asset_params ( FileAssetSelectParams *  asset_params)
static

◆ fileselect_refresh_params()

void fileselect_refresh_params ( SpaceFile *  sfile)

Definition at line 438 of file filesel.c.

References ED_fileselect_get_asset_params(), and fileselect_refresh_asset_params().

Referenced by file_init(), and file_refresh().

◆ is_inside()

static bool is_inside ( int  x,
int  y,
int  cols,
int  rows 
)
static

Definition at line 706 of file filesel.c.

References x, and y.

Referenced by armature_edit_select_op_apply(), bm_face_bisect_verts(), collection_visibility_exec(), do_lasso_select_curve__doSelect(), do_lasso_select_lattice__doSelect(), do_lasso_select_mball__doSelectElem(), do_lasso_select_mesh__doSelectEdge_pass0(), do_lasso_select_mesh__doSelectEdge_pass1(), do_lasso_select_mesh__doSelectFace(), do_lasso_select_mesh__doSelectVert(), do_lasso_select_meshobject__doSelectVert(), do_lasso_select_objects(), do_lattice_box_select__doSelect(), do_mesh_box_select__doSelectEdge_pass0(), do_mesh_box_select__doSelectEdge_pass1(), do_mesh_box_select__doSelectFace(), do_mesh_box_select__doSelectVert(), do_meta_box_select(), do_nurbs_box_select__doSelect(), do_object_box_select(), do_paintvert_box_select__doSelectVert(), do_pose_tag_select_op_exec(), ED_fileselect_layout_offset_rect(), ED_select_op_action(), ED_select_op_action_deselected(), edbm_backbuf_check_and_select_edges(), edbm_backbuf_check_and_select_faces(), edbm_backbuf_check_and_select_faces_obmode(), edbm_backbuf_check_and_select_verts(), edbm_backbuf_check_and_select_verts_obmode(), blender::bke::pbvh::pixels::extract_barycentric_pixels(), for_mouse_hit_keys(), fresnel_dielectric(), gpencil_cutter_lasso_select(), gpencil_generic_curve_select(), gpencil_generic_stroke_select(), MOD_lineart_chain_clip_at_border(), blender::ed::space_node::node_box_select_exec(), PE_lasso_select(), select_key_op(), ui_searchbox_event(), blender::compositor::BoxMaskOperation::update_memory_buffer_partial(), and blender::compositor::EllipseMaskOperation::update_memory_buffer_partial().

◆ on_reload_activate_by_id()

static void on_reload_activate_by_id ( SpaceFile *  sfile,
onReloadFnData  custom_data 
)
static

Definition at line 492 of file filesel.c.

References ED_fileselect_activate_by_id().

Referenced by ED_fileselect_activate_by_id().

◆ on_reload_select_by_relpath()

static void on_reload_select_by_relpath ( SpaceFile *  sfile,
onReloadFnData  custom_data 
)
static

Definition at line 531 of file filesel.c.

References ED_fileselect_activate_by_relpath().

Referenced by ED_fileselect_activate_by_relpath().