| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 |
- /**
- * @author oldj
- * @blog http://oldj.net
- */
- 'use strict';
- const path = require('path');
- const paths = require('../libs/paths');
- const {Menu, shell, ipcMain, dialog} = require('electron');
- const m_chk_update = require('../../bg/check_for_update');
- const m_lang = require('../lang');
- const pref = require('./../libs/pref');
- const version = require('../../version').version;
- exports.init = function (app, sys_lang = 'en') {
- let lang = m_lang.getLang(pref.get('user_language', sys_lang));
- let last_path = null;
- const template = [
- {
- label: lang.file,
- submenu: [
- {
- label: lang.new,
- accelerator: 'CommandOrControl+N',
- click: () => {
- ipcMain.emit('to_add_host');
- }
- }, {
- type: 'separator'
- }, {
- label: lang.import,
- accelerator: 'Alt+CommandOrControl+I',
- click: () => {
- dialog.showOpenDialog({
- title: lang.import,
- defaultPath: path.join(last_path || paths.home_path, 'sh.json'),
- filters: [
- {name: 'JSON', extensions: ['json']},
- {name: 'All Files', extensions: ['*']}
- ]
- }, (fns) => {
- if (fns && fns.length > 0) {
- ipcMain.emit('to_import', fns[0]);
- last_path = path.dirname(fns[0]);
- }
- });
- }
- }, {
- label: lang.export,
- accelerator: 'Alt+CommandOrControl+E',
- click: () => {
- dialog.showSaveDialog({
- title: lang.export,
- defaultPath: path.join(last_path || paths.home_path, 'sh.json'),
- filters: [
- {name: 'JSON', extensions: ['json']},
- {name: 'All Files', extensions: ['*']}
- ]
- }, (fn) => {
- if (fn) {
- ipcMain.emit('to_export', fn);
- last_path = path.dirname(fn);
- }
- });
- }
- }, {
- type: 'separator'
- }, {
- label: lang.preferences,
- accelerator: 'CommandOrControl+,',
- click: () => {
- app.mainWindow.webContents.send('show_preferences');
- }
- }
- ]
- },
- {
- label: lang.edit,
- submenu: [{
- role: 'undo'
- }, {
- role: 'redo'
- }, {
- type: 'separator'
- }, {
- role: 'cut'
- }, {
- role: 'copy'
- }, {
- role: 'paste'
- }, {
- role: 'pasteandmatchstyle'
- }, {
- role: 'delete'
- }, {
- role: 'selectall'
- }, {
- type: 'separator'
- }, {
- label: lang.search,
- accelerator: 'CommandOrControl+F',
- click () {
- // ipcMain.emit('to_search');
- app.mainWindow.webContents.send('to_search');
- }
- }, {
- label: lang.comment,
- accelerator: 'CommandOrControl+/',
- click () {
- // ipcMain.emit('to_search');
- app.mainWindow.webContents.send('to_comment');
- }
- }]
- }, {
- label: lang.view,
- submenu: [
- // {
- // label: 'Reload',
- // accelerator: 'CmdOrCtrl+R',
- // click (item, focusedWindow) {
- // if (focusedWindow) focusedWindow.reload()
- // }
- // },
- // {
- // label: 'Toggle Developer Tools',
- // accelerator: process.platform === 'darwin' ? 'Alt+Command+I' : 'Ctrl+Shift+I',
- // click (item, focusedWindow) {
- // if (focusedWindow) focusedWindow.webContents.toggleDevTools()
- // }
- // },
- // {
- // type: 'separator'
- // },
- {
- role: 'resetzoom'
- }, {
- role: 'zoomin'
- }, {
- role: 'zoomout'
- }, {
- type: 'separator'
- }, {
- role: 'togglefullscreen'
- }
- ]
- }, {
- label: lang.window,
- role: 'window',
- submenu: [{
- role: 'minimize'
- }, {
- role: 'close'
- }]
- }, {
- label: lang.help,
- role: 'help',
- submenu: [{
- label: lang.check_update,
- click () {
- m_chk_update.check();
- }
- }, {
- type: 'separator'
- }, {
- label: lang.feedback,
- click () {
- shell.openExternal('https://github.com/oldj/SwitchHosts/issues');
- }
- }, {
- label: lang.homepage,
- click () {
- shell.openExternal('http://oldj.github.io/SwitchHosts/');
- }
- }]
- }
- ];
- const name = require('electron').app.getName();
- const os = process.platform;
- if (os === 'darwin') {
- template.unshift({
- label: name,
- submenu: [{
- role: 'about'
- }, {
- type: 'separator'
- },
- // {
- // role: 'services',
- // submenu: []
- // },
- // {
- // type: 'separator'
- // },
- {
- role: 'hide'
- }, {
- role: 'hideothers'
- }, {
- role: 'unhide'
- }, {
- type: 'separator'
- }, {
- role: 'quit'
- }]
- });
- // Edit menu.
- /*template[2].submenu.push(
- {
- type: 'separator'
- },
- {
- label: 'Speech',
- submenu: [
- {
- role: 'startspeaking'
- },
- {
- role: 'stopspeaking'
- }
- ]
- }
- );*/
- // Window menu.
- template[4].submenu = [
- {
- label: 'Close',
- accelerator: 'CmdOrCtrl+W',
- role: 'close'
- },
- {
- label: 'Minimize',
- accelerator: 'CmdOrCtrl+M',
- role: 'minimize'
- },
- {
- label: 'Zoom',
- role: 'zoom'
- },
- {
- type: 'separator'
- },
- {
- label: 'Bring All to Front',
- role: 'front'
- }
- ]
- } else if (os == 'win32') {
- template[0].submenu.unshift({
- type: 'separator'
- });
- template[0].submenu.unshift({
- role: 'about',
- click: () => {
- dialog.showMessageBox({
- type: 'info',
- buttons: [],
- title: 'About',
- message: `${name} v${version.slice(0, 3).join('.')} (${version[3]})`
- });
- }
- });
- template[0].submenu.push({
- type: 'separator'
- });
- template[0].submenu.push({
- label: 'Quit',
- role: 'quit',
- accelerator: 'CmdOrCtrl+Q',
- });
- // VIEW
- template[2].submenu.splice(0, 4);
- }
- if (process.env.ENV == 'dev') {
- // VIEW
- template[3].submenu = [
- {
- label: 'Reload',
- accelerator: 'CmdOrCtrl+R',
- click (item, focusedWindow) {
- if (focusedWindow) focusedWindow.reload()
- }
- },
- {
- label: 'Toggle Developer Tools',
- accelerator: process.platform === 'darwin' ? 'Alt+Command+I' : 'Ctrl+Shift+I',
- click (item, focusedWindow) {
- if (focusedWindow) focusedWindow.webContents.toggleDevTools()
- }
- },
- {
- type: 'separator'
- }
- ].concat(template[3].submenu);
- }
- const menu = Menu.buildFromTemplate(template);
- Menu.setApplicationMenu(menu);
- }
- ;
|