Browse Source

add menu for window

Niemes 1 year ago
parent
commit
f12171450e
1 changed files with 118 additions and 2 deletions
  1. 118 2
      main.js

+ 118 - 2
main.js

@@ -1,13 +1,16 @@
 // Modules to control application life and create native browser window
-const {app, BrowserWindow, ipcMain, dialog } = require('electron')
+const {app, BrowserWindow, ipcMain, dialog, Menu } = require('electron')
 const path = require('path')
 
 const titleBarStyle = (process.platform === 'darwin') ? 'hiddenInset' : 'default';
 const frameWin = (process.platform === 'darwin') ? false : true;
 
+const isMac = process.platform === 'darwin'
+let mainWindow;
+
 function createWindow () {
   // Create the browser window.
-  const mainWindow = new BrowserWindow({
+  mainWindow = new BrowserWindow({
     titleBarStyle: titleBarStyle,
     autoHideMenuBar: true,
     vibrancy: 'dark',
@@ -63,3 +66,116 @@ app.on('window-all-closed', function () {
 
 // In this file you can include the rest of your app's specific main process
 // code. You can also put them in separate files and require them here.
+function toggleFullscreen() {
+  const currWind = BrowserWindow.getFocusedWindow().name
+
+    if (mainWindow.isFullScreen()) {
+        mainWindow.setFullScreen(false);
+    } else {
+        mainWindow.setFullScreen(true);
+    }
+}
+
+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' },
+      {
+        label: 'Toggle Full Screen',
+        click: () => { toggleFullscreen();},
+        accelerator: 'CmdOrCtrl+f'
+      }
+    ]
+  },
+  // { 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://niemes.info')
+        }
+      }
+    ]
+  }
+]
+
+const menu = Menu.buildFromTemplate(template)
+Menu.setApplicationMenu(menu)