leetcode_tui_core/
help.rs

1use ratatui::widgets::*;
2
3pub struct Help {
4    state: TableState,
5    items: Vec<Vec<&'static str>>,
6    visible: bool,
7}
8
9impl Default for Help {
10    fn default() -> Self {
11        let mut help = Self {
12            state: TableState::default(),
13            items: vec![
14                vec!["t", "Move to Next Topic"],
15                vec!["T", "Move to Previous Topic"],
16                vec!["Ctrl+s", "Show/Hide topic stats"],
17                vec!["j/Down", "Move to Next Question"],
18                vec!["k/Up", "Move to Previous Question"],
19                vec!["r", "Move to Random Question"],
20                vec!["Enter", "Read Question/Selection"],
21                vec!["e", "Open Editor"],
22                vec!["R", "Run Solution"],
23                vec!["s", "Submit Solution"],
24                vec!["/", "Search"],
25                vec!["c", "Open config file"],
26                vec!["*", "Sync database!"],
27            ],
28            visible: Default::default(),
29        };
30        if !help.items.is_empty() {
31            help.state.select(Some(0));
32        }
33        help
34    }
35}
36
37impl Help {
38    pub fn is_visible(&self) -> bool {
39        self.visible
40    }
41    pub fn get_mut_state(&mut self) -> &mut TableState {
42        &mut self.state
43    }
44}
45
46impl Help {
47    pub fn toggle(&mut self) -> bool {
48        self.visible = !self.visible;
49        true
50    }
51
52    pub fn get_items(&self) -> &Vec<Vec<&'static str>> {
53        &self.items
54    }
55
56    pub fn next(&mut self) -> bool {
57        let i = match self.state.selected() {
58            Some(i) => {
59                if i >= self.items.len() - 1 {
60                    0
61                } else {
62                    i + 1
63                }
64            }
65            None => 0,
66        };
67        self.state.select(Some(i));
68        true
69    }
70
71    pub fn previous(&mut self) -> bool {
72        let i = match self.state.selected() {
73            Some(i) => {
74                if i == 0 {
75                    self.items.len() - 1
76                } else {
77                    i - 1
78                }
79            }
80            None => 0,
81        };
82        self.state.select(Some(i));
83        true
84    }
85
86    pub fn get_headers() {}
87}