ui.rs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. use crate::view::View;
  2. use log::debug;
  3. use tui::{
  4. backend::Backend,
  5. layout::{Constraint, Direction, Layout, Rect},
  6. style::{Color, Modifier, Style},
  7. text::Spans,
  8. widgets::{Block, Borders, List, ListItem, Paragraph},
  9. Frame,
  10. };
  11. pub fn ui<B: Backend>(f: &mut Frame<'_, B>, mut view: View) {
  12. let slice = Layout::default()
  13. .direction(Direction::Horizontal)
  14. .margin(2)
  15. .constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref())
  16. .split(f.size());
  17. let nodes: Vec<ListItem> = view
  18. .id_list
  19. .node_id
  20. .iter()
  21. .map(|id| {
  22. let line1 = Spans::from(id.to_string());
  23. ListItem::new(vec![line1]).style(Style::default())
  24. })
  25. .collect();
  26. let nodes = List::new(nodes)
  27. .block(Block::default().borders(Borders::ALL))
  28. .highlight_style(Style::default().fg(Color::LightCyan).add_modifier(Modifier::BOLD));
  29. f.render_stateful_widget(nodes, slice[0], &mut view.id_list.state);
  30. //let index = view.info_list.index;
  31. //render_info_left(view.clone(), f, index);
  32. //render_info_right(view.clone(), f, index, slice);
  33. }
  34. fn render_info_left<B: Backend>(view: View, f: &mut Frame<'_, B>, index: usize) {
  35. let slice = Layout::default()
  36. .direction(Direction::Horizontal)
  37. .vertical_margin(4)
  38. .horizontal_margin(7)
  39. .constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref())
  40. .split(f.size());
  41. let info = &view.info_list.infos;
  42. let iconnects = info[index].incoming.clone();
  43. let oconnects = info[index].outgoing.clone();
  44. let mut iconnect_ids = Vec::new();
  45. let mut oconnect_ids = Vec::new();
  46. if !iconnects.is_empty() {
  47. for connect in iconnects {
  48. iconnect_ids.push(connect.id);
  49. }
  50. }
  51. if !oconnects.is_empty() {
  52. for connect in oconnects {
  53. oconnect_ids.push(connect.id);
  54. }
  55. }
  56. let span = vec![
  57. Spans::from(format!("Outgoing connections:")),
  58. Spans::from(format!(" {}", iconnect_ids[0])),
  59. Spans::from(format!(" {}", iconnect_ids[1])),
  60. Spans::from(format!("")),
  61. Spans::from(format!("Incoming connections:")),
  62. Spans::from(format!(" {}", oconnect_ids[0])),
  63. Spans::from(format!(" {}", oconnect_ids[1])),
  64. ];
  65. let graph = Paragraph::new(span).block(Block::default().style(Style::default()));
  66. f.render_widget(graph, slice[0]);
  67. }
  68. fn render_info_right<B: Backend>(view: View, f: &mut Frame<'_, B>, index: usize, slice: Vec<Rect>) {
  69. let info = &view.info_list.infos;
  70. let iconnects = info[index].incoming.clone();
  71. let oconnects = info[index].outgoing.clone();
  72. let mut iconnect_msgs = Vec::new();
  73. let mut oconnect_msgs = Vec::new();
  74. if !iconnects.is_empty() {
  75. for connect in iconnects {
  76. iconnect_msgs.push(connect.message)
  77. }
  78. }
  79. if !oconnects.is_empty() {
  80. for connect in oconnects {
  81. oconnect_msgs.push(connect.message);
  82. }
  83. }
  84. let span = vec![
  85. Spans::from(format!("Last message:")),
  86. Spans::from(format!("")),
  87. Spans::from(format!("{}", oconnect_msgs[0])),
  88. Spans::from(format!("{}", oconnect_msgs[1])),
  89. Spans::from(format!("")),
  90. Spans::from(format!("")),
  91. Spans::from(format!("{}", oconnect_msgs[0])),
  92. Spans::from(format!("{}", oconnect_msgs[1])),
  93. ];
  94. let graph =
  95. Paragraph::new(span).block(Block::default().borders(Borders::ALL)).style(Style::default());
  96. f.render_widget(graph, slice[1]);
  97. }