use crate::gui::util; use crate::util::event::{Event, Events}; use anyhow::Result; use termion::event::Key; use tui::{ backend::Backend, layout::{Alignment, Constraint, Direction, Layout}, widgets::Paragraph, Terminal, }; pub fn show( terminal: &mut Terminal, events: &Events, title: &str, message: &str, wait: bool, ) -> Result<()> { loop { terminal.draw(|f| { let chunks = Layout::default() .direction(Direction::Vertical) .margin(2) .constraints([Constraint::Length(1), Constraint::Percentage(50)].as_ref()) .split(f.size()); let d1 = util::title(title); f.render_widget(d1, chunks[0]); let message = Paragraph::new(util::center_vertically(chunks[1], &message.to_string())) .alignment(Alignment::Center); f.render_widget(message, chunks[1]); })?; if wait { if let Event::Input(key) = events.next()? { match key { Key::Char('q') => break, _ => (), } } } else { break; } } Ok(()) }