Blender V4.3
node_rna_define.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
5#include "NOD_rna_define.hh"
6
7namespace blender::nodes {
8
9const EnumPropertyItem *enum_items_filter(const EnumPropertyItem *original_item_array,
10 FunctionRef<bool(const EnumPropertyItem &item)> fn)
11{
12 EnumPropertyItem *item_array = nullptr;
13 int items_len = 0;
14
15 for (const EnumPropertyItem *item = original_item_array; item->identifier != nullptr; item++) {
16 if (fn(*item)) {
17 RNA_enum_item_add(&item_array, &items_len, item);
18 }
19 }
20
21 RNA_enum_item_end(&item_array, &items_len);
22 return item_array;
23}
24
26 const char *identifier,
27 const char *ui_name,
28 const char *ui_description,
29 const EnumPropertyItem *static_items,
30 const EnumRNAAccessors accessors,
31 std::optional<int> default_value,
32 const EnumPropertyItemFunc item_func,
33 const bool allow_animation)
34{
35 PropertyRNA *prop = RNA_def_property(srna, identifier, PROP_ENUM, PROP_NONE);
36 RNA_def_property_enum_funcs_runtime(prop, accessors.getter, accessors.setter, item_func);
37 RNA_def_property_enum_items(prop, static_items);
38 if (default_value.has_value()) {
39 RNA_def_property_enum_default(prop, *default_value);
40 }
41 RNA_def_property_ui_text(prop, ui_name, ui_description);
42 if (allow_animation) {
44 }
45 else {
48 }
50 return prop;
51}
52
53} // namespace blender::nodes
void rna_Node_socket_update(Main *bmain, Scene *scene, PointerRNA *ptr)
void rna_Node_update(Main *bmain, Scene *scene, PointerRNA *ptr)
@ PROP_ENUM
Definition RNA_types.hh:69
@ PROP_ANIMATABLE
Definition RNA_types.hh:220
const EnumPropertyItem *(*)(bContext *C, PointerRNA *ptr, PropertyRNA *prop, bool *r_free) EnumPropertyItemFunc
Definition RNA_types.hh:608
@ PROP_NONE
Definition RNA_types.hh:136
#define NC_NODE
Definition WM_types.hh:361
#define NA_EDITED
Definition WM_types.hh:550
PropertyRNA * RNA_def_node_enum(StructRNA *srna, const char *identifier, const char *ui_name, const char *ui_description, const EnumPropertyItem *static_items, const EnumRNAAccessors accessors, std::optional< int > default_value, const EnumPropertyItemFunc item_func, const bool allow_animation)
const EnumPropertyItem * enum_items_filter(const EnumPropertyItem *original_item_array, FunctionRef< bool(const EnumPropertyItem &item)> fn)
void RNA_def_property_enum_default(PropertyRNA *prop, int value)
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
void RNA_def_property_update_runtime(PropertyRNA *prop, RNAPropertyUpdateFunc func)
void RNA_def_property_enum_funcs_runtime(PropertyRNA *prop, EnumPropertyGetFunc getfunc, EnumPropertySetFunc setfunc, EnumPropertyItemFunc itemfunc)
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
void RNA_def_property_update_notifier(PropertyRNA *prop, const int noteflag)
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
void RNA_enum_item_end(EnumPropertyItem **items, int *totitem)
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item)
const char * identifier
Definition RNA_types.hh:506