Blender V5.0
NOD_rna_define.hh
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#pragma once
6
7#include <optional>
8
9#include "BLI_function_ref.hh"
10
11#include "DNA_node_types.h"
12
13#include "RNA_define.hh"
14
15#include "WM_types.hh" /* For notifier defines */
16
17void rna_Node_update(Main *bmain, Scene *scene, PointerRNA *ptr);
22 const bNodeTree *ntree, const eNodeSocketDatatype socket_type, bool *r_free);
23
24namespace blender::nodes {
25
35
40#define NOD_inline_enum_accessors(member) \
41 EnumRNAAccessors( \
42 [](PointerRNA *ptr, PropertyRNA * /*prop*/) -> int { \
43 const bNode &node = *static_cast<const bNode *>(ptr->data); \
44 return node.member; \
45 }, \
46 [](PointerRNA *ptr, PropertyRNA * /*prop*/, const int value) { \
47 bNode &node = *static_cast<bNode *>(ptr->data); \
48 node.member = value; \
49 })
50
55#define NOD_storage_enum_accessors(member) \
56 EnumRNAAccessors( \
57 [](PointerRNA *ptr, PropertyRNA * /*prop*/) -> int { \
58 const bNode &node = *static_cast<const bNode *>(ptr->data); \
59 return node_storage(node).member; \
60 }, \
61 [](PointerRNA *ptr, PropertyRNA * /*prop*/, const int value) { \
62 bNode &node = *static_cast<bNode *>(ptr->data); \
63 node_storage(node).member = value; \
64 })
65
75
80#define NOD_inline_boolean_accessors(member, flag) \
81 BooleanRNAAccessors( \
82 [](PointerRNA *ptr, PropertyRNA * /*prop*/) -> bool { \
83 const bNode &node = *static_cast<const bNode *>(ptr->data); \
84 return node.member & (flag); \
85 }, \
86 [](PointerRNA *ptr, PropertyRNA * /*prop*/, const bool value) { \
87 bNode &node = *static_cast<bNode *>(ptr->data); \
88 SET_FLAG_FROM_TEST(node.member, value, (flag)); \
89 })
90
95#define NOD_storage_boolean_accessors(member, flag) \
96 BooleanRNAAccessors( \
97 [](PointerRNA *ptr, PropertyRNA * /*prop*/) -> bool { \
98 const bNode &node = *static_cast<const bNode *>(ptr->data); \
99 return node_storage(node).member & (flag); \
100 }, \
101 [](PointerRNA *ptr, PropertyRNA * /*prop*/, const bool value) { \
102 bNode &node = *static_cast<bNode *>(ptr->data); \
103 SET_FLAG_FROM_TEST(node_storage(node).member, value, (flag)); \
104 })
105
106const EnumPropertyItem *enum_items_filter(const EnumPropertyItem *original_item_array,
107 FunctionRef<bool(const EnumPropertyItem &item)> fn);
108
110 const char *identifier,
111 const char *ui_name,
112 const char *ui_description,
113 const EnumPropertyItem *static_items,
114 const EnumRNAAccessors accessors,
115 std::optional<int> default_value = std::nullopt,
116 const EnumPropertyItemFunc item_func = nullptr,
117 bool allow_animation = false);
118
120 const char *identifier,
121 const char *ui_name,
122 const char *ui_description,
123 const BooleanRNAAccessors accessors,
124 std::optional<bool> default_value = std::nullopt,
125 bool allow_animation = false);
126
127} // namespace blender::nodes
eNodeSocketDatatype
void rna_Node_socket_update(Main *bmain, Scene *scene, PointerRNA *ptr)
const EnumPropertyItem * rna_NodeSocket_structure_type_item_filter(const bNodeTree *ntree, const eNodeSocketDatatype socket_type, bool *r_free)
void rna_Node_Viewer_shortcut_node_set(PointerRNA *ptr, PropertyRNA *prop, int value)
void rna_Node_update_relations(Main *bmain, Scene *scne, PointerRNA *ptr)
void rna_Node_update(Main *bmain, Scene *scene, PointerRNA *ptr)
int(*)(PointerRNA *ptr, PropertyRNA *prop) EnumPropertyGetFunc
Definition RNA_types.hh:821
const EnumPropertyItem *(*)(bContext *C, PointerRNA *ptr, PropertyRNA *prop, bool *r_free) EnumPropertyItemFunc
Definition RNA_types.hh:830
void(*)(PointerRNA *ptr, PropertyRNA *prop, int value) EnumPropertySetFunc
Definition RNA_types.hh:822
bool(*)(PointerRNA *ptr, PropertyRNA *prop) BooleanPropertyGetFunc
Definition RNA_types.hh:688
void(*)(PointerRNA *ptr, PropertyRNA *prop, bool value) BooleanPropertySetFunc
Definition RNA_types.hh:689
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)
PropertyRNA * RNA_def_node_boolean(StructRNA *srna, const char *identifier, const char *ui_name, const char *ui_description, const BooleanRNAAccessors accessors, std::optional< bool > default_value, bool allow_animation)
const EnumPropertyItem * enum_items_filter(const EnumPropertyItem *original_item_array, FunctionRef< bool(const EnumPropertyItem &item)> fn)
BooleanRNAAccessors(BooleanPropertyGetFunc getter, BooleanPropertySetFunc setter)
EnumRNAAccessors(EnumPropertyGetFunc getter, EnumPropertySetFunc setter)
PointerRNA * ptr
Definition wm_files.cc:4238