leetcode_tui_rs/widgets/
help.rs

1use ratatui::prelude::*;
2use ratatui::widgets::Widget;
3use ratatui::widgets::*;
4
5use crate::ctx::Ctx;
6
7pub(super) struct Help<'a> {
8    cx: &'a mut Ctx,
9}
10
11impl<'a> Help<'a> {
12    pub(super) fn new(cx: &'a mut Ctx) -> Self {
13        Self { cx }
14    }
15}
16
17impl<'a> Widget for Help<'a> {
18    fn render(self, area: ratatui::prelude::Rect, buf: &mut ratatui::prelude::Buffer) {
19        let selected_style = Style::default()
20            .add_modifier(Modifier::REVERSED)
21            .add_modifier(Modifier::BOLD)
22            .bg(Color::Rgb(229, 228, 226))
23            .fg(Color::Black);
24        let rows = self.cx.help.get_items().iter().map(|item| {
25            let cells = item.iter().map(|c| Cell::from(*c));
26            Row::new(cells)
27        });
28
29        let t = Table::new(
30            rows,
31            &[
32                Constraint::Percentage(50),
33                Constraint::Max(30),
34                Constraint::Min(10),
35            ],
36        )
37        .block(Block::default().borders(Borders::ALL).title("Help"))
38        .row_highlight_style(selected_style);
39        Clear.render(area, buf);
40        ratatui::widgets::StatefulWidget::render(t, area, buf, self.cx.help.get_mut_state());
41    }
42}