Currently, this is how you would define a fairly standard menu. It's pretty awkward because you can't completely use the builder pattern if you have any platform differences:
.menu({
let mut menu = Menu::new();
#[cfg(target_os = "macos")]
{
menu = menu.add_submenu(Submenu::new(
&ctx.package_info().name,
Menu::new()
.add_native_item(MenuItem::About(ctx.package_info().name.clone()))
.add_native_item(MenuItem::Separator)
.add_item(CustomMenuItem::new("Preferences...", "Preferences...").accelerator("CmdOrCtrl+,"))
.add_native_item(MenuItem::Separator),
// ...
))
}
menu = menu
.add_submenu(/* File submenu */)
.add_submenu(/* Edit submenu */)
.add_submenu(/* View submenu */)
.add_submenu(/* Window submenu */)
.add_submenu(/* Help submenu */);
menu
})
If you could pass a list of submenus instead, it becomes more intuitive because you can directly add attributes to the items:
.menu(Menu::new(vec![
#[cfg(target_os = "macos")]
MenuItem::Submenu(Submenu::new(
&ctx.package_info().name,
Menu::new(vec![
MenuItem::About("My App".to_string()),
MenuItem::Separator,
MenuItem::Custom(CustomMenuItem::new("Preferences...", "Preferences...").accelerator("CmdOrCtrl+,")),
MenuItem::Separator,
]),
)),
MenuItem::Submenu(Submenu::new(/* File submenu */)),
MenuItem::Submenu(Submenu::new(/* Edit submenu */)),
MenuItem::Submenu(Submenu::new(/* View submenu */)),
MenuItem::Submenu(Submenu::new(/* Window submenu */)),
MenuItem::Submenu(Submenu::new(/* Help submenu */)),
]))
The differences here are:
Menu::new() takes Vec<MenuItem>
- New
MenuItem variant: MenuItem::Custom(CustomMenuItem)
- New
MenuItem variant: MenuItem::Submenu(Submenu)
Currently, this is how you would define a fairly standard menu. It's pretty awkward because you can't completely use the builder pattern if you have any platform differences:
If you could pass a list of submenus instead, it becomes more intuitive because you can directly add attributes to the items:
The differences here are:
Menu::new()takesVec<MenuItem>MenuItemvariant:MenuItem::Custom(CustomMenuItem)MenuItemvariant:MenuItem::Submenu(Submenu)