Blender V4.3
file_context.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#include "BKE_context.hh"
10
11#include "ED_fileselect.hh"
12#include "ED_screen.hh"
13
14#include "RNA_prototypes.hh"
15
16#include "file_intern.hh"
17#include "filelist.hh"
18
19const char *file_context_dir[] = {
20 "active_file",
21 "selected_files",
22 "asset_library_reference",
23 "selected_assets",
24 "id",
25 "selected_ids",
26 nullptr,
27};
28
29int /*eContextResult*/ file_context(const bContext *C,
30 const char *member,
31 bContextDataResult *result)
32{
33 bScreen *screen = CTX_wm_screen(C);
34 SpaceFile *sfile = CTX_wm_space_file(C);
36
38
39 if (CTX_data_dir(member)) {
41 return CTX_RESULT_OK;
42 }
43
44 /* The following member checks return file-list data, check if that needs refreshing first. */
46 return CTX_RESULT_NO_DATA;
47 }
48
49 if (CTX_data_equals(member, "active_file")) {
50 FileDirEntry *file = filelist_file(sfile->files, params->active_file);
51 if (file == nullptr) {
52 return CTX_RESULT_NO_DATA;
53 }
54
55 CTX_data_pointer_set(result, &screen->id, &RNA_FileSelectEntry, file);
56 return CTX_RESULT_OK;
57 }
58 if (CTX_data_equals(member, "selected_files")) {
59 const int num_files_filtered = filelist_files_ensure(sfile->files);
60
61 for (int file_index = 0; file_index < num_files_filtered; file_index++) {
62 if (filelist_entry_is_selected(sfile->files, file_index)) {
63 FileDirEntry *entry = filelist_file(sfile->files, file_index);
64 CTX_data_list_add(result, &screen->id, &RNA_FileSelectEntry, entry);
65 }
66 }
67
69 return CTX_RESULT_OK;
70 }
71
72 if (CTX_data_equals(member, "asset_library_reference")) {
74 if (!asset_params) {
75 return CTX_RESULT_NO_DATA;
76 }
77
79 result, &screen->id, &RNA_AssetLibraryReference, &asset_params->asset_library_ref);
80 return CTX_RESULT_OK;
81 }
82 if (CTX_data_equals(member, "selected_assets")) {
83 const int num_files_filtered = filelist_files_ensure(sfile->files);
84
85 for (int file_index = 0; file_index < num_files_filtered; file_index++) {
86 if (filelist_entry_is_selected(sfile->files, file_index)) {
87 FileDirEntry *entry = filelist_file(sfile->files, file_index);
88 if (entry->asset) {
89 CTX_data_list_add(result, nullptr, &RNA_AssetRepresentation, entry->asset);
90 }
91 }
92 }
93
95 return CTX_RESULT_OK;
96 }
97 if (CTX_data_equals(member, "id")) {
98 const FileDirEntry *file = filelist_file(sfile->files, params->active_file);
99 if (file == nullptr) {
100 return CTX_RESULT_NO_DATA;
101 }
102
103 ID *id = filelist_file_get_id(file);
104 if (id == nullptr) {
105 return CTX_RESULT_NO_DATA;
106 }
107
108 CTX_data_id_pointer_set(result, id);
109 return CTX_RESULT_OK;
110 }
111 if (CTX_data_equals(member, "selected_ids")) {
112 const int num_files_filtered = filelist_files_ensure(sfile->files);
113
114 for (int file_index = 0; file_index < num_files_filtered; file_index++) {
115 if (!filelist_entry_is_selected(sfile->files, file_index)) {
116 continue;
117 }
118 ID *id = filelist_entry_get_id(sfile->files, file_index);
119 if (!id) {
120 continue;
121 }
122
123 CTX_data_id_list_add(result, id);
124 }
125
127 return CTX_RESULT_OK;
128 }
129
131}
void CTX_data_dir_set(bContextDataResult *result, const char **dir)
void CTX_data_id_list_add(bContextDataResult *result, ID *id)
bool CTX_data_equals(const char *member, const char *str)
bScreen * CTX_wm_screen(const bContext *C)
void CTX_data_pointer_set(bContextDataResult *result, ID *id, StructRNA *type, void *data)
bool CTX_data_dir(const char *member)
void CTX_data_id_pointer_set(bContextDataResult *result, ID *id)
SpaceFile * CTX_wm_space_file(const bContext *C)
ScrArea * CTX_wm_area(const bContext *C)
@ CTX_RESULT_MEMBER_NOT_FOUND
@ CTX_RESULT_OK
@ CTX_RESULT_NO_DATA
void CTX_data_list_add(bContextDataResult *result, ID *id, StructRNA *type, void *data)
@ CTX_DATA_TYPE_COLLECTION
void CTX_data_type_set(bContextDataResult *result, short type)
#define BLI_assert(a)
Definition BLI_assert.h:50
FileSelectParams * ED_fileselect_get_active_params(const SpaceFile *sfile)
Definition filesel.cc:380
FileAssetSelectParams * ED_fileselect_get_asset_params(const SpaceFile *sfile)
Definition filesel.cc:403
bool ED_area_is_global(const ScrArea *area)
Definition area.cc:3693
const char * file_context_dir[]
int file_context(const bContext *C, const char *member, bContextDataResult *result)
bool file_main_region_needs_refresh_before_draw(SpaceFile *sfile)
ID * filelist_file_get_id(const FileDirEntry *file)
Definition filelist.cc:2325
ID * filelist_entry_get_id(const FileList *filelist, const int index)
Definition filelist.cc:2312
int filelist_files_ensure(FileList *filelist)
Definition filelist.cc:2148
bool filelist_entry_is_selected(FileList *filelist, const int index)
Definition filelist.cc:3014
FileDirEntry * filelist_file(FileList *filelist, int index)
Definition filelist.cc:2265
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
AssetLibraryReference asset_library_ref
AssetRepresentationHandle * asset
Definition DNA_ID.h:413
struct FileList * files