| 1 | import { Menu, type MenuItemConstructorOptions } from "electron"; |
| 2 | |
| 3 | export interface MenuDeps { |
| 4 | platform: NodeJS.Platform; |
| 5 | openSettings(): void; |
| 6 | toggleDevTools(): void; |
| 7 | showWindow(): void; |
| 8 | quit(): void; |
| 9 | zoomIn(): void; |
| 10 | zoomOut(): void; |
| 11 | resetZoom(): void; |
| 12 | } |
| 13 | |
| 14 | export function applicationMenuTemplate(deps: MenuDeps): MenuItemConstructorOptions[] { |
| 15 | return [ |
| 16 | ...(deps.platform === "darwin" ? [{ role: "appMenu" as const }] : []), |
| 17 | { |
| 18 | label: "File", |
| 19 | submenu: [ |
| 20 | { label: "Settings", accelerator: "CmdOrCtrl+,", click: () => deps.openSettings() }, |
| 21 | { label: "Toggle Developer Tools", accelerator: "CmdOrCtrl+I", click: () => deps.toggleDevTools() }, |
| 22 | { label: "Show Reasonix", click: () => deps.showWindow() }, |
| 23 | { type: "separator" }, |
| 24 | { label: "Quit Reasonix", accelerator: "CmdOrCtrl+Q", click: () => deps.quit() }, |
| 25 | ], |
| 26 | }, |
| 27 | { role: "editMenu" }, |
| 28 | { label: "View", submenu: [ |
| 29 | { label: "Zoom In", accelerator: "CmdOrCtrl+=", click: () => deps.zoomIn() }, |
| 30 | { label: "Zoom Out", accelerator: "CmdOrCtrl+-", click: () => deps.zoomOut() }, |
| 31 | { label: "Reset Zoom", accelerator: "CmdOrCtrl+0", click: () => deps.resetZoom() }, |
| 32 | ] }, |
| 33 | { role: "windowMenu" }, |
| 34 | ]; |
| 35 | } |
| 36 | |
| 37 | export function installApplicationMenu(deps: MenuDeps): void { |
| 38 | Menu.setApplicationMenu(Menu.buildFromTemplate(applicationMenuTemplate(deps))); |
| 39 | } |
| 40 |