diff --git a/egui_node_graph/src/editor_ui.rs b/egui_node_graph/src/editor_ui.rs index 06504de..7bd55cb 100644 --- a/egui_node_graph/src/editor_ui.rs +++ b/egui_node_graph/src/editor_ui.rs @@ -152,10 +152,10 @@ where node_finder_area = node_finder_area.current_pos(pos); } node_finder_area.show(ui.ctx(), |ui| { - if let Some(node_kind) = node_finder.show(ui, all_kinds) { + if let Some(node_kind) = node_finder.show(ui, all_kinds, user_state) { let new_node = self.graph.add_node( - node_kind.node_graph_label(), - node_kind.user_data(), + node_kind.node_graph_label(user_state), + node_kind.user_data(user_state), |graph, node_id| node_kind.build_node(graph, user_state, node_id), ); self.node_positions.insert( diff --git a/egui_node_graph/src/node_finder.rs b/egui_node_graph/src/node_finder.rs index e445346..6bb77d7 100644 --- a/egui_node_graph/src/node_finder.rs +++ b/egui_node_graph/src/node_finder.rs @@ -14,9 +14,9 @@ pub struct NodeFinder { _phantom: PhantomData, } -impl NodeFinder +impl NodeFinder where - NodeTemplate: NodeTemplateTrait, + NodeTemplate: NodeTemplateTrait, { pub fn new_at(pos: Pos2) -> Self { NodeFinder { @@ -34,6 +34,7 @@ where &mut self, ui: &mut Ui, all_kinds: impl NodeTemplateIter, + user_state: &mut UserState, ) -> Option { let background_color; let text_color; @@ -68,7 +69,7 @@ where .inner_margin(vec2(10.0, 10.0)) .show(ui, |ui| { for kind in all_kinds.all_kinds() { - let kind_name = kind.node_finder_label().to_string(); + let kind_name = kind.node_finder_label(user_state).to_string(); if kind_name .to_lowercase() .contains(self.query.to_lowercase().as_str()) diff --git a/egui_node_graph/src/traits.rs b/egui_node_graph/src/traits.rs index bc51f5f..67e261b 100644 --- a/egui_node_graph/src/traits.rs +++ b/egui_node_graph/src/traits.rs @@ -119,13 +119,13 @@ pub trait NodeTemplateTrait: Clone { type UserState; /// Returns a descriptive name for the node kind, used in the node finder. - fn node_finder_label(&self) -> &str; + fn node_finder_label(&self, user_state: &mut Self::UserState) -> &str; /// Returns a descriptive name for the node kind, used in the graph. - fn node_graph_label(&self) -> String; + fn node_graph_label(&self, user_state: &mut Self::UserState) -> String; /// Returns the user data for this node kind. - fn user_data(&self) -> Self::NodeData; + fn user_data(&self, user_state: &mut Self::UserState) -> Self::NodeData; /// This function is run when this node kind gets added to the graph. The /// node will be empty by default, and this function can be used to fill its diff --git a/egui_node_graph_example/src/app.rs b/egui_node_graph_example/src/app.rs index 47715bb..e2df3e7 100644 --- a/egui_node_graph_example/src/app.rs +++ b/egui_node_graph_example/src/app.rs @@ -118,7 +118,7 @@ impl NodeTemplateTrait for MyNodeTemplate { type ValueType = MyValueType; type UserState = MyGraphState; - fn node_finder_label(&self) -> &str { + fn node_finder_label(&self, _user_state: &mut Self::UserState) -> &str { match self { MyNodeTemplate::MakeVector => "New vector", MyNodeTemplate::MakeScalar => "New scalar", @@ -130,13 +130,13 @@ impl NodeTemplateTrait for MyNodeTemplate { } } - fn node_graph_label(&self) -> String { + fn node_graph_label(&self, user_state: &mut Self::UserState) -> String { // It's okay to delegate this to node_finder_label if you don't want to // show different names in the node finder and the node itself. - self.node_finder_label().into() + self.node_finder_label(user_state).into() } - fn user_data(&self) -> Self::NodeData { + fn user_data(&self, _user_state: &mut Self::UserState) -> Self::NodeData { MyNodeData { template: *self } }