mod helpers;
mod hint; mod input;
mod messages;
mod status;
use crate::app::TuiApp;
use ratatui::layout::Rect;
impl TuiApp {
pub(crate) fn draw(&self, f: &mut ratatui::Frame) {
let total_height = f.area().height;
let hint_height = if self.should_show_hint() { 1u16 } else { 0u16 };
let input_lines = self.input.lines().count().max(1);
let input_height = if input_lines <= 2 {
2u16 } else {
input_lines.min(5) as u16 + 1
};
let status_height = 1u16;
let queue_height = if self.pending_messages.is_empty() { 0u16 } else { 1u16 };
let input_y = total_height.saturating_sub(status_height + input_height);
let hint_y = input_y.saturating_sub(hint_height);
let status_y = total_height.saturating_sub(status_height);
let queue_y = hint_y.saturating_sub(queue_height);
let messages_height = queue_y;
let messages_area = Rect::new(f.area().x, f.area().y, f.area().width, messages_height);
let queue_area = Rect::new(f.area().x, queue_y, f.area().width, queue_height);
let hint_area = Rect::new(f.area().x, hint_y, f.area().width, hint_height);
let input_area = Rect::new(f.area().x, input_y, f.area().width, input_height);
let status_area = Rect::new(f.area().x, status_y, f.area().width, status_height);
self.draw_messages(f, messages_area);
if !self.pending_messages.is_empty() {
self.draw_queue(f, queue_area);
}
if hint_height > 0 {
self.draw_hint(f, hint_area);
}
self.draw_input(f, input_area);
self.draw_status(f, status_area);
}
}