wip
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
use std::{error::Error, process::exit, time::Duration};
|
||||
|
||||
use crossterm::event::{self, Event, KeyCode};
|
||||
use data::{ArchivedData, Data};
|
||||
use ratatui::{
|
||||
layout::{self, Constraint, Layout},
|
||||
layout::{self, Constraint, Layout, Rect},
|
||||
prelude::Stylize,
|
||||
widgets::{Block, Borders},
|
||||
text::Text,
|
||||
widgets::{Block, BorderType, Borders},
|
||||
Frame,
|
||||
};
|
||||
use rkyv::{deserialize, rancor};
|
||||
@@ -16,7 +18,7 @@ struct Root {
|
||||
running_state: RunningState,
|
||||
}
|
||||
|
||||
#[derive(Default, Debug)]
|
||||
#[derive(Default, Debug, PartialEq)]
|
||||
enum RunningState {
|
||||
#[default]
|
||||
Running,
|
||||
@@ -33,18 +35,60 @@ enum Message {
|
||||
|
||||
impl Root {
|
||||
fn view(&self, f: &mut Frame) {
|
||||
let block = Block::new()
|
||||
.border_type(ratatui::widgets::BorderType::Rounded)
|
||||
.borders(Borders::ALL);
|
||||
f.render_widget(block, f.area());
|
||||
let text = Text::raw("Meow");
|
||||
let block = Block::new().borders(Borders::ALL).title("Meow");
|
||||
let flex_vert = Layout::vertical([Constraint::Fill(1)])
|
||||
.flex(layout::Flex::Center)
|
||||
.areas::<1>(f.area())[0];
|
||||
let centered = flex_vert.centered_horizontally(Constraint::Length(50));
|
||||
let full_center = ;
|
||||
f.render_widget(block, centered);
|
||||
}
|
||||
fn handle_events() -> Result<Option<Message>, Box<dyn Error>> {
|
||||
if event::poll(Duration::from_millis(250))? {
|
||||
if let Ok(Event::Key(key)) = event::read() {
|
||||
return Ok(Self::handle_key(key));
|
||||
}
|
||||
return Ok(None);
|
||||
}
|
||||
return Ok(None);
|
||||
}
|
||||
fn handle_key(key: event::KeyEvent) -> Option<Message> {
|
||||
match key.code {
|
||||
KeyCode::Up => Some(Message::Increment),
|
||||
KeyCode::Down => Some(Message::Decrement),
|
||||
KeyCode::Esc => Some(Message::Quit),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
fn update(&mut self) -> Result<(), Box<dyn Error>> {
|
||||
if let Ok(msg) = Self::handle_events() {
|
||||
if let Some(msg) = msg {
|
||||
match msg {
|
||||
Message::Increment => self.counter += 1,
|
||||
Message::Decrement => self.counter -= 1,
|
||||
Message::Reset => unimplemented!(),
|
||||
Message::Quit => self.running_state = RunningState::Done,
|
||||
}
|
||||
return Ok(());
|
||||
} else {
|
||||
return Ok(());
|
||||
}
|
||||
} else {
|
||||
panic!("Failed to process event");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
let mut app = Root::default();
|
||||
ratatui::run(|terminal| loop {
|
||||
terminal.draw(|frame| {
|
||||
app.view(frame);
|
||||
})?;
|
||||
ratatui::run(|terminal| {
|
||||
while app.running_state == RunningState::Running {
|
||||
terminal.draw(|frame| {
|
||||
app.view(frame);
|
||||
})?;
|
||||
app.update()?;
|
||||
}
|
||||
Ok(())
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user