Blender  V3.3
space_file.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2008 Blender Foundation. All rights reserved. */
3 
8 #include <stdio.h>
9 #include <string.h>
10 
11 #include "MEM_guardedalloc.h"
12 
13 #include "BLI_blenlib.h"
14 #include "BLI_linklist.h"
15 #include "BLI_utildefines.h"
16 
17 #include "BKE_appdir.h"
18 #include "BKE_context.h"
19 #include "BKE_global.h"
20 #include "BKE_lib_remap.h"
21 #include "BKE_main.h"
22 #include "BKE_report.h"
23 #include "BKE_screen.h"
24 
25 #include "RNA_access.h"
26 #include "RNA_define.h"
27 #include "RNA_enum_types.h"
28 
29 #include "WM_api.h"
30 #include "WM_message.h"
31 #include "WM_types.h"
32 
33 #include "ED_asset.h"
34 #include "ED_asset_indexer.h"
35 #include "ED_fileselect.h"
36 #include "ED_screen.h"
37 #include "ED_space_api.h"
38 
39 #include "IMB_imbuf_types.h"
40 #include "IMB_thumbs.h"
41 
42 #include "UI_resources.h"
43 #include "UI_view2d.h"
44 
45 #include "GPU_framebuffer.h"
46 #include "file_indexer.h"
47 #include "file_intern.h" /* own include */
48 #include "filelist.h"
49 #include "fsmenu.h"
50 
52 {
53  ARegion *region;
54 
55  if ((region = BKE_area_find_region_type(area, RGN_TYPE_UI)) != NULL) {
56  return region;
57  }
58 
59  region = MEM_callocN(sizeof(ARegion), "execute region for file");
60  BLI_insertlinkafter(&area->regionbase, region_prev, region);
61  region->regiontype = RGN_TYPE_UI;
62  region->alignment = RGN_ALIGN_TOP;
63  region->flag = RGN_FLAG_DYNAMIC_SIZE;
64 
65  return region;
66 }
67 
69 {
70  ARegion *region;
71 
73  return region;
74  }
75 
76  region = MEM_callocN(sizeof(ARegion), "execute region for file");
77  BLI_insertlinkafter(&area->regionbase, region_prev, region);
78  region->regiontype = RGN_TYPE_EXECUTE;
79  region->alignment = RGN_ALIGN_BOTTOM;
80  region->flag = RGN_FLAG_DYNAMIC_SIZE;
81 
82  return region;
83 }
84 
86 {
87  ARegion *region;
88 
90  return region;
91  }
92 
93  /* add subdiv level; after execute region */
94  region = MEM_callocN(sizeof(ARegion), "tool props for file");
95  BLI_insertlinkafter(&area->regionbase, region_prev, region);
97  region->alignment = RGN_ALIGN_RIGHT;
98  region->flag = RGN_FLAG_HIDDEN;
99 
100  return region;
101 }
102 
103 /* ******************** default callbacks for file space ***************** */
104 
106 {
107  ARegion *region;
108  SpaceFile *sfile;
109 
110  sfile = MEM_callocN(sizeof(SpaceFile), "initfile");
111  sfile->spacetype = SPACE_FILE;
112 
113  /* header */
114  region = MEM_callocN(sizeof(ARegion), "header for file");
115  BLI_addtail(&sfile->regionbase, region);
116  region->regiontype = RGN_TYPE_HEADER;
117  /* Ignore user preference "USER_HEADER_BOTTOM" here (always show top for new types). */
118  region->alignment = RGN_ALIGN_TOP;
119 
120  /* Tools region */
121  region = MEM_callocN(sizeof(ARegion), "tools region for file");
122  BLI_addtail(&sfile->regionbase, region);
123  region->regiontype = RGN_TYPE_TOOLS;
124  region->alignment = RGN_ALIGN_LEFT;
125 
126  /* ui list region */
127  region = MEM_callocN(sizeof(ARegion), "ui region for file");
128  BLI_addtail(&sfile->regionbase, region);
129  region->regiontype = RGN_TYPE_UI;
130  region->alignment = RGN_ALIGN_TOP;
131  region->flag |= RGN_FLAG_DYNAMIC_SIZE;
132 
133  /* Tool props and execute region are added as needed, see file_refresh(). */
134 
135  /* main region */
136  region = MEM_callocN(sizeof(ARegion), "main region for file");
137  BLI_addtail(&sfile->regionbase, region);
138  region->regiontype = RGN_TYPE_WINDOW;
142  region->v2d.keeptot = V2D_KEEPTOT_STRICT;
143  region->v2d.minzoom = region->v2d.maxzoom = 1.0f;
144 
145  return (SpaceLink *)sfile;
146 }
147 
148 /* not spacelink itself */
149 static void file_free(SpaceLink *sl)
150 {
151  SpaceFile *sfile = (SpaceFile *)sl;
152 
153  BLI_assert(sfile->previews_timer == NULL);
154 
155  if (sfile->files) {
156  /* XXX would need to do thumbnails_stop here, but no context available */
157  filelist_freelib(sfile->files);
158  filelist_free(sfile->files);
159  MEM_freeN(sfile->files);
160  sfile->files = NULL;
161  }
162 
164 
165  MEM_SAFE_FREE(sfile->params);
166  MEM_SAFE_FREE(sfile->asset_params);
167  if (sfile->runtime != NULL) {
169  }
170  MEM_SAFE_FREE(sfile->runtime);
171 
172  MEM_SAFE_FREE(sfile->layout);
173 }
174 
175 /* spacetype; init callback, area size changes, screen set, etc */
177 {
178  SpaceFile *sfile = (SpaceFile *)area->spacedata.first;
179 
180  if (sfile->layout) {
181  sfile->layout->dirty = true;
182  }
183 
184  if (sfile->runtime == NULL) {
185  sfile->runtime = MEM_callocN(sizeof(*sfile->runtime), __func__);
187  }
188  /* Validate the params right after file read. */
190 }
191 
193 {
194  SpaceFile *sfile = (SpaceFile *)area->spacedata.first;
195 
196  if (sfile->previews_timer) {
198  sfile->previews_timer = NULL;
199  }
200 
201  ED_fileselect_exit(wm, sfile);
202 }
203 
205 {
206  SpaceFile *sfileo = (SpaceFile *)sl;
207  SpaceFile *sfilen = MEM_dupallocN(sl);
208 
209  /* clear or remove stuff from old */
210  sfilen->op = NULL; /* file window doesn't own operators */
211  sfilen->runtime = NULL;
212 
213  sfilen->previews_timer = NULL;
214  sfilen->smoothscroll_timer = NULL;
215 
216  FileSelectParams *active_params_old = ED_fileselect_get_active_params(sfileo);
217  if (active_params_old) {
218  sfilen->files = filelist_new(active_params_old->type);
219  filelist_setdir(sfilen->files, active_params_old->dir);
220  }
221 
222  if (sfileo->params) {
223  sfilen->params = MEM_dupallocN(sfileo->params);
224  }
225  if (sfileo->asset_params) {
226  sfilen->asset_params = MEM_dupallocN(sfileo->asset_params);
227  }
228 
230 
231  if (sfileo->layout) {
232  sfilen->layout = MEM_dupallocN(sfileo->layout);
233  }
234  return (SpaceLink *)sfilen;
235 }
236 
238  wmWindowManager *wm,
239  wmWindow *win,
240  ScrArea *area,
241  SpaceFile *sfile,
243 {
245  bool needs_init = false; /* To avoid multiple ED_area_init() calls. */
246 
247  BLI_assert(region_tools);
248 
249  if (sfile->browse_mode == FILE_BROWSE_MODE_ASSETS) {
250  file_tool_props_region_ensure(area, region_tools);
251 
253  if (region_execute) {
254  ED_region_remove(C, area, region_execute);
255  needs_init = true;
256  }
258  if (region_ui) {
259  ED_region_remove(C, area, region_ui);
260  needs_init = true;
261  }
262  }
263  /* If there's an file-operation, ensure we have the option and execute region */
264  else if (sfile->op && !BKE_area_find_region_type(area, RGN_TYPE_TOOL_PROPS)) {
265  ARegion *region_ui = file_ui_region_ensure(area, region_tools);
266  ARegion *region_execute = file_execute_region_ensure(area, region_ui);
267  ARegion *region_props = file_tool_props_region_ensure(area, region_execute);
268 
269  if (params->flag & FILE_HIDE_TOOL_PROPS) {
270  region_props->flag |= RGN_FLAG_HIDDEN;
271  }
272  else {
273  region_props->flag &= ~RGN_FLAG_HIDDEN;
274  }
275 
276  needs_init = true;
277  }
278  /* If there's _no_ file-operation, ensure we _don't_ have the option and execute region */
279  else if (!sfile->op) {
282  ARegion *region_ui = file_ui_region_ensure(area, region_tools);
283  UNUSED_VARS(region_ui);
284 
285  if (region_execute) {
286  ED_region_remove(C, area, region_execute);
287  needs_init = true;
288  }
289  if (region_props) {
290  ED_region_remove(C, area, region_props);
291  needs_init = true;
292  }
293  }
294 
295  if (needs_init) {
296  ED_area_init(wm, win, area);
297  }
298 }
299 
300 static void file_refresh(const bContext *C, ScrArea *area)
301 {
303  wmWindow *win = CTX_wm_window(C);
304  SpaceFile *sfile = CTX_wm_space_file(C);
307  struct FSMenu *fsmenu = ED_fsmenu_get();
308 
311 
312  if (sfile->runtime != NULL) {
313  sfile->runtime->is_blendfile_status_set = false;
314  }
315 
316  if (sfile->files && (sfile->tags & FILE_TAG_REBUILD_MAIN_FILES) &&
319  }
321 
322  if (!sfile->files) {
323  sfile->files = filelist_new(params->type);
324  params->highlight_file = -1; /* added this so it opens nicer (ton) */
325  }
326 
327  if (ED_fileselect_is_asset_browser(sfile)) {
328  /* Ask the asset code for appropriate ID filter flags for the supported assets, and mask others
329  * out. */
331  }
332 
333  filelist_settype(sfile->files, params->type);
334  filelist_setdir(sfile->files, params->dir);
335  filelist_setrecursion(sfile->files, params->recursion_level);
336  filelist_setsorting(sfile->files, params->sort, params->flag & FILE_SORT_INVERT);
337  filelist_setlibrary(sfile->files, asset_params ? &asset_params->asset_library_ref : NULL);
339  sfile->files,
340  (params->flag & FILE_FILTER) != 0,
341  (params->flag & FILE_HIDE_DOT) != 0,
342  true, /* Just always hide parent, prefer to not add an extra user option for this. */
343  params->filter,
344  params->filter_id,
345  (params->flag & FILE_ASSETS_ONLY) != 0,
346  params->filter_glob,
347  params->filter_search);
348  if (asset_params) {
350  sfile->files, asset_params->asset_catalog_visibility, &asset_params->catalog_id);
351  }
352 
353  if (ED_fileselect_is_asset_browser(sfile)) {
354  const bool use_asset_indexer = !USER_EXPERIMENTAL_TEST(&U, no_asset_indexing);
355  filelist_setindexer(sfile->files,
356  use_asset_indexer ? &file_indexer_asset : &file_indexer_noop);
357  }
358 
359  /* Update the active indices of bookmarks & co. */
362  fsmenu, FS_CATEGORY_SYSTEM_BOOKMARKS, params->dir);
365 
366  if (filelist_needs_force_reset(sfile->files)) {
367  filelist_readjob_stop(sfile->files, wm);
369  }
370 
371  if (filelist_needs_reading(sfile->files)) {
372  if (!filelist_pending(sfile->files)) {
374  }
375  }
376 
377  filelist_sort(sfile->files);
378  filelist_filter(sfile->files);
379 
380  if (params->display == FILE_IMGDISPLAY) {
381  filelist_cache_previews_set(sfile->files, true);
382  }
383  else {
384  filelist_cache_previews_set(sfile->files, false);
385  if (sfile->previews_timer) {
387  sfile->previews_timer = NULL;
388  }
389  }
390 
391  if (params->rename_flag != 0) {
393  }
394 
395  if (sfile->layout) {
396  sfile->layout->dirty = true;
397  }
398 
399  /* Might be called with NULL area, see file_main_region_draw() below. */
400  if (area) {
401  file_ensure_valid_region_state((bContext *)C, wm, win, area, sfile, params);
402  }
403 
405 }
406 
409  onReloadFnData custom_data)
410 {
411  sfile->runtime->on_reload = callback;
412  sfile->runtime->on_reload_custom_data = custom_data;
413 }
414 
416 {
417  if (sfile->runtime->on_reload == NULL) {
418  return;
419  }
420 
421  sfile->runtime->on_reload(sfile, sfile->runtime->on_reload_custom_data);
422 
423  sfile->runtime->on_reload = NULL;
425 }
426 
428 {
429  if (sfile->files && filelist_needs_reset_on_main_changes(sfile->files)) {
432  }
433 }
434 
435 static void file_listener(const wmSpaceTypeListenerParams *listener_params)
436 {
437  ScrArea *area = listener_params->area;
438  wmNotifier *wmn = listener_params->notifier;
439  SpaceFile *sfile = (SpaceFile *)area->spacedata.first;
440 
441  /* context changes */
442  switch (wmn->category) {
443  case NC_SPACE:
444  switch (wmn->data) {
445  case ND_SPACE_FILE_LIST:
447  break;
450  break;
452  if (sfile->files && filelist_cache_previews_update(sfile->files)) {
454  }
455  break;
457  if (sfile->browse_mode == FILE_BROWSE_MODE_ASSETS) {
459  }
460  break;
461  case ND_SPACE_CHANGED:
462  /* If the space was just turned into a file/asset browser, the file-list may need to be
463  * updated to reflect latest changes in main data. */
465  break;
466  }
467  switch (wmn->action) {
468  case NA_JOB_FINISHED:
470  break;
471  }
472  break;
473  case NC_ID: {
474  switch (wmn->action) {
475  case NA_RENAME: {
476  const ID *active_file_id = ED_fileselect_active_asset_get(sfile);
477  /* If a renamed ID is active in the file browser, update scrolling to keep it in view. */
478  if (active_file_id && (wmn->reference == active_file_id)) {
480  params->rename_id = active_file_id;
481  file_params_invoke_rename_postscroll(G_MAIN->wm.first, listener_params->window, sfile);
482  }
483 
484  /* Force list to update sorting (with a full reset for now). */
486  break;
487  }
488  }
489  break;
490  }
491  case NC_ASSET: {
492  switch (wmn->action) {
493  case NA_SELECTED:
494  case NA_ACTIVATED:
496  break;
497  case NA_ADDED:
498  case NA_REMOVED:
499  case NA_EDITED:
501  break;
502  }
503  break;
504  }
505  }
506 }
507 
508 /* add handlers, stuff you only do once or on area/region changes */
510 {
511  wmKeyMap *keymap;
512 
513  UI_view2d_region_reinit(&region->v2d, V2D_COMMONVIEW_LIST, region->winx, region->winy);
514 
515  /* own keymaps */
516  keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, 0);
518 
519  keymap = WM_keymap_ensure(wm->defaultconf, "File Browser Main", SPACE_FILE, 0);
521 }
522 
523 static void file_main_region_listener(const wmRegionListenerParams *listener_params)
524 {
525  ARegion *region = listener_params->region;
526  wmNotifier *wmn = listener_params->notifier;
527 
528  /* context changes */
529  switch (wmn->category) {
530  case NC_SPACE:
531  switch (wmn->data) {
532  case ND_SPACE_FILE_LIST:
533  ED_region_tag_redraw(region);
534  break;
536  ED_region_tag_redraw(region);
537  break;
538  }
539  break;
540  case NC_ID:
542  ED_region_tag_redraw(region);
543  }
544  break;
545  }
546 }
547 
549 {
550  struct wmMsgBus *mbus = params->message_bus;
551  bScreen *screen = params->screen;
552  ScrArea *area = params->area;
553  ARegion *region = params->region;
554  SpaceFile *sfile = area->spacedata.first;
555 
557  /* This is a bit odd that a region owns the subscriber for an area,
558  * keep for now since all subscribers for WM are regions.
559  * May be worth re-visiting later. */
560  wmMsgSubscribeValue msg_sub_value_area_tag_refresh = {
561  .owner = region,
562  .user_data = area,
564  };
565 
566  /* SpaceFile itself. */
567  {
568  PointerRNA ptr;
569  RNA_pointer_create(&screen->id, &RNA_SpaceFileBrowser, sfile, &ptr);
570 
571  /* All properties for this space type. */
572  WM_msg_subscribe_rna(mbus, &ptr, NULL, &msg_sub_value_area_tag_refresh, __func__);
573  }
574 
575  /* FileSelectParams */
576  {
577  PointerRNA ptr;
578  RNA_pointer_create(&screen->id, &RNA_FileSelectParams, file_params, &ptr);
579 
580  /* All properties for this space type. */
581  WM_msg_subscribe_rna(mbus, &ptr, NULL, &msg_sub_value_area_tag_refresh, __func__);
582  }
583 
584  /* Experimental Asset Browser features option. */
585  {
586  PointerRNA ptr;
587  RNA_pointer_create(NULL, &RNA_PreferencesExperimental, &U.experimental, &ptr);
588  PropertyRNA *prop = RNA_struct_find_property(&ptr, "use_extended_asset_browser");
589 
590  /* All properties for this space type. */
591  WM_msg_subscribe_rna(mbus, &ptr, prop, &msg_sub_value_area_tag_refresh, __func__);
592  }
593 }
594 
596 {
597  /* Needed, because filelist is not initialized on loading */
598  if (!sfile->files || filelist_needs_reading(sfile->files)) {
599  return true;
600  }
601 
602  /* File reading tagged the space because main data changed that may require a filelist reset. */
604  (sfile->tags & FILE_TAG_REBUILD_MAIN_FILES)) {
605  return true;
606  }
607 
608  return false;
609 }
610 
611 static void file_main_region_draw(const bContext *C, ARegion *region)
612 {
613  /* draw entirely, view changes should be handled here */
614  SpaceFile *sfile = CTX_wm_space_file(C);
616 
617  View2D *v2d = &region->v2d;
618 
620  file_refresh(C, NULL);
621  }
622 
623  /* clear and setup matrix */
625 
626  /* Allow dynamically sliders to be set, saves notifiers etc. */
627 
628  if (params->display == FILE_IMGDISPLAY) {
629  v2d->scroll = V2D_SCROLL_RIGHT;
630  v2d->keepofs &= ~V2D_LOCKOFS_Y;
631  v2d->keepofs |= V2D_LOCKOFS_X;
632  }
633  else if (params->display == FILE_VERTICALDISPLAY) {
634  v2d->scroll = V2D_SCROLL_RIGHT;
635  v2d->keepofs &= ~V2D_LOCKOFS_Y;
636  v2d->keepofs |= V2D_LOCKOFS_X;
637  }
638  else {
639  v2d->scroll = V2D_SCROLL_BOTTOM;
640  v2d->keepofs &= ~V2D_LOCKOFS_X;
641  v2d->keepofs |= V2D_LOCKOFS_Y;
642 
643  /* XXX this happens on scaling down Screen (like from startup.blend) */
644  /* view2d has no type specific for file-window case, which doesn't scroll vertically. */
645  if (v2d->cur.ymax < 0) {
646  v2d->cur.ymin -= v2d->cur.ymax;
647  v2d->cur.ymax = 0;
648  }
649  }
650  /* v2d has initialized flag, so this call will only set the mask correct */
651  UI_view2d_region_reinit(v2d, V2D_COMMONVIEW_LIST, region->winx, region->winy);
652 
653  /* sets tile/border settings in sfile */
654  file_calc_previews(C, region);
655 
656  /* set view */
658 
659  /* on first read, find active file */
660  if (params->highlight_file == -1) {
661  wmEvent *event = CTX_wm_window(C)->eventstate;
662  file_highlight_set(sfile, region, event->xy[0], event->xy[1]);
663  }
664 
665  if (!file_draw_hint_if_invalid(C, sfile, region)) {
666  file_draw_list(C, region);
667  }
668 
669  /* reset view matrix */
671 
672  /* scrollers */
673  rcti view_rect;
674  ED_fileselect_layout_maskrect(sfile->layout, v2d, &view_rect);
675  UI_view2d_scrollers_draw(v2d, &view_rect);
676 }
677 
678 static void file_operatortypes(void)
679 {
709 }
710 
711 /* NOTE: do not add .blend file reading on this level */
712 static void file_keymap(struct wmKeyConfig *keyconf)
713 {
714  /* keys for all regions */
715  WM_keymap_ensure(keyconf, "File Browser", SPACE_FILE, 0);
716 
717  /* keys for main region */
718  WM_keymap_ensure(keyconf, "File Browser Main", SPACE_FILE, 0);
719 
720  /* keys for button region (top) */
721  WM_keymap_ensure(keyconf, "File Browser Buttons", SPACE_FILE, 0);
722 }
723 
725 {
726  wmKeyMap *keymap;
727 
729  ED_region_panels_init(wm, region);
730 
731  /* own keymaps */
732  keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, 0);
734 }
735 
736 static void file_tools_region_draw(const bContext *C, ARegion *region)
737 {
738  ED_region_panels(C, region);
739 }
740 
741 static void file_tools_region_listener(const wmRegionListenerParams *listener_params)
742 {
743  const wmNotifier *wmn = listener_params->notifier;
744  ARegion *region = listener_params->region;
745 
746  switch (wmn->category) {
747  case NC_SCENE:
748  if (ELEM(wmn->data, ND_MODE)) {
749  ED_region_tag_redraw(region);
750  }
751  break;
752  }
753 }
754 
755 static void file_tool_props_region_listener(const wmRegionListenerParams *listener_params)
756 {
757  const wmNotifier *wmn = listener_params->notifier;
758  ARegion *region = listener_params->region;
759 
760  switch (wmn->category) {
761  case NC_ID:
762  if (ELEM(wmn->action, NA_RENAME)) {
763  /* In case the filelist shows ID names. */
764  ED_region_tag_redraw(region);
765  }
766  break;
767  case NC_SCENE:
768  if (ELEM(wmn->data, ND_MODE)) {
769  ED_region_tag_redraw(region);
770  }
771  break;
772  }
773 }
774 
775 /* add handlers, stuff you only do once or on area/region changes */
777 {
778  wmKeyMap *keymap;
779 
780  ED_region_header_init(region);
781 
782  keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, 0);
784 }
785 
786 static void file_header_region_draw(const bContext *C, ARegion *region)
787 {
788  ED_region_header(C, region);
789 }
790 
791 /* add handlers, stuff you only do once or on area/region changes */
792 static void file_ui_region_init(wmWindowManager *wm, ARegion *region)
793 {
794  wmKeyMap *keymap;
795 
796  ED_region_panels_init(wm, region);
798 
799  /* own keymap */
800  keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, 0);
802 
803  keymap = WM_keymap_ensure(wm->defaultconf, "File Browser Buttons", SPACE_FILE, 0);
805 }
806 
807 static void file_ui_region_draw(const bContext *C, ARegion *region)
808 {
809  ED_region_panels(C, region);
810 }
811 
813 {
814  wmKeyMap *keymap;
815 
816  ED_region_panels_init(wm, region);
818 
819  /* own keymap */
820  keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, 0);
822 }
823 
824 static void file_execution_region_draw(const bContext *C, ARegion *region)
825 {
826  ED_region_panels(C, region);
827 }
828 
829 static void file_ui_region_listener(const wmRegionListenerParams *listener_params)
830 {
831  ARegion *region = listener_params->region;
832  wmNotifier *wmn = listener_params->notifier;
833 
834  /* context changes */
835  switch (wmn->category) {
836  case NC_SPACE:
837  switch (wmn->data) {
838  case ND_SPACE_FILE_LIST:
839  ED_region_tag_redraw(region);
840  break;
841  }
842  break;
843  }
844 }
845 
846 static bool filepath_drop_poll(bContext *C, wmDrag *drag, const wmEvent *UNUSED(event))
847 {
848  if (drag->type == WM_DRAG_PATH) {
849  SpaceFile *sfile = CTX_wm_space_file(C);
850  if (sfile) {
851  return true;
852  }
853  }
854  return false;
855 }
856 
857 static void filepath_drop_copy(bContext *UNUSED(C), wmDrag *drag, wmDropBox *drop)
858 {
859  RNA_string_set(drop->ptr, "filepath", drag->path);
860 }
861 
862 /* region dropbox definition */
863 static void file_dropboxes(void)
864 {
866 
867  WM_dropbox_add(lb, "FILE_OT_filepath_drop", filepath_drop_poll, filepath_drop_copy, NULL, NULL);
868 }
869 
871 {
872  SpaceFile *sfile = area->spacedata.first;
873  return sfile->browse_mode;
874 }
875 
876 static void file_space_subtype_set(ScrArea *area, int value)
877 {
878  SpaceFile *sfile = area->spacedata.first;
879  sfile->browse_mode = value;
880 }
881 
883  EnumPropertyItem **item,
884  int *totitem)
885 {
887 }
888 
889 const char *file_context_dir[] = {
890  "active_file",
891  "selected_files",
892  "asset_library_ref",
893  "selected_asset_files",
894  "id",
895  NULL,
896 };
897 
898 static int /*eContextResult*/ file_context(const bContext *C,
899  const char *member,
901 {
902  bScreen *screen = CTX_wm_screen(C);
903  SpaceFile *sfile = CTX_wm_space_file(C);
905 
907 
908  if (CTX_data_dir(member)) {
910  return CTX_RESULT_OK;
911  }
912 
913  /* The following member checks return file-list data, check if that needs refreshing first. */
915  return CTX_RESULT_NO_DATA;
916  }
917 
918  if (CTX_data_equals(member, "active_file")) {
919  FileDirEntry *file = filelist_file(sfile->files, params->active_file);
920  if (file == NULL) {
921  return CTX_RESULT_NO_DATA;
922  }
923 
924  CTX_data_pointer_set(result, &screen->id, &RNA_FileSelectEntry, file);
925  return CTX_RESULT_OK;
926  }
927  if (CTX_data_equals(member, "selected_files")) {
928  const int num_files_filtered = filelist_files_ensure(sfile->files);
929 
930  for (int file_index = 0; file_index < num_files_filtered; file_index++) {
931  if (filelist_entry_is_selected(sfile->files, file_index)) {
932  FileDirEntry *entry = filelist_file(sfile->files, file_index);
933  CTX_data_list_add(result, &screen->id, &RNA_FileSelectEntry, entry);
934  }
935  }
936 
938  return CTX_RESULT_OK;
939  }
940 
941  if (CTX_data_equals(member, "asset_library_ref")) {
943  if (!asset_params) {
944  return CTX_RESULT_NO_DATA;
945  }
946 
948  result, &screen->id, &RNA_AssetLibraryReference, &asset_params->asset_library_ref);
949  return CTX_RESULT_OK;
950  }
954  if (CTX_data_equals(member, "selected_asset_files")) {
955  const int num_files_filtered = filelist_files_ensure(sfile->files);
956 
957  for (int file_index = 0; file_index < num_files_filtered; file_index++) {
958  if (filelist_entry_is_selected(sfile->files, file_index)) {
959  FileDirEntry *entry = filelist_file(sfile->files, file_index);
960  if (entry->asset_data) {
961  CTX_data_list_add(result, &screen->id, &RNA_FileSelectEntry, entry);
962  }
963  }
964  }
965 
967  return CTX_RESULT_OK;
968  }
969  if (CTX_data_equals(member, "id")) {
970  const FileDirEntry *file = filelist_file(sfile->files, params->active_file);
971  if (file == NULL) {
972  return CTX_RESULT_NO_DATA;
973  }
974 
976  if (id == NULL) {
977  return CTX_RESULT_NO_DATA;
978  }
979 
981  return CTX_RESULT_OK;
982  }
983 
985 }
986 
987 static void file_id_remap(ScrArea *area, SpaceLink *sl, const struct IDRemapper *UNUSED(mappings))
988 {
989  SpaceFile *sfile = (SpaceFile *)sl;
990 
991  /* If the file shows main data (IDs), tag it for reset.
992  * Full reset of the file list if main data was changed, don't even attempt remap pointers.
993  * We could give file list types a id-remap callback, but it's probably not worth it.
994  * Refreshing local file lists is relatively cheap. */
996 }
997 
999 {
1000  SpaceType *st = MEM_callocN(sizeof(SpaceType), "spacetype file");
1001  ARegionType *art;
1002 
1003  st->spaceid = SPACE_FILE;
1004  strncpy(st->name, "File", BKE_ST_MAXNAME);
1005 
1006  st->create = file_create;
1007  st->free = file_free;
1008  st->init = file_init;
1009  st->exit = file_exit;
1010  st->duplicate = file_duplicate;
1011  st->refresh = file_refresh;
1012  st->listener = file_listener;
1013  st->operatortypes = file_operatortypes;
1014  st->keymap = file_keymap;
1015  st->dropboxes = file_dropboxes;
1016  st->space_subtype_item_extend = file_space_subtype_item_extend;
1017  st->space_subtype_get = file_space_subtype_get;
1018  st->space_subtype_set = file_space_subtype_set;
1019  st->context = file_context;
1020  st->id_remap = file_id_remap;
1021 
1022  /* regions: main window */
1023  art = MEM_callocN(sizeof(ARegionType), "spacetype file region");
1024  art->regionid = RGN_TYPE_WINDOW;
1025  art->init = file_main_region_init;
1026  art->draw = file_main_region_draw;
1030  BLI_addhead(&st->regiontypes, art);
1031 
1032  /* regions: header */
1033  art = MEM_callocN(sizeof(ARegionType), "spacetype file region");
1034  art->regionid = RGN_TYPE_HEADER;
1035  art->prefsizey = HEADERY;
1039  // art->listener = file_header_region_listener;
1040  BLI_addhead(&st->regiontypes, art);
1041 
1042  /* regions: ui */
1043  art = MEM_callocN(sizeof(ARegionType), "spacetype file region");
1044  art->regionid = RGN_TYPE_UI;
1045  art->keymapflag = ED_KEYMAP_UI;
1047  art->init = file_ui_region_init;
1048  art->draw = file_ui_region_draw;
1049  BLI_addhead(&st->regiontypes, art);
1050 
1051  /* regions: execution */
1052  art = MEM_callocN(sizeof(ARegionType), "spacetype file region");
1053  art->regionid = RGN_TYPE_EXECUTE;
1054  art->keymapflag = ED_KEYMAP_UI;
1058  BLI_addhead(&st->regiontypes, art);
1060 
1061  /* regions: channels (directories) */
1062  art = MEM_callocN(sizeof(ARegionType), "spacetype file region");
1063  art->regionid = RGN_TYPE_TOOLS;
1064  art->prefsizex = 240;
1065  art->prefsizey = 60;
1066  art->keymapflag = ED_KEYMAP_UI;
1070  BLI_addhead(&st->regiontypes, art);
1072 
1073  /* regions: tool properties */
1074  art = MEM_callocN(sizeof(ARegionType), "spacetype file operator region");
1076  art->prefsizex = 240;
1077  art->prefsizey = 60;
1078  art->keymapflag = ED_KEYMAP_UI;
1082  BLI_addhead(&st->regiontypes, art);
1084 
1086 }
1087 
1088 void ED_file_init(void)
1089 {
1091 
1092  if (G.background == false) {
1094  }
1095 
1097 }
1098 
1099 void ED_file_exit(void)
1100 {
1101  fsmenu_free();
1102 
1103  if (G.background == false) {
1105  }
1106 }
1107 
1109 {
1110  const char *const cfgdir = BKE_appdir_folder_id(BLENDER_USER_CONFIG, NULL);
1111 
1112  fsmenu_free();
1113 
1115 
1116  if (cfgdir) {
1117  char name[FILE_MAX];
1118  BLI_join_dirfile(name, sizeof(name), cfgdir, BLENDER_BOOKMARK_FILE);
1120  }
1121 }
#define BLENDER_BOOKMARK_FILE
Definition: BKE_appdir.h:178
const char * BKE_appdir_folder_id(int folder_id, const char *subfolder)
Definition: appdir.c:672
@ BLENDER_USER_CONFIG
Definition: BKE_appdir.h:157
struct ScrArea * CTX_wm_area(const bContext *C)
Definition: context.c:738
void CTX_data_dir_set(bContextDataResult *result, const char **dir)
Definition: context.c:696
bool CTX_data_equals(const char *member, const char *str)
Definition: context.c:634
void CTX_data_pointer_set(bContextDataResult *result, struct ID *id, StructRNA *type, void *data)
Definition: context.c:649
void CTX_data_id_pointer_set(bContextDataResult *result, struct ID *id)
Definition: context.c:644
bool CTX_data_dir(const char *member)
Definition: context.c:639
struct wmWindowManager * CTX_wm_manager(const bContext *C)
Definition: context.c:713
@ CTX_DATA_TYPE_COLLECTION
Definition: BKE_context.h:233
@ CTX_RESULT_MEMBER_NOT_FOUND
Definition: BKE_context.h:75
@ CTX_RESULT_OK
Definition: BKE_context.h:72
@ CTX_RESULT_NO_DATA
Definition: BKE_context.h:79
void CTX_data_list_add(bContextDataResult *result, struct ID *id, StructRNA *type, void *data)
Definition: context.c:667
struct bScreen * CTX_wm_screen(const bContext *C)
Definition: context.c:733
void CTX_data_type_set(struct bContextDataResult *result, short type)
Definition: context.c:701
struct SpaceFile * CTX_wm_space_file(const bContext *C)
Definition: context.c:842
struct wmWindow * CTX_wm_window(const bContext *C)
Definition: context.c:723
#define G_MAIN
Definition: BKE_global.h:267
void BKE_reports_clear(ReportList *reports)
Definition: report.c:63
void BKE_reports_init(ReportList *reports, int flag)
Definition: report.c:50
struct ARegion * BKE_area_find_region_type(const struct ScrArea *area, int type)
#define BKE_ST_MAXNAME
Definition: BKE_screen.h:53
void BKE_spacetype_register(struct SpaceType *st)
Definition: screen.c:391
#define BLI_assert(a)
Definition: BLI_assert.h:46
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition: listbase.c:60
void BLI_insertlinkafter(struct ListBase *listbase, void *vprevlink, void *vnewlink) ATTR_NONNULL(1)
Definition: listbase.c:301
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition: listbase.c:80
#define FILE_MAX
void BLI_join_dirfile(char *__restrict dst, size_t maxlen, const char *__restrict dir, const char *__restrict file) ATTR_NONNULL()
Definition: path_util.c:1531
#define UNUSED_VARS(...)
#define UNUSED(x)
#define ELEM(...)
#define HEADERY
@ RGN_FLAG_DYNAMIC_SIZE
@ RGN_FLAG_HIDDEN
@ RGN_TYPE_EXECUTE
@ RGN_TYPE_UI
@ RGN_TYPE_WINDOW
@ RGN_TYPE_HEADER
@ RGN_TYPE_TOOLS
@ RGN_TYPE_TOOL_PROPS
@ RGN_ALIGN_BOTTOM
@ RGN_ALIGN_LEFT
@ RGN_ALIGN_TOP
@ RGN_ALIGN_RIGHT
@ SPACE_FILE
@ SPACE_EMPTY
@ FILE_TAG_REBUILD_MAIN_FILES
@ FILE_BROWSE_MODE_ASSETS
@ FILE_VERTICALDISPLAY
@ FILE_IMGDISPLAY
@ FILE_HIDE_TOOL_PROPS
@ FILE_FILTER
@ FILE_SORT_INVERT
@ FILE_ASSETS_ONLY
@ FILE_HIDE_DOT
#define USER_EXPERIMENTAL_TEST(userdef, member)
@ V2D_KEEPTOT_STRICT
@ V2D_LOCKOFS_X
@ V2D_LOCKOFS_Y
@ V2D_LIMITZOOM
@ V2D_LOCKZOOM_X
@ V2D_KEEPASPECT
@ V2D_LOCKZOOM_Y
@ V2D_SCROLL_VERTICAL_HIDE
@ V2D_SCROLL_RIGHT
@ V2D_SCROLL_BOTTOM
@ V2D_ALIGN_NO_NEG_X
@ V2D_ALIGN_NO_POS_Y
const FileIndexerType file_indexer_asset
int64_t ED_asset_types_supported_as_filter_flags(void)
Definition: asset_type.cc:37
void ED_fileselect_layout_maskrect(const FileLayout *layout, const struct View2D *v2d, struct rcti *r_rect)
struct FileAssetSelectParams * ED_fileselect_get_asset_params(const struct SpaceFile *sfile)
@ FS_CATEGORY_RECENT
@ FS_CATEGORY_BOOKMARKS
@ FS_CATEGORY_SYSTEM_BOOKMARKS
@ FS_CATEGORY_SYSTEM
struct FSMenu * ED_fsmenu_get(void)
Definition: fsmenu.c:63
struct ID * ED_fileselect_active_asset_get(const struct SpaceFile *sfile)
bool ED_fileselect_is_asset_browser(const struct SpaceFile *sfile)
struct FileSelectParams * ED_fileselect_ensure_active_params(struct SpaceFile *sfile)
Definition: filesel.c:352
struct FileSelectParams * ED_fileselect_get_active_params(const struct SpaceFile *sfile)
void ED_fileselect_exit(struct wmWindowManager *wm, struct SpaceFile *sfile)
Definition: filesel.c:1227
void ED_area_tag_redraw(ScrArea *area)
Definition: area.c:729
@ ED_KEYMAP_UI
Definition: ED_screen.h:691
@ ED_KEYMAP_HEADER
Definition: ED_screen.h:697
@ ED_KEYMAP_VIEW2D
Definition: ED_screen.h:694
void ED_region_header(const struct bContext *C, struct ARegion *region)
void ED_area_do_msg_notify_tag_refresh(struct bContext *C, struct wmMsgSubscribeKey *msg_key, struct wmMsgSubscribeValue *msg_val)
void ED_region_remove(struct bContext *C, struct ScrArea *area, struct ARegion *region)
Definition: screen_edit.c:677
void ED_region_panels(const struct bContext *C, struct ARegion *region)
bool ED_area_is_global(const ScrArea *area)
Definition: area.c:3449
void ED_region_panels_init(struct wmWindowManager *wm, struct ARegion *region)
Definition: area.c:3153
void ED_region_tag_redraw(struct ARegion *region)
Definition: area.c:655
void ED_region_header_init(struct ARegion *region)
Definition: area.c:3417
void ED_area_tag_refresh(ScrArea *area)
Definition: area.c:758
void ED_area_init(struct wmWindowManager *wm, struct wmWindow *win, struct ScrArea *area)
Definition: area.c:1902
Contains defines and structs used throughout the imbuf module.
void IMB_thumb_makedirs(void)
Definition: thumbs.c:288
Read Guarded memory(de)allocation.
#define MEM_SAFE_FREE(v)
#define C
Definition: RandGen.cpp:25
@ TH_BACK
Definition: UI_resources.h:39
void UI_ThemeClearColor(int colorid)
Definition: resources.c:1448
void UI_view2d_region_reinit(struct View2D *v2d, short type, int winx, int winy)
Definition: view2d.cc:217
void UI_view2d_view_restore(const struct bContext *C)
void UI_view2d_view_ortho(const struct View2D *v2d)
void UI_view2d_scrollers_draw(struct View2D *v2d, const struct rcti *mask_custom)
@ V2D_COMMONVIEW_LIST
Definition: UI_view2d.h:38
#define NA_ACTIVATED
Definition: WM_types.h:529
#define NC_ID
Definition: WM_types.h:345
#define ND_SPACE_CHANGED
Definition: WM_types.h:481
#define WM_DRAG_PATH
Definition: WM_types.h:1050
#define ND_SPACE_ASSET_PARAMS
Definition: WM_types.h:468
#define ND_MODE
Definition: WM_types.h:393
#define NC_SCENE
Definition: WM_types.h:328
#define NA_ADDED
Definition: WM_types.h:525
#define NA_EDITED
Definition: WM_types.h:523
#define ND_SPACE_FILE_PREVIEW
Definition: WM_types.h:483
#define NC_ASSET
Definition: WM_types.h:354
#define NA_REMOVED
Definition: WM_types.h:526
#define NA_RENAME
Definition: WM_types.h:527
#define NA_JOB_FINISHED
Definition: WM_types.h:531
#define ND_SPACE_FILE_PARAMS
Definition: WM_types.h:466
#define NC_SPACE
Definition: WM_types.h:342
#define NA_SELECTED
Definition: WM_types.h:528
#define ND_SPACE_FILE_LIST
Definition: WM_types.h:467
unsigned int U
Definition: btGjkEpa3.h:78
FILE * file
Scene scene
DEGForeachIDComponentCallback callback
void file_calc_previews(const bContext *C, ARegion *region)
Definition: file_draw.c:288
bool file_draw_hint_if_invalid(const bContext *C, const SpaceFile *sfile, ARegion *region)
Definition: file_draw.c:1199
void file_draw_list(const bContext *C, ARegion *region)
Definition: file_draw.c:856
const FileIndexerType file_indexer_noop
Definition: file_indexer.cc:81
void FILE_OT_bookmark_move(struct wmOperatorType *ot)
Definition: file_ops.c:1331
void FILE_OT_filenum(struct wmOperatorType *ot)
Definition: file_ops.c:2754
void(* onReloadFn)(struct SpaceFile *space_data, onReloadFnData custom_data)
Definition: file_intern.h:169
void FILE_OT_rename(struct wmOperatorType *ot)
Definition: file_ops.c:2810
void FILE_OT_edit_directory_path(struct wmOperatorType *ot)
Definition: file_ops.c:2989
void FILE_OT_bookmark_delete(struct wmOperatorType *ot)
Definition: file_ops.c:1175
void FILE_OT_sort_column_ui_context(struct wmOperatorType *ot)
Definition: file_ops.c:1518
void FILE_OT_cancel(struct wmOperatorType *ot)
Definition: file_ops.c:1564
void FILE_OT_highlight(struct wmOperatorType *ot)
Definition: file_ops.c:1466
void FILE_OT_select(struct wmOperatorType *ot)
Definition: file_ops.c:612
void file_params_invoke_rename_postscroll(struct wmWindowManager *wm, struct wmWindow *win, SpaceFile *sfile)
Definition: filesel.c:1267
void FILE_OT_directory_new(struct wmOperatorType *ot)
Definition: file_ops.c:2422
void FILE_OT_view_selected(struct wmOperatorType *ot)
Definition: file_ops.c:1031
void file_params_renamefile_activate(struct SpaceFile *sfile, struct FileSelectParams *params)
Definition: filesel.c:1311
void FILE_OT_parent(struct wmOperatorType *ot)
Definition: file_ops.c:1981
void FILE_OT_bookmark_add(struct wmOperatorType *ot)
Definition: file_ops.c:1122
void FILE_OT_hidedot(struct wmOperatorType *ot)
Definition: file_ops.c:2673
void FILE_OT_mouse_execute(struct wmOperatorType *ot)
Definition: file_ops.c:1901
void FILE_OT_refresh(struct wmOperatorType *ot)
Definition: file_ops.c:1941
void FILE_OT_reset_recent(wmOperatorType *ot)
Definition: file_ops.c:1385
void FILE_OT_select_all(struct wmOperatorType *ot)
Definition: file_ops.c:978
void fileselect_refresh_params(struct SpaceFile *sfile)
Definition: filesel.c:438
void file_tool_props_region_panels_register(struct ARegionType *art)
Definition: file_panels.c:91
void FILE_OT_delete(struct wmOperatorType *ot)
Definition: file_ops.c:2907
void FILE_OT_execute(struct wmOperatorType *ot)
Definition: file_ops.c:1847
void * onReloadFnData
Definition: file_intern.h:168
void file_tools_region_panels_register(struct ARegionType *art)
Definition: file_panels.c:257
void FILE_OT_select_bookmark(struct wmOperatorType *ot)
Definition: file_ops.c:1073
void FILE_OT_start_filter(struct wmOperatorType *ot)
Definition: file_ops.c:2948
int file_highlight_set(struct SpaceFile *sfile, struct ARegion *region, int mx, int my)
Definition: file_ops.c:1404
void FILE_OT_select_box(struct wmOperatorType *ot)
Definition: file_ops.c:494
void FILE_OT_select_walk(struct wmOperatorType *ot)
Definition: file_ops.c:888
void file_execute_region_panels_register(struct ARegionType *art)
Definition: file_panels.c:205
void FILE_OT_next(struct wmOperatorType *ot)
Definition: file_ops.c:2054
void FILE_OT_filepath_drop(struct wmOperatorType *ot)
Definition: file_ops.c:2293
void FILE_OT_smoothscroll(struct wmOperatorType *ot)
Definition: file_ops.c:2246
void FILE_OT_bookmark_cleanup(struct wmOperatorType *ot)
Definition: file_ops.c:1236
void FILE_OT_previous(struct wmOperatorType *ot)
Definition: file_ops.c:2017
void filelist_set_asset_catalog_filter_options(FileList *filelist, eFileSel_Params_AssetCatalogVisibility catalog_visibility, const bUUID *catalog_id)
Definition: filelist.c:1180
void filelist_free(struct FileList *filelist)
Definition: filelist.c:2019
void filelist_cache_previews_set(FileList *filelist, const bool use_previews)
Definition: filelist.c:2630
void filelist_setsorting(struct FileList *filelist, const short sort, bool invert_sort)
Definition: filelist.c:753
int filelist_needs_reading(FileList *filelist)
Definition: filelist.c:2873
void folder_history_list_ensure_for_active_browse_mode(SpaceFile *sfile)
Definition: filelist.c:202
void filelist_sort(struct FileList *filelist)
Definition: filelist.c:720
void filelist_clear_from_reset_tag(FileList *filelist)
Definition: filelist.c:2005
void filelist_freelib(struct FileList *filelist)
Definition: filelist.c:2047
void filelist_setfilter_options(FileList *filelist, const bool do_filter, const bool hide_dot, const bool hide_parent, const uint64_t filter, const uint64_t filter_id, const bool filter_assets_only, const char *filter_glob, const char *filter_search)
Definition: filelist.c:1116
void filelist_setlibrary(FileList *filelist, const AssetLibraryReference *asset_library_ref)
Definition: filelist.c:1219
void folder_history_list_free(SpaceFile *sfile)
Definition: filelist.c:229
void filelist_setdir(struct FileList *filelist, char *r_dir)
Definition: filelist.c:2116
FileList * filelist_new(short type)
Definition: filelist.c:1875
ListBase folder_history_list_duplicate(ListBase *listbase)
Definition: filelist.c:236
ID * filelist_file_get_id(const FileDirEntry *file)
Definition: filelist.c:2321
void filelist_setrecursion(struct FileList *filelist, const int recursion_level)
Definition: filelist.c:2132
bool filelist_cache_previews_update(FileList *filelist)
Definition: filelist.c:2655
void filelist_settype(FileList *filelist, short type)
Definition: filelist.c:1888
void filelist_readjob_stop(FileList *filelist, wmWindowManager *wm)
Definition: filelist.c:4118
void filelist_init_icons(void)
Definition: filelist.c:1245
FileDirEntry * filelist_file(struct FileList *filelist, int index)
Definition: filelist.c:2280
bool filelist_pending(struct FileList *filelist)
Definition: filelist.c:2163
void filelist_filter(FileList *filelist)
Definition: filelist.c:1061
void filelist_tag_force_reset_mainfiles(FileList *filelist)
Definition: filelist.c:2150
bool filelist_needs_reset_on_main_changes(const FileList *filelist)
Definition: filelist.c:2168
int filelist_files_ensure(FileList *filelist)
Definition: filelist.c:2173
bool filelist_entry_is_selected(FileList *filelist, const int index)
Definition: filelist.c:2975
void filelist_setindexer(FileList *filelist, const FileIndexerType *indexer)
Definition: filelist.c:1172
bool filelist_needs_force_reset(FileList *filelist)
Definition: filelist.c:2140
void filelist_readjob_start(FileList *filelist, const int space_notifier, const bContext *C)
Definition: filelist.c:4057
void filelist_free_icons(void)
Definition: filelist.c:1279
void fsmenu_read_bookmarks(struct FSMenu *fsmenu, const char *filepath)
Definition: fsmenu.c:559
int fsmenu_get_active_indices(struct FSMenu *fsmenu, enum FSMenuCategory category, const char *dir)
Definition: fsmenu.c:1125
void fsmenu_free(void)
Definition: fsmenu.c:1082
void fsmenu_read_system(struct FSMenu *fsmenu, int read_bookmarks)
Definition: fsmenu.c:631
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
void(* MEM_freeN)(void *vmemh)
Definition: mallocn.c:27
void *(* MEM_dupallocN)(const void *vmemh)
Definition: mallocn.c:28
void *(* MEM_callocN)(size_t len, const char *str)
Definition: mallocn.c:31
#define G(x, y, z)
static void area(int d1, int d2, int e1, int e2, float weights[2])
static const pxr::TfToken st("st", pxr::TfToken::Immortal)
void RNA_pointer_create(ID *id, StructRNA *type, void *data, PointerRNA *r_ptr)
Definition: rna_access.c:136
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
Definition: rna_access.c:5155
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
Definition: rna_access.c:717
void RNA_enum_items_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item)
Definition: rna_define.c:4465
const EnumPropertyItem rna_enum_space_file_browse_mode_items[]
Definition: rna_space.c:202
void ED_file_exit(void)
Definition: space_file.c:1099
static SpaceLink * file_create(const ScrArea *UNUSED(area), const Scene *UNUSED(scene))
Definition: space_file.c:105
static void file_ui_region_init(wmWindowManager *wm, ARegion *region)
Definition: space_file.c:792
static void file_exit(wmWindowManager *wm, ScrArea *area)
Definition: space_file.c:192
static int file_space_subtype_get(ScrArea *area)
Definition: space_file.c:870
static void file_main_region_init(wmWindowManager *wm, ARegion *region)
Definition: space_file.c:509
static void file_execution_region_draw(const bContext *C, ARegion *region)
Definition: space_file.c:824
static bool filepath_drop_poll(bContext *C, wmDrag *drag, const wmEvent *UNUSED(event))
Definition: space_file.c:846
void ED_file_read_bookmarks(void)
Definition: space_file.c:1108
const char * file_context_dir[]
Definition: space_file.c:889
static void file_header_region_draw(const bContext *C, ARegion *region)
Definition: space_file.c:786
static void file_tool_props_region_listener(const wmRegionListenerParams *listener_params)
Definition: space_file.c:755
static void file_tools_region_init(wmWindowManager *wm, ARegion *region)
Definition: space_file.c:724
static void file_main_region_draw(const bContext *C, ARegion *region)
Definition: space_file.c:611
static ARegion * file_ui_region_ensure(ScrArea *area, ARegion *region_prev)
Definition: space_file.c:51
static SpaceLink * file_duplicate(SpaceLink *sl)
Definition: space_file.c:204
static void file_ui_region_listener(const wmRegionListenerParams *listener_params)
Definition: space_file.c:829
void ED_spacetype_file(void)
Definition: space_file.c:998
void file_on_reload_callback_register(SpaceFile *sfile, onReloadFn callback, onReloadFnData custom_data)
Definition: space_file.c:407
static void file_space_subtype_set(ScrArea *area, int value)
Definition: space_file.c:876
static void file_execution_region_init(wmWindowManager *wm, ARegion *region)
Definition: space_file.c:812
static bool file_main_region_needs_refresh_before_draw(SpaceFile *sfile)
Definition: space_file.c:595
static ARegion * file_execute_region_ensure(ScrArea *area, ARegion *region_prev)
Definition: space_file.c:68
static void file_free(SpaceLink *sl)
Definition: space_file.c:149
static void file_on_reload_callback_call(SpaceFile *sfile)
Definition: space_file.c:415
static void file_operatortypes(void)
Definition: space_file.c:678
static void file_refresh(const bContext *C, ScrArea *area)
Definition: space_file.c:300
void ED_file_init(void)
Definition: space_file.c:1088
static void file_tools_region_draw(const bContext *C, ARegion *region)
Definition: space_file.c:736
static ARegion * file_tool_props_region_ensure(ScrArea *area, ARegion *region_prev)
Definition: space_file.c:85
static void file_space_subtype_item_extend(bContext *UNUSED(C), EnumPropertyItem **item, int *totitem)
Definition: space_file.c:882
static void file_keymap(struct wmKeyConfig *keyconf)
Definition: space_file.c:712
static int file_context(const bContext *C, const char *member, bContextDataResult *result)
Definition: space_file.c:898
static void file_listener(const wmSpaceTypeListenerParams *listener_params)
Definition: space_file.c:435
static void file_main_region_listener(const wmRegionListenerParams *listener_params)
Definition: space_file.c:523
static void filepath_drop_copy(bContext *UNUSED(C), wmDrag *drag, wmDropBox *drop)
Definition: space_file.c:857
static void file_init(wmWindowManager *UNUSED(wm), ScrArea *area)
Definition: space_file.c:176
static void file_tools_region_listener(const wmRegionListenerParams *listener_params)
Definition: space_file.c:741
static void file_reset_filelist_showing_main_data(ScrArea *area, SpaceFile *sfile)
Definition: space_file.c:427
static void file_main_region_message_subscribe(const wmRegionMessageSubscribeParams *params)
Definition: space_file.c:548
static void file_ui_region_draw(const bContext *C, ARegion *region)
Definition: space_file.c:807
static void file_id_remap(ScrArea *area, SpaceLink *sl, const struct IDRemapper *UNUSED(mappings))
Definition: space_file.c:987
static void file_header_region_init(wmWindowManager *wm, ARegion *region)
Definition: space_file.c:776
static void file_ensure_valid_region_state(bContext *C, wmWindowManager *wm, wmWindow *win, ScrArea *area, SpaceFile *sfile, FileSelectParams *params)
Definition: space_file.c:237
static void file_dropboxes(void)
Definition: space_file.c:863
void(* draw)(const struct bContext *C, struct ARegion *region)
Definition: BKE_screen.h:151
void(* message_subscribe)(const wmRegionMessageSubscribeParams *params)
Definition: BKE_screen.h:167
void(* listener)(const wmRegionListenerParams *params)
Definition: BKE_screen.h:165
int keymapflag
Definition: BKE_screen.h:208
void(* init)(struct wmWindowManager *wm, struct ARegion *region)
Definition: BKE_screen.h:147
ListBase handlers
short alignment
short regiontype
Definition: fsmenu.c:53
AssetLibraryReference asset_library_ref
struct AssetMetaData * asset_data
Definition: DNA_ID.h:368
ReportList is_blendfile_readable_reports
Definition: file_intern.h:180
onReloadFnData on_reload_custom_data
Definition: file_intern.h:174
onReloadFn on_reload
Definition: file_intern.h:173
bool is_blendfile_status_set
Definition: file_intern.h:178
struct wmTimer * smoothscroll_timer
short bookmarknr
struct FileLayout * layout
ListBase regionbase
struct wmOperator * op
short system_bookmarknr
struct FileList * files
FileSelectParams * params
struct wmTimer * previews_timer
FileAssetSelectParams * asset_params
ListBase folder_histories
SpaceFile_Runtime * runtime
float minzoom
short align
short keeptot
short keepzoom
short keepofs
short scroll
float maxzoom
float ymax
Definition: DNA_vec_types.h:70
float ymin
Definition: DNA_vec_types.h:70
char path[1024]
Definition: WM_types.h:1150
int type
Definition: WM_types.h:1148
struct PointerRNA * ptr
Definition: WM_types.h:1237
unsigned int data
Definition: WM_types.h:308
unsigned int action
Definition: WM_types.h:308
unsigned int category
Definition: WM_types.h:308
void * reference
Definition: WM_types.h:310
struct wmNotifier * notifier
Definition: BKE_screen.h:127
struct ARegion * region
Definition: BKE_screen.h:126
struct wmWindow * window
Definition: BKE_screen.h:56
struct wmNotifier * notifier
Definition: BKE_screen.h:58
struct ScrArea * area
Definition: BKE_screen.h:57
struct wmKeyConfig * defaultconf
struct wmEvent * eventstate
ListBase * WM_dropboxmap_find(const char *idname, int spaceid, int regionid)
Definition: wm_dragdrop.cc:76
wmDropBox * WM_dropbox_add(ListBase *lb, const char *idname, bool(*poll)(bContext *, wmDrag *, const wmEvent *), void(*copy)(bContext *, wmDrag *, wmDropBox *), void(*cancel)(Main *, wmDrag *, wmDropBox *), WMDropboxTooltipFunc tooltip)
Definition: wm_dragdrop.cc:95
wmEventHandler_Keymap * WM_event_add_keymap_handler_v2d_mask(ListBase *handlers, wmKeyMap *keymap)
PointerRNA * ptr
Definition: wm_files.c:3480
wmKeyMap * WM_keymap_ensure(wmKeyConfig *keyconf, const char *idname, int spaceid, int regionid)
Definition: wm_keymap.c:852
void WM_msg_subscribe_rna(struct wmMsgBus *mbus, PointerRNA *ptr, const PropertyRNA *prop, const wmMsgSubscribeValue *msg_val_params, const char *id_repr)
void WM_operatortype_append(void(*opfunc)(wmOperatorType *))
void WM_event_remove_timer_notifier(wmWindowManager *wm, wmWindow *win, wmTimer *timer)
Definition: wm_window.c:1713