Files
rstemp/src/app.rs
RainBus c8eb942b13 Popup
2024-10-16 20:32:02 +08:00

47 lines
1019 B
Rust

use std::io;
use crossterm::event::{self, Event, KeyCode, KeyEvent, KeyEventKind};
use ratatui::{DefaultTerminal, Frame};
use crate::view::{home::Home, View};
pub struct App {
running: bool,
view: Home,
}
impl Default for App {
fn default() -> Self {
App {
running: true,
view: Home::default(),
}
}
}
impl App {
pub fn run(&mut self, terminal: &mut DefaultTerminal) -> io::Result<()> {
while self.running {
terminal.draw(|frame| self.draw(frame))?;
self.handle_event()?;
}
Ok(())
}
fn draw(&self, frame: &mut Frame) {
self.view.draw(frame);
}
fn handle_event(&mut self) -> io::Result<()> {
match event::read()? {
Event::Key(KeyEvent {
kind: KeyEventKind::Press,
code: KeyCode::Esc,
..
}) => self.running = false,
event => self.view.handle_event(&event)?,
}
Ok(())
}
}