Also expose UserState in NodeTemplateTrait

This commit is contained in:
Setzer22 2022-10-29 17:22:14 +02:00
parent 79fbe31482
commit 0ab08bd9ca
4 changed files with 14 additions and 13 deletions

View File

@ -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(

View File

@ -14,9 +14,9 @@ pub struct NodeFinder<NodeTemplate> {
_phantom: PhantomData<NodeTemplate>,
}
impl<NodeTemplate, NodeData> NodeFinder<NodeTemplate>
impl<NodeTemplate, NodeData, UserState> NodeFinder<NodeTemplate>
where
NodeTemplate: NodeTemplateTrait<NodeData = NodeData>,
NodeTemplate: NodeTemplateTrait<NodeData = NodeData, UserState = UserState>,
{
pub fn new_at(pos: Pos2) -> Self {
NodeFinder {
@ -34,6 +34,7 @@ where
&mut self,
ui: &mut Ui,
all_kinds: impl NodeTemplateIter<Item = NodeTemplate>,
user_state: &mut UserState,
) -> Option<NodeTemplate> {
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())

View File

@ -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

View File

@ -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 }
}