Example #1
0
function updateMenu(opts) {
  Menu.setApplicationMenu(createMenu(opts))
}
Example #2
0
/**
 * Add a right-click menu to the dock icon. (OS X)
 */
function init () {
  if (!app.dock) return
  var menu = electron.Menu.buildFromTemplate(getMenuTemplate())
  app.dock.setMenu(menu)
}
Example #3
0
  const template = [];

  if(process.platform === 'darwin') {
    template.push(named);
  }

  template.push(file);
  template.push(edit);
  template.push(view);
  template.push(window);
  template.push(help);

  return template;
}

export const defaultMenu = Menu.buildFromTemplate(generateDefaultTemplate());

export function loadFullMenu(endpoint) {
  const listKernelSpecs = endpoint ? listSocketIoKernelSpecs : listZmqKernelSpecs
  const kernelMenuPromise = listKernelSpecs().then(kernelSpecs => {
    return Object.keys(kernelSpecs).map(kernelName => {
      return {
        label: kernelSpecs[kernelName].spec.display_name,
        click: createSender('menu:new-kernel', kernelName),
      };
    });
  });

  return kernelMenuPromise.then(kernelMenuItems => {
    const languageMenu = {
      label: '&Language',
Example #4
0
app.on('ready', () => {
  let maxWidth = process.env.NODE_ENV === 'development' ? 1200 : 700;

  mainWindow = new BrowserWindow({
    show: true,
    width: 700,
    height: 800,
    minWidth: 200,
    maxWidth: maxWidth,
    minHeight: 200,
    fullscreenable: false
  });

  mainWindow.loadURL(`file://${__dirname}/index.html`);

  mainWindow.webContents.on('did-finish-load', () => {
    mainWindow.show();
    mainWindow.focus();
  });

  mainWindow.on('closed', () => {
    mainWindow = null;
  });

  if (process.env.NODE_ENV === 'development') {
    mainWindow.openDevTools();
    mainWindow.webContents.on('context-menu', (e, props) => {
      const { x, y } = props;

      Menu.buildFromTemplate([{
        label: 'Inspect element',
        click() {
          mainWindow.inspectElement(x, y);
        }
      }]).popup(mainWindow);
    });
  }

  if (process.platform === 'darwin') {
    template = [{
      label: 'QuickTwitch',
      submenu: [{
        label: 'About QuickTwitch',
        selector: 'orderFrontStandardAboutPanel:'
      }, {
        type: 'separator'
      }, {
        label: 'Services',
        submenu: []
      }, {
        type: 'separator'
      }, {
        label: 'Hide QuickTwitch',
        accelerator: 'Command+H',
        selector: 'hide:'
      }, {
        label: 'Hide Others',
        accelerator: 'Command+Shift+H',
        selector: 'hideOtherApplications:'
      }, {
        label: 'Show All',
        selector: 'unhideAllApplications:'
      }, {
        type: 'separator'
      }, {
        label: 'Quit',
        accelerator: 'Command+Q',
        click() {
          app.quit();
        }
      }]
    }, {
      label: 'View',
      submenu: (process.env.NODE_ENV === 'development') ? [{
        label: 'Reload',
        accelerator: 'Command+R',
        click() {
          mainWindow.webContents.reload();
        }
      }, {
        label: 'Toggle Full Screen',
        accelerator: 'Ctrl+Command+F',
        click() {
          mainWindow.setFullScreen(!mainWindow.isFullScreen());
        }
      }, {
        label: 'Toggle Developer Tools',
        accelerator: 'Alt+Command+I',
        click() {
          mainWindow.toggleDevTools();
        }
      }] : [{
        label: 'Toggle Full Screen',
        accelerator: 'Ctrl+Command+F',
        click() {
          mainWindow.setFullScreen(!mainWindow.isFullScreen());
        }
      }]
    }, {
      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:'
      }]
    }];

    menu = Menu.buildFromTemplate(template);
    Menu.setApplicationMenu(menu);
  } else {
    template = [{
      label: '&File',
      submenu: [{
        label: '&Open',
        accelerator: 'Ctrl+O'
      }, {
        label: '&Close',
        accelerator: 'Ctrl+W',
        click() {
          mainWindow.close();
        }
      }]
    }, {
      label: '&View',
      submenu: (process.env.NODE_ENV === 'development') ? [{
        label: '&Reload',
        accelerator: 'Ctrl+R',
        click() {
          mainWindow.webContents.reload();
        }
      }, {
        label: 'Toggle &Full Screen',
        accelerator: 'F11',
        click() {
          mainWindow.setFullScreen(!mainWindow.isFullScreen());
        }
      }, {
        label: 'Toggle &Developer Tools',
        accelerator: 'Alt+Ctrl+I',
        click() {
          mainWindow.toggleDevTools();
        }
      }] : [{
        label: 'Toggle &Full Screen',
        accelerator: 'F11',
        click() {
          mainWindow.setFullScreen(!mainWindow.isFullScreen());
        }
      }]
    }];
    menu = Menu.buildFromTemplate(template);
    mainWindow.setMenu(menu);
  }
});
Example #5
0
 contextMenu.items.forEach((item)=> {
   tempMenu.append(item)
 })
Example #6
0
 setMenu(menuTemplate) {
     electron_1.Menu.setApplicationMenu(electron_1.Menu.buildFromTemplate(menuTemplate));
 }
Example #7
0
Electron.app.on('ready', () => {
  App.HandleAPIs();
  ElectronUpdater.autoUpdater.checkForUpdates();
  new App();

  Electron.Menu.setApplicationMenu(Electron.Menu.buildFromTemplate([{
    label: "Application",
    submenu: [{
        label: "About Application",
        selector: "orderFrontStandardAboutPanel:"
      },
      {
        type: "separator"
      },
      {
        label: "Quit",
        accelerator: "Command+Q",
        click: function() {
          Electron.app.quit();
        }
      }
    ]
  }, {
    label: "Edit",
    submenu: [{
        label: "Undo",
        accelerator: "CmdOrCtrl+Z",
        selector: "undo:"
      },
      {
        label: "Redo",
        accelerator: "Shift+CmdOrCtrl+Z",
        selector: "redo:"
      },
      {
        type: "separator"
      },
      {
        label: "Cut",
        accelerator: "CmdOrCtrl+X",
        selector: "cut:"
      },
      {
        label: "Copy",
        accelerator: "CmdOrCtrl+C",
        selector: "copy:"
      },
      {
        label: "Paste",
        accelerator: "CmdOrCtrl+V",
        selector: "paste:"
      },
      {
        label: "Select All",
        accelerator: "CmdOrCtrl+A",
        selector: "selectAll:"
      },
      {
        label: 'Developer Tools',
        accelerator: "CmdOrCtrl+Alt+I",
        click: (item, focusedWindow) => {
          if (focusedWindow) {
            const webContents = focusedWindow.webContents;
            if (webContents.isDevToolsOpened()) {
              webContents.closeDevTools();
            } else {
              webContents.openDevTools({
                mode: 'detach'
              });
            }
          }
        }
      }
    ]
  }]));
});
const createMenu = function (webviews) {
    webviews = webviews || [];

    const menu = Menu.buildFromTemplate(menuTempl(webviews));
    Menu.setApplicationMenu(menu);
};
Example #9
0
  insert ( path, pos, template ) {
    // in object mode, we should set label from path if not exists
    if ( !Array.isArray(template) ) {
      if ( !template.label && template.type !== 'separator' ) {
        let start = path.lastIndexOf( '/' );
        if ( start !== -1 ) {
          template.label = path.slice( start + 1 );
          path = path.slice( 0, start );
        }
      }
    }

    // insert at root
    let parentPath = Path.dirname(path);
    if ( parentPath === '.' ) {
      if ( !Array.isArray(template) ) {
        template = [template];
      }

      Menu.convert(template);
      let newSubMenu = Electron.Menu.buildFromTemplate(template);

      let newMenuItem = new Electron.MenuItem({
        label: path,
        id: path.toLowerCase(),
        submenu: new Electron.Menu(),
        type: 'submenu',
      });
      for ( let i = 0; i < newSubMenu.items.length; ++i ) {
        let newSubMenuItem = newSubMenu.items[i];
        newMenuItem.submenu.append(newSubMenuItem);
      }

      this.nativeMenu.insert( pos, newMenuItem );

      return true;
    }

    // insert at path
    let name = Path.basename(path);
    let menuItem = _getMenuItem( this.nativeMenu, parentPath );

    if ( !menuItem ) {
      Console.error(`Failed to find menu in path: ${parentPath}` );
      return false;
    }

    if ( menuItem.type !== 'submenu' || !menuItem.submenu) {
      Console.error(`Failed to insert menu at ${parentPath}, it is not a submenu`);
      return false;
    }

    let exists = menuItem.submenu.items.some(item => {
      return item.label === name;
    });

    if ( exists ) {
      Console.error(
        `Failed to insert menu to ${path}, already exists`
      );
      return false;
    }

    if ( !Array.isArray(template) ) {
      template = [template];
    }

    Menu.convert(template);
    let newSubMenu = Electron.Menu.buildFromTemplate(template);

    let newMenuItem = new Electron.MenuItem({
      label: name,
      id: name.toLowerCase(),
      submenu: new Electron.Menu(),
      type: 'submenu',
    });
    for ( let i = 0; i < newSubMenu.items.length; ++i ) {
      let newSubMenuItem = newSubMenu.items[i];
      newMenuItem.submenu.append(newSubMenuItem);
    }

    menuItem.submenu.insert( pos, newMenuItem );

    return true;
  }
Example #10
0
app.on('ready', function() {

  // Application Menu
  var appMenu = Menu.buildFromTemplate([
    {
      label: 'OpenBazaar',
      submenu: [
        {
          label: 'Quit OpenBazaar',
          accelerator: 'CmdOrCtrl+Q',
          click: function() {
            app.quit();
          }
        }
      ]
    },
    {
      label: 'Edit',
      submenu: [
        { label: "Undo", accelerator: "CmdOrCtrl+Z", selector: "undo:" },
        { label: "Redo", accelerator: "Shift+CmdOrCtrl+Z", selector: "redo:" },
        { type: "separator" },
        { label: "Cut", accelerator: "CmdOrCtrl+X", selector: "cut:" },
        { label: "Copy", accelerator: "CmdOrCtrl+C", selector: "copy:" },
        { label: "Paste", accelerator: "CmdOrCtrl+V", selector: "paste:" },
        { label: "Select All", accelerator: "CmdOrCtrl+A", selector: "selectAll:" }
      ]
    },
    {
      label: 'View',
      submenu: [
        {
          label: 'Reload',
          accelerator: 'CmdOrCtrl+R',
          click: function(item, focusedWindow) {
            if (focusedWindow) {
              focusedWindow.reload();
            }
          }
        },
        {
          label: 'Toggle Developer Tools',
          accelerator: (function() {
            if (platform == 'mac') {
              return 'Alt+Command+I';
            }
            return 'Ctrl+Shift+I';
          })(),
          click: function(item, focusedWindow) {
            if (focusedWindow) {
              focusedWindow.toggleDevTools();
            }
          }
        },
        {
          label: 'Toggle Full Screen',
          accelerator: (function() {
            if (platform == 'mac') {
              return 'Ctrl+Command+F';
            }
            return 'F11';
          })(),
          click: function() {
            var fullScreen;

            if (mainWindow) {
              fullScreen = !mainWindow.isFullScreen();
              mainWindow.setFullScreen(fullScreen);

              if (fullScreen) {
                mainWindow.webContents.send('fullscreen-enter');
              } else {
                mainWindow.webContents.send('fullscreen-exit');
              }
            }
          }
        }
      ]
    },
    {
      label: 'Window',
      submenu: [
        {
          label: 'Minimize',
          selector: 'performMiniaturize:',
          accelerator: 'Command+M'
        }
      ]
    }
  ]);
  Menu.setApplicationMenu(appMenu);

  // put logic here to set tray icon based on OS
  var osTrayIcon = 'openbazaar-mac-system-tray.png';

  trayMenu = new Tray(__dirname + '/imgs/' + osTrayIcon);
  var template = [
    {
      label: 'Start Local Server', type: 'normal', click: function () {
        start_local_server();
      }
    },
    {
      label: 'Shutdown Local Server', type: 'normal', click: function () {
        request('http://*****:*****@openbazaar.org?subject=OpenBazaar Debug Report&body=' + body);

    }}
  ];

  if (launched_from_installer) {
    template.push({label: 'View Python Error Log', type: 'normal', click: function() {
      var logPath = __dirname + path.sep + 'python_error.log';
      open(logPath);
    }});
  }

  template.push(
    {
      type: 'separator'
    },
    {
      label: 'Quit', type: 'normal', accelerator: 'Command+Q', click: function () {
        app.quit();
      }
    }
  );

  var contextMenu = Menu.buildFromTemplate(template);

  trayMenu.setContextMenu(contextMenu);

  // Create the browser window.
  mainWindow = new BrowserWindow({
    "width": 1200,
    "height": 760,
    "minWidth": 1024,
    "minHeight": 700,
    "center": true,
    "title": "OpenBazaar",
    "frame": false,
    "icon": "imgs/openbazaar-icon.png",
  });

  // and load the index.html of the app.
  if (open_url) {
    mainWindow.loadURL('file://' + __dirname + '/index.html' + open_url);
  } else {
    mainWindow.loadURL('file://' + __dirname + '/index.html');
  }

  // Open the devtools.
  // Uncomment if you want tools to open on startup
  //mainWindow.openDevTools({detach: true});

  // Emitted when the window is closed.
  mainWindow.on('closed', function() {
    // Dereference the window object, usually you would store windows
    // in an array if your app supports multi windows, this is the time
    // when you should delete the corresponding element.
    mainWindow = null;

    if (launched_from_installer) kill_local_server();
  });

  mainWindow.on('close', function() {
    app.quit();
  });

  app.on('activate', function() {
    mainWindow.show();
  });

  autoUpdater.on("error", function(err, msg) {
    console.log(msg); //print msg , you can find the cash reason.
  });

  autoUpdater.on("update-not-available", function(msg) {
    mainWindow.webContents.executeJavaScript("console.log('Update not available! Your software is up to date.')");
  });

  autoUpdater.on("update-available", function() {
    mainWindow.webContents.executeJavaScript("console.log('Update available! Downloading now...')");
  });

  autoUpdater.on("update-downloaded", function(e, releaseNotes, releaseName, releaseDate, updateUrl, quitAndUpdate) {
    mainWindow.webContents.executeJavaScript("console.log('Update downloaded." + updateUrl + "')");
    mainWindow.webContents.executeJavaScript('$(".js-softwareUpdate").removeClass("softwareUpdateHidden");');
  });

  ipcMain.on('installUpdate', function() {
    console.log('Installing Update');
    autoUpdater.quitAndInstall();
  });

  var feedURL = 'https://updates.openbazaar.org:5001/update/' + platform + '/' + version;
  autoUpdater.setFeedURL(feedURL);
  mainWindow.webContents.executeJavaScript("console.log('Checking for new versions at " + feedURL + " ...')");

  // Check for updates every hour
  autoUpdater.checkForUpdates();
  setInterval(function () {
    autoUpdater.checkForUpdates();
  }, 3600000);

});
Example #11
0
function createWindow(status, hideLoadingWindow) {
	if (process.argv.indexOf('spvcoins=all/add-all') > -1) {
		shepherd.startSPV('kmd');
	}

	if (status === 'open') {
		require(path.join(__dirname, 'private/mainmenu'));

		if (closeAppAfterLoading) {
			mainWindow = null;
			loadingWindow = null;
		}

		const staticMenu = Menu.buildFromTemplate([ // if static
			{ role: 'copy' },
			{ type: 'separator' },
			{ role: 'selectall' },
		]);

		const editMenu = Menu.buildFromTemplate([ // if editable
			{ role: 'undo' },
			{ role: 'redo' },
			{ type: 'separator' },
			{ role: 'cut' },
			{ role: 'copy' },
			{ role: 'paste' },
			{ type: 'separator' },
			{ role: 'selectall' },
		]);

		// check if agama is already running
		portscanner.checkPortStatus(appConfig.agamaPort, '127.0.0.1', (error, status) => {
			// Status is 'open' if currently in use or 'closed' if available
			if (status === 'closed') {
				server.listen(appConfig.agamaPort, () => {
					shepherd.log(`guiapp and sockets.io are listening on port ${appConfig.agamaPort}`);
					shepherd.writeLog(`guiapp and sockets.io are listening on port ${appConfig.agamaPort}`);
					// start sockets.io
					io.set('origins', appConfig.dev ? 'http://127.0.0.1:3000' : `http://127.0.0.1:${appConfig.agamaPort}`); // set origin
				});

				// initialise window
				mainWindow = new BrowserWindow({ // dirty hack to prevent main window flash on quit
					width: closeAppAfterLoading ? 1 : 1280,
					height: closeAppAfterLoading ? 1 : 850,
					icon: agamaIcon,
					show: false,
				});

				if (appConfig.dev) {
					mainWindow.loadURL('http://127.0.0.1:3000');
				} else {
					mainWindow.loadURL(`http://${appConfig.host}:${appConfig.agamaPort}/gui/EasyDEX-GUI/react/build`);
				}

				shepherd.setIO(io); // pass sockets object to shepherd router
				shepherd.setVar('appBasicInfo', appBasicInfo);
				shepherd.setVar('appSessionHash', appSessionHash);

				// load our index.html (i.e. easyDEX GUI)
				shepherd.writeLog('show edex gui');
				mainWindow.appConfig = appConfig;
				mainWindow.appConfigSchema = shepherd.appConfigSchema;
				mainWindow.arch = arch();
				mainWindow.appBasicInfo = appBasicInfo;
				mainWindow.appSessionHash = appSessionHash;
				mainWindow.assetChainPorts = require('./routes/ports.js');
				mainWindow.agamaIcon = agamaIcon;
				mainWindow.testLocation = shepherd.testLocation;
				mainWindow.kmdMainPassiveMode = shepherd.kmdMainPassiveMode;
				mainWindow.getAppRuntimeLog = shepherd.getAppRuntimeLog;
				mainWindow.nativeCoindList = nativeCoindList;
				mainWindow.zcashParamsExist = _zcashParamsExist;
				mainWindow.zcashParamsExistPromise = shepherd.zcashParamsExistPromise;
				mainWindow.zcashParamsDownloadLinks = shepherd.zcashParamsDownloadLinks;
				mainWindow.isWindows = os.platform() === 'win32' ? true : false; // obsolete(?)
				mainWindow.appExit = appExit;
				mainWindow.getMaxconKMDConf = shepherd.getMaxconKMDConf;
				mainWindow.setMaxconKMDConf = shepherd.setMaxconKMDConf;
				mainWindow.getMMCacheData = shepherd.getMMCacheData;
				mainWindow.activeSection = 'wallets';
				mainWindow.argv = process.argv;
				mainWindow.getAssetChainPorts = shepherd.getAssetChainPorts;
				mainWindow.spvFees = _spvFees;
				mainWindow.startSPV = shepherd.startSPV;
				mainWindow.startKMDNative = shepherd.startKMDNative;
				mainWindow.addressVersionCheck = shepherd.addressVersionCheck;
				mainWindow.getCoinByPub = shepherd.getCoinByPub;
				mainWindow.resetSettings = () => { shepherd.saveLocalAppConf(__defaultAppSettings) };
				mainWindow.createSeed = {
					triggered: false,
					firstLoginPH: null,
					secondaryLoginPH: null,
				};

				mainWindow.nnVoteChain = 'VOTE2018';

			  /*for (let i = 0; i < process.argv.length; i++) {
			    if (process.argv[i].indexOf('nvote') > -1) {
			      console.log(`notary node elections chain ${process.argv[i].replace('nvote=', '')}`);
			      mainWindow.nnVoteChain = process.argv[i].replace('nvote=', '');
			    }
			  }*/
			} else {
				mainWindow = new BrowserWindow({
					width: 500,
					height: 355,
					frame: false,
					icon: agamaIcon,
					show: false,
				});

				mainWindow.setResizable(false);
				mainWindow.forseCloseApp = forseCloseApp;

				willQuitApp = true;
				server.listen(appConfig.agamaPort + 1, () => {
					shepherd.log(`guiapp and sockets.io are listening on port ${appConfig.agamaPort + 1}`);
					shepherd.writeLog(`guiapp and sockets.io are listening on port ${appConfig.agamaPort + 1}`);
				});
				mainWindow.loadURL(`http://${appConfig.host}:${appConfig.agamaPort + 1}/gui/startup/agama-instance-error.html`);
				shepherd.log('another agama app is already running');
			}

		  mainWindow.webContents.on('did-finish-load', () => {
		    setTimeout(() => {
		      mainWindow.show();
		    }, 40);
		  });

		  /*loadingWindow.on('close', (e) => {
		  	if (!forseCloseApp) {
			    if (willQuitApp) {
			      loadingWindow = null;
			    } else {
			      closeAppAfterLoading = true;
			      e.preventDefault();
			    }
			  }
		  });*/

			mainWindow.webContents.on('context-menu', (e, params) => { // context-menu returns params
				const { selectionText, isEditable } = params; // params obj

				if (isEditable) {
					editMenu.popup(mainWindow);
				} else if (selectionText && selectionText.trim() !== '') {
					staticMenu.popup(mainWindow);
				}
			});

			// DEVTOOLS - only for dev purposes - ca333
			// mainWindow.webContents.openDevTools()

			function appExit() {
				const CloseDaemons = () => {
					return new Promise((resolve, reject) => {
						shepherd.log('Closing Main Window...');
						shepherd.writeLog('exiting app...');

						shepherd.quitKomodod(appConfig.cliStopTimeout);

						const result = 'Closing daemons: done';

						shepherd.log(result);
						shepherd.writeLog(result);
						resolve(result);
					});
				}

				const HideMainWindow = () => {
					return new Promise((resolve, reject) => {
						const result = 'Hiding Main Window: done';

						shepherd.log('Exiting App...');
						mainWindow = null;
						shepherd.log(result);
						resolve(result);
					});
				}

				const HideAppClosingWindow = () => {
					return new Promise((resolve, reject) => {
						appCloseWindow = null;
						resolve(true);
					});
				}

				const QuitApp = () => {
					return new Promise((resolve, reject) => {
						const result = 'Quiting App: done';

						app.quit();
						shepherd.log(result);
						resolve(result);
					});
				}

				const closeApp = () => {
					CloseDaemons()
					.then(HideMainWindow)
					.then(HideAppClosingWindow)
					.then(QuitApp);
				}

				let _appClosingInterval;

				if (process.argv.indexOf('dexonly') > -1) {
					shepherd.killRogueProcess('marketmaker');
				}
				if (!Object.keys(shepherd.coindInstanceRegistry).length ||
						!appConfig.stopNativeDaemonsOnQuit) {
					closeApp();
				} else {
					createAppCloseWindow();
					shepherd.quitKomodod(appConfig.cliStopTimeout);
					_appClosingInterval = setInterval(() => {
						if (!Object.keys(shepherd.coindInstanceRegistry).length) {
							closeApp();
						}
					}, 1000);
				}
			}

			// close app
			mainWindow.on('closed', () => {
				appExit();
			});
		});
	}
}
Example #12
0
var rightClickMenu = Menu.buildFromTemplate([
  {
    label: 'Edit',
    submenu: [
      {
        label: 'Undo',
        role: 'undo'
      }, {
        label: 'Redo',
        role: 'redo'
      }, {
        type: 'separator'
      }, {
        label: 'Cut',
        role: 'cut'
      }, {
        label: 'Copy',
        role: 'copy'
      }, {
        label: 'Paste',
        role: 'paste'
      }, {
        label: 'Paste and Match Style',
        click: function(item, focusedWindow) {
          if (focusedWindow) {
            focusedWindow.webContents.pasteAndMatchStyle();
          }
        }
      },
      {
        label: 'Select All',
        role: 'selectall'
      }
    ]
  },
  {
    label: 'View',
    submenu: [
      {
        label: 'Reload',
        click: function(item, focusedWindow) {
          if (focusedWindow) {
            focusedWindow.reload();
          }
        }
      },
      {
        label: 'Toggle Developer Tools',
        click: function(item, focusedWindow) {
          if (focusedWindow) {
            focusedWindow.toggleDevTools();
          }
        }
      },
      {
        label: 'Toggle Full Screen',
        click: function(item, focusedWindow) {
          var fullScreen;

          if (focusedWindow) {
            fullScreen = !focusedWindow.isFullScreen();
            focusedWindow.setFullScreen(fullScreen);

            if (fullScreen) {
              focusedWindow.webContents.send('fullscreen-enter');
            } else {
              focusedWindow.webContents.send('fullscreen-exit');
            }
          }
        }
      }
    ]
  },
  {
    label: 'Window',
    submenu: [
      {
        label: 'Maximize',
        click: function(item, focusedWindow) {
          if (focusedWindow) {
            focusedWindow.maximize();
          }
        }
      },
      {
        label: 'Unmaximize',
        click: function(item, focusedWindow) {
          if (focusedWindow) {
            focusedWindow.unmaximize();
          }
        }
      },
      {
        label: 'Minimize',
        click: function(item, focusedWindow) {
          if (focusedWindow) {
            focusedWindow.minimize();
          }
        }
      }
    ]
  }
]);
Example #13
0
 constructor(template) {
   this.menu = Menu.buildFromTemplate(template);
   Menu.setApplicationMenu(this.menu);
 }
Example #14
0
function createMenu(opts) {
  const toggleAppAccelerator =
    config.get('shortcut.toggleApp') || 'CmdOrCtrl+Shift+D'
  const toggleAppAcceleratorRegistered = globalShortcut.isRegistered(
    toggleAppAccelerator
  )

  const preferences = [
    {
      label: 'Preferences',
      submenu: [
        {
          label: 'Custom CSS',
          click() {
            shell.openItem(configDir('custom.css'))
          }
        },
        {
          label: 'Custom JS',
          click() {
            shell.openItem(configDir('custom.js'))
          }
        },
        {
          label: `${
            toggleAppAcceleratorRegistered ? 'Disable' : 'Enable'
          } Global Shortcut`,
          click() {
            toggleGlobalShortcut({
              name: 'toggleApp',
              registered: toggleAppAcceleratorRegistered,
              accelerator: toggleAppAccelerator,
              action: opts.toggleWindow
            })
            updateMenu(opts)
          }
        }
      ]
    },
    {
      type: 'separator'
    }
  ]

  const checkForUpdates = {
    label: 'Check for Updates',
    async click(item, focusedWindow) {
      if (!focusedWindow) return

      const api =
        'https://api.github.com/repos/egoist/devdocs-desktop/releases/latest'
      const latest = await axios.get(api).then(res => res.data)

      if (semverCompare(latest.tag_name.slice(1), pkg.version) === 1) {
        dialog.showMessageBox(
          focusedWindow,
          {
            type: 'info',
            message: 'New updates!',
            detail: `A new release (${
              latest.tag_name
            }) is available, view more details?`,
            buttons: ['OK', 'Cancel'],
            defaultId: 0
          },
          selected => {
            if (selected === 0) {
              shell.openExternal(
                'https://github.com/egoist/devdocs-desktop/releases/latest'
              )
            }
          }
        )
      } else {
        dialog.showMessageBox(focusedWindow, {
          message: 'No updates!',
          detail: `v${pkg.version} is already the latest version.`
        })
      }
    }
  }

  const template = [
    {
      label: 'Edit',
      submenu: [
        {
          role: 'undo'
        },
        {
          role: 'redo'
        },
        {
          type: 'separator'
        },
        {
          role: 'cut'
        },
        {
          role: 'copy'
        },
        {
          role: 'paste'
        },
        {
          role: 'pasteandmatchstyle'
        },
        {
          role: 'delete'
        },
        {
          role: 'selectall'
        }
      ]
    },
    {
      label: 'View',
      submenu: [
        {
          label: 'Reset Text Size',
          accelerator: 'CmdOrCtrl+0',
          click() {
            sendAction('zoom-reset')
          }
        },
        {
          label: 'Increase Text Size',
          accelerator: 'CmdOrCtrl+Plus',
          click() {
            sendAction('zoom-in')
          }
        },
        {
          label: 'Decrease Text Size',
          accelerator: 'CmdOrCtrl+-',
          click() {
            sendAction('zoom-out')
          }
        },
        {
          type: 'separator'
        },
        {
          label: 'Search In Page',
          accelerator: 'CmdOrCtrl+F',
          click(item, focusedWindow) {
            focusedWindow.webContents.send('open-search')
          }
        },
        {
          type: 'separator'
        },
        {
          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()
          }
        }
      ]
    },
    {
      role: 'window',
      submenu: [
        {
          role: 'minimize'
        },
        {
          role: 'close'
        }
      ]
    }
  ]

  if (process.platform === 'darwin') {
    template.unshift({
      label: 'DevDocs',
      submenu: [
        {
          role: 'about'
        },
        checkForUpdates,
        {
          type: 'separator'
        },
        ...preferences,
        {
          role: 'services',
          submenu: []
        },
        {
          type: 'separator'
        },
        {
          role: 'hide'
        },
        {
          role: 'hideothers'
        },
        {
          role: 'unhide'
        },
        {
          type: 'separator'
        },
        {
          role: 'quit'
        }
      ]
    })
    // Edit menu.
    template[1].submenu.push(
      {
        type: 'separator'
      },
      {
        label: 'Speech',
        submenu: [
          {
            role: 'startspeaking'
          },
          {
            role: 'stopspeaking'
          }
        ]
      }
    )
    // Window menu.
    template[3].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 {
    template.push({
      label: 'Preferences',
      submenu: [...preferences[0].submenu, preferences[1], checkForUpdates]
    })
  }

  template.push({
    role: 'help',
    submenu: [
      {
        label: 'Report Issues',
        click() {
          shell.openExternal(
            'http://github.com/egoist/devdocs-desktop/issues/new'
          )
        }
      }
    ]
  })

  return Menu.buildFromTemplate(template)
}
      {
        type: 'separator'
      },
      {
        label: 'Cut',
        accelerator: 'CmdOrCtrl+X',
        role: 'cut'
      },
      {
        label: 'Copy',
        accelerator: 'CmdOrCtrl+C',
        role: 'copy'
      },
      {
        label: 'Paste',
        accelerator: 'CmdOrCtrl+V',
        role: 'paste'
      },
      {
        label: 'Select All',
        accelerator: 'CmdOrCtrl+A',
        role: 'selectall'
      },
    ]
  }
];

const menu = electron.Menu.buildFromTemplate(template);

module.exports = menu;
Example #16
0
 /**
  * Reset the menu from the template.
  * @method reset
  * @param {object[]|object} template
  */
 reset (template) {
   Menu.convert(template);
   this.nativeMenu = Electron.Menu.buildFromTemplate(template);
 }
Example #17
0
app.on('ready', () => {
  mainWindow = new BrowserWindow({
    show: false,
    width: 1024,
    height: 728
  });
  mainWindow.loadURL(`file://${__dirname}/app/app.html`);

  mainWindow.webContents.on('did-finish-load', () => {
    mainWindow.show();
    mainWindow.focus();
    mainWindow.maximize();
  });

  mainWindow.on('closed', () => {
    mainWindow = null;
  });

  if (process.platform === 'darwin') {
    template = [{
      label: 'Electron',
      submenu: [{
        label: 'About ElectronReact',
        selector: 'orderFrontStandardAboutPanel:'
      }, {
        type: 'separator'
      }, {
        label: 'Services',
        submenu: []
      }, {
        type: 'separator'
      }, {
        label: 'Hide ElectronReact',
        accelerator: 'Command+H',
        selector: 'hide:'
      }, {
        label: 'Hide Others',
        accelerator: 'Command+Shift+H',
        selector: 'hideOtherApplications:'
      }, {
        label: 'Show All',
        selector: 'unhideAllApplications:'
      }, {
        type: 'separator'
      }, {
        label: 'Quit',
        accelerator: 'Command+Q',
        click() {
          app.quit();
        }
      }]
    }, {
      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:'
      }, {
        label: 'Select All',
        accelerator: 'Command+A',
        selector: 'selectAll:'
      }]
    }, {
      label: 'View',
      submenu: (process.env.NODE_ENV === 'development') ? [{
        label: 'Reload',
        accelerator: 'Command+R',
        click() {
          mainWindow.restart();
        }
      }, {
        label: 'Toggle Full Screen',
        accelerator: 'Ctrl+Command+F',
        click() {
          mainWindow.setFullScreen(!mainWindow.isFullScreen());
        }
      }, {
        label: 'Toggle Developer Tools',
        accelerator: 'Alt+Command+I',
        click() {
          mainWindow.toggleDevTools();
        }
      }] : [{
        label: 'Toggle Full Screen',
        accelerator: 'Ctrl+Command+F',
        click() {
          mainWindow.setFullScreen(!mainWindow.isFullScreen());
        }
      }]
    }, {
      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:'
      }]
    }, {
      label: 'Help',
      submenu: [{
        label: 'Learn More',
        click() {
          shell.openExternal('http://electron.atom.io');
        }
      }, {
        label: 'Documentation',
        click() {
          shell.openExternal('https://github.com/atom/electron/tree/master/docs#readme');
        }
      }, {
        label: 'Community Discussions',
        click() {
          shell.openExternal('https://discuss.atom.io/c/electron');
        }
      }, {
        label: 'Search Issues',
        click() {
          shell.openExternal('https://github.com/atom/electron/issues');
        }
      }]
    }];

    menu = Menu.buildFromTemplate(template);
    Menu.setApplicationMenu(menu);
  } else {
    template = [{
      label: '&File',
      submenu: [{
        label: '&Open',
        accelerator: 'Ctrl+O'
      }, {
        label: '&Close',
        accelerator: 'Ctrl+W',
        click() {
          mainWindow.close();
        }
      }]
    }, {
      label: '&View',
      submenu: (process.env.NODE_ENV === 'development') ? [{
        label: '&Reload',
        accelerator: 'Ctrl+R',
        click() {
          mainWindow.restart();
        }
      }, {
        label: 'Toggle &Full Screen',
        accelerator: 'F11',
        click() {
          mainWindow.setFullScreen(!mainWindow.isFullScreen());
        }
      }, {
        label: 'Toggle &Developer Tools',
        accelerator: 'Alt+Ctrl+I',
        click() {
          mainWindow.toggleDevTools();
        }
      }] : [{
        label: 'Toggle &Full Screen',
        accelerator: 'F11',
        click() {
          mainWindow.setFullScreen(!mainWindow.isFullScreen());
        }
      }]
    }, {
      label: 'Help',
      submenu: [{
        label: 'Learn More',
        click() {
          shell.openExternal('http://electron.atom.io');
        }
      }, {
        label: 'Documentation',
        click() {
          shell.openExternal('https://github.com/atom/electron/tree/master/docs#readme');
        }
      }, {
        label: 'Community Discussions',
        click() {
          shell.openExternal('https://discuss.atom.io/c/electron');
        }
      }, {
        label: 'Search Issues',
        click() {
          shell.openExternal('https://github.com/atom/electron/issues');
        }
      }]
    }];
    menu = Menu.buildFromTemplate(template);
    mainWindow.setMenu(menu);
  }

});
Example #18
0
  );

  // Window menu.
  template[3].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'
    }
  ];
}

const menu = Menu.buildFromTemplate(template);
Menu.setApplicationMenu(menu);
Example #19
0
 loadFullMenu().then(menu => Menu.setApplicationMenu(menu));
Example #20
0
function init() {
    menu = electron.Menu.buildFromTemplate(getMenuTemplate());
    electron.Menu.setApplicationMenu(menu)
}
Example #21
0
    app.on("ready", function() {
        mainWindow = new BrowserWindow({
            x: mainWindowState.x,
            y: mainWindowState.y,
            width: mainWindowState.width,
            height: mainWindowState.height
        });

        if (mainWindowState.isMaximized) {
            mainWindow.maximize();
        }

        mainWindow.loadURL("file://" + __dirname + "/index.html");

        //if (env.name !== 'production') {
        //devHelper.setDevMenu();
        //mainWindow.openDevTools();
        //}

        mainWindow.on("close", function() {
            mainWindowState.saveState(mainWindow);
        });

        mainWindow.webContents.on("new-window", function(e, url) {
            e.preventDefault();
            require("electron").shell.openExternal(url);
        });

        // Create the Application's main menu

        var app_menu =
            process.platform === "darwin"
                ? {
                      label: "Application",
                      submenu: [
                          {
                              label: "About Application",
                              selector: "orderFrontStandardAboutPanel:"
                          },
                          {type: "separator"},
                          {
                              label: "Quit",
                              accelerator: "CmdOrCtrl+Q",
                              click: function() {
                                  app.quit();
                              }
                          }
                      ]
                  }
                : {
                      label: "File",
                      submenu: [
                          {
                              label: "Quit",
                              accelerator: "CmdOrCtrl+Q",
                              click: function() {
                                  app.quit();
                              }
                          }
                      ]
                  };

        var template = [
            app_menu,
            {
                label: "Edit",
                submenu: [
                    {
                        label: "Undo",
                        accelerator: "CmdOrCtrl+Z",
                        selector: "undo:"
                    },
                    {
                        label: "Redo",
                        accelerator: "Shift+CmdOrCtrl+Z",
                        selector: "redo:"
                    },
                    {type: "separator"},
                    {
                        label: "Cut",
                        accelerator: "CmdOrCtrl+X",
                        selector: "cut:"
                    },
                    {
                        label: "Copy",
                        accelerator: "CmdOrCtrl+C",
                        selector: "copy:"
                    },
                    {
                        label: "Paste",
                        accelerator: "CmdOrCtrl+V",
                        selector: "paste:"
                    },
                    {
                        label: "Select All",
                        accelerator: "CmdOrCtrl+A",
                        selector: "selectAll:"
                    }
                ]
            },
            {
                label: "View",
                submenu: [
                    {
                        label: "Reload",
                        accelerator: "CmdOrCtrl+R",
                        click: function() {
                            BrowserWindow.getFocusedWindow().reload();
                        }
                    },
                    {
                        label: "Toggle DevTools",
                        accelerator: "Alt+CmdOrCtrl+I",
                        click: function() {
                            BrowserWindow.getFocusedWindow().toggleDevTools();
                        }
                    }
                ]
            }
        ];

        Menu.setApplicationMenu(Menu.buildFromTemplate(template));
    });
Example #22
0
app.on('ready', async () => {
  setupSearchProvider()

  await installExtensions()

  mainWindow = new BrowserWindow({
    show: false,
    titleBarStyle: 'hidden',
    width: 1024,
    height: 728
  })

  mainWindow.loadURL(`file://${__dirname}/app/app.html`)

  mainWindow.webContents.on('did-finish-load', () => {
    mainWindow.show()
    mainWindow.focus()
  })

  mainWindow.on('closed', () => {
    mainWindow = null
  })

  if (process.env.NODE_ENV === 'development') {
    // mainWindow.openDevTools()
    mainWindow.webContents.on('context-menu', (e, props) => {
      const { x, y } = props

      Menu.buildFromTemplate([{
        label: 'Inspect element',
        click () {
          mainWindow.inspectElement(x, y)
        }
      }]).popup(mainWindow)
    })
  }

  if (process.platform === 'darwin') {
    template = [{
      label: 'nvNEXT',
      submenu: [{
        label: 'About nvNEXT',
        selector: 'orderFrontStandardAboutPanel:'
      }, {
        type: 'separator'
      }, {
        label: 'Services',
        submenu: []
      }, {
        type: 'separator'
      }, {
        label: 'Hide nvNEXT',
        accelerator: 'Command+H',
        selector: 'hide:'
      }, {
        label: 'Hide Others',
        accelerator: 'Command+Shift+H',
        selector: 'hideOtherApplications:'
      }, {
        label: 'Show All',
        selector: 'unhideAllApplications:'
      }, {
        type: 'separator'
      }, {
        label: 'Quit',
        accelerator: 'Command+Q',
        click () {
          app.quit()
        }
      }]
    }, {
      label: 'File',
      submenu: [{
        label: 'Create Note',
        accelerator: 'Command+N',
        click () {
          mainWindow.webContents.send('quick-create')
        }
      }, {
        label: 'Open Note',
        accelerator: 'Command+P',
        click () {
          mainWindow.webContents.send('quick-open')
        }
      }]
    }, {
      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:'
      }, {
        label: 'Select All',
        accelerator: 'Command+A',
        selector: 'selectAll:'
      }]
    }, {
      label: 'View',
      submenu: (process.env.NODE_ENV === 'development') ? [{
        label: 'Reload',
        accelerator: 'Command+R',
        click () {
          mainWindow.webContents.reload()
        }
      }, {
        label: 'Toggle Full Screen',
        accelerator: 'Ctrl+Command+F',
        click () {
          mainWindow.setFullScreen(!mainWindow.isFullScreen())
        }
      }, {
        label: 'Toggle Developer Tools',
        accelerator: 'Alt+Command+I',
        click () {
          mainWindow.toggleDevTools()
        }
      }] : [{
        label: 'Toggle Full Screen',
        accelerator: 'Ctrl+Command+F',
        click () {
          mainWindow.setFullScreen(!mainWindow.isFullScreen())
        }
      }]
    }, {
      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:'
      }]
    }, {
      label: 'Help',
      submenu: [{
        label: 'Learn More',
        click () {
          shell.openExternal('http://electron.atom.io')
        }
      }, {
        label: 'Documentation',
        click () {
          shell.openExternal('https://github.com/atom/electron/tree/master/docs#readme')
        }
      }, {
        label: 'Community Discussions',
        click () {
          shell.openExternal('https://discuss.atom.io/c/electron')
        }
      }, {
        label: 'Search Issues',
        click () {
          shell.openExternal('https://github.com/atom/electron/issues')
        }
      }]
    }]

    menu = Menu.buildFromTemplate(template)
    Menu.setApplicationMenu(menu)
  } else {
    template = [{
      label: '&File',
      submenu: [{
        label: '&Open',
        accelerator: 'Ctrl+O'
      }, {
        label: '&Close',
        accelerator: 'Ctrl+W',
        click () {
          mainWindow.close()
        }
      }]
    }, {
      label: '&View',
      submenu: (process.env.NODE_ENV === 'development') ? [{
        label: '&Reload',
        accelerator: 'Ctrl+R',
        click () {
          mainWindow.webContents.reload()
        }
      }, {
        label: 'Toggle &Full Screen',
        accelerator: 'F11',
        click () {
          mainWindow.setFullScreen(!mainWindow.isFullScreen())
        }
      }, {
        label: 'Toggle &Developer Tools',
        accelerator: 'Alt+Ctrl+I',
        click () {
          mainWindow.toggleDevTools()
        }
      }] : [{
        label: 'Toggle &Full Screen',
        accelerator: 'F11',
        click () {
          mainWindow.setFullScreen(!mainWindow.isFullScreen())
        }
      }]
    }, {
      label: 'Help',
      submenu: [{
        label: 'Learn More',
        click () {
          shell.openExternal('http://electron.atom.io')
        }
      }, {
        label: 'Documentation',
        click () {
          shell.openExternal('https://github.com/atom/electron/tree/master/docs#readme')
        }
      }, {
        label: 'Community Discussions',
        click () {
          shell.openExternal('https://discuss.atom.io/c/electron')
        }
      }, {
        label: 'Search Issues',
        click () {
          shell.openExternal('https://github.com/atom/electron/issues')
        }
      }]
    }]
    menu = Menu.buildFromTemplate(template)
    mainWindow.setMenu(menu)
  }
})
Example #23
0
export function setApplicationMenu (opts = {}) {
  Menu.setApplicationMenu(Menu.buildFromTemplate(buildWindowMenu(opts)))
}
Example #24
0
exports.buildMenu = template => {
  menu_ = Menu.buildFromTemplate(template);
  return menu_;
};
Example #25
0
    node.once('ready', () => {
      let importWin
      let createImportWin = () => {
        let width
        let height
        if (/^win/.test(process.platform)) {
          width = 530
          height = 332
        } else if (/^darwin/.test(process.platform)) {
          width = 530
          height = 327
        } else {
          width = 530
          height = 304
        }
        importWin = new BrowserWindow({ width, height, icon: icon, autoHideMenuBar: true, resizable: false, show: false })
        importWin.on('close', (e) => {
          e.preventDefault()
          importWin.hide()
        })
        importWin.loadURL(`file://${path.join(__dirname, 'electron', 'views', 'import', 'index.html')}`)
        importWin.webContents.on('did-finish-load', function() {
          importWin.show()
        })
        //importWin.webContents.openDevTools({})
      }
      let openImportWin = () => {
        if (importWin) {
          importWin.show()
        } else {
          createImportWin()
        }
      }
      let exportWin
      let exporter

      let createExportWin = () => {
        exportWin = new BrowserWindow({ width: 525, height: 304, icon: icon, autoHideMenuBar: true, resizable: false , show: false})
        exportWin.on('close', (e) => {
          e.preventDefault()
          exportWin.hide()
        })
        //exportWin.webContents.openDevTools({})
      }
      let openExportWin = () => {
        if (exportWin) {
          exportWin.show()
        } else {
          createExportWin()
          exporter = new Exporter(exportWin.webContents, ipcMain)
        }
        exportWin.loadURL(`file://${path.join(__dirname, 'electron', 'views', 'export', 'index.html')}`)
        exportWin.webContents.on('did-finish-load', function() {
          exportWin.show()
        })
      }
      let connectWin
      let connector
      let createConnectWin = () => {
        let width
        let height
        if (/^win/.test(process.platform)) {
          width = 800
          height = 186
        } else if (/^darwin/.test(process.platform)) {
          width = 800
          height = 186
        } else {
          width = 800
          height = 146
        }
        connectWin = new BrowserWindow({ width, height, icon: icon, autoHideMenuBar: true, resizable: false, show: false })
        connectWin.on('close', (e) => {
          e.preventDefault()
          connectWin.hide()
        })

        connectWin.loadURL(`file://${path.join(__dirname, 'electron', 'views', 'connect', 'index.html')}`)
        connectWin.webContents.on('did-finish-load', function() {
          connectWin.show()
        })
        // connectWin.webContents.openDevTools({})
      }

      let openConnectWin = () => {
        if (connectWin) {
          connectWin.show()
        } else {
          createConnectWin()
          connector = new Connector(connectWin.webContents, ipcMain, (payload) => {
            return new Promise((resolve, reject) => {
              let peer
              try {
                peer = Peer.fromLocator(payload)
                if (node.peerInfo.isEqual(peer)) {
                 return reject(new Error('Cannot connect to self'))
                }
              } catch (ex) {
                return reject(new Error('Invalid Locator'))
              }
              node.blockRouter.connect(peer, (err) => {
                if (err) {
                  return reject(err)
                } else {
                  return resolve(true)
                }
              })
            })
          })
        }
      }
      let configurationWin
      let configurator
      let createConfigurationWin = () => {
        configurationWin = new BrowserWindow({ width: 900, height: 900, icon: icon, autoHideMenuBar: true, show: false })
        configurationWin.on('close', (e) => {
          e.preventDefault()
          configurationWin.hide()
        })
        configurationWin.loadURL(`file://${path.join(__dirname, 'electron', 'views', 'configuration', 'index.html')}`)
        configurationWin.webContents.on('did-finish-load', function() {
          configurationWin.show()
        })
        // configurationWin.webContents.openDevTools({})
        let setHandler = async (payload) => {
          config[ payload.key ] = payload.value
        }
        let getHandler = async (payload) => {
          return config[ payload.key ]
        }
        let resetHandler = () => {
          app.relaunch()
          app.exit(0)
        }
        let selfHandler = async () => {
          return node.peerInfo.toLocator()
        }
        configurator = new Configurator(configurationWin.webContents, ipcMain, getHandler, setHandler, resetHandler, selfHandler)
      }
      let openConfigurationWin = () => {
        if (configurationWin) {
          configurationWin.show()
        } else {
          createConfigurationWin()
        }
      }
      let copyLocator = () => {
        clipboard.writeText(node.peerInfo.toLocator())
      }

      tray = new Tray(trayIcon)
      let nodeItem = new MenuItem({ label: `Node: ${node.peerInfo.key}`, type: 'normal'})
      let connectionsItem = new MenuItem({ label: `Connections: ${node.blockRouter.connections}`, type: 'normal' })
      let blockCapacityItem = new MenuItem({
        label: `Block Cache Capacity: ${node.blockRouter.blockCapacity}%`,
        type: 'normal'
      })
      let miniCapacityItem = new MenuItem({
        label: `Mini Cache Capacity: ${node.blockRouter.miniCapacity}%`,
        type: 'normal'
      })
      let nanoCapacityItem = new MenuItem({
        label: `Nano Cache Capacity: ${node.blockRouter.nanoCapacity}%`,
        type: 'normal'
      })
      let importItem = new MenuItem({ label: 'Import', type: 'normal', click: openImportWin })
      let exportItem = new MenuItem({ label: 'Export', type: 'normal', click: openExportWin })
      let configItem = new MenuItem({ label: 'Configuration', type: 'normal', click: openConfigurationWin })
      let connectItem = new MenuItem({ label: 'Connect to a Peer', type: 'normal', click: openConnectWin })
      let locatorItem = new MenuItem({ label: 'Copy Locator', type: 'normal', click: copyLocator })
      let exitItem = new MenuItem({
        label: 'Exit', type: 'normal', click: () => {
          node.blockRouter.removeAllListeners('connection')
          node.blockRouter.removeAllListeners('capacity')
          app.exit()
        }
      })
      let contextMenu = new Menu()
      contextMenu.append(nodeItem)
      contextMenu.append(connectionsItem)
      contextMenu.append(new MenuItem({ label: '', type: 'separator' }))
      contextMenu.append(blockCapacityItem)
      contextMenu.append(miniCapacityItem)
      contextMenu.append(nanoCapacityItem)
      contextMenu.append(new MenuItem({ label: '', type: 'separator' }))
      contextMenu.append(importItem)
      contextMenu.append(exportItem)
      contextMenu.append(configItem)
      contextMenu.append(connectItem)
      contextMenu.append(new MenuItem({ label: '', type: 'separator' }))
      contextMenu.append(locatorItem)
      contextMenu.append(new MenuItem({ label: '', type: 'separator' }))
      contextMenu.append(exitItem)
      tray.setToolTip('Off System')
      tray.setContextMenu(contextMenu)
      let rebuildMenu = (cache, capacity)=> {
        switch (cache) {
          case config.block:
            contextMenu.items[ 3 ].label = `Block Cache Capacity: ${capacity.toPrecision(3)}%`
            break;
          case config.mini:
            contextMenu.items[ 4 ].label = `Mini Cache Capacity: ${capacity.toPrecision(3)}%`
            break;
          case config.nano:
            contextMenu.items[ 5 ].label = `Nano Cache Capacity: ${capacity.toPrecision(3)}%`
            break;
        }
        let tempMenu = new Menu()
        contextMenu.items.forEach((item)=> {
          tempMenu.append(item)
        })
        contextMenu = tempMenu
        tray.setContextMenu(contextMenu)
      }

      let rebuildMenuConnection = (connections)=> {
        contextMenu.items[ 1 ].label = `Connections: ${connections}`
        let tempMenu = new Menu()
        contextMenu.items.forEach((item)=> {
          tempMenu.append(item)
        })
        contextMenu = tempMenu
        tray.setContextMenu(contextMenu)
      }

      node.blockRouter.on('capacity', rebuildMenu)
      node.blockRouter.on('connection', rebuildMenuConnection)
      //TODO Create full notification
      node.blockRouter.on('full', (cache) => {
        switch (cache) {
          case config.block:
            //win.webContents.send('blockFull', capacity)
            break;
          case config.mini:
            //win.webContents.send('miniFull', capacity)
            break;
          case config.nano:
            //win.webContents.send('nanoFull', capacity)
            break;
        }
      })
    })
Example #26
0
const createWindow = () => {
    let mainWindowOptions = {
        show: false,
        width: 1024,
        height: 728,
        autoHideMenuBar: process.platform !== 'darwin',
        backgroundColor: '#FFF'
    };
    if(DEBUG) {
        let display = electron.screen.getPrimaryDisplay();
        mainWindowOptions.height = display.workAreaSize.height;
        mainWindowOptions.width = 1200;
        mainWindowOptions.x = display.workArea.x;
        mainWindowOptions.y = display.workArea.y;
    }
    mainWindow = new BrowserWindow(mainWindowOptions);

    mainWindow.loadURL(`file://${__dirname}/app.html`);

    mainWindow.webContents.on('did-finish-load', () => {
        mainWindow.show();
        mainWindow.focus();
    });

    mainWindow.on('closed', () => {
        mainWindow = null;
        application.mainWindow = null;
    });

    application.mainWindow = mainWindow;

    // Create application menu
    if (process.platform === 'darwin') {
        template = [{
            label: lang.title,
            submenu: [{
                label: lang.menu.about,
                selector: 'orderFrontStandardAboutPanel:'
            }, {
                type: 'separator'
            }, {
                label: 'Services',
                submenu: []
            }, {
                type: 'separator'
            }, {
                label: lang.menu.hideCurrentWindow,
                accelerator: 'Command+H',
                selector: 'hide:'
            }, {
                label: lang.menu.hideOtherWindows,
                accelerator: 'Command+Shift+H',
                selector: 'hideOtherApplications:'
            }, {
                label: lang.menu.showAllWindows,
                selector: 'unhideAllApplications:'
            }, {
                type: 'separator'
            }, {
                label: lang.menu.quit,
                accelerator: 'Command+Q',
                click() {
                    app.quit();
                }
            }]
        }, {
            label: lang.menu.edit,
            submenu: [{
                label: lang.menu.undo,
                accelerator: 'Command+Z',
                selector: 'undo:'
            }, {
                label: lang.menu.redo,
                accelerator: 'Shift+Command+Z',
                selector: 'redo:'
            }, {
                type: 'separator'
            }, {
                label: lang.menu.cut,
                accelerator: 'Command+X',
                selector: 'cut:'
            }, {
                label: lang.menu.copy,
                accelerator: 'Command+C',
                selector: 'copy:'
            }, {
                label: lang.menu.paste,
                accelerator: 'Command+V',
                selector: 'paste:'
            }, {
                label: lang.menu.selectAll,
                accelerator: 'Command+A',
                selector: 'selectAll:'
            }]
        }, {
            label: lang.menu.view,
            submenu: (DEBUG) ? [{
                label: lang.menu.reload,
                accelerator: 'Command+R',
                click() {
                    mainWindow.webContents.reload();
                }
            }, {
                label: lang.menu.toggleFullscreen,
                accelerator: 'Ctrl+Command+F',
                click() {
                    mainWindow.setFullScreen(!mainWindow.isFullScreen());
                }
            }, {
                label: lang.menu.toggleDeveloperTool,
                accelerator: 'Alt+Command+I',
                click() {
                    mainWindow.toggleDevTools();
                }
            }] : [{
                label: lang.menu.toggleFullscreen,
                accelerator: 'Ctrl+Command+F',
                click() {
                    mainWindow.setFullScreen(!mainWindow.isFullScreen());
                }
            }]
        }, {
            label: lang.menu.window,
            submenu: [{
                label: lang.menu.minimize,
                accelerator: 'Command+M',
                selector: 'performMiniaturize:'
            }, {
                label: lang.menu.close,
                accelerator: 'Command+W',
                selector: 'performClose:'
            }, {
                type: 'separator'
            }, {
                label: lang.menu.bringAllToFront,
                selector: 'arrangeInFront:'
            }]
        }, {
            label: lang.menu.help,
            submenu: [{
                label: lang.menu.website,
                click() {
                    shell.openExternal(PKG.homepage);
                }
            }, {
                label: lang.menu.project,
                click() {
                    shell.openExternal('https://github.com/easysoft/xuanxuan');
                }
            }, {
                label: lang.menu.community,
                click() {
                    shell.openExternal('https://github.com/easysoft/xuanxuan');
                }
            }, {
                label: lang.menu.issues,
                click() {
                    shell.openExternal('https://github.com/easysoft/xuanxuan/issues');
                }
            }]
        }];

        menu = Menu.buildFromTemplate(template);
        Menu.setApplicationMenu(menu);
    } else {
        // Disable menu on windows
        // template = [{
        //     label: '&File',
        //     submenu: [{
        //         label: '&Open',
        //         accelerator: 'Ctrl+O'
        //     }, {
        //         label: '&Close',
        //         accelerator: 'Ctrl+W',
        //         click() {
        //             mainWindow.close();
        //         }
        //     }]
        // }, {
        //     label: '&View',
        //     submenu: (DEBUG) ? [{
        //         label: '&Reload',
        //         accelerator: 'Ctrl+R',
        //         click() {
        //             mainWindow.webContents.reload();
        //         }
        //     }, {
        //         label: 'Toggle &Full Screen',
        //         accelerator: 'F11',
        //         click() {
        //             mainWindow.setFullScreen(!mainWindow.isFullScreen());
        //         }
        //     }, {
        //         label: 'Toggle &Developer Tools',
        //         accelerator: 'Alt+Ctrl+I',
        //         click() {
        //             mainWindow.toggleDevTools();
        //         }
        //     }] : [{
        //         label: 'Toggle &Full Screen',
        //         accelerator: 'F11',
        //         click() {
        //             mainWindow.setFullScreen(!mainWindow.isFullScreen());
        //         }
        //     }]
        // }, {
        //     label: 'Help',
        //     submenu: [{
        //         label: 'Learn More',
        //         click() {
        //             shell.openExternal('http://electron.atom.io');
        //         }
        //     }, {
        //         label: 'Documentation',
        //         click() {
        //             shell.openExternal('https://github.com/atom/electron/tree/master/docs#readme');
        //         }
        //     }, {
        //         label: 'Community Discussions',
        //         click() {
        //             shell.openExternal('https://discuss.atom.io/c/electron');
        //         }
        //     }, {
        //         label: 'Search Issues',
        //         click() {
        //             shell.openExternal('https://github.com/atom/electron/issues');
        //         }
        //     }]
        // }];
        // menu = Menu.buildFromTemplate(template);
        // mainWindow.setMenu(menu);
    }

    // Show developer tools
    if (DEBUG) {
        mainWindow.openDevTools();
        mainWindow.webContents.on('context-menu', (e, props) => {
            const { x, y } = props;

            Menu.buildFromTemplate([{
                label: lang.debug.inspectElement,
                click() {
                    mainWindow.inspectElement(x, y);
                }
            }]).popup(mainWindow);
        });
        console.info('Main window created.');
    }
}
Example #27
0
function init() {
    logger.info('框架菜单栏开始初始化');
    appMenu = electron.Menu.buildFromTemplate(getAppMenuTemplate());
    electron.Menu.setApplicationMenu(appMenu);
}
Example #28
0
  template[2].submenu = [
    {role: 'close'},
    {role: 'minimize'},
  ]
}
else{
  // Edit menu
  template[1].submenu.push(
    {
      label: 'Preferences...', 
      accelerator: 'CommandOrControl+,',
      click() {
        openPreferences();
      }
    }
  );
}


if(isDev){
  // Edit menu
  template[1].submenu.push(
    {type: 'separator'},
    {role: 'reload'},
    {role: 'toggledevtools'}
  );
}


module.exports = Menu.buildFromTemplate(template);
app.on("ready", () => {
  mainWindow = new BrowserWindow({
    show: false,
    width: 1600,
    height: 1000
  });

  mainWindow.loadURL(`file://${__dirname}/app/app.html`);

  mainWindow.webContents.on("did-finish-load", () => {
    mainWindow.show();
    mainWindow.focus();
  });

  mainWindow.on("closed", () => {
    mainWindow = null;
  });

  ipcMain.on("encode-image", (event, imagePath) => {
    fs.readFile(imagePath, (err, imageData) => {
      if (err) {
        mainWindow.webContents.send("image-encoded", null);

        return;
      }

      mainWindow.webContents.send("image-encoded", new Buffer(imageData).toString("base64"));
    });
  });

  ipcMain.on("social-login", (event, socialUrl) => {
    mainWindow.webContents.session.clearStorageData(() => {});
    // Reset the csrftoken cookie if there is one
    mainWindow.webContents.session.cookies.remove("https://plot.ly", "csrftoken", () => {
      handleSocialAuth(socialUrl);
    });
  });

  ipcMain.on("open-external", (event, url) => {
    shell.openExternal(url);
  });

  if (process.env.NODE_ENV === "development") {
    mainWindow.openDevTools();
  }

  if (process.platform === "darwin") {
    template = [{
      label: "Electron",
      submenu: [{
        label: "About ElectronReact",
        selector: "orderFrontStandardAboutPanel:"
      }, {
        type: "separator"
      }, {
        label: "Services",
        submenu: []
      }, {
        type: "separator"
      }, {
        label: "Hide ElectronReact",
        accelerator: "Command+H",
        selector: "hide:"
      }, {
        label: "Hide Others",
        accelerator: "Command+Shift+H",
        selector: "hideOtherApplications:"
      }, {
        label: "Show All",
        selector: "unhideAllApplications:"
      }, {
        type: "separator"
      }, {
        label: "Quit",
        accelerator: "Command+Q",
        click() {
          app.quit();
        }
      }]
    }, {
      label: "File",
      submenu: [{
        label: "Save",
        accelerator: "Command+S",
        click() {
          mainWindow.webContents.send("file", "save");
        }
      }, {
        label: "Open",
        accelerator: "Command+O",
        click() {
          mainWindow.webContents.send("file", "open");
        }
      }]
    }, {
      label: "Edit",
      submenu: [{
        label: "Undo",
        accelerator: "Command+Z",
        selector: "undo:",
        click() {
          mainWindow.webContents.send("edit", "undo");
        }
      }, {
        label: "Redo",
        accelerator: "Command+Y",
        selector: "redo:",
        click() {
          mainWindow.webContents.send("edit", "redo");
        }
      }, {
        type: "separator"
      }, {
        label: "Cut",
        accelerator: "Command+X",
        selector: "cut:"
      }, {
        label: "Copy",
        accelerator: "Command+C",
        selector: "copy:"
      }, {
        label: "Paste",
        accelerator: "Command+V",
        selector: "paste:"
      }, {
        label: "Select All",
        accelerator: "Command+A",
        selector: "selectAll:"
      }]
    }, {
      label: "View",
      submenu: (process.env.NODE_ENV === "development") ? [{
        label: "Reload",
        accelerator: "Command+R",
        click() {
          mainWindow.restart();
        }
      }, {
        label: "Toggle Full Screen",
        accelerator: "Ctrl+Command+F",
        click() {
          mainWindow.setFullScreen(!mainWindow.isFullScreen());
        }
      }, {
        label: "Toggle Developer Tools",
        accelerator: "Alt+Command+I",
        click() {
          mainWindow.toggleDevTools();
        }
      }] : [{
        label: "Toggle Full Screen",
        accelerator: "Ctrl+Command+F",
        click() {
          mainWindow.setFullScreen(!mainWindow.isFullScreen());
        }
      }]
    }, {
      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:"
      }]
    }, {
      label: "Help",
      submenu: [{
        label: "Learn More",
        click() {
          shell.openExternal("http://electron.atom.io");
        }
      }, {
        label: "Documentation",
        click() {
          shell.openExternal("https://github.com/atom/electron/tree/master/docs#readme");
        }
      }, {
        label: "Community Discussions",
        click() {
          shell.openExternal("https://discuss.atom.io/c/electron");
        }
      }, {
        label: "Search Issues",
        click() {
          shell.openExternal("https://github.com/atom/electron/issues");
        }
      }]
    }];

    menu = Menu.buildFromTemplate(template);
    Menu.setApplicationMenu(menu);
  } else {
    template = [{
      label: "&File",
      submenu: [{
        label: "&Open",
        accelerator: "Ctrl+O"
      }, {
        label: "&Close",
        accelerator: "Ctrl+W",
        click() {
          mainWindow.close();
        }
      }]
    }, {
      label: "&View",
      submenu: (process.env.NODE_ENV === "development") ? [{
        label: "&Reload",
        accelerator: "Ctrl+R",
        click() {
          mainWindow.restart();
        }
      }, {
        label: "Toggle &Full Screen",
        accelerator: "F11",
        click() {
          mainWindow.setFullScreen(!mainWindow.isFullScreen());
        }
      }, {
        label: "Toggle &Developer Tools",
        accelerator: "Alt+Ctrl+I",
        click() {
          mainWindow.toggleDevTools();
        }
      }] : [{
        label: "Toggle &Full Screen",
        accelerator: "F11",
        click() {
          mainWindow.setFullScreen(!mainWindow.isFullScreen());
        }
      }]
    }, {
      label: "Help",
      submenu: [{
        label: "Learn More",
        click() {
          shell.openExternal("http://electron.atom.io");
        }
      }, {
        label: "Documentation",
        click() {
          shell.openExternal("https://github.com/atom/electron/tree/master/docs#readme");
        }
      }, {
        label: "Community Discussions",
        click() {
          shell.openExternal("https://discuss.atom.io/c/electron");
        }
      }, {
        label: "Search Issues",
        click() {
          shell.openExternal("https://github.com/atom/electron/issues");
        }
      }]
    }];
    menu = Menu.buildFromTemplate(template);
    mainWindow.setMenu(menu);
  }
});
app.on('ready', async () => {
  await installExtensions();

  mainWindow = new BrowserWindow({
    show: false,
    width: 318,
    height: 500,
    frame: false,
    resizable: process.env.NODE_ENV === 'development'
  });

  mainWindow.loadURL(`file://${__dirname}/app/app.html`);

  mainWindow.webContents.on('did-finish-load', () => {
    const contextMenu = Menu.buildFromTemplate([
      {
        label: 'Bring to top',
        click() {
          mainWindow.show();
          mainWindow.focus();
        }
      },
      {
        label: 'Quit',
        click() {
          app.quit();
        }
      }
    ]);
    tray = new Tray(`${__dirname}/app/tray.png`);
    tray.setToolTip('Electron Music Player Tutorial');
    mainWindow.show();
    mainWindow.focus();
    tray.setContextMenu(contextMenu);
  });

  mainWindow.on('closed', () => {
    mainWindow = null;
  });

  if (process.env.NODE_ENV === 'development') {
    mainWindow.webContents.on('context-menu', (e, props) => {
      const { x, y } = props;
      Menu.buildFromTemplate([{
        label: 'Inspect element',
        click() {
          mainWindow.inspectElement(x, y);
        }
      }]).popup(mainWindow);
    });
  }

  if (process.platform === 'darwin') {

    template = [{
      label: 'MusicPlayer',
      submenu: [{
        label: 'About Music Player',
        selector: 'orderFrontStandardAboutPanel:'
      }, {
        type: 'separator'
      }, {
        label: 'Quit',
        accelerator: 'Command+Q',
        click() {
          app.quit();
        }
      }]
    }];

    menu = Menu.buildFromTemplate(template);
    Menu.setApplicationMenu(menu);
  } else {
    template = [{
      label: '&File',
      submenu: [{
        label: '&Exit',
        accelerator: 'Alt+f4',
        click() {
          app.quit();
        }
      }]
    }];
    menu = Menu.buildFromTemplate(template);
    mainWindow.setMenu(menu);
  }
});