diff --git a/egui_node_graph/src/editor_ui.rs b/egui_node_graph/src/editor_ui.rs index e168c34..06504de 100644 --- a/egui_node_graph/src/editor_ui.rs +++ b/egui_node_graph/src/editor_ui.rs @@ -76,7 +76,7 @@ where ValueType = ValueType, >, UserResponse: UserResponseTrait, - ValueType: WidgetValueTrait, + ValueType: WidgetValueTrait, NodeTemplate: NodeTemplateTrait< NodeData = NodeData, DataType = DataType, @@ -391,7 +391,7 @@ where ValueType = ValueType, >, UserResponse: UserResponseTrait, - ValueType: WidgetValueTrait, + ValueType: WidgetValueTrait, DataType: DataTypeTrait, { pub const MAX_NODE_SIZE: [f32; 2] = [200.0, 200.0]; @@ -472,7 +472,7 @@ where responses.extend( self.graph[param_id] .value - .value_widget(¶m_name, ui) + .value_widget(¶m_name, self.node_id, ui, user_state) .into_iter() .map(NodeResponse::User), ); diff --git a/egui_node_graph/src/traits.rs b/egui_node_graph/src/traits.rs index 8b90191..bc51f5f 100644 --- a/egui_node_graph/src/traits.rs +++ b/egui_node_graph/src/traits.rs @@ -5,11 +5,18 @@ use super::*; /// types of the node graph. pub trait WidgetValueTrait { type Response; + type UserState; /// This method will be called for each input parameter with a widget. The /// return value is a vector of custom response objects which can be used /// to implement handling of side effects. If unsure, the response Vec can /// be empty. - fn value_widget(&mut self, param_name: &str, ui: &mut egui::Ui) -> Vec; + fn value_widget( + &mut self, + param_name: &str, + node_id: NodeId, + ui: &mut egui::Ui, + user_state: &mut Self::UserState, + ) -> Vec; } /// This trait must be implemented by the `DataType` generic parameter of the diff --git a/egui_node_graph_example/src/app.rs b/egui_node_graph_example/src/app.rs index 0bad5c9..47715bb 100644 --- a/egui_node_graph_example/src/app.rs +++ b/egui_node_graph_example/src/app.rs @@ -258,7 +258,14 @@ impl NodeTemplateIter for AllMyNodeTemplates { impl WidgetValueTrait for MyValueType { type Response = MyResponse; - fn value_widget(&mut self, param_name: &str, ui: &mut egui::Ui) -> Vec { + type UserState = MyGraphState; + fn value_widget( + &mut self, + param_name: &str, + _node_id: NodeId, + ui: &mut egui::Ui, + _user_state: &mut MyGraphState, + ) -> Vec { // This trait is used to tell the library which UI to display for the // inline parameter widgets. match self {