19#include "RNA_prototypes.hh"
48 if (zone->input_node() == active_node) {
50 active_node =
const_cast<bNode *
>(zone->output_node());
53 if (active_node->
idname != node_idname) {
74template<
typename Accessor>
78 const char *description)
82 ot->description = description;
99template<
typename Accessor>
103 const char *description)
107 ot->description = description;
114 const int index_to_remove =
RNA_int_get(op->ptr,
"index");
126template<
typename Accessor>
130 const char *description)
134 ot->description = description;
142 const typename Accessor::ItemT *active_item =
nullptr;
146 if (old_active_index >= 0 && old_active_index < *ref.
items_num) {
147 active_item = &(*ref.
items)[old_active_index];
148 dst_index = active_item ? old_active_index + 1 : *ref.
items_num;
152 if constexpr (Accessor::has_type && Accessor::has_name) {
153 std::string name = active_item ? active_item->name :
"";
154 if constexpr (Accessor::has_custom_initial_name) {
155 name = Accessor::custom_initial_name(node, name);
160 Accessor::get_socket_type(*active_item) :
165 else if constexpr (!Accessor::has_type && Accessor::has_name) {
168 else if constexpr (!Accessor::has_type && !Accessor::has_name) {
190template<
typename Accessor>
194 const char *description)
198 ot->description = description;
225 {0,
nullptr, 0,
nullptr,
nullptr},
228 RNA_def_enum(
ot->srna,
"direction", direction_items, 0,
"Direction",
"Move direction");
241 Accessor::operator_idnames::add_item.c_str(),
242 "Add item below active item");
246 ot,
"Remove Item", Accessor::operator_idnames::remove_item.c_str(),
"Remove active item");
250 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()
const bNodeTreeZone * get_zone_by_node(const int32_t node_id) const
#define ID_IS_EDITABLE(_id)
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 move_active_item(wmOperatorType *ot, const char *name, const char *idname, const char *description)
PointerRNA get_active_node_to_operate_on(bContext *C, const StringRef node_idname)
void remove_active_item(wmOperatorType *ot, const char *name, const char *idname, const char *description)
void make_common_operators()
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(bNode &node, const eNodeSocketDatatype socket_type, const char *name)
const PointerRNA PointerRNA_NULL
int RNA_int_get(PointerRNA *ptr, const char *name)
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 *))