Просмотр исходного кода

map: implement scrolling info screen

lunar-mining 4 лет назад
Родитель
Сommit
1f24d32345
5 измененных файлов с 35 добавлено и 37 удалено
  1. 7 3
      bin/map/src/app.rs
  2. 7 27
      bin/map/src/list.rs
  3. 1 0
      bin/map/src/main.rs
  4. 2 0
      bin/map/src/mod.rs
  5. 18 7
      bin/map/src/ui.rs

+ 7 - 3
bin/map/src/app.rs

@@ -1,4 +1,5 @@
 use crate::{
+    info::NodeExtra,
     list::StatefulList,
     types::{NodeId, NodeInfo},
 };
@@ -25,7 +26,9 @@ impl App {
                 hashmap.insert(id.to_string(), info.to_string());
             }
         }
-        App { node_list: StatefulList::new(hashmap) }
+
+        let node_info = NodeExtra::new();
+        App { node_list: StatefulList::new(hashmap, node_info) }
     }
 
     fn get_node_id() -> Vec<String> {
@@ -40,8 +43,9 @@ impl App {
     fn get_node_info() -> Vec<String> {
         let mut node_info = Vec::new();
         for num in 1..100 {
-            let new_info = format!("\nConnections: {}\n", num);
-            node_info.push(new_info);
+            //let new_info = format!("\nConnections: {}\n", num);
+            let new_info = "";
+            node_info.push(new_info.to_string());
         }
         node_info
     }

+ 7 - 27
bin/map/src/list.rs

@@ -1,39 +1,23 @@
-use crate::types::{NodeId, NodeInfo};
+use crate::{
+    info::NodeExtra,
+    types::{NodeId, NodeInfo},
+};
 use std::collections::HashMap;
 use tui::widgets::ListState;
 
-#[derive(Clone)]
-pub struct NodeExtra {
-    pub index: u32,
-    pub noise: String,
-}
-
-impl NodeExtra {
-    pub fn new() -> NodeExtra {
-        let mut index = 0;
-        let noise = Self::make_noise();
-        NodeExtra { index, noise }
-    }
-
-    pub fn make_noise() -> String {
-        String::new()
-    }
-}
 #[derive(Clone)]
 pub struct StatefulList {
     pub state: ListState,
     pub nodes: HashMap<NodeId, NodeInfo>,
-    pub nodex: NodeExtra,
+    pub node_info: NodeExtra,
 }
 
 impl StatefulList {
-    pub fn new(nodes: HashMap<NodeId, NodeInfo>) -> StatefulList {
-        StatefulList { state: ListState::default(), nodes, nodex: NodeExtra::new() }
+    pub fn new(nodes: HashMap<NodeId, NodeInfo>, node_info: NodeExtra) -> StatefulList {
+        StatefulList { state: ListState::default(), nodes, node_info }
     }
 
     pub fn next(&mut self) {
-        let index = self.nodex.index;
-
         let i = match self.state.selected() {
             Some(i) => {
                 if i >= self.nodes.len() - 1 {
@@ -41,7 +25,6 @@ impl StatefulList {
                 } else {
                     i + 1
                 }
-                //index == i;
             }
             None => 0,
         };
@@ -49,8 +32,6 @@ impl StatefulList {
     }
 
     pub fn previous(&mut self) {
-        let index = self.nodex.index;
-
         let i = match self.state.selected() {
             Some(i) => {
                 if i == 0 {
@@ -58,7 +39,6 @@ impl StatefulList {
                 } else {
                     i - 1
                 }
-                //index == i;
             }
             None => 0,
         };

+ 1 - 0
bin/map/src/main.rs

@@ -10,6 +10,7 @@ use tui::{
 };
 
 pub mod app;
+pub mod info;
 pub mod list;
 pub mod types;
 pub mod ui;

+ 2 - 0
bin/map/src/mod.rs

@@ -1,8 +1,10 @@
+pub mod info;
 pub mod list;
 pub mod app;
 pub mod ui;
 pub mod types;
 
+pub use info::NodeExtra;
 pub use list::StatefulList;
 pub use app::App;
 pub use ui::ui;

+ 18 - 7
bin/map/src/ui.rs

@@ -50,7 +50,19 @@ pub fn ui<B: Backend>(f: &mut Frame<B>, app: &mut App) {
 
     let graph = Paragraph::new(info_vec).block(Block::default()).style(Style::default());
 
-    //let 
+    let node_info: Vec<ListItem> = app
+        .node_list
+        .node_info
+        .noise
+        .iter()
+        .map(|i| {
+            let line1 = Spans::from(i.to_string());
+            ListItem::new(vec![line1]).style(Style::default())
+        })
+        .collect();
+
+
+    //let
     //let info: Vec<ListItem> = app
     //    .node_list
     //    .nodes
@@ -62,10 +74,9 @@ pub fn ui<B: Backend>(f: &mut Frame<B>, app: &mut App) {
     //    })
     //    .collect();
 
-    //let info = List::new(info)
-    //    .block(Block::default())
-    //    .highlight_style(Style::default().bg(Color::Black).add_modifier(Modifier::BOLD))
-    //    .highlight_symbol(">> ");
+    let node_info = List::new(node_info)
+        .block(Block::default())
+        .highlight_style(Style::default().bg(Color::Blue).add_modifier(Modifier::BOLD));
 
     //if app.show_popup {
     //    let block = Block::default().title("Popup").borders(Borders::ALL);
@@ -73,6 +84,6 @@ pub fn ui<B: Backend>(f: &mut Frame<B>, app: &mut App) {
     //}
 
     // TODO: make this a stateful widget that changes with scroll
-    f.render_widget(graph, slice[1]);
-    //f.render_stateful_widget(info, slice[1], &mut app.node_list.state);
+    //f.render_widget(graph, slice[1]);
+    f.render_stateful_widget(node_info, slice[1], &mut app.node_list.state);
 }