use crate::{commands, LocalizedString, SysMods};
use super::*;
pub mod common {
use super::*;
pub fn cut<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("common-menu-cut"))
.command(commands::CUT)
.hotkey(SysMods::Cmd, "x")
}
pub fn copy<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("common-menu-copy"))
.command(commands::COPY)
.hotkey(SysMods::Cmd, "c")
}
pub fn paste<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("common-menu-paste"))
.command(commands::PASTE)
.hotkey(SysMods::Cmd, "v")
}
pub fn undo<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("common-menu-undo"))
.command(commands::UNDO)
.hotkey(SysMods::Cmd, "z")
}
pub fn redo<T: Data>() -> MenuItem<T> {
let item = MenuItem::new(LocalizedString::new("common-menu-redo")).command(commands::REDO);
#[cfg(target_os = "windows")]
{
item.hotkey(SysMods::Cmd, "y")
}
#[cfg(not(target_os = "windows"))]
{
item.hotkey(SysMods::CmdShift, "Z")
}
}
}
pub mod win {
use super::*;
pub mod file {
use super::*;
use crate::FileDialogOptions;
pub fn default<T: Data>() -> Menu<T> {
Menu::new(LocalizedString::new("common-menu-file-menu"))
.entry(new())
.entry(open())
.entry(close())
.entry(save_ellipsis())
.entry(save_as())
.entry(print())
.entry(page_setup())
.separator()
.entry(exit())
}
pub fn new<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("common-menu-file-new"))
.command(commands::NEW_FILE)
.hotkey(SysMods::Cmd, "n")
}
pub fn open<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("common-menu-file-open"))
.command(commands::SHOW_OPEN_PANEL.with(FileDialogOptions::default()))
.hotkey(SysMods::Cmd, "o")
}
pub fn close<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("common-menu-file-close"))
.command(commands::CLOSE_WINDOW)
}
pub fn save<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("common-menu-file-save"))
.command(commands::SAVE_FILE)
.hotkey(SysMods::Cmd, "s")
}
pub fn save_ellipsis<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("common-menu-file-save-ellipsis"))
.command(commands::SHOW_SAVE_PANEL.with(FileDialogOptions::default()))
.hotkey(SysMods::Cmd, "s")
}
pub fn save_as<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("common-menu-file-save-as"))
.command(commands::SHOW_SAVE_PANEL.with(FileDialogOptions::default()))
.hotkey(SysMods::CmdShift, "S")
}
pub fn print<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("common-menu-file-print"))
.command(commands::PRINT)
.hotkey(SysMods::Cmd, "p")
}
pub fn print_preview<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("common-menu-file-print-preview"))
.command(commands::PRINT_PREVIEW)
}
pub fn page_setup<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("common-menu-file-page-setup"))
.command(commands::PRINT_SETUP)
}
pub fn exit<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("win-menu-file-exit")).command(commands::QUIT_APP)
}
}
}
pub mod mac {
use super::*;
pub fn menu_bar<T: Data>() -> Menu<T> {
Menu::new(LocalizedString::new(""))
.entry(application::default())
.entry(file::default())
}
pub mod application {
use super::*;
pub fn default<T: Data>() -> Menu<T> {
#[allow(deprecated)]
Menu::new(LocalizedString::new("macos-menu-application-menu"))
.entry(about())
.separator()
.entry(preferences().enabled(false))
.separator()
.entry(hide())
.entry(hide_others())
.entry(show_all().enabled(false))
.separator()
.entry(quit())
}
pub fn about<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("macos-menu-about-app"))
.command(commands::SHOW_ABOUT)
}
pub fn preferences<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("macos-menu-preferences"))
.command(commands::SHOW_PREFERENCES)
.hotkey(SysMods::Cmd, ",")
}
#[cfg_attr(
not(target_os = "macos"),
deprecated = "hide does nothing on platforms other than macOS"
)]
pub fn hide<T: Data>() -> MenuItem<T> {
#[allow(deprecated)]
MenuItem::new(LocalizedString::new("macos-menu-hide-app"))
.command(commands::HIDE_APPLICATION)
.hotkey(SysMods::Cmd, "h")
}
#[cfg_attr(
not(target_os = "macos"),
deprecated = "hide_others does nothing on platforms other than macOS"
)]
pub fn hide_others<T: Data>() -> MenuItem<T> {
#[allow(deprecated)]
MenuItem::new(LocalizedString::new("macos-menu-hide-others"))
.command(commands::HIDE_OTHERS)
.hotkey(SysMods::AltCmd, "h")
}
pub fn show_all<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("macos-menu-show-all")).command(commands::SHOW_ALL)
}
pub fn quit<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("macos-menu-quit-app"))
.command(commands::QUIT_APP)
.hotkey(SysMods::Cmd, "q")
}
}
pub mod file {
use super::*;
use crate::FileDialogOptions;
pub fn default<T: Data>() -> Menu<T> {
Menu::new(LocalizedString::new("common-menu-file-menu"))
.entry(new_file())
.entry(open_file())
.separator()
.entry(close())
.entry(save().enabled(false))
.entry(save_as().enabled(false))
.separator()
.entry(page_setup().enabled(false))
.entry(print().enabled(false))
}
pub fn new_file<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("common-menu-file-new"))
.command(commands::NEW_FILE)
.hotkey(SysMods::Cmd, "n")
}
pub fn open_file<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("common-menu-file-open"))
.command(commands::SHOW_OPEN_PANEL.with(FileDialogOptions::default()))
.hotkey(SysMods::Cmd, "o")
}
pub fn close<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("common-menu-file-close"))
.command(commands::CLOSE_WINDOW)
.hotkey(SysMods::Cmd, "w")
}
pub fn save<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("common-menu-file-save"))
.command(commands::SAVE_FILE)
.hotkey(SysMods::Cmd, "s")
}
pub fn save_ellipsis<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("common-menu-file-save-ellipsis"))
.command(commands::SHOW_SAVE_PANEL.with(FileDialogOptions::default()))
.hotkey(SysMods::Cmd, "s")
}
pub fn save_as<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("common-menu-file-save-as"))
.command(commands::SHOW_SAVE_PANEL.with(FileDialogOptions::default()))
.hotkey(SysMods::CmdShift, "S")
}
pub fn page_setup<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("common-menu-file-page-setup"))
.command(commands::PRINT_SETUP)
.hotkey(SysMods::CmdShift, "P")
}
pub fn print<T: Data>() -> MenuItem<T> {
MenuItem::new(LocalizedString::new("common-menu-file-print"))
.command(commands::PRINT)
.hotkey(SysMods::Cmd, "p")
}
}
}