19#include "RNA_prototypes.hh"
42 bNode *node =
nullptr;
45 node = snode->
edittree->node_by_id(
id);
60 if (zone->input_node() == node) {
62 node =
const_cast<bNode *
>(zone->output_node());
67 if (node->
idname != node_idname) {
106 "Optional identifier of the node to operate on",
111template<
typename Accessor>
115 const char *description)
119 ot->description = description;
138template<
typename Accessor>
142 const char *description)
146 ot->description = description;
153 const int index_to_remove =
RNA_int_get(op->ptr,
"index");
165template<
typename Accessor>
169 const char *description)
173 ot->description = description;
179 if (node_ptr.
data ==
nullptr) {
184 const typename Accessor::ItemT *active_item =
nullptr;
188 if (old_active_index >= 0 && old_active_index < *ref.
items_num) {
189 active_item = &(*ref.
items)[old_active_index];
190 dst_index = active_item ? old_active_index + 1 : *ref.
items_num;
194 if constexpr (Accessor::has_type && Accessor::has_name) {
195 std::string
name = active_item ? active_item->name :
"";
196 if constexpr (Accessor::has_custom_initial_name) {
197 name = Accessor::custom_initial_name(node,
name);
204 Accessor::get_socket_type(*active_item) :
210 else if constexpr (!Accessor::has_type && Accessor::has_name) {
213 else if constexpr (!Accessor::has_type && !Accessor::has_name) {
237template<
typename Accessor>
241 const char *description)
245 ot->description = description;
272 {0,
nullptr, 0,
nullptr,
nullptr},
275 RNA_def_enum(
ot->srna,
"direction", direction_items, 0,
"Direction",
"Move direction");
289 Accessor::operator_idnames::add_item.c_str(),
290 "Add item below active item");
294 ot,
"Remove Item", Accessor::operator_idnames::remove_item.c_str(),
"Remove active item");
298 ot,
"Move Item", Accessor::operator_idnames::move_item.c_str(),
"Move active item");
SpaceNode * CTX_wm_space_node(const bContext *C)
Main * CTX_data_main(const bContext *C)
void BKE_main_ensure_invariants(Main &bmain, std::optional< blender::Span< ID * > > modified_ids=std::nullopt)
void BKE_ntree_update_tag_node_property(bNodeTree *ntree, bNode *node)
#define BLI_assert_unreachable()
#define ID_IS_EDITABLE(_id)
const bNodeTreeZone * get_zone_by_node(const int32_t node_id) const
const bNodeZoneType * zone_type_by_node_type(const int node_type)
bNode * node_get_active(bNodeTree &ntree)
void remove_index(T **items, int *items_num, int *active_index, const int index, void(*destruct_item)(T *))
void move_index(T *items, const int items_num, const int from_index, const int to_index)
void remove_item_by_index(wmOperatorType *ot, const char *name, const char *idname, const char *description)
void add_node_identifier_property(wmOperatorType *ot)
void move_active_item(wmOperatorType *ot, const char *name, const char *idname, const char *description)
void remove_active_item(wmOperatorType *ot, const char *name, const char *idname, const char *description)
void make_common_operators()
PointerRNA get_active_node_to_operate_on(bContext *C, wmOperator *op, const StringRef node_idname)
void update_after_node_change(bContext *C, const PointerRNA node_ptr)
bool editable_node_active_poll(bContext *C)
void add_item(wmOperatorType *ot, const char *name, const char *idname, const char *description)
Accessor::ItemT * add_item_with_name(bNode &node, const char *name)
Accessor::ItemT * add_item(bNode &node)
Accessor::ItemT * add_item_with_socket_type_and_name(bNodeTree &ntree, bNode &node, const eNodeSocketDatatype socket_type, const char *name, std::optional< int > dimensions=std::nullopt)
const PointerRNA PointerRNA_NULL
int RNA_int_get(PointerRNA *ptr, const char *name)
bool RNA_struct_property_is_set(PointerRNA *ptr, const char *identifier)
PointerRNA RNA_pointer_create_discrete(ID *id, StructRNA *type, void *data)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, const int default_value, const int hardmin, const int hardmax, const char *ui_name, const char *ui_description, const int softmin, const int softmax)
struct bNodeTree * edittree
void WM_main_add_notifier(uint type, void *reference)
void WM_operatortype_append(void(*opfunc)(wmOperatorType *))