oxihuman_viewer/
driver_graph_view.rs1#![allow(dead_code)]
4
5#[derive(Debug, Clone, Copy, PartialEq)]
9pub enum GraphNodeType {
10 Driver,
11 Driven,
12 Intermediate,
13}
14
15#[derive(Debug, Clone)]
17pub struct GraphNode {
18 pub id: u32,
19 pub node_type: GraphNodeType,
20 pub label: String,
21 pub position: [f32; 2],
22}
23
24#[derive(Debug, Clone)]
26pub struct DriverGraphView {
27 pub nodes: Vec<GraphNode>,
28 pub show_edge_labels: bool,
29 pub zoom: f32,
30 pub enabled: bool,
31}
32
33impl DriverGraphView {
34 pub fn new() -> Self {
35 DriverGraphView {
36 nodes: Vec::new(),
37 show_edge_labels: true,
38 zoom: 1.0,
39 enabled: true,
40 }
41 }
42}
43
44impl Default for DriverGraphView {
45 fn default() -> Self {
46 Self::new()
47 }
48}
49
50pub fn new_driver_graph_view() -> DriverGraphView {
52 DriverGraphView::new()
53}
54
55pub fn dgv_add_node(view: &mut DriverGraphView, node: GraphNode) {
57 view.nodes.push(node);
58}
59
60pub fn dgv_clear(view: &mut DriverGraphView) {
62 view.nodes.clear();
63}
64
65pub fn dgv_set_zoom(view: &mut DriverGraphView, zoom: f32) {
67 view.zoom = zoom.max(0.01);
68}
69
70pub fn dgv_show_edge_labels(view: &mut DriverGraphView, show: bool) {
72 view.show_edge_labels = show;
73}
74
75pub fn dgv_set_enabled(view: &mut DriverGraphView, enabled: bool) {
77 view.enabled = enabled;
78}
79
80pub fn dgv_node_count(view: &DriverGraphView) -> usize {
82 view.nodes.len()
83}
84
85pub fn dgv_to_json(view: &DriverGraphView) -> String {
87 format!(
88 r#"{{"node_count":{},"show_edge_labels":{},"zoom":{},"enabled":{}}}"#,
89 view.nodes.len(),
90 view.show_edge_labels,
91 view.zoom,
92 view.enabled
93 )
94}
95
96#[cfg(test)]
97mod tests {
98 use super::*;
99
100 fn make_node(id: u32) -> GraphNode {
101 GraphNode {
102 id,
103 node_type: GraphNodeType::Driver,
104 label: "driver".to_string(),
105 position: [0.0, 0.0],
106 }
107 }
108
109 #[test]
110 fn test_initial_empty() {
111 let v = new_driver_graph_view();
112 assert_eq!(dgv_node_count(&v), 0 );
113 }
114
115 #[test]
116 fn test_add_node() {
117 let mut v = new_driver_graph_view();
118 dgv_add_node(&mut v, make_node(0));
119 assert_eq!(dgv_node_count(&v), 1 );
120 }
121
122 #[test]
123 fn test_clear() {
124 let mut v = new_driver_graph_view();
125 dgv_add_node(&mut v, make_node(0));
126 dgv_clear(&mut v);
127 assert_eq!(dgv_node_count(&v), 0 );
128 }
129
130 #[test]
131 fn test_zoom_min() {
132 let mut v = new_driver_graph_view();
133 dgv_set_zoom(&mut v, 0.0);
134 assert!((v.zoom - 0.01).abs() < 1e-6 );
135 }
136
137 #[test]
138 fn test_set_zoom() {
139 let mut v = new_driver_graph_view();
140 dgv_set_zoom(&mut v, 2.5);
141 assert!((v.zoom - 2.5).abs() < 1e-6 );
142 }
143
144 #[test]
145 fn test_edge_labels() {
146 let mut v = new_driver_graph_view();
147 dgv_show_edge_labels(&mut v, false);
148 assert!(!v.show_edge_labels );
149 }
150
151 #[test]
152 fn test_set_enabled() {
153 let mut v = new_driver_graph_view();
154 dgv_set_enabled(&mut v, false);
155 assert!(!v.enabled );
156 }
157
158 #[test]
159 fn test_to_json_has_node_count() {
160 let v = new_driver_graph_view();
161 let j = dgv_to_json(&v);
162 assert!(j.contains("\"node_count\"") );
163 }
164
165 #[test]
166 fn test_enabled_default() {
167 let v = new_driver_graph_view();
168 assert!(v.enabled );
169 }
170}