Simple Roles and Menus
A MenuItem template can have the following roles:
role: undo
, redo
, cut
, copy
, paste
, pasteAndMatchStyle
, delete
, selectAll
, reload
, forceReload
, toggleDevTools
, resetZoom
, zoomIn
, zoomOut
, togglefullscreen
, window
, minimize
, close
, help
, about
, services
, hide
, hideOthers
, unhide
, quit
, startSpeaking
, stopSpeaking
, close
, minimize
, zoom
, front
, appMenu
, fileMenu
, editMenu
, viewMenu
, recentDocuments
, toggleTabBar
, selectNextTab
, selectPreviousTab
, mergeAllWindows
, clearRecentDocuments
, moveTabToNewWindow
or windowMenu
main.js
const menuBuilder = new MenuBuilder(mainWindow);
menuBuilder.buildMenu();
Menubuilder.js
const template = [
// { role: 'appMenu' }
...(isMac ? [{
label: app.name,
submenu: [
{ role: 'about' },
{ type: 'separator' },
{ role: 'services' },
{ type: 'separator' },
{ role: 'hide' },
{ role: 'hideothers' },
{ role: 'unhide' },
{ type: 'separator' },
{ role: 'quit' }
]
}] : []),
// { role: 'fileMenu' }
{
label: 'File',
submenu: [
isMac ? { role: 'close' } : { role: 'quit' }
]
},
// { role: 'editMenu' }
{
label: 'Edit',
submenu: [
{ role: 'undo' },
{ role: 'redo' },
{ type: 'separator' },
{ role: 'cut' },
{ role: 'copy' },
{ role: 'paste' },
...(isMac ? [
{ role: 'pasteAndMatchStyle' },
{ role: 'delete' },
{ role: 'selectAll' },
{ type: 'separator' },
{
label: 'Speech',
submenu: [
{ role: 'startspeaking' },
{ role: 'stopspeaking' }
]
}
] : [
{ role: 'delete' },
{ type: 'separator' },
{ role: 'selectAll' }
])
]
},
// { role: 'viewMenu' }
{
label: 'View',
submenu: [
{ role: 'reload' },
{ role: 'forcereload' },
{ role: 'toggledevtools' },
{ type: 'separator' },
{ role: 'resetzoom' },
{ role: 'zoomin' },
{ role: 'zoomout' },
{ type: 'separator' },
{ role: 'togglefullscreen' }
]
},
// { role: 'windowMenu' }
{
label: 'Window',
submenu: [
{ role: 'minimize' },
{ role: 'zoom' },
...(isMac ? [
{ type: 'separator' },
{ role: 'front' },
{ type: 'separator' },
{ role: 'window' }
] : [
{ role: 'close' }
])
]
},
{
role: 'help',
submenu: [
{
label: 'Learn More',
click: async () => {
const { shell } = require('electron')
await shell.openExternal('https://electronjs.org')
}
}
]
}
]
const menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)
const subMenuEdit = {
label: "Edit",
submenu: [
{ label: "Undo", accelerator: "Command+Z", selector: "undo:" },
{ label: "Redo", accelerator: "Shift+Command+Z", selector: "redo:" },
{ type: "separator" },
{ label: "Cut", accelerator: "Command+X", selector: "cut:" },
{ label: "Copy", accelerator: "Command+C", selector: "copy:" },
{ label: "Paste", accelerator: "Command+V", selector: "paste:" },
{ role: "pasteAndMatchStyle" },
{ role: "selectAll" },
{ type: "separator" },
{
label: "Speech",
submenu: [{ role: "startspeaking" }, { role: "stopspeaking" }]
}
]
};
const subMenuWindow = {
label: "Window",
submenu: [
{
label: "Minimize",
accelerator: "Command+M",
selector: "performMiniaturize:"
},
{ label: "Close", accelerator: "Command+W", selector: "performClose:" },
{ type: "separator" },
{ label: "Bring All to Front", selector: "arrangeInFront:" }
]
};