#[derive(Debug, Clone, Default)]
pub struct MenuBarMenu {
pub items: Vec<MenuBarMenuItem>,
}
#[derive(Debug, Clone)]
pub enum MenuBarMenuItem {
Item { id: String, label: String, enabled: bool },
Submenu { label: String, items: Vec<MenuBarMenuItem> },
Separator,
Predefined(PredefinedMenuItemType),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PredefinedMenuItemType {
Quit,
About,
Separator,
}
impl MenuBarMenu {
pub fn new() -> Self {
Self { items: Vec::new() }
}
pub fn add_item(mut self, id: impl Into<String>, label: impl Into<String>) -> Self {
self.items.push(MenuBarMenuItem::Item {
id: id.into(),
label: label.into(),
enabled: true,
});
self
}
pub fn add_item_disabled(mut self, id: impl Into<String>, label: impl Into<String>) -> Self {
self.items.push(MenuBarMenuItem::Item {
id: id.into(),
label: label.into(),
enabled: false,
});
self
}
pub fn add_submenu(mut self, label: impl Into<String>, items: Vec<MenuBarMenuItem>) -> Self {
self.items.push(MenuBarMenuItem::Submenu { label: label.into(), items });
self
}
pub fn add_separator(mut self) -> Self {
self.items.push(MenuBarMenuItem::Separator);
self
}
pub fn add_quit(mut self) -> Self {
self.items.push(MenuBarMenuItem::Predefined(PredefinedMenuItemType::Quit));
self
}
pub fn add_about(mut self) -> Self {
self.items.push(MenuBarMenuItem::Predefined(PredefinedMenuItemType::About));
self
}
}