Blender V5.0
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
8
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 "asset",
24 "selected_assets",
25 "id",
26 "selected_ids",
27 nullptr,
28};
29
30int /*eContextResult*/ file_context(const bContext *C,
31 const char *member,
33{
34 bScreen *screen = CTX_wm_screen(C);
37
39
40 if (CTX_data_dir(member)) {
42 return CTX_RESULT_OK;
43 }
44
45 /* The following member checks return file-list data, check if that needs refreshing first. */
47 return CTX_RESULT_NO_DATA;
48 }
49
50 if (CTX_data_equals(member, "active_file")) {
51 FileDirEntry *file = filelist_file(sfile->files, params->active_file);
52 if (file == nullptr) {
53 return CTX_RESULT_NO_DATA;
54 }
55
56 CTX_data_pointer_set(result, &screen->id, &RNA_FileSelectEntry, file);
57 return CTX_RESULT_OK;
58 }
59 if (CTX_data_equals(member, "selected_files")) {
60 const int num_files_filtered = filelist_files_ensure(sfile->files);
61
62 for (int file_index = 0; file_index < num_files_filtered; file_index++) {
63 if (filelist_entry_is_selected(sfile->files, file_index)) {
64 FileDirEntry *entry = filelist_file(sfile->files, file_index);
65 CTX_data_list_add(result, &screen->id, &RNA_FileSelectEntry, entry);
66 }
67 }
68
70 return CTX_RESULT_OK;
71 }
72
73 if (CTX_data_equals(member, "asset_library_reference")) {
75 if (!asset_params) {
76 return CTX_RESULT_NO_DATA;
77 }
78
80 result, &screen->id, &RNA_AssetLibraryReference, &asset_params->asset_library_ref);
81 return CTX_RESULT_OK;
82 }
83
84 if (CTX_data_equals(member, "asset")) {
85 FileDirEntry *file = filelist_file(sfile->files, params->active_file);
86 if (file == nullptr || !file->asset) {
87 return CTX_RESULT_NO_DATA;
88 }
89
90 CTX_data_pointer_set(result, nullptr, &RNA_AssetRepresentation, file->asset);
91 return CTX_RESULT_OK;
92 }
93 if (CTX_data_equals(member, "selected_assets")) {
94 const int num_files_filtered = filelist_files_ensure(sfile->files);
95
96 for (int file_index = 0; file_index < num_files_filtered; file_index++) {
97 if (filelist_entry_is_selected(sfile->files, file_index)) {
98 FileDirEntry *entry = filelist_file(sfile->files, file_index);
99 if (entry->asset) {
100 CTX_data_list_add(result, nullptr, &RNA_AssetRepresentation, entry->asset);
101 }
102 }
103 }
104
106 return CTX_RESULT_OK;
107 }
108 if (CTX_data_equals(member, "id")) {
109 const FileDirEntry *file = filelist_file(sfile->files, params->active_file);
110 if (file == nullptr) {
111 return CTX_RESULT_NO_DATA;
112 }
113
114 ID *id = filelist_file_get_id(file);
115 if (id == nullptr) {
116 return CTX_RESULT_NO_DATA;
117 }
118
120 return CTX_RESULT_OK;
121 }
122 if (CTX_data_equals(member, "selected_ids")) {
123 const int num_files_filtered = filelist_files_ensure(sfile->files);
124
125 for (int file_index = 0; file_index < num_files_filtered; file_index++) {
126 if (!filelist_entry_is_selected(sfile->files, file_index)) {
127 continue;
128 }
129 ID *id = filelist_entry_get_id(sfile->files, file_index);
130 if (!id) {
131 continue;
132 }
133
135 }
136
138 return CTX_RESULT_OK;
139 }
140
142}
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)
void CTX_data_type_set(bContextDataResult *result, ContextDataType type)
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)
#define BLI_assert(a)
Definition BLI_assert.h:46
FileSelectParams * ED_fileselect_get_active_params(const SpaceFile *sfile)
Definition filesel.cc:379
FileAssetSelectParams * ED_fileselect_get_asset_params(const SpaceFile *sfile)
Definition filesel.cc:402
bool ED_area_is_global(const ScrArea *area)
Definition area.cc:3983
#define C
Definition RandGen.cpp:29
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:1345
ID * filelist_entry_get_id(const FileList *filelist, int index)
Definition filelist.cc:1332
int filelist_files_ensure(FileList *filelist)
Definition filelist.cc:1168
bool filelist_entry_is_selected(FileList *filelist, int index)
Definition filelist.cc:2020
FileDirEntry * filelist_file(FileList *filelist, int index)
Definition filelist.cc:1285
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
AssetLibraryReference asset_library_ref
AssetRepresentationHandle * asset
Definition DNA_ID.h:414
struct FileList * files