diff --git a/egui_node_graph/src/editor_ui.rs b/egui_node_graph/src/editor_ui.rs index b666c9c..a64f144 100644 --- a/egui_node_graph/src/editor_ui.rs +++ b/egui_node_graph/src/editor_ui.rs @@ -68,8 +68,12 @@ where >, UserResponse: UserResponseTrait, ValueType: WidgetValueTrait, - NodeTemplate: - NodeTemplateTrait, + NodeTemplate: NodeTemplateTrait< + NodeData = NodeData, + DataType = DataType, + ValueType = ValueType, + UserState = UserState, + >, DataType: DataTypeTrait, { #[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, diff --git a/egui_node_graph/src/traits.rs b/egui_node_graph/src/traits.rs index bfeef0f..ccf4388 100644 --- a/egui_node_graph/src/traits.rs +++ b/egui_node_graph/src/traits.rs @@ -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, + user_state: &Self::UserState, node_id: NodeId, ); } diff --git a/egui_node_graph_example/src/app.rs b/egui_node_graph_example/src/app.rs index 2de94f0..3e2551d 100644 --- a/egui_node_graph_example/src/app.rs +++ b/egui_node_graph_example/src/app.rs @@ -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, + _user_state: &Self::UserState, node_id: NodeId, ) { // The nodes are created empty by default. This function needs to take