24 items_.
append({std::move(name), std::move(fn), weight});
51 if (new_node_socket ==
nullptr) {
62 std::string idname_str = idname;
94 if (!socket_names.
add(socket.
name())) {
105 main_socket = &socket;
107 connectable_sockets.
append(&socket);
109 for (
const int i : connectable_sockets.
index_range()) {
116 const int weight = (&socket == main_socket) ? 0 : -1 - i;
146 if (!socket_names.
add(socket_template->name)) {
153 bNode &node = params.add_node(node_type);
154 bNodeSocket *new_node_socket = bke::node_find_enabled_socket(
155 node, in_out, socket_template->name);
156 if (new_node_socket != nullptr) {
158 nodeAddLink(¶ms.node_tree, ¶ms.node, ¶ms.socket, &node, new_node_socket);
struct bNodeLink * nodeAddLink(struct bNodeTree *ntree, struct bNode *fromnode, struct bNodeSocket *fromsock, struct bNode *tonode, struct bNodeSocket *tosock)
struct bNode * nodeAddNode(const struct bContext *C, struct bNodeTree *ntree, const char *idname)
#define BLI_assert_unreachable()
constexpr IndexRange index_range() const
constexpr const char * c_str() const
void append(const T &value)
IndexRange index_range() const
void add_item(std::string socket_name, SocketLinkOperation::LinkSocketFn fn, int weight=0)
const bNodeTree & node_tree() const
const bNodeSocket & other_socket() const
const bNodeType & node_type() const
eNodeSocketInOut in_out() const
void connect_available_socket(bNode &new_node, StringRef socket_name)
bNode & add_node(StringRef idname)
void update_and_connect_available_socket(bNode &new_node, StringRef socket_name)
Span< SocketDeclarationPtr > sockets(eNodeSocketInOut in_out) const
StringRefNull name() const
void make_available(bNode &node) const
virtual bool can_connect(const bNodeSocket &socket) const =0
bool is_default_link_socket() const
bNodeSocket * node_find_enabled_socket(bNode &node, const eNodeSocketInOut in_out, const StringRef name)
void search_link_ops_for_basic_node(GatherLinkSearchOpParams ¶ms)
static void search_link_ops_for_socket_templates(GatherLinkSearchOpParams ¶ms, const bNodeSocketTemplate *templates, const eNodeSocketInOut in_out)
void search_link_ops_for_declarations(GatherLinkSearchOpParams ¶ms, Span< SocketDeclarationPtr > declarations)
#define UI_MENU_ARROW_SEP
Compact definition of a node socket.
bool(* validate_link)(eNodeSocketDatatype from, eNodeSocketDatatype to)
void(* updatefunc)(struct bNodeTree *ntree, struct bNode *node)
bNodeSocketTemplate * outputs
bool declaration_is_dynamic
NodeDeclareFunction declare
bNodeSocketTemplate * inputs
NodeDeclarationHandle * fixed_declaration
struct bNodeType * typeinfo
std::function< void(LinkSearchOpParams &link_params)> LinkSocketFn