Blender V4.3
NOD_geo_menu_switch.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2024 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
7#include "DNA_node_types.h"
8
9#include "NOD_socket_items.hh"
10
11namespace blender::nodes {
12
21 static int node_type;
22 static constexpr const char *node_idname = "GeometryNodeMenuSwitch";
23 static constexpr bool has_type = false;
24 static constexpr bool has_name = true;
25 static constexpr bool has_single_identifier_str = true;
26
28 {
29 auto *storage = static_cast<NodeMenuSwitch *>(node.storage);
30 return {&storage->enum_definition.items_array,
31 &storage->enum_definition.items_num,
32 &storage->enum_definition.active_index};
33 }
34
35 static void copy_item(const NodeEnumItem &src, NodeEnumItem &dst)
36 {
37 dst = src;
38 dst.name = BLI_strdup_null(dst.name);
40 }
41
42 static void destruct_item(NodeEnumItem *item)
43 {
44 MEM_SAFE_FREE(item->name);
46 }
47
48 static void blend_write(BlendWriter *writer, const bNode &node);
49 static void blend_read_data(BlendDataReader *reader, bNode &node);
50
51 static char **get_name(NodeEnumItem &item)
52 {
53 return &item.name;
54 }
55
56 static void init_with_name(bNode &node, NodeEnumItem &item, const char *name)
57 {
58 auto *storage = static_cast<NodeMenuSwitch *>(node.storage);
59 item.identifier = storage->enum_definition.next_identifier++;
61 }
62
63 static std::string socket_identifier_for_item(const NodeEnumItem &item)
64 {
65 return "Item_" + std::to_string(item.identifier);
66 }
67};
68
69} // namespace blender::nodes
char * BLI_strdup_null(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_MALLOC
Definition string.c:45
struct NodeEnumItem NodeEnumItem
#define MEM_SAFE_FREE(v)
void set_item_name_and_make_unique(bNode &node, typename Accessor::ItemT &item, const char *value)
NodeEnumItem * items_array
NodeEnumDefinition enum_definition
static std::string socket_identifier_for_item(const NodeEnumItem &item)
static void copy_item(const NodeEnumItem &src, NodeEnumItem &dst)
static void init_with_name(bNode &node, NodeEnumItem &item, const char *name)
static socket_items::SocketItemsRef< NodeEnumItem > get_items_from_node(bNode &node)
static constexpr const char * node_idname
static void blend_read_data(BlendDataReader *reader, bNode &node)
static void destruct_item(NodeEnumItem *item)
static void blend_write(BlendWriter *writer, const bNode &node)
static char ** get_name(NodeEnumItem &item)