Add UserState to build_node

This is necessary if your NodeTemplate struct can't store all the
necessary information to define a new node.
This commit is contained in:
Setzer22 2022-06-29 15:04:57 +02:00
parent 008aa9ad5b
commit ec0e863dc7
3 changed files with 12 additions and 3 deletions

View File

@ -68,8 +68,12 @@ where
>,
UserResponse: UserResponseTrait,
ValueType: WidgetValueTrait<Response = UserResponse>,
NodeTemplate:
NodeTemplateTrait<NodeData = NodeData, DataType = DataType, ValueType = ValueType>,
NodeTemplate: NodeTemplateTrait<
NodeData = NodeData,
DataType = DataType,
ValueType = ValueType,
UserState = UserState,
>,
DataType: DataTypeTrait<UserState>,
{
#[must_use]
@ -142,7 +146,7 @@ where
let new_node = self.graph.add_node(
node_kind.node_graph_label(),
node_kind.user_data(),
|graph, node_id| node_kind.build_node(graph, node_id),
|graph, node_id| node_kind.build_node(graph, &self.user_state, node_id),
);
self.node_positions.insert(
new_node,

View File

@ -108,6 +108,8 @@ pub trait NodeTemplateTrait: Clone {
type DataType;
/// Must be set to the custom user `ValueType` type
type ValueType;
/// Must be set to the custom user `UserState` type
type UserState;
/// Returns a descriptive name for the node kind, used in the node finder.
fn node_finder_label(&self) -> &str;
@ -124,6 +126,7 @@ pub trait NodeTemplateTrait: Clone {
fn build_node(
&self,
graph: &mut Graph<Self::NodeData, Self::DataType, Self::ValueType>,
user_state: &Self::UserState,
node_id: NodeId,
);
}

View File

@ -111,6 +111,7 @@ impl NodeTemplateTrait for MyNodeTemplate {
type NodeData = MyNodeData;
type DataType = MyDataType;
type ValueType = MyValueType;
type UserState = MyGraphState;
fn node_finder_label(&self) -> &str {
match self {
@ -137,6 +138,7 @@ impl NodeTemplateTrait for MyNodeTemplate {
fn build_node(
&self,
graph: &mut Graph<Self::NodeData, Self::DataType, Self::ValueType>,
_user_state: &Self::UserState,
node_id: NodeId,
) {
// The nodes are created empty by default. This function needs to take