Merge branch 'master' into develop

This commit is contained in:
Jan Prochazka
2022-04-18 11:10:12 +02:00
8 changed files with 108 additions and 8 deletions

View File

@@ -86,7 +86,7 @@ function commandItem(item) {
} }
function buildMenu() { function buildMenu() {
let template = _cloneDeepWith(mainMenuDefinition, item => { let template = _cloneDeepWith(mainMenuDefinition({ editMenu: true }), item => {
if (item.divider) { if (item.divider) {
return { type: 'separator' }; return { type: 'separator' };
} }
@@ -164,6 +164,9 @@ ipcMain.on('app-started', async (event, arg) => {
} }
}); });
ipcMain.on('window-action', async (event, arg) => { ipcMain.on('window-action', async (event, arg) => {
if (!mainWindow) {
return;
}
switch (arg) { switch (arg) {
case 'minimize': case 'minimize':
mainWindow.minimize(); mainWindow.minimize();
@@ -199,6 +202,23 @@ ipcMain.on('window-action', async (event, arg) => {
case 'zoomreset': case 'zoomreset':
mainWindow.webContents.zoomLevel = 0; mainWindow.webContents.zoomLevel = 0;
break; break;
// edit
case 'undo':
mainWindow.webContents.undo();
break;
case 'redo':
mainWindow.webContents.redo();
break;
case 'cut':
mainWindow.webContents.cut();
break;
case 'copy':
mainWindow.webContents.copy();
break;
case 'paste':
mainWindow.webContents.paste();
break;
} }
}); });

View File

@@ -1,4 +1,4 @@
module.exports = [ module.exports = ({ editMenu }) => [
{ {
label: 'File', label: 'File',
submenu: [ submenu: [
@@ -34,6 +34,20 @@ module.exports = [
], ],
}, },
editMenu
? {
label: 'Edit',
submenu: [
{ command: 'edit.undo' },
{ command: 'edit.redo' },
{ divider: true },
{ command: 'edit.cut' },
{ command: 'edit.copy' },
{ command: 'edit.paste' },
],
}
: null,
// { // {
// label: 'Edit', // label: 'Edit',
// submenu: [ // submenu: [

View File

@@ -13,7 +13,7 @@
keyText += e.key; keyText += e.key;
const commandsValue = get(commandsCustomized); const commandsValue = get(commandsCustomized);
const commandsFiltered: any = Object.values(commandsValue).filter( let commandsFiltered: any = Object.values(commandsValue).filter(
(x: any) => (x: any) =>
x.keyText && x.keyText &&
resolveKeyText(x.keyText) resolveKeyText(x.keyText)
@@ -34,7 +34,20 @@
e.stopPropagation(); e.stopPropagation();
} }
if (
commandsFiltered.length > 1 &&
commandsFiltered.find(x => x.systemCommand) &&
commandsFiltered.find(x => !x.systemCommand)
) {
commandsFiltered = commandsFiltered.filter(x => !x.systemCommand);
}
const notGroup = commandsFiltered.filter(x => x.enabled && !x.isGroupCommand); const notGroup = commandsFiltered.filter(x => x.enabled && !x.isGroupCommand);
if (notGroup.length > 1) {
console.log('Warning, multiple commands mapped to', keyText, notGroup);
}
if (notGroup.length == 1) { if (notGroup.length == 1) {
const command = notGroup[0]; const command = notGroup[0];
if (command.onClick) command.onClick(); if (command.onClick) command.onClick();
@@ -44,6 +57,10 @@
const group = commandsFiltered.filter(x => x.enabled && x.isGroupCommand); const group = commandsFiltered.filter(x => x.enabled && x.isGroupCommand);
if (group.length > 1) {
console.log('Warning, multiple commands mapped to', keyText, group);
}
if (group.length == 1) { if (group.length == 1) {
const command = group[0]; const command = group[0];
runGroupCommand(command.group); runGroupCommand(command.group);

View File

@@ -28,6 +28,7 @@ export interface GlobalCommand {
toolbarOrder?: number; toolbarOrder?: number;
disableHandleKeyText?: string; disableHandleKeyText?: string;
isRelatedToTab?: boolean, isRelatedToTab?: boolean,
systemCommand?: boolean;
} }
export default function registerCommand(command: GlobalCommand) { export default function registerCommand(command: GlobalCommand) {

View File

@@ -690,6 +690,55 @@ registerCommand({
onClick: () => getElectron().send('window-action', 'zoomreset'), onClick: () => getElectron().send('window-action', 'zoomreset'),
}); });
registerCommand({
id: 'edit.undo',
category: 'Edit',
name: 'Undo',
keyText: 'CtrlOrCommand+Z',
systemCommand: true,
testEnabled: () => getElectron() != null,
onClick: () => getElectron().send('window-action', 'undo'),
});
registerCommand({
id: 'edit.redo',
category: 'Edit',
name: 'Redo',
systemCommand: true,
testEnabled: () => getElectron() != null,
onClick: () => getElectron().send('window-action', 'redo'),
});
registerCommand({
id: 'edit.cut',
category: 'Edit',
name: 'Cut',
keyText: 'CtrlOrCommand+X',
systemCommand: true,
testEnabled: () => getElectron() != null,
onClick: () => getElectron().send('window-action', 'cut'),
});
registerCommand({
id: 'edit.copy',
category: 'Edit',
name: 'Copy',
keyText: 'CtrlOrCommand+C',
systemCommand: true,
testEnabled: () => getElectron() != null,
onClick: () => getElectron().send('window-action', 'copy'),
});
registerCommand({
id: 'edit.paste',
category: 'Edit',
name: 'Paste',
keyText: 'CtrlOrCommand+V',
systemCommand: true,
testEnabled: () => getElectron() != null,
onClick: () => getElectron().send('window-action', 'paste'),
});
const electron = getElectron(); const electron = getElectron();
if (electron) { if (electron) {
electron.addEventListener('run-command', (e, commandId) => runCommand(commandId)); electron.addEventListener('run-command', (e, commandId) => runCommand(commandId));

View File

@@ -47,7 +47,7 @@
name: 'Insert new row', name: 'Insert new row',
toolbarName: 'New row', toolbarName: 'New row',
icon: 'icon add', icon: 'icon add',
keyText: 'Insert', keyText: isMac() ? 'Command+I' : 'Insert',
testEnabled: () => getCurrentDataGrid()?.getGrider()?.editable, testEnabled: () => getCurrentDataGrid()?.getGrider()?.editable,
onClick: () => getCurrentDataGrid().insertNewRow(), onClick: () => getCurrentDataGrid().insertNewRow(),
}); });
@@ -191,7 +191,6 @@
id: 'dataGrid.clearFilter', id: 'dataGrid.clearFilter',
category: 'Data grid', category: 'Data grid',
name: 'Clear filter', name: 'Clear filter',
keyText: 'CtrlOrCommand+I',
testEnabled: () => getCurrentDataGrid()?.clearFilterEnabled(), testEnabled: () => getCurrentDataGrid()?.clearFilterEnabled(),
onClick: () => getCurrentDataGrid().clearFilter(), onClick: () => getCurrentDataGrid().clearFilter(),
}); });
@@ -306,7 +305,7 @@
import EditJsonModal from '../modals/EditJsonModal.svelte'; import EditJsonModal from '../modals/EditJsonModal.svelte';
import { apiCall } from '../utility/api'; import { apiCall } from '../utility/api';
import getElectron from '../utility/getElectron'; import getElectron from '../utility/getElectron';
import { isCtrlOrCommandKey } from '../utility/common'; import { isCtrlOrCommandKey, isMac } from '../utility/common';
export let onLoadNextData = undefined; export let onLoadNextData = undefined;
export let grider = undefined; export let grider = undefined;

View File

@@ -16,7 +16,7 @@
{#if !isMac()} {#if !isMac()}
<div class="icon"><img src="logo192.png" width="20" height="20" /></div> <div class="icon"><img src="logo192.png" width="20" height="20" /></div>
<div class="menu"> <div class="menu">
<HorizontalMenu items={mainMenuDefinition} /> <HorizontalMenu items={mainMenuDefinition({ editMenu: !!electron })} />
</div> </div>
{/if} {/if}
<div class="title">{title}</div> <div class="title">{title}</div>

View File

@@ -76,7 +76,7 @@
const rect = domMainMenu.getBoundingClientRect(); const rect = domMainMenu.getBoundingClientRect();
const left = rect.right; const left = rect.right;
const top = rect.top; const top = rect.top;
const items = mainMenuDefinition; const items = mainMenuDefinition({ editMenu: false });
currentDropDownMenu.set({ left, top, items }); currentDropDownMenu.set({ left, top, items });
} }