fdtd-coremem/src/bin/viewer.rs

49 lines
1.4 KiB
Rust
Raw Normal View History

use coremem::post::{Loader, Viewer};
use std::path::PathBuf;
use std::time::Duration;
use structopt::StructOpt;
use crossterm::event::{Event, KeyCode};
#[derive(Debug, StructOpt)]
struct Opt {
directory: PathBuf,
}
fn event_loop(mut viewer: Viewer) {
loop {
let mut time_steps = 0;
let mut z_steps = 0;
while crossterm::event::poll(Duration::from_millis(16)).unwrap() {
match crossterm::event::read().unwrap() {
Event::Key(e) => match e.code {
KeyCode::Left => time_steps -= 1,
KeyCode::PageUp => time_steps -= 10,
KeyCode::Right => time_steps += 1,
KeyCode::PageDown => time_steps += 10,
KeyCode::Up => z_steps += 1,
KeyCode::Down => z_steps -= 1,
KeyCode::Char('q') => return,
_ => {},
},
_ => {},
}
}
viewer.navigate(time_steps, z_steps);
}
}
fn main() {
let opt = Opt::from_args();
let loader = Loader::new(opt.directory);
let viewer = Viewer::new(loader);
// disable line buffering
crossterm::terminal::enable_raw_mode().unwrap();
viewer.render();
event_loop(viewer);
// return the terminal to its original state
crossterm::terminal::disable_raw_mode().unwrap();
}