- Copy complete source code packages from original CodeNomad project - Add root package.json with npm workspace configuration - Include electron-app, server, ui, tauri-app, and opencode-config packages - Fix Launch-Windows.bat and Launch-Dev-Windows.bat to work with correct npm scripts - Fix Launch-Unix.sh to work with correct npm scripts - Launchers now correctly call npm run dev:electron which launches Electron app
85 lines
2.4 KiB
TypeScript
85 lines
2.4 KiB
TypeScript
import { Menu, BrowserWindow, MenuItemConstructorOptions } from "electron"
|
|
|
|
export function createApplicationMenu(mainWindow: BrowserWindow) {
|
|
const isMac = process.platform === "darwin"
|
|
|
|
const template: MenuItemConstructorOptions[] = [
|
|
...(isMac
|
|
? [
|
|
{
|
|
label: "CodeNomad",
|
|
submenu: [
|
|
{ role: "about" as const },
|
|
{ type: "separator" as const },
|
|
{ role: "hide" as const },
|
|
{ role: "hideOthers" as const },
|
|
{ role: "unhide" as const },
|
|
{ type: "separator" as const },
|
|
{ role: "quit" as const },
|
|
],
|
|
},
|
|
]
|
|
: []),
|
|
{
|
|
label: "File",
|
|
submenu: [
|
|
{
|
|
label: "New Instance",
|
|
accelerator: "CmdOrCtrl+N",
|
|
click: () => {
|
|
mainWindow.webContents.send("menu:newInstance")
|
|
},
|
|
},
|
|
{ type: "separator" as const },
|
|
isMac ? { role: "close" as const } : { role: "quit" as const },
|
|
],
|
|
},
|
|
{
|
|
label: "Edit",
|
|
submenu: [
|
|
{ role: "undo" as const },
|
|
{ role: "redo" as const },
|
|
{ type: "separator" as const },
|
|
{ role: "cut" as const },
|
|
{ role: "copy" as const },
|
|
{ role: "paste" as const },
|
|
...(isMac
|
|
? [{ role: "pasteAndMatchStyle" as const }, { role: "delete" as const }, { role: "selectAll" as const }]
|
|
: [{ role: "delete" as const }, { type: "separator" as const }, { role: "selectAll" as const }]),
|
|
],
|
|
},
|
|
{
|
|
label: "View",
|
|
submenu: [
|
|
{ role: "reload" as const },
|
|
{ role: "forceReload" as const },
|
|
{ role: "toggleDevTools" as const },
|
|
{ type: "separator" as const },
|
|
{ role: "resetZoom" as const },
|
|
{ role: "zoomIn" as const },
|
|
{ role: "zoomOut" as const },
|
|
{ type: "separator" as const },
|
|
{ role: "togglefullscreen" as const },
|
|
],
|
|
},
|
|
{
|
|
label: "Window",
|
|
submenu: [
|
|
{ role: "minimize" as const },
|
|
{ role: "zoom" as const },
|
|
...(isMac
|
|
? [
|
|
{ type: "separator" as const },
|
|
{ role: "front" as const },
|
|
{ type: "separator" as const },
|
|
{ role: "window" as const },
|
|
]
|
|
: [{ role: "close" as const }]),
|
|
],
|
|
},
|
|
]
|
|
|
|
const menu = Menu.buildFromTemplate(template)
|
|
Menu.setApplicationMenu(menu)
|
|
}
|