From db7c1398877fe5b87f442f584bc8d40ec23f3285 Mon Sep 17 00:00:00 2001 From: Kazuhito Hokamura Date: Thu, 3 May 2018 21:30:22 +0900 Subject: [PATCH] Cleanup menu --- package.json | 1 + src/main/index.ts | 4 +- src/main/menu.ts | 200 ++++++++++++++++++-------------------------- src/main/updater.ts | 2 + src/main/zoom.ts | 37 -------- yarn.lock | 2 +- 6 files changed, 86 insertions(+), 160 deletions(-) delete mode 100644 src/main/zoom.ts diff --git a/package.json b/package.json index 413a67ce..b2cfa337 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "classnames": "2.2.5", "codemirror": "5.33.0", "csv-stringify": "2.0.1", + "electron-is-dev": "0.3.0", "electron-log": "2.2.14", "electron-updater": "2.21.4", "font-awesome": "4.7.0", diff --git a/src/main/index.ts b/src/main/index.ts index c3854453..dfb78b5f 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -1,6 +1,6 @@ import electron from "electron"; import { updater } from "./updater"; -import menu from "./menu"; +import { initMenu } from "./menu"; const app = electron.app; let mainWindow; @@ -27,7 +27,7 @@ app.on("window-all-closed", () => { app.on("ready", () => { createWindow(); updater.watch(); - electron.Menu.setApplicationMenu(electron.Menu.buildFromTemplate(menu)); + initMenu(); }); app.on("activate", () => { diff --git a/src/main/menu.ts b/src/main/menu.ts index 35d018fd..7e8e677a 100644 --- a/src/main/menu.ts +++ b/src/main/menu.ts @@ -1,128 +1,88 @@ -import { app } from "electron"; -import zoom from "./zoom"; +import { app, Menu, dialog } from "electron"; +import { updater, UpdateState } from "./updater"; +import isDev from "electron-is-dev"; -const menu: Electron.MenuItemConstructorOptions[] = [ - { - label: "Application", - submenu: [ - { - label: "About Bdash", - role: "about" - }, - { - type: "separator" - }, - { - label: "Hide Bdash", - accelerator: "CmdOrCtrl+H", - role: "hide" - }, - { - label: "Hide Others", - accelerator: "Option+CmdOrCtrl+H", - role: "hideothers" - }, - { - label: "Show All", - role: "unhide" - }, - { - type: "separator" - }, - { - label: "Quit", - accelerator: "CmdOrCtrl+Q", - click: () => { - app.quit(); - } +const editMenu: Electron.MenuItemConstructorOptions = { + label: "Edit", + submenu: [{ role: "cut" }, { role: "copy" }, { role: "paste" }, { role: "selectall" }] +}; + +const viewMenu: Electron.MenuItemConstructorOptions = { + label: "View", + submenu: [ + { role: "toggledevtools" }, + { type: "separator" }, + { role: "resetzoom" }, + { role: "zoomin" }, + { role: "zoomout" } + ] +}; + +if (isDev && Array.isArray(viewMenu.submenu)) { + viewMenu.submenu.unshift({ role: "reload" }); +} + +const windowMenu: Electron.MenuItemConstructorOptions = { + role: "window", + submenu: [{ role: "minimize" }, { role: "close" }] +}; + +const helpMenu: Electron.MenuItemConstructorOptions = { + role: "help", + submenu: [ + { + label: "Report Issue", + click() { + require("electron").shell.openExternal("https://github.com/bdash-app/bdash/issues/new"); } - ] - }, - { - label: "Edit", - submenu: [ - { - label: "Undo", - accelerator: "CmdOrCtrl+Z", - role: "undo" - }, - { - label: "Redo", - accelerator: "Shift+CmdOrCtrl+Z", - role: "redo" - }, - { - 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 checkForUpdateItem = { + label: "Check for Updates...", + click() { + switch (updater.state) { + case UpdateState.UpdateNotAvailable: { + const message = "There are currently no updates available."; + dialog.showMessageBox({ message }); + return; } - ] - }, - { - label: "View", - submenu: [ - { - label: "Zoom In", - accelerator: "CmdOrCtrl+Plus", - click: () => zoom.zoomIn() - }, - { - label: "Zoom Out", - accelerator: "CmdOrCtrl+-", - click: () => zoom.zoomOut() - }, - { - label: "Zoom Reset", - accelerator: "CmdOrCtrl+0", - click: () => zoom.reset() - }, - { type: "separator" }, - { - label: "Reload", - accelerator: "CmdOrCtrl+Alt+R", - click: (_, focusedWindow) => { - if (focusedWindow) { - focusedWindow.reload(); - } - } - }, - { - label: "Toggle Developer Tools", - accelerator: process.platform === "darwin" ? "Alt+Command+I" : "Ctrl+Shift+I", - click: (_, focusedWindow: any) => { - if (focusedWindow) { - focusedWindow.toggleDevTools(); + case UpdateState.UpdateDownloaded: { + const message = "There is an available update. Restart app to apply the latest update."; + const buttons = ["Update Now", "Later"]; + dialog.showMessageBox({ message, buttons }, buttonIndex => { + if (buttonIndex === 0) { + updater.quit(); } - } + }); + return; } - ] - }, - { - label: "Window", - role: "window", + } + } +}; + +const template: Electron.MenuItemConstructorOptions[] = [editMenu, viewMenu, windowMenu, helpMenu]; + +if (process.platform === "darwin") { + template.unshift({ + label: app.getName(), submenu: [ - { label: "Minimize", accelerator: "CmdOrCtrl+M", role: "minimize" }, - { label: "Bring All to Front", role: "front" } + { role: "about" }, + checkForUpdateItem, + { type: "separator" }, + { role: "hide" }, + { role: "hideothers" }, + { role: "unhide" }, + { type: "separator" }, + { role: "quit" } ] - } -]; + }); +} else if (Array.isArray(helpMenu.submenu)) { + helpMenu.submenu.push(checkForUpdateItem); +} -export default menu; +export function initMenu() { + const menu = Menu.buildFromTemplate(template); + Menu.setApplicationMenu(menu); +} diff --git a/src/main/updater.ts b/src/main/updater.ts index a415a296..0998f1b2 100644 --- a/src/main/updater.ts +++ b/src/main/updater.ts @@ -1,4 +1,5 @@ import { autoUpdater, AppUpdater } from "electron-updater"; +import isDev from "electron-is-dev"; import logger from "./logger"; autoUpdater.logger = logger; @@ -22,6 +23,7 @@ export class Updater { } check() { + if (isDev) return; this.autoUpdater.checkForUpdates(); } diff --git a/src/main/zoom.ts b/src/main/zoom.ts deleted file mode 100644 index 6b652352..00000000 --- a/src/main/zoom.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { webContents } from "electron"; - -const MAX_ZOOM_LEVEL = 2; -const MIN_ZOOM_LEVEL = -2; -const ZOOM_LEVEL_STEP = 0.5; - -function getZoomLevel(fn) { - webContents.getFocusedWebContents().getZoomLevel(fn); -} - -function setZoomLevel(zoom) { - if (zoom > MAX_ZOOM_LEVEL) { - zoom = MAX_ZOOM_LEVEL; - } - if (zoom < MIN_ZOOM_LEVEL) { - zoom = MIN_ZOOM_LEVEL; - } - webContents.getFocusedWebContents().setZoomLevel(zoom); -} - -function zoomIn() { - getZoomLevel(level => setZoomLevel(level + ZOOM_LEVEL_STEP)); -} - -function zoomOut() { - getZoomLevel(level => setZoomLevel(level - ZOOM_LEVEL_STEP)); -} - -function reset() { - setZoomLevel(0); -} - -export default { - zoomIn, - zoomOut, - reset -}; diff --git a/yarn.lock b/yarn.lock index 6615f42b..2a10b79e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2271,7 +2271,7 @@ electron-download@^4.1.0: semver "^5.3.0" sumchecker "^2.0.1" -electron-is-dev@^0.3.0: +electron-is-dev@0.3.0, electron-is-dev@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/electron-is-dev/-/electron-is-dev-0.3.0.tgz#14e6fda5c68e9e4ecbeff9ccf037cbd7c05c5afe"