wip
This commit is contained in:
@@ -1,10 +1,12 @@
|
|||||||
use std::{error::Error, process::exit, time::Duration};
|
use std::{error::Error, process::exit, time::Duration};
|
||||||
|
|
||||||
|
use crossterm::event::{self, Event, KeyCode};
|
||||||
use data::{ArchivedData, Data};
|
use data::{ArchivedData, Data};
|
||||||
use ratatui::{
|
use ratatui::{
|
||||||
layout::{self, Constraint, Layout},
|
layout::{self, Constraint, Layout, Rect},
|
||||||
prelude::Stylize,
|
prelude::Stylize,
|
||||||
widgets::{Block, Borders},
|
text::Text,
|
||||||
|
widgets::{Block, BorderType, Borders},
|
||||||
Frame,
|
Frame,
|
||||||
};
|
};
|
||||||
use rkyv::{deserialize, rancor};
|
use rkyv::{deserialize, rancor};
|
||||||
@@ -16,7 +18,7 @@ struct Root {
|
|||||||
running_state: RunningState,
|
running_state: RunningState,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default, Debug)]
|
#[derive(Default, Debug, PartialEq)]
|
||||||
enum RunningState {
|
enum RunningState {
|
||||||
#[default]
|
#[default]
|
||||||
Running,
|
Running,
|
||||||
@@ -33,18 +35,60 @@ enum Message {
|
|||||||
|
|
||||||
impl Root {
|
impl Root {
|
||||||
fn view(&self, f: &mut Frame) {
|
fn view(&self, f: &mut Frame) {
|
||||||
let block = Block::new()
|
let text = Text::raw("Meow");
|
||||||
.border_type(ratatui::widgets::BorderType::Rounded)
|
let block = Block::new().borders(Borders::ALL).title("Meow");
|
||||||
.borders(Borders::ALL);
|
let flex_vert = Layout::vertical([Constraint::Fill(1)])
|
||||||
f.render_widget(block, f.area());
|
.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>> {
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
let mut app = Root::default();
|
let mut app = Root::default();
|
||||||
ratatui::run(|terminal| loop {
|
ratatui::run(|terminal| {
|
||||||
|
while app.running_state == RunningState::Running {
|
||||||
terminal.draw(|frame| {
|
terminal.draw(|frame| {
|
||||||
app.view(frame);
|
app.view(frame);
|
||||||
})?;
|
})?;
|
||||||
|
app.update()?;
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user