added a simple menu
Realistically simpler than the default. Note this is also where keyboard shortcuts are defined.
This commit is contained in:
parent
56fca5acf5
commit
c3caae87c8
3
index.js
3
index.js
|
@ -15,6 +15,9 @@ function createWindow () {
|
|||
var tray = require('./tray');
|
||||
tray.init(win);
|
||||
|
||||
var menu = require('./menu');
|
||||
menu.init(win);
|
||||
|
||||
// and load the index.html of the app.
|
||||
win.loadURL(url.format({
|
||||
pathname: path.join(__dirname, 'index.html'),
|
||||
|
|
|
@ -0,0 +1,263 @@
|
|||
var electron = require('electron');
|
||||
var app = electron.app;
|
||||
|
||||
var win, menu;
|
||||
|
||||
function getMenuItem (label) {
|
||||
var menuItem;
|
||||
menu.items.some(function (topLvl) {
|
||||
menuItem = topLvl.submenu.items.find(function (item) {
|
||||
return item.label === label;
|
||||
});
|
||||
return menuItem;
|
||||
});
|
||||
return menuItem || {};
|
||||
}
|
||||
|
||||
function updateFullScreenCheckbox() {
|
||||
getMenuItem('Full Screen').checked = win.isFullScreen();
|
||||
win.setMenuBarVisibility(!win.isFullScreen());
|
||||
}
|
||||
function toggleFullScreen(flag) {
|
||||
if (!win || !win.isVisible()) {
|
||||
return;
|
||||
}
|
||||
if (typeof flag !== 'boolean') {
|
||||
flag = !win.isFullScreen();
|
||||
}
|
||||
|
||||
if (flag) {
|
||||
// Fullscreen and aspect ratio do not play well together. (Mac)
|
||||
win.setAspectRatio(0);
|
||||
}
|
||||
win.setFullScreen(flag);
|
||||
}
|
||||
|
||||
// Sets whether the window should always show on top of other windows
|
||||
function toggleAlwaysOnTop(flag) {
|
||||
if (!win) {
|
||||
return;
|
||||
}
|
||||
if (typeof flag !== 'boolean') {
|
||||
flag = !win.isAlwaysOnTop();
|
||||
}
|
||||
|
||||
win.setAlwaysOnTop(flag);
|
||||
getMenuItem('Float on Top').checked = flag;
|
||||
}
|
||||
|
||||
function toggleDevTools() {
|
||||
if (!win) {
|
||||
return;
|
||||
}
|
||||
if (win.webContents.isDevToolsOpened()) {
|
||||
win.webContents.closeDevTools();
|
||||
} else {
|
||||
win.webContents.openDevTools();
|
||||
}
|
||||
}
|
||||
|
||||
function init(window) {
|
||||
if (win) {
|
||||
console.error("can't initialize the tray mulitple times");
|
||||
return;
|
||||
}
|
||||
win = window;
|
||||
|
||||
var template = [
|
||||
{
|
||||
label: 'File',
|
||||
submenu: [
|
||||
{
|
||||
role: 'close'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'Edit',
|
||||
submenu: [
|
||||
{
|
||||
role: 'undo'
|
||||
},
|
||||
{
|
||||
role: 'redo'
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
role: 'cut'
|
||||
},
|
||||
{
|
||||
role: 'copy'
|
||||
},
|
||||
{
|
||||
role: 'paste'
|
||||
},
|
||||
{
|
||||
role: 'delete'
|
||||
},
|
||||
{
|
||||
role: 'selectall'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'View',
|
||||
submenu: [
|
||||
{
|
||||
label: 'Full Screen',
|
||||
type: 'checkbox',
|
||||
accelerator: process.platform === 'darwin' ? 'Ctrl+Command+F' : 'F11',
|
||||
click: toggleFullScreen,
|
||||
},
|
||||
{
|
||||
label: 'Float on Top',
|
||||
type: 'checkbox',
|
||||
click: toggleAlwaysOnTop,
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
label: 'Developer',
|
||||
submenu: [
|
||||
{
|
||||
label: 'Developer Tools',
|
||||
accelerator: process.platform === 'darwin' ? 'Alt+Command+I' : 'Ctrl+Shift+I',
|
||||
click: toggleDevTools,
|
||||
},
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
];
|
||||
|
||||
if (process.platform === 'darwin') {
|
||||
// WebTorrent menu (Mac)
|
||||
template.unshift({
|
||||
label: 'Electron Demo',
|
||||
submenu: [
|
||||
{
|
||||
role: 'about'
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
label: 'Preferences',
|
||||
accelerator: 'Cmd+,',
|
||||
click: function () { console.log('TODO: implement preferences'); }
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
role: 'services',
|
||||
submenu: []
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
role: 'hide'
|
||||
},
|
||||
{
|
||||
role: 'hideothers'
|
||||
},
|
||||
{
|
||||
role: 'unhide'
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
role: 'quit'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
// Edit menu (Mac)
|
||||
template[2].submenu.push(
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
label: 'Speech',
|
||||
submenu: [
|
||||
{
|
||||
role: 'startspeaking'
|
||||
},
|
||||
{
|
||||
role: 'stopspeaking'
|
||||
}
|
||||
]
|
||||
}
|
||||
);
|
||||
|
||||
// Window menu (Mac)
|
||||
template.push({
|
||||
role: 'window',
|
||||
submenu: [
|
||||
{
|
||||
role: 'minimize'
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
role: 'front'
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
// On Windows and Linux, open dialogs do not support selecting both files and
|
||||
// folders and files, so add an extra menu item so there is one for each type.
|
||||
if (process.platform === 'linux' || process.platform === 'win32') {
|
||||
// Edit menu (Windows, Linux)
|
||||
template[1].submenu.push(
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
label: 'Preferences',
|
||||
accelerator: 'CmdOrCtrl+,',
|
||||
click: function () { console.log('TODO: implement preferences'); }
|
||||
}
|
||||
);
|
||||
|
||||
// Add an help.about option
|
||||
template.push({
|
||||
label: 'Help',
|
||||
submenu: [
|
||||
{
|
||||
label: 'About',
|
||||
click: function () { console.log('TODO: implement about'); },
|
||||
}
|
||||
],
|
||||
});
|
||||
}
|
||||
// Add "File > Quit" menu item so Linux distros where the system tray icon is
|
||||
// missing will have a way to quit the app.
|
||||
if (process.platform === 'linux') {
|
||||
// File menu (Linux)
|
||||
template[0].submenu.push({
|
||||
label: 'Quit',
|
||||
accelerator: 'CmdOrCtrl+Q',
|
||||
click: function () { return app.quit(); }
|
||||
});
|
||||
}
|
||||
|
||||
menu = electron.Menu.buildFromTemplate(template);
|
||||
electron.Menu.setApplicationMenu(menu);
|
||||
|
||||
win.webContents.on('dom-ready', updateFullScreenCheckbox);
|
||||
win.on('enter-full-screen', updateFullScreenCheckbox);
|
||||
win.on('leave-full-screen', updateFullScreenCheckbox);
|
||||
}
|
||||
|
||||
module.exports.init = init;
|
Loading…
Reference in New Issue