mirror of
https://github.com/darkrenaissance/darkfi.git
synced 2026-04-28 03:00:18 -04:00
map: simple box that quits with q
This commit is contained in:
@@ -1,31 +1,62 @@
|
||||
// tui that lists:
|
||||
// all active nodes
|
||||
// their connections
|
||||
// recent messages
|
||||
//
|
||||
// uses rpc to get that info from nodes
|
||||
//
|
||||
// later: can open nodes in tabs
|
||||
|
||||
use drk::{
|
||||
tui::{App, HBox, VBox, Widget},
|
||||
Result,
|
||||
use rand::{thread_rng, Rng};
|
||||
use std::{io, io::Read, time::Instant};
|
||||
use termion::{async_stdin, event::Key, input::TermRead, raw::IntoRawMode};
|
||||
use tui::{
|
||||
backend::TermionBackend,
|
||||
layout::{Constraint, Direction, Layout},
|
||||
style::{Color, Style},
|
||||
text::Spans,
|
||||
widgets::{Block, Borders, Paragraph},
|
||||
Terminal,
|
||||
};
|
||||
|
||||
async fn start() -> Result<()> {
|
||||
let wv1 = vec![Widget::new("Active nodes".into())?];
|
||||
fn main() -> Result<(), io::Error> {
|
||||
// Set up terminal output
|
||||
let stdout = io::stdout().into_raw_mode()?;
|
||||
let backend = TermionBackend::new(stdout);
|
||||
let mut terminal = Terminal::new(backend)?;
|
||||
|
||||
let v_box1 = Box::new(VBox::new(wv1.clone(), 1));
|
||||
// Create a separate thread to poll stdin.
|
||||
// This provides non-blocking input support.
|
||||
let mut asi = async_stdin();
|
||||
|
||||
let mut app = App::new()?;
|
||||
let mut then = Instant::now();
|
||||
let mut rng = thread_rng();
|
||||
// Clear the terminal before first draw.
|
||||
terminal.clear()?;
|
||||
loop {
|
||||
// Lock the terminal and start a drawing session.
|
||||
terminal.draw(|frame| {
|
||||
// Create a layout into which to place our blocks.
|
||||
let size = frame.size();
|
||||
|
||||
app.add_layout(v_box1)?;
|
||||
// The text lines for our text box.
|
||||
let txt = vec![Spans::from("\n Press q to quit.\n")];
|
||||
// Create a paragraph with the above text...
|
||||
let graph = Paragraph::new(txt)
|
||||
// In a block with borders and the given title...
|
||||
.block(Block::default().title("List of active nodes").borders(Borders::ALL))
|
||||
// With white foreground and black background...
|
||||
.style(Style::default().fg(Color::White).bg(Color::Black));
|
||||
|
||||
app.run().await?;
|
||||
// Render into the second chunk of the layout.
|
||||
frame.render_widget(graph, size);
|
||||
})?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn main() -> Result<()> {
|
||||
smol::future::block_on(start())
|
||||
// Iterate over all the keys that have been pressed since the
|
||||
// last time we checked.
|
||||
for k in asi.by_ref().keys() {
|
||||
match k.unwrap() {
|
||||
// If any of them is q, quit
|
||||
Key::Char('q') => {
|
||||
// Clear the terminal before exit so as not to leave
|
||||
// a mess.
|
||||
terminal.clear()?;
|
||||
return Ok(())
|
||||
}
|
||||
// Otherwise, throw them away.
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user