leetcode_tui_core/
help.rs1use 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}