From 22c8553af68c6f5b2c62ba790e06b249ac82ed2a Mon Sep 17 00:00:00 2001 From: "Julian T." Date: Mon, 29 Apr 2024 22:25:47 +0200 Subject: Add beginnning ui and database --- src/render.rs | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/render.rs (limited to 'src/render.rs') diff --git a/src/render.rs b/src/render.rs new file mode 100644 index 0000000..8c9ce38 --- /dev/null +++ b/src/render.rs @@ -0,0 +1,66 @@ +use std::io; + +use crossterm::event::{self, Event, KeyCode, KeyEvent, KeyEventKind}; +use ratatui::{ + buffer::Buffer, layout::{Alignment, Constraint, Direction, Layout, Rect}, style::Stylize, symbols::border, text::Text, widgets::{block::Title, Block, Borders, Paragraph, Widget}, Frame +}; + +use crate::tui; + +use self::footer::Footer; + +mod footer; + +#[derive(Debug, Default)] +pub struct App { + exit: bool, +} + +impl App { + pub fn run(&mut self, terminal: &mut tui::Tui) -> io::Result<()> { + while !self.exit { + terminal.draw(|frame| self.render_frame(frame))?; + self.handle_events()?; + } + + Ok(()) + } + + fn render_frame(&self, frame: &mut Frame) { + frame.render_widget(self, frame.size()); + } + + fn handle_events(&mut self) -> io::Result<()> { + match event::read()?{ + Event::Key(key_event) if key_event.kind == KeyEventKind::Press => { + self.handle_key_event(key_event); + } + _ => () + } + Ok(()) + } + + pub fn exit(&mut self) { + self.exit = true; + } + + fn handle_key_event(&mut self, event: KeyEvent) { + match event.code { + KeyCode::Char('q') => self.exit(), + _ => () + } + } +} + +impl Widget for &App { + fn render(self, area: Rect, buf: &mut Buffer) { + let chunks = Layout::default() + .direction(Direction::Vertical) + .constraints([ + Constraint::Min(1), + Constraint::Length(1), + ]) + .split(area); + Footer::new().render(chunks[1], buf); + } +} -- cgit v1.2.3