Преглед изворни кода

map/ui: enabled scroll and simplified rendering. combined node info into nodeid list

lunar-mining пре 4 година
родитељ
комит
11f70995a7
2 измењених фајлова са 39 додато и 46 уклоњено
  1. 4 4
      bin/map/src/main.rs
  2. 35 42
      bin/map/src/ui.rs

+ 4 - 4
bin/map/src/main.rs

@@ -219,7 +219,7 @@ async fn render<B: Backend>(
     let mut view = View::new(id_list.clone(), info_list.clone());
     let mut view = View::new(id_list.clone(), info_list.clone());
 
 
     view.id_list.state.select(Some(0));
     view.id_list.state.select(Some(0));
-    //view.info_list.index = 0;
+    view.info_list.index = 0;
 
 
     loop {
     loop {
         // on first run, add available nodes
         // on first run, add available nodes
@@ -243,15 +243,15 @@ async fn render<B: Backend>(
             match k.unwrap() {
             match k.unwrap() {
                 Key::Char('q') => {
                 Key::Char('q') => {
                     terminal.clear()?;
                     terminal.clear()?;
-                    return Ok(());
+                    return Ok(())
                 }
                 }
                 Key::Char('j') => {
                 Key::Char('j') => {
                     view.id_list.next();
                     view.id_list.next();
-                    //view.info_list.next().await;
+                    view.info_list.next().await;
                 }
                 }
                 Key::Char('k') => {
                 Key::Char('k') => {
                     view.id_list.previous();
                     view.id_list.previous();
-                    //view.info_list.previous().await;
+                    view.info_list.previous().await;
                 }
                 }
                 _ => (),
                 _ => (),
             }
             }

+ 35 - 42
bin/map/src/ui.rs

@@ -4,7 +4,7 @@ use tui::{
     backend::Backend,
     backend::Backend,
     layout::{Constraint, Direction, Layout, Rect},
     layout::{Constraint, Direction, Layout, Rect},
     style::{Color, Modifier, Style},
     style::{Color, Modifier, Style},
-    text::Spans,
+    text::{Span, Spans},
     widgets::{Block, Borders, List, ListItem, Paragraph},
     widgets::{Block, Borders, List, ListItem, Paragraph},
     Frame,
     Frame,
 };
 };
@@ -16,37 +16,8 @@ pub fn ui<B: Backend>(f: &mut Frame<'_, B>, mut view: View) {
         .constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref())
         .constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref())
         .split(f.size());
         .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_left(view.clone(), f, index);
-    //render_info_right(view.clone(), f, index, slice);
-}
-
-fn render_info_left<B: Backend>(view: View, f: &mut Frame<'_, B>, index: usize) {
-    let slice = Layout::default()
-        .direction(Direction::Horizontal)
-        .vertical_margin(4)
-        .horizontal_margin(7)
-        .constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref())
-        .split(f.size());
-
     let info = &view.info_list.infos;
     let info = &view.info_list.infos;
+    let index = view.info_list.index;
 
 
     let iconnects = info[index].incoming.clone();
     let iconnects = info[index].incoming.clone();
     let oconnects = info[index].outgoing.clone();
     let oconnects = info[index].outgoing.clone();
@@ -58,23 +29,45 @@ fn render_info_left<B: Backend>(view: View, f: &mut Frame<'_, B>, index: usize)
         for connect in iconnects {
         for connect in iconnects {
             iconnect_ids.push(connect.id);
             iconnect_ids.push(connect.id);
         }
         }
+    } else {
+        // TODO: Render 'info not found'
+        debug!("EMPTY VECTOR");
     }
     }
     if !oconnects.is_empty() {
     if !oconnects.is_empty() {
         for connect in oconnects {
         for connect in oconnects {
             oconnect_ids.push(connect.id);
             oconnect_ids.push(connect.id);
         }
         }
+    } else {
+        debug!("EMPTY VECTOR");
     }
     }
-    let span = vec![
-        Spans::from(format!("Outgoing connections:")),
-        Spans::from(format!("   {}", iconnect_ids[0])),
-        Spans::from(format!("   {}", iconnect_ids[1])),
-        Spans::from(format!("")),
-        Spans::from(format!("Incoming connections:")),
-        Spans::from(format!("   {}", oconnect_ids[0])),
-        Spans::from(format!("   {}", oconnect_ids[1])),
-    ];
-    let graph = Paragraph::new(span).block(Block::default().style(Style::default()));
-    f.render_widget(graph, slice[0]);
+
+    let nodes: Vec<ListItem> = view
+        .id_list
+        .node_id
+        .iter()
+        .map(|id| {
+            let mut lines = vec![Spans::from(id.to_string())];
+            for line in lines.clone() {
+                lines.push(Spans::from(format!("Outgoing connections:")));
+                lines.push(Spans::from(format!("    {}", oconnect_ids[0])));
+                lines.push(Spans::from(format!("    {}", oconnect_ids[1])));
+                lines.push(Spans::from(format!("Incoming connections:")));
+                lines.push(Spans::from(format!("    {}", iconnect_ids[0])));
+                lines.push(Spans::from(format!("    {}", iconnect_ids[1])));
+            }
+            ListItem::new(lines).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_right(view.clone(), f, index, slice);
 }
 }
 
 
 fn render_info_right<B: Backend>(view: View, f: &mut Frame<'_, B>, index: usize, slice: Vec<Rect>) {
 fn render_info_right<B: Backend>(view: View, f: &mut Frame<'_, B>, index: usize, slice: Vec<Rect>) {