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, UserResponse: UserResponseTrait,
ValueType: WidgetValueTrait<Response = UserResponse>, ValueType: WidgetValueTrait<Response = UserResponse>,
NodeTemplate: NodeTemplate: NodeTemplateTrait<
NodeTemplateTrait<NodeData = NodeData, DataType = DataType, ValueType = ValueType>, NodeData = NodeData,
DataType = DataType,
ValueType = ValueType,
UserState = UserState,
>,
DataType: DataTypeTrait<UserState>, DataType: DataTypeTrait<UserState>,
{ {
#[must_use] #[must_use]
@ -142,7 +146,7 @@ where
let new_node = self.graph.add_node( let new_node = self.graph.add_node(
node_kind.node_graph_label(), node_kind.node_graph_label(),
node_kind.user_data(), 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( self.node_positions.insert(
new_node, new_node,

View File

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

View File

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