This commit is contained in:
2026-03-20 15:02:34 +00:00
parent 63cbf76b3e
commit 79fd8e5e57

View File

@@ -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(())
})
}