PenetrationTestingScripts/antSword/modules/menubar.js

211 lines
6.6 KiB
JavaScript

/**
* 菜单栏模块
*/
'use strict';
class Menubar {
constructor(electron, app, mainWindow) {
const Menu = electron.Menu;
const Tray = electron.Tray;
const nativeImage = electron.nativeImage;
const path = require('path');
// 清空菜单栏
Menu.setApplicationMenu(Menu.buildFromTemplate([]));
// 监听重载菜单事件
electron.ipcMain
.on('quit', app.quit.bind(app))
.on('menubar', this.reload.bind(this));
this.electron = electron;
this.app = app;
this.Menu = Menu;
this.Tray = Tray;
this.nativeImage = nativeImage;
this.path = path;
this.trayIcon = null;
this.mainWindow = mainWindow;
}
/**
* 重新载入菜单
* @param {Object} event ipcMain对象
* @param {Object} LANG 语言模板
* @return {[type]} [description]
*/
reload(event, LANG) {
// 菜单模板
const template = [
{
// 主菜单
label: LANG['main']['title'],
submenu: [
{
label: LANG['main']['about'],
accelerator: 'Shift+CmdOrCtrl+I',
click: event.sender.send.bind(event.sender, 'menubar', 'settings-about')
}, {
label: LANG['main']['language'],
accelerator: 'Shift+CmdOrCtrl+L',
click: event.sender.send.bind(event.sender, 'menubar', 'settings-language')
}, {
label: LANG['main']['aproxy'],
accelerator: 'Shift+CmdOrCtrl+A',
click: event.sender.send.bind(event.sender, 'menubar', 'settings-aproxy')
}, {
label: LANG['main']['display'],
accelerator: 'Shift+CmdOrCtrl+D',
click: event.sender.send.bind(event.sender, 'menubar', 'settings-display')
}, {
type: 'separator'
}, {
label: LANG['main']['encoders'],
accelerator: 'Shift+CmdOrCtrl+E',
click: event.sender.send.bind(event.sender, 'menubar', 'settings-encoders')
}, {
type: 'separator'
}, {
label: LANG['main']['settings'],
accelerator: 'Shift+CmdOrCtrl+S',
click: event.sender.send.bind(event.sender, 'menubar', 'settings')
}, {
type: 'separator'
}, {
label: LANG['main']['pluginStore'],
accelerator: 'Shift+CmdOrCtrl+P',
click: event.sender.send.bind(event.sender, 'menubar', 'plugin-store')
}, {
type: 'separator'
}, {
label: LANG['main']['quit'],
accelerator: 'Command+Q',
click: this.app.quit.bind(this.app)
},
]
}, {
// 编辑
label: LANG['edit']['title'],
submenu: [
{
label: LANG['edit']['undo'], accelerator: 'CmdOrCtrl+Z', role: 'undo'
}, {
label: LANG['edit']['redo'], accelerator: 'Shift+CmdOrCtrl+Z', role: 'redo'
}, {
type: 'separator'
}, {
label: LANG['edit']['cut'], accelerator: 'CmdOrCtrl+X', role: 'cut'
}, {
label: LANG['edit']['copy'], accelerator: 'CmdOrCtrl+C', role: 'copy'
}, {
label: LANG['edit']['paste'], accelerator: 'CmdOrCtrl+V', role: 'paste'
}, {
type: 'separator'
}, {
label: LANG['edit']['selectall'], accelerator: 'CmdOrCtrl+A', role: 'selectall'
}
]
}, {
// 窗口
label: LANG['window']['title'],
submenu: [
{
label: LANG['window']['next'], accelerator: 'Shift+CmdOrCtrl+Right',
click: event.sender.send.bind(event.sender, 'menubar', 'tabbar-next')
}, {
label: LANG['window']['prev'], accelerator: 'Shift+CmdOrCtrl+Left',
click: event.sender.send.bind(event.sender, 'menubar', 'tabbar-prev')
}, {
type: 'separator'
}, {
label: LANG['window']['close'], accelerator: 'Shift+CmdOrCtrl+W',
click: event.sender.send.bind(event.sender, 'menubar', 'tabbar-close')
}
]
}, {
// 调试
label: LANG['debug']['title'],
submenu: [
{
label: LANG['debug']['restart'],
accelerator: 'Shift+CmdOrCtrl+R',
click: () => {
// 在有多个窗口的时候,不刷新
if (this.electron.BrowserWindow.getAllWindows().length > 1) {
return;
}
this.mainWindow.webContents.reload();//.bind(this.mainWindow.webContents)
}
}, {
label: LANG['debug']['devtools'],
accelerator: 'Alt+CmdOrCtrl+J',
click: this.mainWindow.webContents.toggleDevTools.bind(this.mainWindow.webContents)
}
]
}
];
// 更新菜单栏
this.Menu.setApplicationMenu(this.Menu.buildFromTemplate(template));
if (this.trayIcon) {
this.trayIcon.setContextMenu(this.Menu.buildFromTemplate([]));
}else{
let image;
if (process.platform === 'darwin' || process.platform === 'linux') {
image = this.nativeImage.createFromPath(this.path.join(__dirname, '../static/imgs/tray-icon-mac-2.png'));
}else{
// windows下的Tray图标
image = this.nativeImage.createFromPath(this.path.join(__dirname, '../static/imgs/tray-icon-win-colorful.ico'));
}
image.setTemplateImage(true);
this.trayIcon = new this.Tray(image);
}
var trayMenuTemplate = [
{
label: LANG['tray']['show'],
click: () => {
this.mainWindow.show();
}
}, {
label: LANG['tray']['hide'],
click: () => {
if (process.platform == 'darwin') {
this.app.hide();
}else{
this.mainWindow.hide();
}
}
}, {
label: LANG['tray']['settings'],
click: event.sender.send.bind(event.sender, 'menubar', 'settings')
}, {
label: LANG['tray']['about'],
click: event.sender.send.bind(event.sender, 'menubar', 'settings-about')
}, {
type: 'separator'
}, {
label: LANG['tray']['quit'],
click: this.app.quit.bind(this.app)
}
];
this.trayIcon.on('click', () => {
if (process.platform == 'darwin') return;
if (this.mainWindow.isVisible()) {
this.mainWindow.hide();
}else{
this.mainWindow.show();
}
});
this.trayIcon.setToolTip(LANG['tray']['tip']);
this.trayIcon.setContextMenu(this.Menu.buildFromTemplate(trayMenuTemplate));
}
}
module.exports = Menubar;