ratatui_toolkit/primitives/menu_bar/constructors/
mod.rs

1use ratatui::style::{Color, Modifier, Style};
2
3use crate::primitives::menu_bar::{MenuBar, MenuItem};
4
5impl MenuItem {
6    pub fn new(name: impl Into<String>, value: usize) -> Self {
7        Self {
8            name: name.into(),
9            icon: None,
10            value,
11            selected: false,
12            hovered: false,
13            area: None,
14        }
15    }
16
17    pub fn with_icon(name: impl Into<String>, icon: impl Into<String>, value: usize) -> Self {
18        Self {
19            name: name.into(),
20            icon: Some(icon.into()),
21            value,
22            selected: false,
23            hovered: false,
24            area: None,
25        }
26    }
27
28    pub fn display_label(&self) -> String {
29        if let Some(ref icon) = self.icon {
30            format!("{} {}", icon, self.name)
31        } else {
32            self.name.clone()
33        }
34    }
35}
36
37impl MenuBar {
38    pub fn new(items: Vec<MenuItem>) -> Self {
39        Self {
40            items,
41            area: None,
42            normal_style: Style::default().fg(Color::White),
43            selected_style: Style::default()
44                .fg(Color::Cyan)
45                .add_modifier(Modifier::BOLD),
46            hover_style: Style::default().fg(Color::Cyan),
47            selected_hover_style: Style::default()
48                .fg(Color::Cyan)
49                .add_modifier(Modifier::BOLD),
50        }
51    }
52
53    pub fn with_selected(mut self, index: usize) -> Self {
54        if index < self.items.len() {
55            self.items[index].selected = true;
56        }
57        self
58    }
59
60    pub fn normal_style(mut self, style: Style) -> Self {
61        self.normal_style = style;
62        self
63    }
64
65    pub fn selected_style(mut self, style: Style) -> Self {
66        self.selected_style = style;
67        self
68    }
69
70    pub fn hover_style(mut self, style: Style) -> Self {
71        self.hover_style = style;
72        self
73    }
74
75    pub fn selected_hover_style(mut self, style: Style) -> Self {
76        self.selected_hover_style = style;
77        self
78    }
79}