Blender
V5.0
source
blender
nodes
geometry
include
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
11
namespace
blender::nodes
{
12
17
18
struct
MenuSwitchItemsAccessor
:
public
socket_items::SocketItemsAccessorDefaults
{
19
using
ItemT
=
NodeEnumItem
;
20
static
StructRNA
*
item_srna
;
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
;
25
struct
operator_idnames
{
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
38
static
socket_items::SocketItemsRef<NodeEnumItem>
get_items_from_node
(
bNode
&node)
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
);
50
dst.
description
=
BLI_strdup_null
(dst.
description
);
51
}
52
53
static
void
destruct_item
(
NodeEnumItem
*item)
54
{
55
MEM_SAFE_FREE
(item->
name
);
56
MEM_SAFE_FREE
(item->
description
);
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++;
71
socket_items::set_item_name_and_make_unique<MenuSwitchItemsAccessor>
(node, item,
name
);
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
BLI_strdup_null
char * BLI_strdup_null(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_MALLOC
Definition
string.cc:46
DNA_node_types.h
MEM_SAFE_FREE
#define MEM_SAFE_FREE(v)
Definition
MEM_guardedalloc.h:197
NOD_socket_items.hh
blender::StringRefNull
Definition
BLI_string_ref.hh:132
blender::nodes::socket_items::set_item_name_and_make_unique
void set_item_name_and_make_unique(bNode &node, typename Accessor::ItemT &item, const char *value)
Definition
NOD_socket_items.hh:143
blender::nodes
Definition
BKE_compute_contexts.hh:29
name
const char * name
Definition
python_compat.hh:32
BlendDataReader
Definition
readfile.cc:577
BlendWriter
Definition
writefile.cc:511
NodeEnumItem
Definition
DNA_node_types.h:1885
NodeEnumItem::identifier
int32_t identifier
Definition
DNA_node_types.h:1889
NodeEnumItem::name
char * name
Definition
DNA_node_types.h:1886
NodeEnumItem::description
char * description
Definition
DNA_node_types.h:1887
NodeMenuSwitch
Definition
DNA_node_types.h:1907
StructRNA
Definition
rna_internal_types.hh:663
bNode
Definition
DNA_node_types.h:422
bNode::storage
void * storage
Definition
DNA_node_types.h:496
blender::nodes::MenuSwitchItemsAccessor::operator_idnames
Definition
NOD_geo_menu_switch.hh:25
blender::nodes::MenuSwitchItemsAccessor::operator_idnames::add_item
static constexpr StringRefNull add_item
Definition
NOD_geo_menu_switch.hh:26
blender::nodes::MenuSwitchItemsAccessor::operator_idnames::remove_item
static constexpr StringRefNull remove_item
Definition
NOD_geo_menu_switch.hh:27
blender::nodes::MenuSwitchItemsAccessor::operator_idnames::move_item
static constexpr StringRefNull move_item
Definition
NOD_geo_menu_switch.hh:28
blender::nodes::MenuSwitchItemsAccessor::rna_names
Definition
NOD_geo_menu_switch.hh:33
blender::nodes::MenuSwitchItemsAccessor::rna_names::active_index
static constexpr StringRefNull active_index
Definition
NOD_geo_menu_switch.hh:35
blender::nodes::MenuSwitchItemsAccessor::rna_names::items
static constexpr StringRefNull items
Definition
NOD_geo_menu_switch.hh:34
blender::nodes::MenuSwitchItemsAccessor::ui_idnames
Definition
NOD_geo_menu_switch.hh:30
blender::nodes::MenuSwitchItemsAccessor::ui_idnames::list
static constexpr StringRefNull list
Definition
NOD_geo_menu_switch.hh:31
blender::nodes::MenuSwitchItemsAccessor
Definition
NOD_geo_menu_switch.hh:18
blender::nodes::MenuSwitchItemsAccessor::socket_identifier_for_item
static std::string socket_identifier_for_item(const NodeEnumItem &item)
Definition
NOD_geo_menu_switch.hh:74
blender::nodes::MenuSwitchItemsAccessor::copy_item
static void copy_item(const NodeEnumItem &src, NodeEnumItem &dst)
Definition
NOD_geo_menu_switch.hh:46
blender::nodes::MenuSwitchItemsAccessor::init_with_name
static void init_with_name(bNode &node, NodeEnumItem &item, const char *name)
Definition
NOD_geo_menu_switch.hh:67
blender::nodes::MenuSwitchItemsAccessor::get_items_from_node
static socket_items::SocketItemsRef< NodeEnumItem > get_items_from_node(bNode &node)
Definition
NOD_geo_menu_switch.hh:38
blender::nodes::MenuSwitchItemsAccessor::blend_write_item
static void blend_write_item(BlendWriter *writer, const ItemT &item)
Definition
node_geo_menu_switch.cc:607
blender::nodes::MenuSwitchItemsAccessor::node_type
static int node_type
Definition
NOD_geo_menu_switch.hh:21
blender::nodes::MenuSwitchItemsAccessor::destruct_item
static void destruct_item(NodeEnumItem *item)
Definition
NOD_geo_menu_switch.hh:53
blender::nodes::MenuSwitchItemsAccessor::ItemT
NodeEnumItem ItemT
Definition
NOD_geo_menu_switch.hh:19
blender::nodes::MenuSwitchItemsAccessor::has_name
static constexpr bool has_name
Definition
NOD_geo_menu_switch.hh:24
blender::nodes::MenuSwitchItemsAccessor::node_idname
static constexpr StringRefNull node_idname
Definition
NOD_geo_menu_switch.hh:22
blender::nodes::MenuSwitchItemsAccessor::get_name
static char ** get_name(NodeEnumItem &item)
Definition
NOD_geo_menu_switch.hh:62
blender::nodes::MenuSwitchItemsAccessor::blend_read_data_item
static void blend_read_data_item(BlendDataReader *reader, ItemT &item)
Definition
node_geo_menu_switch.cc:613
blender::nodes::MenuSwitchItemsAccessor::item_srna
static StructRNA * item_srna
Definition
NOD_geo_menu_switch.hh:20
blender::nodes::MenuSwitchItemsAccessor::has_type
static constexpr bool has_type
Definition
NOD_geo_menu_switch.hh:23
blender::nodes::socket_items::SocketItemsAccessorDefaults
Definition
NOD_socket_items.hh:35
blender::nodes::socket_items::SocketItemsRef
Definition
NOD_socket_items.hh:48
Generated on
for Blender by
doxygen
1.16.1