use ratatui::{crossterm::event::KeyEvent, style::{Style, Stylize}, text::ToSpan, widgets::Widget}; use crate::lua::iobuffer::iobuffer; use super::statusbar::StatusBar; #[derive(Default)] pub struct LogView { bar: StatusBar, } impl LogView { pub fn new() -> Self { Self { bar: StatusBar::new().left(" Log ").left_style(Style::default().on_magenta()), } } pub fn handle_key_event(&mut self, _event: KeyEvent) {} } impl Widget for &mut LogView { fn render(self, area: ratatui::prelude::Rect, buf: &mut ratatui::prelude::Buffer) where Self: Sized, { self.bar.render(area, buf); let inner_area = self.bar.area(area); let lines = { let buffer = iobuffer().read().unwrap(); buffer.get() }; let mut line_area = inner_area; line_area.height = 1; line_area.y = inner_area.y + inner_area.height - 1; for line in lines.lines().rev() { let line = line.to_span(); line.render(line_area, buf); line_area.y -= 1; if !inner_area.contains(line_area.into()) { break; } } } }