From ee2f1d4d965d596f59d7659063d838190a2ac31a Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Thu, 16 May 2019 22:25:19 +0200 Subject: [PATCH] preferences menu item --- package.json | 1 + src/app/App.jsx | 10 +- src/main.js | 5 +- src/menu.js | 294 ++++++++++++++++++++++++++---------------------- 4 files changed, 174 insertions(+), 136 deletions(-) diff --git a/package.json b/package.json index f4dffa2..207a109 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "dist": "npm run build && npm run package" }, "repository": "https://github.com/kremalicious/ocean-balance.git", + "homepage": "https://github.com/kremalicious/ocean-balance", "author": "Matthias Kretschmann", "license": "MIT", "dependencies": { diff --git a/src/app/App.jsx b/src/app/App.jsx index 2292113..06eded9 100644 --- a/src/app/App.jsx +++ b/src/app/App.jsx @@ -1,7 +1,7 @@ import React, { PureComponent } from 'react' import PropTypes from 'prop-types' -import { Router, Location } from '@reach/router' -import { webFrame } from 'electron' +import { Router, Location, navigate } from '@reach/router' +import { webFrame, ipcRenderer } from 'electron' import posed, { PoseGroup } from 'react-pose' import Titlebar from './components/Titlebar' import Home from './screens/Home' @@ -35,6 +35,12 @@ PosedRouter.propTypes = { } export default class App extends PureComponent { + componentDidMount() { + ipcRenderer.on('goTo', (evt, route) => { + navigate(route) + }) + } + render() { return ( <> diff --git a/src/main.js b/src/main.js index 1b20268..8a5aa63 100644 --- a/src/main.js +++ b/src/main.js @@ -1,6 +1,7 @@ const path = require('path') const { app, BrowserWindow, systemPreferences } = require('electron') const { touchBarWrapper } = require('react-touchbar-electron') +const buildMenu = require('./menu') let mainWindow @@ -106,11 +107,13 @@ const createWindow = async () => { switchTheme() // Load menubar menu items - require('./menu.js') + buildMenu(mainWindow) touchBarWrapper(mainWindow) } +module.exports = { mainWindow } + app.on('ready', () => { createWindow() diff --git a/src/menu.js b/src/menu.js index 6f3b053..d9204f9 100644 --- a/src/menu.js +++ b/src/menu.js @@ -1,155 +1,183 @@ const { app, Menu } = require('electron') const { openUrl } = require('./app/util/openUrl') +const { homepage } = require('../package.json') -const template = [ - { - label: 'Edit', - submenu: [ - { - role: 'undo' - }, - { - role: 'redo' - }, +const buildMenu = mainWindow => { + 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: [ + { + role: 'reload' + }, + { + role: 'forcereload' + }, + { + role: 'toggledevtools' + }, + { + type: 'separator' + }, + { + role: 'togglefullscreen' + } + ] + }, + { + role: 'window', + submenu: [ + { + role: 'minimize' + }, + { + role: 'close' + } + ] + }, + { + role: 'help', + submenu: [ + { + label: 'Learn More', + click() { + openUrl(homepage) + } + } + ] + } + ] + + if (process.platform === 'darwin') { + template.unshift({ + label: app.getName(), + submenu: [ + { + role: 'about' + }, + { + type: 'separator' + }, + { + label: 'Preferences...', + accelerator: 'CmdOrCtrl+,', + click() { + mainWindow.webContents.send('goTo', '/preferences') + } + }, + { + type: 'separator' + }, + { + role: 'services', + submenu: [] + }, + { + type: 'separator' + }, + { + role: 'hide' + }, + { + role: 'hideothers' + }, + { + role: 'unhide' + }, + { + type: 'separator' + }, + { + role: 'quit' + } + ] + }) + + // Edit menu + template[1].submenu.push( { type: 'separator' }, { - role: 'cut' - }, - { - role: 'copy' - }, - { - role: 'paste' - }, - { - role: 'pasteandmatchstyle' - }, - { - role: 'delete' - }, - { - role: 'selectall' + label: 'Speech', + submenu: [ + { + role: 'startspeaking' + }, + { + role: 'stopspeaking' + } + ] } - ] - }, - { - label: 'View', - submenu: [ - { - role: 'reload' - }, - { - role: 'forcereload' - }, - { - role: 'toggledevtools' - }, - { - type: 'separator' - }, - { - role: 'togglefullscreen' - } - ] - }, - { - role: 'window', - submenu: [ + ) + + // Window menu + template[3].submenu = [ { role: 'minimize' }, { - role: 'close' - } - ] - }, - { - role: 'help', - submenu: [ + role: 'zoom' + }, { - label: 'Learn More', - click() { - openUrl('https://electron.atom.io') - } + role: 'close' + }, + { + type: 'separator' + }, + { + role: 'front' } ] } -] -if (process.platform === 'darwin') { - template.unshift({ - label: app.getName(), - submenu: [ + if (process.platform !== 'darwin') { + template[0].submenu.push( + { type: 'separator' }, { - role: 'about' - }, - { - type: 'separator' - }, - { - 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' + label: 'Preferences...', + accelerator: 'CmdOrCtrl+,', + click() { + mainWindow.webContents.send('goTo', '/preferences') } - ] - } - ) + } + ) + } - // Window menu - template[3].submenu = [ - { - role: 'close' - }, - { - role: 'minimize' - }, - { - role: 'zoom' - }, - { - type: 'separator' - }, - { - role: 'front' - } - ] + const menu = Menu.buildFromTemplate(template) + Menu.setApplicationMenu(menu) } -const menu = Menu.buildFromTemplate(template) -Menu.setApplicationMenu(menu) +module.exports = buildMenu