use Graph;
#[derive(Clone, Copy, Default, Debug)]
pub struct Point {
pub x: f64,
pub y: f64,
}
#[derive(Clone, Default, Debug)]
pub struct NodeInfo {
pub name: Option<String>,
pub point: Option<Point>,
pub label: Option<usize>,
pub value: Option<String>,
}
impl NodeInfo {
pub fn update(&mut self, info: NodeInfo) {
if info.name.is_some() {
self.name = info.name;
}
if info.point.is_some() {
self.point = info.point;
}
if info.label.is_some() {
self.label = info.label;
}
if info.value.is_some() {
self.value = info.value;
}
}
}
#[derive(Clone, Default, Debug)]
pub struct EdgeInfo {
pub label: Option<usize>,
pub value: Option<String>,
}
impl EdgeInfo {
pub fn update(&mut self, info: EdgeInfo) {
if info.label.is_some() {
self.label = info.label;
}
if info.value.is_some() {
self.value = info.value;
}
}
}
pub trait GraphDrawer<'a, G>
where G: Graph<'a>
{
fn set_node(&mut self, u: G::Node, info: NodeInfo);
fn set_node_point(&mut self, u: G::Node, point: Point) {
self.set_node(u, NodeInfo { point: Some(point), ..Default::default() });
}
fn set_node_name(&mut self, u: G::Node, name: String) {
self.set_node(u, NodeInfo { name: Some(name), ..Default::default() });
}
fn set_node_label(&mut self, u: G::Node, label: usize) {
self.set_node(u, NodeInfo { label: Some(label), ..Default::default() });
}
fn set_node_value(&mut self, u: G::Node, value: String) {
self.set_node(u, NodeInfo { value: Some(value), ..Default::default() });
}
fn set_edge(&mut self, a: G::Edge, info: EdgeInfo);
fn set_edge_label(&mut self, u: G::Edge, label: usize) {
self.set_edge(u, EdgeInfo { label: Some(label), ..Default::default() });
}
fn set_edge_value(&mut self, e: G::Edge, value: String) {
self.set_edge(e, EdgeInfo { value: Some(value), ..Default::default() });
}
fn add_drawing(&mut self);
}