| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- use crate::view::View;
- use tui::{
- backend::Backend,
- layout::{Constraint, Direction, Layout, Rect},
- style::{Color, Modifier, Style},
- text::Spans,
- widgets::{Block, Borders, List, ListItem, Paragraph},
- Frame,
- };
- pub fn ui<B: Backend>(f: &mut Frame<'_, B>, mut view: View) {
- let slice = Layout::default()
- .direction(Direction::Horizontal)
- .margin(2)
- .constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref())
- .split(f.size());
- let nodes: Vec<ListItem> = view
- .id_list
- .node_id
- .iter()
- .map(|id| {
- let line1 = Spans::from(id.to_string());
- ListItem::new(vec![line1]).style(Style::default())
- })
- .collect();
- let nodes = List::new(nodes)
- .block(Block::default().borders(Borders::ALL))
- .highlight_style(Style::default().fg(Color::LightCyan).add_modifier(Modifier::BOLD));
- f.render_stateful_widget(nodes, slice[0], &mut view.id_list.state);
- let index = view.info_list.index;
- render_info(view, f, index, slice);
- }
- fn render_info<B: Backend>(view: View, f: &mut Frame<'_, B>, index: usize, slice: Vec<Rect>) {
- let info = &view.info_list.infos;
- let id = &info[index].id;
- let i0 = info[index].incoming.clone();
- let o0 = info[index].outgoing.clone();
- let span = vec![
- Spans::from(format!("NodeId: {}", id)),
- Spans::from(format!("Outgoing connections: {:?}", i0)),
- Spans::from(format!("Incoming connections: {:?}", o0)),
- ];
- let graph =
- Paragraph::new(span).block(Block::default().borders(Borders::ALL)).style(Style::default());
- f.render_widget(graph, slice[1]);
- }
|