From 79fd8e5e573f87d092f1e531d71ea761d18d033a Mon Sep 17 00:00:00 2001 From: Doloro1978 Date: Fri, 20 Mar 2026 15:02:34 +0000 Subject: [PATCH] wip --- src/tui/main.rs | 66 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 55 insertions(+), 11 deletions(-) diff --git a/src/tui/main.rs b/src/tui/main.rs index 7e2264a..88480a2 100644 --- a/src/tui/main.rs +++ b/src/tui/main.rs @@ -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, Box> { + 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 { + 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> { + 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> { 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(()) }) }