pub struct RenderedGraph<N, E> { /* private fields */ }Expand description
A rendered graph ready for display in a TUI.
The graph structure is immutable after creation, but colors and styles can be modified at any time.
Implementations§
Source§impl<N: Display + Clone, E: Display + Clone> RenderedGraph<N, E>
impl<N: Display + Clone, E: Display + Clone> RenderedGraph<N, E>
Sourcepub fn from_graph(graph: DiGraph<N, E>) -> Self
pub fn from_graph(graph: DiGraph<N, E>) -> Self
Create a new rendered graph from a petgraph DiGraph.
Sourcepub fn builder() -> RenderedGraphBuilder<N, E>
pub fn builder() -> RenderedGraphBuilder<N, E>
Create a builder for more configuration options.
Examples found in repository?
9fn main() {
10 // Create a graph with circular edges (T <-> U)
11 let mut graph: DiGraph<&str, &str> = DiGraph::new();
12
13 let t = graph.add_node("T: Task");
14 let u = graph.add_node("U: User");
15
16 // Bidirectional edges - these would overlap without parallel edge handling
17 graph.add_edge(t, u, "question");
18 graph.add_edge(u, t, "answer");
19
20 let mut rendered = RenderedGraph::builder()
21 .graph(graph)
22 .border_style(BoxBorder::Single)
23 .gravity(1.0)
24 .repulsion_constant(15000.0) // Increased to separate nodes horizontally
25 .build();
26
27 println!("Running physics simulation...");
28 rendered.run_simulation();
29 println!("Converged after {} iterations\n", rendered.iterations());
30
31 let grid = rendered.render_to_grid();
32 let (width, height) = grid.size();
33
34 println!("Grid size: {}x{}\n", width, height);
35
36 grid.print();
37}More examples
7fn main() {
8 // Create a simple state machine graph
9 let mut graph: DiGraph<&str, &str> = DiGraph::new();
10
11 let start = graph.add_node("Start");
12 let loading = graph.add_node("Loading");
13 let ready = graph.add_node("Ready");
14 let error = graph.add_node("Error");
15 let done = graph.add_node("Done");
16
17 graph.add_edge(start, loading, "init");
18 graph.add_edge(loading, ready, "success");
19 graph.add_edge(loading, error, "fail");
20 graph.add_edge(ready, done, "complete");
21 graph.add_edge(error, loading, "retry");
22 graph.add_edge(error, done, "abort");
23
24 // Create rendered graph with custom settings
25 let mut rendered = RenderedGraph::builder()
26 .graph(graph)
27 .border_style(BoxBorder::Rounded)
28 .gravity(1.0)
29 .build();
30
31 // Run physics simulation
32 println!("Running physics simulation...");
33 rendered.run_simulation();
34 println!("Converged after {} iterations", rendered.iterations());
35
36 // Customize colors
37 rendered.set_node_border_color(start, Color::Green);
38 rendered.set_node_border_color(error, Color::Red);
39 rendered.set_node_text_color(error, Color::Red);
40 rendered.set_node_border_color(done, Color::Blue);
41
42 // Render to grid and print
43 let grid = rendered.render_to_grid();
44 let (width, height) = grid.size();
45
46 println!("\nRendered graph ({}x{}):\n", width, height);
47
48 // Print grid using the built-in print method
49 grid.print();
50}12fn main() -> io::Result<()> {
13 // Create a state machine graph
14 let mut graph: DiGraph<&str, &str> = DiGraph::new();
15
16 let idle = graph.add_node("Idle");
17 let running = graph.add_node("Running");
18 let paused = graph.add_node("Paused");
19 let complete = graph.add_node("Complete");
20 let failed = graph.add_node("Failed");
21
22 let e_start = graph.add_edge(idle, running, "start");
23 let e_pause = graph.add_edge(running, paused, "pause");
24 let e_resume = graph.add_edge(paused, running, "resume");
25 let e_finish = graph.add_edge(running, complete, "finish");
26 let e_fail = graph.add_edge(running, failed, "error");
27 let e_reset = graph.add_edge(complete, idle, "reset");
28 let e_retry = graph.add_edge(failed, idle, "retry");
29
30 // Create rendered graph
31 let mut rendered = RenderedGraph::builder()
32 .graph(graph)
33 .border_style(BoxBorder::Rounded)
34 .gravity(0.8)
35 .spring_constant(0.05)
36 .repulsion_constant(8000.0)
37 .build();
38
39 // Run physics simulation
40 rendered.run_simulation();
41
42 // Apply colors based on state meaning
43 rendered.set_node_border_color(idle, Color::Gray);
44 rendered.set_node_border_color(running, Color::Green);
45 rendered.set_node_text_color(running, Color::Green);
46 rendered.set_node_border_color(paused, Color::Yellow);
47 rendered.set_node_text_color(paused, Color::Yellow);
48 rendered.set_node_border_color(complete, Color::Blue);
49 rendered.set_node_text_color(complete, Color::Blue);
50 rendered.set_node_border_color(failed, Color::Red);
51 rendered.set_node_text_color(failed, Color::Red);
52
53 // Color edges
54 rendered.set_edge_color(e_start, Color::Green);
55 rendered.set_edge_color(e_pause, Color::Yellow);
56 rendered.set_edge_color(e_resume, Color::Green);
57 rendered.set_edge_color(e_finish, Color::Blue);
58 rendered.set_edge_color(e_fail, Color::Red);
59 rendered.set_edge_color(e_reset, Color::Gray);
60 rendered.set_edge_color(e_retry, Color::Yellow);
61
62 // Run TUI
63 let mut terminal = ratatui::init();
64 let result = run_app(&mut terminal, &mut rendered);
65 ratatui::restore();
66 result
67}Sourcepub fn physics_config(&self) -> &PhysicsConfig
pub fn physics_config(&self) -> &PhysicsConfig
Get the physics configuration.
Sourcepub fn set_physics_config(&mut self, config: PhysicsConfig)
pub fn set_physics_config(&mut self, config: PhysicsConfig)
Set the physics configuration.
Sourcepub fn run_simulation(&mut self)
pub fn run_simulation(&mut self)
Run the physics simulation until stable.
Examples found in repository?
9fn main() {
10 // Create a graph with circular edges (T <-> U)
11 let mut graph: DiGraph<&str, &str> = DiGraph::new();
12
13 let t = graph.add_node("T: Task");
14 let u = graph.add_node("U: User");
15
16 // Bidirectional edges - these would overlap without parallel edge handling
17 graph.add_edge(t, u, "question");
18 graph.add_edge(u, t, "answer");
19
20 let mut rendered = RenderedGraph::builder()
21 .graph(graph)
22 .border_style(BoxBorder::Single)
23 .gravity(1.0)
24 .repulsion_constant(15000.0) // Increased to separate nodes horizontally
25 .build();
26
27 println!("Running physics simulation...");
28 rendered.run_simulation();
29 println!("Converged after {} iterations\n", rendered.iterations());
30
31 let grid = rendered.render_to_grid();
32 let (width, height) = grid.size();
33
34 println!("Grid size: {}x{}\n", width, height);
35
36 grid.print();
37}More examples
7fn main() {
8 // Create a simple state machine graph
9 let mut graph: DiGraph<&str, &str> = DiGraph::new();
10
11 let start = graph.add_node("Start");
12 let loading = graph.add_node("Loading");
13 let ready = graph.add_node("Ready");
14 let error = graph.add_node("Error");
15 let done = graph.add_node("Done");
16
17 graph.add_edge(start, loading, "init");
18 graph.add_edge(loading, ready, "success");
19 graph.add_edge(loading, error, "fail");
20 graph.add_edge(ready, done, "complete");
21 graph.add_edge(error, loading, "retry");
22 graph.add_edge(error, done, "abort");
23
24 // Create rendered graph with custom settings
25 let mut rendered = RenderedGraph::builder()
26 .graph(graph)
27 .border_style(BoxBorder::Rounded)
28 .gravity(1.0)
29 .build();
30
31 // Run physics simulation
32 println!("Running physics simulation...");
33 rendered.run_simulation();
34 println!("Converged after {} iterations", rendered.iterations());
35
36 // Customize colors
37 rendered.set_node_border_color(start, Color::Green);
38 rendered.set_node_border_color(error, Color::Red);
39 rendered.set_node_text_color(error, Color::Red);
40 rendered.set_node_border_color(done, Color::Blue);
41
42 // Render to grid and print
43 let grid = rendered.render_to_grid();
44 let (width, height) = grid.size();
45
46 println!("\nRendered graph ({}x{}):\n", width, height);
47
48 // Print grid using the built-in print method
49 grid.print();
50}12fn main() -> io::Result<()> {
13 // Create a state machine graph
14 let mut graph: DiGraph<&str, &str> = DiGraph::new();
15
16 let idle = graph.add_node("Idle");
17 let running = graph.add_node("Running");
18 let paused = graph.add_node("Paused");
19 let complete = graph.add_node("Complete");
20 let failed = graph.add_node("Failed");
21
22 let e_start = graph.add_edge(idle, running, "start");
23 let e_pause = graph.add_edge(running, paused, "pause");
24 let e_resume = graph.add_edge(paused, running, "resume");
25 let e_finish = graph.add_edge(running, complete, "finish");
26 let e_fail = graph.add_edge(running, failed, "error");
27 let e_reset = graph.add_edge(complete, idle, "reset");
28 let e_retry = graph.add_edge(failed, idle, "retry");
29
30 // Create rendered graph
31 let mut rendered = RenderedGraph::builder()
32 .graph(graph)
33 .border_style(BoxBorder::Rounded)
34 .gravity(0.8)
35 .spring_constant(0.05)
36 .repulsion_constant(8000.0)
37 .build();
38
39 // Run physics simulation
40 rendered.run_simulation();
41
42 // Apply colors based on state meaning
43 rendered.set_node_border_color(idle, Color::Gray);
44 rendered.set_node_border_color(running, Color::Green);
45 rendered.set_node_text_color(running, Color::Green);
46 rendered.set_node_border_color(paused, Color::Yellow);
47 rendered.set_node_text_color(paused, Color::Yellow);
48 rendered.set_node_border_color(complete, Color::Blue);
49 rendered.set_node_text_color(complete, Color::Blue);
50 rendered.set_node_border_color(failed, Color::Red);
51 rendered.set_node_text_color(failed, Color::Red);
52
53 // Color edges
54 rendered.set_edge_color(e_start, Color::Green);
55 rendered.set_edge_color(e_pause, Color::Yellow);
56 rendered.set_edge_color(e_resume, Color::Green);
57 rendered.set_edge_color(e_finish, Color::Blue);
58 rendered.set_edge_color(e_fail, Color::Red);
59 rendered.set_edge_color(e_reset, Color::Gray);
60 rendered.set_edge_color(e_retry, Color::Yellow);
61
62 // Run TUI
63 let mut terminal = ratatui::init();
64 let result = run_app(&mut terminal, &mut rendered);
65 ratatui::restore();
66 result
67}Sourcepub fn iterations(&self) -> usize
pub fn iterations(&self) -> usize
Get the number of iterations run so far.
Examples found in repository?
9fn main() {
10 // Create a graph with circular edges (T <-> U)
11 let mut graph: DiGraph<&str, &str> = DiGraph::new();
12
13 let t = graph.add_node("T: Task");
14 let u = graph.add_node("U: User");
15
16 // Bidirectional edges - these would overlap without parallel edge handling
17 graph.add_edge(t, u, "question");
18 graph.add_edge(u, t, "answer");
19
20 let mut rendered = RenderedGraph::builder()
21 .graph(graph)
22 .border_style(BoxBorder::Single)
23 .gravity(1.0)
24 .repulsion_constant(15000.0) // Increased to separate nodes horizontally
25 .build();
26
27 println!("Running physics simulation...");
28 rendered.run_simulation();
29 println!("Converged after {} iterations\n", rendered.iterations());
30
31 let grid = rendered.render_to_grid();
32 let (width, height) = grid.size();
33
34 println!("Grid size: {}x{}\n", width, height);
35
36 grid.print();
37}More examples
7fn main() {
8 // Create a simple state machine graph
9 let mut graph: DiGraph<&str, &str> = DiGraph::new();
10
11 let start = graph.add_node("Start");
12 let loading = graph.add_node("Loading");
13 let ready = graph.add_node("Ready");
14 let error = graph.add_node("Error");
15 let done = graph.add_node("Done");
16
17 graph.add_edge(start, loading, "init");
18 graph.add_edge(loading, ready, "success");
19 graph.add_edge(loading, error, "fail");
20 graph.add_edge(ready, done, "complete");
21 graph.add_edge(error, loading, "retry");
22 graph.add_edge(error, done, "abort");
23
24 // Create rendered graph with custom settings
25 let mut rendered = RenderedGraph::builder()
26 .graph(graph)
27 .border_style(BoxBorder::Rounded)
28 .gravity(1.0)
29 .build();
30
31 // Run physics simulation
32 println!("Running physics simulation...");
33 rendered.run_simulation();
34 println!("Converged after {} iterations", rendered.iterations());
35
36 // Customize colors
37 rendered.set_node_border_color(start, Color::Green);
38 rendered.set_node_border_color(error, Color::Red);
39 rendered.set_node_text_color(error, Color::Red);
40 rendered.set_node_border_color(done, Color::Blue);
41
42 // Render to grid and print
43 let grid = rendered.render_to_grid();
44 let (width, height) = grid.size();
45
46 println!("\nRendered graph ({}x{}):\n", width, height);
47
48 // Print grid using the built-in print method
49 grid.print();
50}Sourcepub fn set_node_border_color(&mut self, node: NodeIndex, color: Color)
pub fn set_node_border_color(&mut self, node: NodeIndex, color: Color)
Set the border color of a node.
Examples found in repository?
7fn main() {
8 // Create a simple state machine graph
9 let mut graph: DiGraph<&str, &str> = DiGraph::new();
10
11 let start = graph.add_node("Start");
12 let loading = graph.add_node("Loading");
13 let ready = graph.add_node("Ready");
14 let error = graph.add_node("Error");
15 let done = graph.add_node("Done");
16
17 graph.add_edge(start, loading, "init");
18 graph.add_edge(loading, ready, "success");
19 graph.add_edge(loading, error, "fail");
20 graph.add_edge(ready, done, "complete");
21 graph.add_edge(error, loading, "retry");
22 graph.add_edge(error, done, "abort");
23
24 // Create rendered graph with custom settings
25 let mut rendered = RenderedGraph::builder()
26 .graph(graph)
27 .border_style(BoxBorder::Rounded)
28 .gravity(1.0)
29 .build();
30
31 // Run physics simulation
32 println!("Running physics simulation...");
33 rendered.run_simulation();
34 println!("Converged after {} iterations", rendered.iterations());
35
36 // Customize colors
37 rendered.set_node_border_color(start, Color::Green);
38 rendered.set_node_border_color(error, Color::Red);
39 rendered.set_node_text_color(error, Color::Red);
40 rendered.set_node_border_color(done, Color::Blue);
41
42 // Render to grid and print
43 let grid = rendered.render_to_grid();
44 let (width, height) = grid.size();
45
46 println!("\nRendered graph ({}x{}):\n", width, height);
47
48 // Print grid using the built-in print method
49 grid.print();
50}More examples
12fn main() -> io::Result<()> {
13 // Create a state machine graph
14 let mut graph: DiGraph<&str, &str> = DiGraph::new();
15
16 let idle = graph.add_node("Idle");
17 let running = graph.add_node("Running");
18 let paused = graph.add_node("Paused");
19 let complete = graph.add_node("Complete");
20 let failed = graph.add_node("Failed");
21
22 let e_start = graph.add_edge(idle, running, "start");
23 let e_pause = graph.add_edge(running, paused, "pause");
24 let e_resume = graph.add_edge(paused, running, "resume");
25 let e_finish = graph.add_edge(running, complete, "finish");
26 let e_fail = graph.add_edge(running, failed, "error");
27 let e_reset = graph.add_edge(complete, idle, "reset");
28 let e_retry = graph.add_edge(failed, idle, "retry");
29
30 // Create rendered graph
31 let mut rendered = RenderedGraph::builder()
32 .graph(graph)
33 .border_style(BoxBorder::Rounded)
34 .gravity(0.8)
35 .spring_constant(0.05)
36 .repulsion_constant(8000.0)
37 .build();
38
39 // Run physics simulation
40 rendered.run_simulation();
41
42 // Apply colors based on state meaning
43 rendered.set_node_border_color(idle, Color::Gray);
44 rendered.set_node_border_color(running, Color::Green);
45 rendered.set_node_text_color(running, Color::Green);
46 rendered.set_node_border_color(paused, Color::Yellow);
47 rendered.set_node_text_color(paused, Color::Yellow);
48 rendered.set_node_border_color(complete, Color::Blue);
49 rendered.set_node_text_color(complete, Color::Blue);
50 rendered.set_node_border_color(failed, Color::Red);
51 rendered.set_node_text_color(failed, Color::Red);
52
53 // Color edges
54 rendered.set_edge_color(e_start, Color::Green);
55 rendered.set_edge_color(e_pause, Color::Yellow);
56 rendered.set_edge_color(e_resume, Color::Green);
57 rendered.set_edge_color(e_finish, Color::Blue);
58 rendered.set_edge_color(e_fail, Color::Red);
59 rendered.set_edge_color(e_reset, Color::Gray);
60 rendered.set_edge_color(e_retry, Color::Yellow);
61
62 // Run TUI
63 let mut terminal = ratatui::init();
64 let result = run_app(&mut terminal, &mut rendered);
65 ratatui::restore();
66 result
67}Sourcepub fn set_node_text_color(&mut self, node: NodeIndex, color: Color)
pub fn set_node_text_color(&mut self, node: NodeIndex, color: Color)
Set the text color of a node.
Examples found in repository?
7fn main() {
8 // Create a simple state machine graph
9 let mut graph: DiGraph<&str, &str> = DiGraph::new();
10
11 let start = graph.add_node("Start");
12 let loading = graph.add_node("Loading");
13 let ready = graph.add_node("Ready");
14 let error = graph.add_node("Error");
15 let done = graph.add_node("Done");
16
17 graph.add_edge(start, loading, "init");
18 graph.add_edge(loading, ready, "success");
19 graph.add_edge(loading, error, "fail");
20 graph.add_edge(ready, done, "complete");
21 graph.add_edge(error, loading, "retry");
22 graph.add_edge(error, done, "abort");
23
24 // Create rendered graph with custom settings
25 let mut rendered = RenderedGraph::builder()
26 .graph(graph)
27 .border_style(BoxBorder::Rounded)
28 .gravity(1.0)
29 .build();
30
31 // Run physics simulation
32 println!("Running physics simulation...");
33 rendered.run_simulation();
34 println!("Converged after {} iterations", rendered.iterations());
35
36 // Customize colors
37 rendered.set_node_border_color(start, Color::Green);
38 rendered.set_node_border_color(error, Color::Red);
39 rendered.set_node_text_color(error, Color::Red);
40 rendered.set_node_border_color(done, Color::Blue);
41
42 // Render to grid and print
43 let grid = rendered.render_to_grid();
44 let (width, height) = grid.size();
45
46 println!("\nRendered graph ({}x{}):\n", width, height);
47
48 // Print grid using the built-in print method
49 grid.print();
50}More examples
12fn main() -> io::Result<()> {
13 // Create a state machine graph
14 let mut graph: DiGraph<&str, &str> = DiGraph::new();
15
16 let idle = graph.add_node("Idle");
17 let running = graph.add_node("Running");
18 let paused = graph.add_node("Paused");
19 let complete = graph.add_node("Complete");
20 let failed = graph.add_node("Failed");
21
22 let e_start = graph.add_edge(idle, running, "start");
23 let e_pause = graph.add_edge(running, paused, "pause");
24 let e_resume = graph.add_edge(paused, running, "resume");
25 let e_finish = graph.add_edge(running, complete, "finish");
26 let e_fail = graph.add_edge(running, failed, "error");
27 let e_reset = graph.add_edge(complete, idle, "reset");
28 let e_retry = graph.add_edge(failed, idle, "retry");
29
30 // Create rendered graph
31 let mut rendered = RenderedGraph::builder()
32 .graph(graph)
33 .border_style(BoxBorder::Rounded)
34 .gravity(0.8)
35 .spring_constant(0.05)
36 .repulsion_constant(8000.0)
37 .build();
38
39 // Run physics simulation
40 rendered.run_simulation();
41
42 // Apply colors based on state meaning
43 rendered.set_node_border_color(idle, Color::Gray);
44 rendered.set_node_border_color(running, Color::Green);
45 rendered.set_node_text_color(running, Color::Green);
46 rendered.set_node_border_color(paused, Color::Yellow);
47 rendered.set_node_text_color(paused, Color::Yellow);
48 rendered.set_node_border_color(complete, Color::Blue);
49 rendered.set_node_text_color(complete, Color::Blue);
50 rendered.set_node_border_color(failed, Color::Red);
51 rendered.set_node_text_color(failed, Color::Red);
52
53 // Color edges
54 rendered.set_edge_color(e_start, Color::Green);
55 rendered.set_edge_color(e_pause, Color::Yellow);
56 rendered.set_edge_color(e_resume, Color::Green);
57 rendered.set_edge_color(e_finish, Color::Blue);
58 rendered.set_edge_color(e_fail, Color::Red);
59 rendered.set_edge_color(e_reset, Color::Gray);
60 rendered.set_edge_color(e_retry, Color::Yellow);
61
62 // Run TUI
63 let mut terminal = ratatui::init();
64 let result = run_app(&mut terminal, &mut rendered);
65 ratatui::restore();
66 result
67}Sourcepub fn set_node_colors(&mut self, node: NodeIndex, border: Color, text: Color)
pub fn set_node_colors(&mut self, node: NodeIndex, border: Color, text: Color)
Set both border and text color of a node.
Sourcepub fn set_edge_color(&mut self, edge: EdgeIndex, color: Color)
pub fn set_edge_color(&mut self, edge: EdgeIndex, color: Color)
Set the line color of an edge.
Examples found in repository?
12fn main() -> io::Result<()> {
13 // Create a state machine graph
14 let mut graph: DiGraph<&str, &str> = DiGraph::new();
15
16 let idle = graph.add_node("Idle");
17 let running = graph.add_node("Running");
18 let paused = graph.add_node("Paused");
19 let complete = graph.add_node("Complete");
20 let failed = graph.add_node("Failed");
21
22 let e_start = graph.add_edge(idle, running, "start");
23 let e_pause = graph.add_edge(running, paused, "pause");
24 let e_resume = graph.add_edge(paused, running, "resume");
25 let e_finish = graph.add_edge(running, complete, "finish");
26 let e_fail = graph.add_edge(running, failed, "error");
27 let e_reset = graph.add_edge(complete, idle, "reset");
28 let e_retry = graph.add_edge(failed, idle, "retry");
29
30 // Create rendered graph
31 let mut rendered = RenderedGraph::builder()
32 .graph(graph)
33 .border_style(BoxBorder::Rounded)
34 .gravity(0.8)
35 .spring_constant(0.05)
36 .repulsion_constant(8000.0)
37 .build();
38
39 // Run physics simulation
40 rendered.run_simulation();
41
42 // Apply colors based on state meaning
43 rendered.set_node_border_color(idle, Color::Gray);
44 rendered.set_node_border_color(running, Color::Green);
45 rendered.set_node_text_color(running, Color::Green);
46 rendered.set_node_border_color(paused, Color::Yellow);
47 rendered.set_node_text_color(paused, Color::Yellow);
48 rendered.set_node_border_color(complete, Color::Blue);
49 rendered.set_node_text_color(complete, Color::Blue);
50 rendered.set_node_border_color(failed, Color::Red);
51 rendered.set_node_text_color(failed, Color::Red);
52
53 // Color edges
54 rendered.set_edge_color(e_start, Color::Green);
55 rendered.set_edge_color(e_pause, Color::Yellow);
56 rendered.set_edge_color(e_resume, Color::Green);
57 rendered.set_edge_color(e_finish, Color::Blue);
58 rendered.set_edge_color(e_fail, Color::Red);
59 rendered.set_edge_color(e_reset, Color::Gray);
60 rendered.set_edge_color(e_retry, Color::Yellow);
61
62 // Run TUI
63 let mut terminal = ratatui::init();
64 let result = run_app(&mut terminal, &mut rendered);
65 ratatui::restore();
66 result
67}Sourcepub fn set_edge_text_color(&mut self, edge: EdgeIndex, color: Color)
pub fn set_edge_text_color(&mut self, edge: EdgeIndex, color: Color)
Set the text color of an edge label.
Sourcepub fn set_edge_colors(&mut self, edge: EdgeIndex, line: Color, text: Color)
pub fn set_edge_colors(&mut self, edge: EdgeIndex, line: Color, text: Color)
Set both line and text color of an edge.
Sourcepub fn set_all_node_border_colors(&mut self, color: Color)
pub fn set_all_node_border_colors(&mut self, color: Color)
Set border color for all nodes.
Sourcepub fn set_all_node_text_colors(&mut self, color: Color)
pub fn set_all_node_text_colors(&mut self, color: Color)
Set text color for all nodes.
Sourcepub fn set_all_edge_colors(&mut self, color: Color)
pub fn set_all_edge_colors(&mut self, color: Color)
Set line color for all edges.
Sourcepub fn reset_node_styles(&mut self)
pub fn reset_node_styles(&mut self)
Reset all node styles to default.
Sourcepub fn reset_edge_styles(&mut self)
pub fn reset_edge_styles(&mut self)
Reset all edge styles to default.
Sourcepub fn set_default_node_style(&mut self, style: NodeStyle)
pub fn set_default_node_style(&mut self, style: NodeStyle)
Set the default node style (used for new nodes and reset).
Sourcepub fn set_default_edge_style(&mut self, style: EdgeStyle)
pub fn set_default_edge_style(&mut self, style: EdgeStyle)
Set the default edge style.
Sourcepub fn set_border_style(&mut self, border: BoxBorder)
pub fn set_border_style(&mut self, border: BoxBorder)
Set the box border style for all nodes.
Sourcepub fn set_scaling_mode(&mut self, mode: ScalingMode)
pub fn set_scaling_mode(&mut self, mode: ScalingMode)
Set the scaling mode for handling large graphs.
Sourcepub fn auto_scale(&mut self, max_width: usize)
pub fn auto_scale(&mut self, max_width: usize)
Auto-detect and apply appropriate scaling mode based on terminal width.
Sourcepub fn render_to_grid(&mut self) -> CharGrid
pub fn render_to_grid(&mut self) -> CharGrid
Render the graph to a character grid.
Examples found in repository?
9fn main() {
10 // Create a graph with circular edges (T <-> U)
11 let mut graph: DiGraph<&str, &str> = DiGraph::new();
12
13 let t = graph.add_node("T: Task");
14 let u = graph.add_node("U: User");
15
16 // Bidirectional edges - these would overlap without parallel edge handling
17 graph.add_edge(t, u, "question");
18 graph.add_edge(u, t, "answer");
19
20 let mut rendered = RenderedGraph::builder()
21 .graph(graph)
22 .border_style(BoxBorder::Single)
23 .gravity(1.0)
24 .repulsion_constant(15000.0) // Increased to separate nodes horizontally
25 .build();
26
27 println!("Running physics simulation...");
28 rendered.run_simulation();
29 println!("Converged after {} iterations\n", rendered.iterations());
30
31 let grid = rendered.render_to_grid();
32 let (width, height) = grid.size();
33
34 println!("Grid size: {}x{}\n", width, height);
35
36 grid.print();
37}More examples
7fn main() {
8 // Create a simple state machine graph
9 let mut graph: DiGraph<&str, &str> = DiGraph::new();
10
11 let start = graph.add_node("Start");
12 let loading = graph.add_node("Loading");
13 let ready = graph.add_node("Ready");
14 let error = graph.add_node("Error");
15 let done = graph.add_node("Done");
16
17 graph.add_edge(start, loading, "init");
18 graph.add_edge(loading, ready, "success");
19 graph.add_edge(loading, error, "fail");
20 graph.add_edge(ready, done, "complete");
21 graph.add_edge(error, loading, "retry");
22 graph.add_edge(error, done, "abort");
23
24 // Create rendered graph with custom settings
25 let mut rendered = RenderedGraph::builder()
26 .graph(graph)
27 .border_style(BoxBorder::Rounded)
28 .gravity(1.0)
29 .build();
30
31 // Run physics simulation
32 println!("Running physics simulation...");
33 rendered.run_simulation();
34 println!("Converged after {} iterations", rendered.iterations());
35
36 // Customize colors
37 rendered.set_node_border_color(start, Color::Green);
38 rendered.set_node_border_color(error, Color::Red);
39 rendered.set_node_text_color(error, Color::Red);
40 rendered.set_node_border_color(done, Color::Blue);
41
42 // Render to grid and print
43 let grid = rendered.render_to_grid();
44 let (width, height) = grid.size();
45
46 println!("\nRendered graph ({}x{}):\n", width, height);
47
48 // Print grid using the built-in print method
49 grid.print();
50}Sourcepub fn widget(&mut self) -> GraphWidget<'_, N, E>
pub fn widget(&mut self) -> GraphWidget<'_, N, E>
Create a widget for rendering with ratatui.
Examples found in repository?
69fn run_app<N, E>(
70 terminal: &mut DefaultTerminal,
71 rendered: &mut RenderedGraph<N, E>,
72) -> io::Result<()>
73where
74 N: std::fmt::Display + Clone,
75 E: std::fmt::Display + Clone,
76{
77 loop {
78 terminal.draw(|frame| {
79 let area = frame.area();
80 frame.render_widget(rendered.widget(), area);
81 })?;
82
83 if let Event::Key(key) = event::read()? {
84 if key.code == KeyCode::Char('q') || key.code == KeyCode::Esc {
85 break;
86 }
87 }
88 }
89 Ok(())
90}Auto Trait Implementations§
impl<N, E> Freeze for RenderedGraph<N, E>
impl<N, E> RefUnwindSafe for RenderedGraph<N, E>where
N: RefUnwindSafe,
E: RefUnwindSafe,
impl<N, E> Send for RenderedGraph<N, E>
impl<N, E> Sync for RenderedGraph<N, E>
impl<N, E> Unpin for RenderedGraph<N, E>
impl<N, E> UnwindSafe for RenderedGraph<N, E>where
N: UnwindSafe,
E: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more