Blender  V3.3
rna_asset.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
7 #include <stdlib.h>
8 
9 #include "RNA_define.h"
10 #include "RNA_enum_types.h"
11 
12 #include "DNA_asset_types.h"
13 #include "DNA_defs.h"
14 #include "DNA_space_types.h"
15 
16 #include "rna_internal.h"
17 
18 #ifdef RNA_RUNTIME
19 
20 # include "BKE_asset.h"
21 # include "BKE_asset_library.h"
22 # include "BKE_context.h"
23 # include "BKE_idprop.h"
24 
25 # include "BLI_listbase.h"
26 # include "BLI_uuid.h"
27 
28 # include "ED_asset.h"
29 # include "ED_fileselect.h"
30 
31 # include "RNA_access.h"
32 
33 static bool rna_AssetMetaData_editable_from_owner_id(const ID *owner_id,
34  const AssetMetaData *asset_data,
35  const char **r_info)
36 {
37  if (owner_id && asset_data && (owner_id->asset_data == asset_data)) {
38  return true;
39  }
40 
41  if (r_info) {
42  *r_info =
43  "Asset metadata from external asset libraries can't be edited, only assets stored in the "
44  "current file can";
45  }
46  return false;
47 }
48 
49 int rna_AssetMetaData_editable(PointerRNA *ptr, const char **r_info)
50 {
51  AssetMetaData *asset_data = ptr->data;
52 
53  return rna_AssetMetaData_editable_from_owner_id(ptr->owner_id, asset_data, r_info) ?
55  0;
56 }
57 
58 static int rna_AssetTag_editable(PointerRNA *ptr, const char **r_info)
59 {
60  AssetTag *asset_tag = ptr->data;
61  ID *owner_id = ptr->owner_id;
62  if (owner_id && owner_id->asset_data) {
63  BLI_assert_msg(BLI_findindex(&owner_id->asset_data->tags, asset_tag) != -1,
64  "The owner of the asset tag pointer is not the asset ID containing the tag");
65  UNUSED_VARS_NDEBUG(asset_tag);
66  }
67 
68  return rna_AssetMetaData_editable_from_owner_id(ptr->owner_id, owner_id->asset_data, r_info) ?
70  0;
71 }
72 
73 static AssetTag *rna_AssetMetaData_tag_new(
74  ID *id, AssetMetaData *asset_data, ReportList *reports, const char *name, bool skip_if_exists)
75 {
76  const char *disabled_info = NULL;
77  if (!rna_AssetMetaData_editable_from_owner_id(id, asset_data, &disabled_info)) {
78  BKE_report(reports, RPT_WARNING, disabled_info);
79  return NULL;
80  }
81 
82  AssetTag *tag = NULL;
83 
84  if (skip_if_exists) {
86 
87  if (!result.is_new) {
89  reports, RPT_WARNING, "Tag '%s' already present for given asset", result.tag->name);
90  /* Report, but still return valid item. */
91  }
92  tag = result.tag;
93  }
94  else {
95  tag = BKE_asset_metadata_tag_add(asset_data, name);
96  }
97 
98  return tag;
99 }
100 
101 static void rna_AssetMetaData_tag_remove(ID *id,
102  AssetMetaData *asset_data,
103  ReportList *reports,
104  PointerRNA *tag_ptr)
105 {
106  const char *disabled_info = NULL;
107  if (!rna_AssetMetaData_editable_from_owner_id(id, asset_data, &disabled_info)) {
108  BKE_report(reports, RPT_WARNING, disabled_info);
109  return;
110  }
111 
112  AssetTag *tag = tag_ptr->data;
113  if (BLI_findindex(&asset_data->tags, tag) == -1) {
114  BKE_reportf(reports, RPT_ERROR, "Tag '%s' not found in given asset", tag->name);
115  return;
116  }
117 
118  BKE_asset_metadata_tag_remove(asset_data, tag);
119  RNA_POINTER_INVALIDATE(tag_ptr);
120 }
121 
122 static IDProperty **rna_AssetMetaData_idprops(PointerRNA *ptr)
123 {
124  AssetMetaData *asset_data = ptr->data;
125  return &asset_data->properties;
126 }
127 
128 static void rna_AssetMetaData_author_get(PointerRNA *ptr, char *value)
129 {
130  AssetMetaData *asset_data = ptr->data;
131 
132  if (asset_data->author) {
133  strcpy(value, asset_data->author);
134  }
135  else {
136  value[0] = '\0';
137  }
138 }
139 
140 static int rna_AssetMetaData_author_length(PointerRNA *ptr)
141 {
142  AssetMetaData *asset_data = ptr->data;
143  return asset_data->author ? strlen(asset_data->author) : 0;
144 }
145 
146 static void rna_AssetMetaData_author_set(PointerRNA *ptr, const char *value)
147 {
148  AssetMetaData *asset_data = ptr->data;
149 
150  if (asset_data->author) {
151  MEM_freeN(asset_data->author);
152  }
153 
154  if (value[0]) {
155  asset_data->author = BLI_strdup(value);
156  }
157  else {
158  asset_data->author = NULL;
159  }
160 }
161 
162 static void rna_AssetMetaData_description_get(PointerRNA *ptr, char *value)
163 {
164  AssetMetaData *asset_data = ptr->data;
165 
166  if (asset_data->description) {
167  strcpy(value, asset_data->description);
168  }
169  else {
170  value[0] = '\0';
171  }
172 }
173 
174 static int rna_AssetMetaData_description_length(PointerRNA *ptr)
175 {
176  AssetMetaData *asset_data = ptr->data;
177  return asset_data->description ? strlen(asset_data->description) : 0;
178 }
179 
180 static void rna_AssetMetaData_description_set(PointerRNA *ptr, const char *value)
181 {
182  AssetMetaData *asset_data = ptr->data;
183 
184  if (asset_data->description) {
185  MEM_freeN(asset_data->description);
186  }
187 
188  if (value[0]) {
189  asset_data->description = BLI_strdup(value);
190  }
191  else {
192  asset_data->description = NULL;
193  }
194 }
195 
196 static void rna_AssetMetaData_active_tag_range(
197  PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax)
198 {
199  const AssetMetaData *asset_data = ptr->data;
200  *min = *softmin = 0;
201  *max = *softmax = MAX2(asset_data->tot_tags - 1, 0);
202 }
203 
204 static void rna_AssetMetaData_catalog_id_get(PointerRNA *ptr, char *value)
205 {
206  const AssetMetaData *asset_data = ptr->data;
207  BLI_uuid_format(value, asset_data->catalog_id);
208 }
209 
210 static int rna_AssetMetaData_catalog_id_length(PointerRNA *UNUSED(ptr))
211 {
212  return UUID_STRING_LEN - 1;
213 }
214 
215 static void rna_AssetMetaData_catalog_id_set(PointerRNA *ptr, const char *value)
216 {
217  AssetMetaData *asset_data = ptr->data;
218  bUUID new_uuid;
219 
220  if (value[0] == '\0') {
222  return;
223  }
224 
225  if (!BLI_uuid_parse_string(&new_uuid, value)) {
226  /* TODO(@sybren): raise ValueError exception once that's possible from an RNA setter. */
227  printf("UUID %s not formatted correctly, ignoring new value\n", value);
228  return;
229  }
230 
231  /* This just sets the new UUID and clears the catalog simple name. The actual
232  * catalog simple name will be updated by some update function, as it
233  * needs the asset library from the context. */
234  /* TODO(Sybren): write that update function. */
235  BKE_asset_metadata_catalog_id_set(asset_data, new_uuid, "");
236 }
237 
238 void rna_AssetMetaData_catalog_id_update(struct bContext *C, struct PointerRNA *ptr)
239 {
240  SpaceFile *sfile = CTX_wm_space_file(C);
241  if (sfile == NULL) {
242  /* Until there is a proper Asset Service available, it's only possible to get the asset library
243  * from within the asset browser context. */
244  return;
245  }
246 
248  if (asset_library == NULL) {
249  /* The SpaceFile may not be an asset browser but a regular file browser. */
250  return;
251  }
252 
253  AssetMetaData *asset_data = ptr->data;
254  BKE_asset_library_refresh_catalog_simplename(asset_library, asset_data);
255 }
256 
257 static PointerRNA rna_AssetHandle_file_data_get(PointerRNA *ptr)
258 {
259  AssetHandle *asset_handle = ptr->data;
260  /* Have to cast away const, but the file entry API doesn't allow modifications anyway. */
262  ptr, &RNA_FileSelectEntry, (FileDirEntry *)asset_handle->file_data);
263 }
264 
265 static void rna_AssetHandle_file_data_set(PointerRNA *ptr,
266  PointerRNA value,
267  struct ReportList *UNUSED(reports))
268 {
269  AssetHandle *asset_handle = ptr->data;
270  asset_handle->file_data = value.data;
271 }
272 
273 static void rna_AssetHandle_get_full_library_path(
274  // AssetHandle *asset,
275  bContext *C,
276  FileDirEntry *asset_file,
278  char r_result[/*FILE_MAX_LIBEXTRA*/])
279 {
280  AssetHandle asset = {.file_data = asset_file};
281  ED_asset_handle_get_full_library_path(C, library, &asset, r_result);
282 }
283 
284 static PointerRNA rna_AssetHandle_local_id_get(PointerRNA *ptr)
285 {
286  const AssetHandle *asset = ptr->data;
287  ID *id = ED_asset_handle_get_local_id(asset);
288  return rna_pointer_inherit_refine(ptr, &RNA_ID, id);
289 }
290 
293  PropertyRNA *UNUSED(prop),
294  bool *r_free)
295 {
297  if (!items) {
298  *r_free = false;
299  }
300 
301  *r_free = true;
302  return items;
303 }
304 
305 #else
306 
307 static void rna_def_asset_tag(BlenderRNA *brna)
308 {
309  StructRNA *srna;
310  PropertyRNA *prop;
311 
312  srna = RNA_def_struct(brna, "AssetTag", NULL);
313  RNA_def_struct_ui_text(srna, "Asset Tag", "User defined tag (name token)");
314 
315  prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
316  RNA_def_property_editable_func(prop, "rna_AssetTag_editable");
318  RNA_def_property_ui_text(prop, "Name", "The identifier that makes up this tag");
319  RNA_def_struct_name_property(srna, prop);
320 }
321 
323 {
324  StructRNA *srna;
325 
326  FunctionRNA *func;
327  PropertyRNA *parm;
328 
329  RNA_def_property_srna(cprop, "AssetTags");
330  srna = RNA_def_struct(brna, "AssetTags", NULL);
331  RNA_def_struct_sdna(srna, "AssetMetaData");
332  RNA_def_struct_ui_text(srna, "Asset Tags", "Collection of custom asset tags");
333 
334  /* Tag collection */
335  func = RNA_def_function(srna, "new", "rna_AssetMetaData_tag_new");
336  RNA_def_function_ui_description(func, "Add a new tag to this asset");
338  parm = RNA_def_string(func, "name", NULL, MAX_NAME, "Name", "");
340  parm = RNA_def_boolean(func,
341  "skip_if_exists",
342  false,
343  "Skip if Exists",
344  "Do not add a new tag if one of the same type already exists");
345  /* return type */
346  parm = RNA_def_pointer(func, "tag", "AssetTag", "", "New tag");
347  RNA_def_function_return(func, parm);
348 
349  func = RNA_def_function(srna, "remove", "rna_AssetMetaData_tag_remove");
350  RNA_def_function_ui_description(func, "Remove an existing tag from this asset");
352  /* tag to remove */
353  parm = RNA_def_pointer(func, "tag", "AssetTag", "", "Removed tag");
356 }
357 
358 static void rna_def_asset_data(BlenderRNA *brna)
359 {
360  StructRNA *srna;
361  PropertyRNA *prop;
362 
363  srna = RNA_def_struct(brna, "AssetMetaData", NULL);
364  RNA_def_struct_ui_text(srna, "Asset Data", "Additional data stored for an asset data-block");
365  // RNA_def_struct_ui_icon(srna, ICON_ASSET); /* TODO: Icon doesn't exist! */
366  /* The struct has custom properties, but no pointer properties to other IDs! */
367  RNA_def_struct_idprops_func(srna, "rna_AssetMetaData_idprops");
369 
370  prop = RNA_def_property(srna, "author", PROP_STRING, PROP_NONE);
371  RNA_def_property_editable_func(prop, "rna_AssetMetaData_editable");
373  "rna_AssetMetaData_author_get",
374  "rna_AssetMetaData_author_length",
375  "rna_AssetMetaData_author_set");
376  RNA_def_property_ui_text(prop, "Author", "Name of the creator of the asset");
377 
378  prop = RNA_def_property(srna, "description", PROP_STRING, PROP_NONE);
379  RNA_def_property_editable_func(prop, "rna_AssetMetaData_editable");
381  "rna_AssetMetaData_description_get",
382  "rna_AssetMetaData_description_length",
383  "rna_AssetMetaData_description_set");
385  prop, "Description", "A description of the asset to be displayed for the user");
386 
387  prop = RNA_def_property(srna, "tags", PROP_COLLECTION, PROP_NONE);
388  RNA_def_property_struct_type(prop, "AssetTag");
389  RNA_def_property_editable_func(prop, "rna_AssetMetaData_editable");
391  "Tags",
392  "Custom tags (name tokens) for the asset, used for filtering and "
393  "general asset management");
394  rna_def_asset_tags_api(brna, prop);
395 
396  prop = RNA_def_property(srna, "active_tag", PROP_INT, PROP_NONE);
397  RNA_def_property_int_funcs(prop, NULL, NULL, "rna_AssetMetaData_active_tag_range");
398  RNA_def_property_ui_text(prop, "Active Tag", "Index of the tag set for editing");
399 
400  prop = RNA_def_property(srna, "catalog_id", PROP_STRING, PROP_NONE);
402  "rna_AssetMetaData_catalog_id_get",
403  "rna_AssetMetaData_catalog_id_length",
404  "rna_AssetMetaData_catalog_id_set");
406  RNA_def_property_update(prop, 0, "rna_AssetMetaData_catalog_id_update");
408  "Catalog UUID",
409  "Identifier for the asset's catalog, used by Blender to look up the "
410  "asset's catalog path. Must be a UUID according to RFC4122");
411 
412  prop = RNA_def_property(srna, "catalog_simple_name", PROP_STRING, PROP_NONE);
415  "Catalog Simple Name",
416  "Simple name of the asset's catalog, for debugging and "
417  "data recovery purposes");
418 }
419 
421 {
422  FunctionRNA *func;
423  PropertyRNA *parm;
424 
425  func = RNA_def_function(srna, "get_full_library_path", "rna_AssetHandle_get_full_library_path");
427  /* TODO temporarily static function, for until .py can receive the asset handle from context
428  * properly. `asset_file_handle` should go away too then. */
430  parm = RNA_def_pointer(func, "asset_file_handle", "FileSelectEntry", "", "");
432  parm = RNA_def_pointer(func,
433  "asset_library_ref",
434  "AssetLibraryReference",
435  "",
436  "The asset library containing the given asset, only valid if the asset "
437  "library is external (i.e. not the \"Current File\" one");
439  parm = RNA_def_string(func, "result", NULL, FILE_MAX_LIBEXTRA, "result", "");
441  RNA_def_function_output(func, parm);
442 }
443 
445 {
446  StructRNA *srna;
447  PropertyRNA *prop;
448 
449  srna = RNA_def_struct(brna, "AssetHandle", "PropertyGroup");
450  RNA_def_struct_ui_text(srna, "Asset Handle", "Reference to some asset");
451 
452  /* TODO It is super ugly to expose the file data here. We have to do it though so the asset view
453  * template can populate a RNA collection with asset-handles, which are just file entries
454  * currently. A proper design is being worked on. */
455  prop = RNA_def_property(srna, "file_data", PROP_POINTER, PROP_NONE);
457  RNA_def_property_struct_type(prop, "FileSelectEntry");
459  prop, "rna_AssetHandle_file_data_get", "rna_AssetHandle_file_data_set", NULL, NULL);
461  prop, "File Entry", "TEMPORARY, DO NOT USE - File data used to refer to the asset");
462 
463  prop = RNA_def_property(srna, "local_id", PROP_POINTER, PROP_NONE);
464  RNA_def_property_struct_type(prop, "ID");
465  RNA_def_property_pointer_funcs(prop, "rna_AssetHandle_local_id_get", NULL, NULL, NULL);
467  "",
468  "The local data-block this asset represents; only valid if that is a "
469  "data-block in this file");
471 
473 }
474 
476 {
477  StructRNA *srna = RNA_def_struct(brna, "AssetLibraryReference", NULL);
479  srna, "Asset Library Reference", "Identifier to refer to the asset library");
480 }
481 
483  const char *get,
484  const char *set)
485 {
486  PropertyRNA *prop = RNA_def_property(srna, "asset_library_ref", PROP_ENUM, PROP_NONE);
488  RNA_def_property_enum_funcs(prop, get, set, "rna_asset_library_reference_itemf");
489 
490  return prop;
491 }
492 
494 {
496 
497  rna_def_asset_tag(brna);
498  rna_def_asset_data(brna);
500  rna_def_asset_handle(brna);
501 
503 }
504 
505 #endif
void BKE_asset_metadata_tag_remove(struct AssetMetaData *asset_data, struct AssetTag *tag)
Definition: asset.cc:90
void BKE_asset_metadata_catalog_id_set(struct AssetMetaData *asset_data, bUUID catalog_id, const char *catalog_simple_name)
void BKE_asset_metadata_catalog_id_clear(struct AssetMetaData *asset_data)
Definition: asset.cc:104
struct AssetTagEnsureResult BKE_asset_metadata_tag_ensure(struct AssetMetaData *asset_data, const char *name)
Definition: asset.cc:67
struct AssetTag * BKE_asset_metadata_tag_add(struct AssetMetaData *asset_data, const char *name)
Definition: asset.cc:60
struct AssetLibrary AssetLibrary
void BKE_asset_library_refresh_catalog_simplename(struct AssetLibrary *asset_library, struct AssetMetaData *asset_data)
struct SpaceFile * CTX_wm_space_file(const bContext *C)
Definition: context.c:842
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
void BKE_report(ReportList *reports, eReportType type, const char *message)
Definition: report.c:83
#define BLI_assert_msg(a, msg)
Definition: BLI_assert.h:53
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL() ATTR_MALLOC
Definition: string.c:42
#define UNUSED_VARS_NDEBUG(...)
#define UNUSED(x)
#define MAX2(a, b)
bool BLI_uuid_parse_string(bUUID *uuid, const char *buffer) ATTR_NONNULL()
Definition: uuid.cc:103
void BLI_uuid_format(char *buffer, bUUID uuid) ATTR_NONNULL()
Definition: uuid.cc:86
#define MAX_NAME
Definition: DNA_defs.h:48
#define FILE_MAX_LIBEXTRA
#define UUID_STRING_LEN
struct ID * ED_asset_handle_get_local_id(const struct AssetHandle *asset)
void ED_asset_handle_get_full_library_path(const struct bContext *C, const struct AssetLibraryReference *asset_library_ref, const struct AssetHandle *asset, char r_full_lib_path[])
const struct EnumPropertyItem * ED_asset_library_reference_to_rna_enum_itemf(bool include_local_library)
struct AssetLibrary * ED_fileselect_active_asset_library_get(const struct SpaceFile *sfile)
#define RNA_POINTER_INVALIDATE(ptr)
Definition: RNA_access.h:744
@ PARM_RNAPTR
Definition: RNA_types.h:354
@ PARM_REQUIRED
Definition: RNA_types.h:352
@ FUNC_USE_REPORTS
Definition: RNA_types.h:663
@ FUNC_NO_SELF
Definition: RNA_types.h:656
@ FUNC_USE_CONTEXT
Definition: RNA_types.h:662
@ FUNC_USE_SELF_ID
Definition: RNA_types.h:650
@ STRUCT_NO_DATABLOCK_IDPROPERTIES
Definition: RNA_types.h:717
@ PROP_ENUM
Definition: RNA_types.h:63
@ PROP_INT
Definition: RNA_types.h:60
@ PROP_STRING
Definition: RNA_types.h:62
@ PROP_POINTER
Definition: RNA_types.h:64
@ PROP_COLLECTION
Definition: RNA_types.h:65
@ PROP_THICK_WRAP
Definition: RNA_types.h:285
@ PROP_CONTEXT_UPDATE
Definition: RNA_types.h:269
@ PROP_EDITABLE
Definition: RNA_types.h:189
@ PROP_NEVER_NULL
Definition: RNA_types.h:239
@ PROP_HIDDEN
Definition: RNA_types.h:216
@ PROP_NONE
Definition: RNA_types.h:126
#define C
Definition: RandGen.cpp:25
void(* MEM_freeN)(void *vmemh)
Definition: mallocn.c:27
PointerRNA rna_pointer_inherit_refine(PointerRNA *ptr, StructRNA *type, void *data)
Definition: rna_access.c:186
static void rna_def_asset_data(BlenderRNA *brna)
Definition: rna_asset.c:358
static void rna_def_asset_handle_api(StructRNA *srna)
Definition: rna_asset.c:420
static void rna_def_asset_tag(BlenderRNA *brna)
Definition: rna_asset.c:307
static void rna_def_asset_library_reference(BlenderRNA *brna)
Definition: rna_asset.c:475
PropertyRNA * rna_def_asset_library_reference_common(struct StructRNA *srna, const char *get, const char *set)
Definition: rna_asset.c:482
static void rna_def_asset_handle(BlenderRNA *brna)
Definition: rna_asset.c:444
static void rna_def_asset_tags_api(BlenderRNA *brna, PropertyRNA *cprop)
Definition: rna_asset.c:322
void RNA_def_asset(BlenderRNA *brna)
Definition: rna_asset.c:493
void RNA_define_animate_sdna(bool animate)
Definition: rna_define.c:748
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, bool default_value, const char *ui_name, const char *ui_description)
Definition: rna_define.c:3493
PropertyRNA * RNA_def_pointer(StructOrFunctionRNA *cont_, const char *identifier, const char *type, const char *ui_name, const char *ui_description)
Definition: rna_define.c:4170
void RNA_def_struct_flag(StructRNA *srna, int flag)
Definition: rna_define.c:1133
void RNA_def_parameter_clear_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
Definition: rna_define.c:1526
void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const char *length, const char *set)
Definition: rna_define.c:3285
void RNA_def_function_return(FunctionRNA *func, PropertyRNA *ret)
Definition: rna_define.c:4312
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
Definition: rna_define.c:1645
FunctionRNA * RNA_def_function(StructRNA *srna, const char *identifier, const char *call)
Definition: rna_define.c:4273
void RNA_def_property_srna(PropertyRNA *prop, const char *type)
Definition: rna_define.c:3474
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
Definition: rna_define.c:1237
void RNA_def_function_output(FunctionRNA *UNUSED(func), PropertyRNA *ret)
Definition: rna_define.c:4337
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
Definition: rna_define.c:1872
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
Definition: rna_define.c:1048
void RNA_def_property_string_maxlength(PropertyRNA *prop, int maxlength)
Definition: rna_define.c:1920
void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
Definition: rna_define.c:1772
void RNA_def_function_ui_description(FunctionRNA *func, const char *description)
Definition: rna_define.c:4347
void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *func)
Definition: rna_define.c:2900
void RNA_def_property_enum_funcs(PropertyRNA *prop, const char *get, const char *set, const char *item)
Definition: rna_define.c:3224
void RNA_def_property_editable_func(PropertyRNA *prop, const char *editable)
Definition: rna_define.c:2855
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
Definition: rna_define.c:1257
void RNA_def_struct_name_property(struct StructRNA *srna, struct PropertyRNA *prop)
Definition: rna_define.c:1103
void RNA_def_function_flag(FunctionRNA *func, int flag)
Definition: rna_define.c:4342
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
Definition: rna_define.c:1495
void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set, const char *type_fn, const char *poll)
Definition: rna_define.c:3385
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
Definition: rna_define.c:1028
void RNA_def_property_int_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
Definition: rna_define.c:3028
PropertyRNA * RNA_def_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, int maxlen, const char *ui_name, const char *ui_description)
Definition: rna_define.c:3687
void RNA_def_struct_idprops_func(StructRNA *srna, const char *idproperties)
Definition: rna_define.c:1160
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
Definition: rna_define.c:1490
void RNA_def_parameter_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
Definition: rna_define.c:1518
int rna_AssetMetaData_editable(struct PointerRNA *ptr, const char **r_info)
const EnumPropertyItem * rna_asset_library_reference_itemf(struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA *prop, bool *r_free)
const EnumPropertyItem DummyRNA_NULL_items[]
Definition: rna_rna.c:26
#define min(a, b)
Definition: sort.c:35
const struct FileDirEntry * file_data
The meta-data of an asset. By creating and giving this for a data-block (ID.asset_data),...
struct IDProperty * properties
struct bUUID catalog_id
struct AssetTag * tag
Definition: BKE_asset.h:40
User defined tag. Currently only used by assets, could be used more often at some point....
char name[64]
Definition: DNA_ID.h:368
struct AssetMetaData * asset_data
Definition: DNA_ID.h:375
void * data
Definition: RNA_types.h:38
struct ID * owner_id
Definition: RNA_types.h:36
Universally Unique Identifier according to RFC4122.
float max
static FT_Library library
PointerRNA * ptr
Definition: wm_files.c:3480