Skip to main content

romm_cli/tui/screens/
main_menu.rs

1use ratatui::widgets::{Block, Borders, List, ListItem, ListState};
2use ratatui::Frame;
3
4/// Simple main menu screen for choosing the high-level mode.
5pub 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}