Blender V5.0
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
17
21 static int node_type;
22 static constexpr StringRefNull node_idname = "GeometryNodeMenuSwitch";
23 static constexpr bool has_type = false;
24 static constexpr bool has_name = true;
26 static constexpr StringRefNull add_item = "NODE_OT_enum_definition_item_add";
27 static constexpr StringRefNull remove_item = "NODE_OT_enum_definition_item_remove";
28 static constexpr StringRefNull move_item = "NODE_OT_enum_definition_item_move";
29 };
30 struct ui_idnames {
31 static constexpr StringRefNull list = "NODE_UL_enum_definition_items";
32 };
33 struct rna_names {
34 static constexpr StringRefNull items = "enum_items";
35 static constexpr StringRefNull active_index = "active_index";
36 };
37
39 {
40 auto *storage = static_cast<NodeMenuSwitch *>(node.storage);
41 return {&storage->enum_definition.items_array,
42 &storage->enum_definition.items_num,
43 &storage->enum_definition.active_index};
44 }
45
46 static void copy_item(const NodeEnumItem &src, NodeEnumItem &dst)
47 {
48 dst = src;
49 dst.name = BLI_strdup_null(dst.name);
51 }
52
53 static void destruct_item(NodeEnumItem *item)
54 {
55 MEM_SAFE_FREE(item->name);
57 }
58
59 static void blend_write_item(BlendWriter *writer, const ItemT &item);
60 static void blend_read_data_item(BlendDataReader *reader, ItemT &item);
61
62 static char **get_name(NodeEnumItem &item)
63 {
64 return &item.name;
65 }
66
67 static void init_with_name(bNode &node, NodeEnumItem &item, const char *name)
68 {
69 auto *storage = static_cast<NodeMenuSwitch *>(node.storage);
70 item.identifier = storage->enum_definition.next_identifier++;
72 }
73
74 static std::string socket_identifier_for_item(const NodeEnumItem &item)
75 {
76 return "Item_" + std::to_string(item.identifier);
77 }
78};
79
80} // namespace blender::nodes
char * BLI_strdup_null(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_MALLOC
Definition string.cc:46
#define MEM_SAFE_FREE(v)
void set_item_name_and_make_unique(bNode &node, typename Accessor::ItemT &item, const char *value)
const char * name
void * storage
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 void blend_write_item(BlendWriter *writer, const ItemT &item)
static void destruct_item(NodeEnumItem *item)
static constexpr StringRefNull node_idname
static char ** get_name(NodeEnumItem &item)
static void blend_read_data_item(BlendDataReader *reader, ItemT &item)