ratatui_toolkit/primitives/menu_bar/constructors/
mod.rs1use 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}