use anyhow::Result;
use muda::accelerator::{Accelerator, Code, Modifiers};
use muda::{Menu, MenuId, MenuItem, PredefinedMenuItem, Submenu};
use super::actions::MenuAction;
use std::collections::HashMap;
pub fn init_for_nsapp(menu: &Menu, window_menu: Option<&Submenu>, help_menu: Option<&Submenu>) {
menu.init_for_nsapp();
if let Some(window_menu) = window_menu {
window_menu.set_as_windows_menu_for_nsapp();
}
if let Some(help_menu) = help_menu {
help_menu.set_as_help_menu_for_nsapp();
}
log::info!("Initialized macOS global menu bar");
}
pub fn build_app_menu(
menu: &Menu,
action_map: &mut HashMap<MenuId, MenuAction>,
quit_accelerator: Option<Accelerator>,
) -> Result<()> {
let app_menu = Submenu::new("par-term", true);
let about_app = MenuItem::with_id("about_app", "About par-term", true, None);
action_map.insert(about_app.id().clone(), MenuAction::About);
app_menu.append(&about_app)?;
app_menu.append(&PredefinedMenuItem::separator())?;
let settings_app = MenuItem::with_id(
"settings_app",
"Settings...",
true,
Some(Accelerator::new(Modifiers::META, Code::Comma)),
);
action_map.insert(settings_app.id().clone(), MenuAction::OpenSettings);
app_menu.append(&settings_app)?;
app_menu.append(&PredefinedMenuItem::separator())?;
app_menu.append(&PredefinedMenuItem::services(None))?;
app_menu.append(&PredefinedMenuItem::separator())?;
app_menu.append(&PredefinedMenuItem::hide(None))?;
app_menu.append(&PredefinedMenuItem::hide_others(None))?;
app_menu.append(&PredefinedMenuItem::show_all(None))?;
app_menu.append(&PredefinedMenuItem::separator())?;
let quit_app = MenuItem::with_id("quit_app", "Quit par-term", true, quit_accelerator);
action_map.insert(quit_app.id().clone(), MenuAction::Quit);
app_menu.append(&quit_app)?;
menu.append(&app_menu)?;
Ok(())
}