diff --git a/src/renderer/Pages/ProjectHome/ProjectWorkspace.tsx b/src/renderer/Pages/ProjectHome/ProjectWorkspace.tsx index 6595381..c7ee332 100644 --- a/src/renderer/Pages/ProjectHome/ProjectWorkspace.tsx +++ b/src/renderer/Pages/ProjectHome/ProjectWorkspace.tsx @@ -83,6 +83,55 @@ export const ProjectWorkspace = () => { const [liveReloadConfigHandler, setLiveReloadConfigHandler] = useState(null); const [liveReloadDispatcher, setLiveReloadDispatcher] = useState(null); + function tryAddElementToSelected(addition: PossibleCanvasElements) { + if (!selectedCanvasElements.includes(addition)) { + setSelectedCanvasElements((canvasElements) => [...canvasElements, addition]); + } + } + + useEffect(() => { + function downHandler(event: KeyboardEvent) { + if (event.key.toUpperCase() === 'SHIFT') { + setShift(true); + } + if (event.key.toUpperCase() === 'CONTROL') { + setControl(true); + } + if (event.key.toUpperCase() === 'ENTER') { + setInInteractionMode((old) => !old); + } + if (event.key.toUpperCase() === 'DELETE') { + for (const element of selectedCanvasElements) { + handleDeleteCanvasElement(element); + } + } + } + + function upHandler(event:KeyboardEvent) { + if (event.key.toUpperCase() === 'SHIFT') { + setShift(false); + } + if (event.key.toUpperCase() === 'CONTROL') { + setControl(false); + } + } + + window.addEventListener('keydown', downHandler); + window.addEventListener('keyup', upHandler); + + return () => { + window.removeEventListener('keydown', downHandler); + window.removeEventListener('keyup', upHandler); + }; + }, [selectedCanvasElements]); + + function handleElementClick(element: PossibleCanvasElements) { + if (shift) { + tryAddElementToSelected(element); + } else { + setSelectedCanvasElements([element]); + } + } const [simVarControlsHandler, setSimVarControlsHandler] = useState(null); function tryAddElementToSelected(addition: PossibleCanvasElements) {