From b8f5da9f4ed6f0666198a58dee4e87bd1c1c892b Mon Sep 17 00:00:00 2001 From: Matthew Mulholland Date: Thu, 27 Jun 2019 17:35:09 +1000 Subject: [PATCH] #852: Added calls to menu items for main and context, based on whether 'lockable' --- src/main/menu.js | 1 + src/main/menuUtils.js | 25 ++++++++++++++++++++++--- src/main/rendererToMain.js | 8 ++++---- src/renderer/components/Home.vue | 4 ++++ src/renderer/menu.js | 11 ++++++++++- 5 files changed, 41 insertions(+), 8 deletions(-) diff --git a/src/main/menu.js b/src/main/menu.js index b1efea005..451da0d37 100644 --- a/src/main/menu.js +++ b/src/main/menu.js @@ -208,6 +208,7 @@ class AppMenu { { label: 'Guess Column Properties', accelerator: 'Shift+CmdOrCtrl+G', + lockable: true, click: function () { webContents().send('guessColumnProperties') } diff --git a/src/main/menuUtils.js b/src/main/menuUtils.js index 47306aa15..55807bcb4 100644 --- a/src/main/menuUtils.js +++ b/src/main/menuUtils.js @@ -20,6 +20,17 @@ export function disableAllFromLabels(menuLabel, subMenuLabels) { } } +export function disableEnableBasedOnAttributeAndConditionFromLabels(menuLabels, attribute, condition) { + for (const nextLabel of menuLabels) { + let menu = getMenu(nextLabel) + menu.submenu.items.forEach(function (x) { + if (typeof x.label !== 'undefined' && x[attribute]) { + x.enabled = condition + } + }) + } +} + export function enableAllSubMenuItemsFromMenuLabel (menuLabel) { let menu = getMenu(menuLabel) enableAllSubMenuItemsFromMenuObject(menu) @@ -59,11 +70,19 @@ export function getSubMenuLabelsFromMenu (menuLabel) { } export function disableOpenFileItems() { - applyFnsToLabelsFromMenuLabel('File', ['Open Excel Sheet...', 'Open', 'Open Data Package'], disableAllSubMenuItemsFromMenuObject, disableMenuItem) + disableMenuItems('File', ['Open Excel Sheet...', 'Open', 'Open Data Package']) +} + +export function disableMenuItems(menuLabel, subMenuLabels) { + applyFnsToLabelsFromMenuLabel(menuLabel, subMenuLabels, disableAllSubMenuItemsFromMenuObject, disableMenuItem) } export function enableOpenFileItems() { - applyFnsToLabelsFromMenuLabel('File', ['Open Excel Sheet...', 'Open', 'Open Data Package'], enableAllSubMenuItemsFromMenuObject, enableMenuItem) + enableMenuItems('File', ['Open Excel Sheet...', 'Open', 'Open Data Package']) +} + +export function enableMenuItems(menuLabel, subMenuLabels) { + applyFnsToLabelsFromMenuLabel(menuLabel, subMenuLabels, enableAllSubMenuItemsFromMenuObject, enableMenuItem) } export function applyFnsToLabelsFromMenuLabel(menuLabel, labels, subMenuFn, menuItemFn) { @@ -103,7 +122,7 @@ export function getSubMenusAndItemsFromMenu (menu) { // console.log(`skipping `, next.type) } } - return { subMenusOnly, menuItemsOnly } + return [ subMenusOnly, menuItemsOnly ] } export function getSubMenuFromMenu (menuLabel, subMenuLabel) { diff --git a/src/main/rendererToMain.js b/src/main/rendererToMain.js index 4a5b39cf3..85f7dfcd2 100644 --- a/src/main/rendererToMain.js +++ b/src/main/rendererToMain.js @@ -1,4 +1,4 @@ -import { ipcMain as ipc, dialog } from 'electron' +import { ipcMain as ipc, dialog, Menu } from 'electron' import { showErrors } from './errors.js' import { getMenu, @@ -6,7 +6,8 @@ import { clickLabelsOnMenu, disableAllSubMenuItemsFromMenuObject, enableSubMenuItemsFromMenuObject, - enableAllSubMenuItemsFromMenuLabel + enableAllSubMenuItemsFromMenuLabel, + disableEnableBasedOnAttributeAndConditionFromLabels } from './menuUtils.js' import { focusMainWindow, closeSecondaryWindow } from './windows.js' import { loadPackageJson, loadResourceDataFromPackageUrl } from './url.js' @@ -31,8 +32,7 @@ ipc.on('hasLockedActiveTable', (event, arg) => { let lockedSubMenu = getSubMenuFromMenu('Tools', 'Lock Column Properties') lockedSubMenu.checked = arg // for locked table (ie: lock is enabled), value is true, so any menu 'enabled': set to false - let guessSubMenu = getSubMenuFromMenu('Tools', 'Guess Column Properties') - guessSubMenu.enabled = !arg + disableEnableBasedOnAttributeAndConditionFromLabels(['Edit', 'Tools'], 'lockable', !arg) }) ipc.on('showErrorsWindow', (event, arg) => { diff --git a/src/renderer/components/Home.vue b/src/renderer/components/Home.vue index a2f6fcb61..e10062b6f 100644 --- a/src/renderer/components/Home.vue +++ b/src/renderer/components/Home.vue @@ -264,6 +264,9 @@ import { loadData, getWindow } from '../index.js' +import { + disableEnableContextMenu +} from '../menu.js' import { HotRegister, getColumnCount, @@ -457,6 +460,7 @@ export default { this.$subscribeTo(allTableLocks$, async function(allTablesLocks) { self.isActiveTabLocked = _.includes(allTablesLocks, self.currentHotId) + disableEnableContextMenu(self.isActiveTabLocked) ipc.send('hasLockedActiveTable', self.isActiveTabLocked) }) // request may be coming from another page - get focus first diff --git a/src/renderer/menu.js b/src/renderer/menu.js index 96d3efcee..582988468 100644 --- a/src/renderer/menu.js +++ b/src/renderer/menu.js @@ -2,6 +2,7 @@ import { insertRowAbove, insertRowBelow, insertColumnBefore, insertColumnAfter, import { sharedMenus } from '@/sharedWithMain.js' import _ from 'lodash' import { remote } from 'electron' +import { getMenu } from '../main/menuUtils' const Menu = remote.Menu const MenuItem = remote.MenuItem @@ -10,7 +11,7 @@ function buildMenuItems(options, clickFn) { return nextMenu } -let menu = new Menu() +var menu = new Menu() menu.append(new MenuItem({ type: 'separator' })) menu.append(buildMenuItems(sharedMenus.insertRowAbove, insertRowAbove)) @@ -22,6 +23,14 @@ menu.append(new MenuItem({ type: 'separator' })) menu.append(buildMenuItems(sharedMenus.removeRows, removeRows)) menu.append(buildMenuItems(sharedMenus.removeColumns, removeColumns)) +export function disableEnableContextMenu(isLocked) { + menu.items.forEach(function (x) { + if (typeof x.label !== 'undefined' && x['lockable']) { + x.enabled = !isLocked + } + }) +} + export { menu, sharedMenus }