rl 0.4.0

A reinforcement learning library
Documentation
use ratatui::{prelude::*, widgets::*};

pub fn render_help(area: Rect, buf: &mut Buffer, selected_tab: usize) {
    let lines = vec![
        vec![
            Span::from("  q  ").light_cyan().bold(),
            Span::raw(" : Stop training and exit viz"),
        ],
        vec![
            Span::from("  h  ").light_cyan().bold(),
            Span::raw(" : Toggle help popup"),
        ],
        vec![
            Span::from(" Tab ").light_cyan().bold(),
            Span::raw(" : Switch tabs"),
        ],
    ];

    let additional_lines = match selected_tab {
        0 => vec![vec![
            Span::from("⬅ / ➡").light_cyan().bold(),
            Span::raw(" : Switch plots"),
        ]],
        1 => vec![
            vec![
                Span::from("  s  ").light_cyan().bold(),
                Span::raw(" : Toggles target selector widget hidden/visible"),
            ],
            vec![
                Span::from("  f  ").light_cyan().bold(),
                Span::raw(" : Toggle focus on the selected target only"),
            ],
            vec![
                Span::from("⬆ / ⬇").light_cyan().bold(),
                Span::raw(" : Switch log target"),
            ],
            vec![
                Span::from("⬅ / ➡").light_cyan().bold(),
                Span::raw(" : Reduce/increase shown log messages by one level"),
            ],
            vec![
                Span::from("- / +").light_cyan().bold(),
                Span::raw(" : Reduce/increase captured log messages by one level"),
            ],
            vec![
                Span::from("PgUp ").light_cyan().bold(),
                Span::raw(" : Enter Page Mode and scroll approx. half page up in log history"),
            ],
            vec![
                Span::from("PgDn ").light_cyan().bold(),
                Span::raw(" : Only in page mode, scroll 10 events down in log history"),
            ],
            vec![
                Span::from(" Esc ").light_cyan().bold(),
                Span::raw(" : Exit page mode and go back to scrolling mode"),
            ],
            vec![
                Span::from("Space").light_cyan().bold(),
                Span::raw(" : Toggles hiding of targets, which have logfilter set to off"),
            ],
        ],
        _ => vec![],
    };

    let lines = [lines, additional_lines]
        .concat()
        .into_iter()
        .map(Line::from)
        .collect::<Vec<_>>();

    let [_, center_vert, _] = Layout::vertical([
        Constraint::Fill(1),
        Constraint::Length((lines.len() + 4) as u16),
        Constraint::Fill(1),
    ])
    .areas(area);

    let [_, center, _] = Layout::horizontal([
        Constraint::Fill(1),
        Constraint::Length(100),
        Constraint::Fill(1),
    ])
    .areas(center_vert);

    Clear.render(center, buf);

    Paragraph::new(lines)
        .block(
            Block::bordered()
                .border_type(BorderType::Rounded)
                .padding(Padding::proportional(1))
                .title("Help"),
        )
        .wrap(Wrap { trim: false })
        .render(center, buf);
}