use tuirealm::application::Application;
use tuirealm::ratatui::layout::{Constraint, Direction, Layout};
use tuirealm::terminal::{CrosstermTerminalAdapter, TerminalAdapter, TerminalResult};
use super::{Id, Msg, UserEvent};
pub struct Model {
pub app: Application<Id, Msg, UserEvent>,
pub quit: bool,
pub redraw: bool,
pub terminal: CrosstermTerminalAdapter,
}
impl Model {
fn init_adapter() -> TerminalResult<CrosstermTerminalAdapter> {
let mut adapter = CrosstermTerminalAdapter::new()?;
adapter.enable_raw_mode()?;
adapter.enter_alternate_screen()?;
Ok(adapter)
}
pub fn new(app: Application<Id, Msg, UserEvent>) -> TerminalResult<Self> {
Ok(Self {
app,
quit: false,
redraw: true,
terminal: Self::init_adapter()?,
})
}
pub fn view(&mut self) {
assert!(
self.terminal
.draw(|f| {
let chunks = Layout::default()
.direction(Direction::Vertical)
.margin(1)
.constraints(
[
Constraint::Length(3), Constraint::Length(3), ]
.as_ref(),
)
.split(f.area());
self.app.view(&Id::Label, f, chunks[0]);
self.app.view(&Id::Other, f, chunks[1]);
})
.is_ok()
);
}
}
impl Model {
pub fn update(&mut self, msg: Msg) {
self.redraw = true;
match msg {
Msg::AppClose => {
self.quit = true; }
Msg::Redraw => (),
}
}
}