From 232b781c35f9dcef736f05088720f333f5f6c051 Mon Sep 17 00:00:00 2001 From: lunar-mining Date: Sun, 16 Jan 2022 21:27:15 +0100 Subject: [PATCH] map: render scrolling node_info --- bin/map/src/app.rs | 2 +- bin/map/src/main.rs | 1 + bin/map/src/node_info.rs | 14 ++++++-- bin/map/src/ui.rs | 78 ++++++++++++++++++++++++++++++++++++---- 4 files changed, 85 insertions(+), 10 deletions(-) diff --git a/bin/map/src/app.rs b/bin/map/src/app.rs index 31a1ae55a..451dbe346 100644 --- a/bin/map/src/app.rs +++ b/bin/map/src/app.rs @@ -28,7 +28,7 @@ impl App { }, NodeInfo { id: "038043325alsdlasjfrsdfsdfsdjsdf".to_string(), - connections: 5, + connections: 7, is_active: true, last_message: "gm".to_string(), }, diff --git a/bin/map/src/main.rs b/bin/map/src/main.rs index 837669558..193ff91b7 100644 --- a/bin/map/src/main.rs +++ b/bin/map/src/main.rs @@ -45,6 +45,7 @@ fn run_app( app.node_list.state.select(Some(0)); + app.node_info.index = 0; //let mut last_tick = Instant::now(); loop { diff --git a/bin/map/src/node_info.rs b/bin/map/src/node_info.rs index 64e17147a..eadae7e1c 100644 --- a/bin/map/src/node_info.rs +++ b/bin/map/src/node_info.rs @@ -1,13 +1,23 @@ +use std::collections::HashMap; + #[derive(Clone)] pub struct NodeInfoView { pub index: usize, + pub info_map: HashMap, pub infos: Vec, } impl NodeInfoView { pub fn new(infos: Vec) -> NodeInfoView { - let index = 0; - NodeInfoView { index, infos } + let mut info_map: HashMap = HashMap::new(); + let mut index = 0; + + for info in infos.clone() { + info_map.insert(index, info); + index += 1; + } + + NodeInfoView { index, info_map, infos } } pub fn next(&mut self) { diff --git a/bin/map/src/ui.rs b/bin/map/src/ui.rs index a5612113c..e22f464a6 100644 --- a/bin/map/src/ui.rs +++ b/bin/map/src/ui.rs @@ -31,11 +31,75 @@ pub fn ui(f: &mut Frame, app: &mut App) { f.render_stateful_widget(nodes, slice[0], &mut app.node_list.state); - let info: Vec = - app.node_info.infos.iter().map(|info| Spans::from(info.connections.to_string())).collect(); - - let graph = - Paragraph::new(info).block(Block::default().borders(Borders::ALL)).style(Style::default()); - - f.render_widget(graph, slice[1]); + // TODO: cleanup this boilerplate + // pass index value to render_info() + match app.node_info.index { + 0 => { + let id = &app.node_info.infos[0].id; + let connections = app.node_info.infos[0].connections; + let span = vec![ + Spans::from(format!("NodeId: {}", id)), + Spans::from(format!("Number of connections: {}", connections)), + ]; + let graph = Paragraph::new(span) + .block(Block::default().borders(Borders::ALL)) + .style(Style::default()); + f.render_widget(graph, slice[1]); + } + 1 => { + let id = &app.node_info.infos[1].id; + let connections = app.node_info.infos[1].connections; + let span = vec![ + Spans::from(format!("NodeId: {}", id)), + Spans::from(format!("Number of connections: {}", connections)), + ]; + let graph = Paragraph::new(span) + .block(Block::default().borders(Borders::ALL)) + .style(Style::default()); + f.render_widget(graph, slice[1]); + } + 2 => { + let id = &app.node_info.infos[2].id; + let connections = app.node_info.infos[2].connections; + let span = vec![ + Spans::from(format!("NodeId: {}", id)), + Spans::from(format!("Number of connections: {}", connections)), + ]; + let graph = Paragraph::new(span) + .block(Block::default().borders(Borders::ALL)) + .style(Style::default()); + f.render_widget(graph, slice[1]); + } + 3 => { + let id = &app.node_info.infos[3].id; + let connections = app.node_info.infos[3].connections; + let span = vec![ + Spans::from(format!("NodeId: {}", id)), + Spans::from(format!("Number of connections: {}", connections)), + ]; + let graph = Paragraph::new(span) + .block(Block::default().borders(Borders::ALL)) + .style(Style::default()); + f.render_widget(graph, slice[1]); + } + 4 => { + let id = &app.node_info.infos[4].id; + let connections = app.node_info.infos[3].connections; + let span = vec![ + Spans::from(format!("NodeId: {}", id)), + Spans::from(format!("Number of connections: {}", connections)), + ]; + let graph = Paragraph::new(span) + .block(Block::default().borders(Borders::ALL)) + .style(Style::default()); + f.render_widget(graph, slice[1]); + } + _ => { + // do something + } + } } + +// render_info(index) +// return info at index +// render info