use super::*;
pub trait WidgetValueTrait: Default {
type Response;
type UserState;
type NodeData;
fn value_widget(
&mut self,
param_name: &str,
node_id: NodeId,
ui: &mut egui::Ui,
user_state: &mut Self::UserState,
node_data: &Self::NodeData,
) -> Vec<Self::Response>;
}
pub trait DataTypeTrait<UserState>: PartialEq + Eq {
fn data_type_color(&self, user_state: &mut UserState) -> egui::Color32;
fn name(&self) -> std::borrow::Cow<str>;
}
pub trait NodeDataTrait
where
Self: Sized,
{
type Response;
type UserState;
type DataType;
type ValueType;
fn bottom_ui(
&self,
ui: &mut egui::Ui,
node_id: NodeId,
graph: &Graph<Self, Self::DataType, Self::ValueType>,
user_state: &mut Self::UserState,
) -> Vec<NodeResponse<Self::Response, Self>>
where
Self::Response: UserResponseTrait;
fn titlebar_color(
&self,
_ui: &egui::Ui,
_node_id: NodeId,
_graph: &Graph<Self, Self::DataType, Self::ValueType>,
_user_state: &mut Self::UserState,
) -> Option<egui::Color32> {
None
}
fn can_delete(
&self,
_node_id: NodeId,
_graph: &Graph<Self, Self::DataType, Self::ValueType>,
_user_state: &mut Self::UserState,
) -> bool {
true
}
}
pub trait NodeTemplateIter {
type Item;
fn all_kinds(&self) -> Vec<Self::Item>;
}
pub trait NodeTemplateTrait: Clone {
type NodeData;
type DataType;
type ValueType;
type UserState;
fn node_finder_label(&self, user_state: &mut Self::UserState) -> std::borrow::Cow<str>;
fn node_graph_label(&self, user_state: &mut Self::UserState) -> String;
fn user_data(&self, user_state: &mut Self::UserState) -> Self::NodeData;
fn build_node(
&self,
graph: &mut Graph<Self::NodeData, Self::DataType, Self::ValueType>,
user_state: &mut Self::UserState,
node_id: NodeId,
);
}
pub trait UserResponseTrait: Clone + std::fmt::Debug {}