romm_cli/tui/screens/
main_menu.rs1use ratatui::widgets::{Block, Borders, List, ListItem, ListState};
2use ratatui::Frame;
3
4pub struct MainMenuScreen {
6 pub selected: usize,
7}
8
9impl Default for MainMenuScreen {
10 fn default() -> Self {
11 Self::new()
12 }
13}
14
15impl MainMenuScreen {
16 pub fn new() -> Self {
17 Self { selected: 0 }
18 }
19
20 pub fn next(&mut self) {
21 self.selected = (self.selected + 1) % 6;
22 }
23
24 pub fn previous(&mut self) {
25 self.selected = if self.selected == 0 {
26 5
27 } else {
28 self.selected - 1
29 };
30 }
31
32 pub fn render(&self, f: &mut Frame, area: ratatui::layout::Rect) {
33 let items = vec![
34 ListItem::new("Browse Games"),
35 ListItem::new("Search"),
36 ListItem::new("Downloads"),
37 ListItem::new("Settings"),
38 ListItem::new("API (Expert)"),
39 ListItem::new("Exit"),
40 ];
41
42 let list = List::new(items)
43 .block(Block::default().title("Game Library").borders(Borders::ALL))
44 .highlight_symbol(">> ");
45
46 let mut state = ListState::default();
47 state.select(Some(self.selected));
48
49 f.render_stateful_widget(list, area, &mut state);
50 }
51}