From 326e9d63b17b704bb958396f870986e17e049be3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20S=C3=A1nchez-Gallego?= Date: Thu, 12 Jan 2023 15:30:18 -0800 Subject: [PATCH] Allow to pause/resume auto macro --- src/renderer/HAL/Auto.tsx | 6 ++- .../HAL/Components/PauseResumeButton.tsx | 50 +++++++++++++++++++ src/renderer/HAL/Expose.tsx | 22 +++++--- src/renderer/HAL/HAL.tsx | 1 + 4 files changed, 72 insertions(+), 7 deletions(-) create mode 100644 src/renderer/HAL/Components/PauseResumeButton.tsx diff --git a/src/renderer/HAL/Auto.tsx b/src/renderer/HAL/Auto.tsx index 22f23e7..a5e7c61 100644 --- a/src/renderer/HAL/Auto.tsx +++ b/src/renderer/HAL/Auto.tsx @@ -5,10 +5,11 @@ * @License: BSD 3-clause (http://www.opensource.org/licenses/BSD-3-Clause) */ -import { Paper, Stack, TextField, Typography } from '@mui/material'; +import { Collapse, Paper, Stack, TextField, Typography } from '@mui/material'; import React from 'react'; import IOSSwitch from 'renderer/Components/IOSwitch'; import { useKeywordContext } from 'renderer/hooks'; +import PauseResumeButton from './Components/PauseResumeButton'; import useIsMacroRunning from './useIsMacroRunning'; function parseStageStatus(stageData: string[]) { @@ -132,6 +133,9 @@ export default function AutoMode() { '& .MuiInputBase-root': { marginTop: 1 }, }} /> + + + { + setIsPaused(isPausedKw?.values[0] ?? false); + }, [isPausedKw]); + + const handleClick = React.useCallback(() => { + if (isPaused) { + window.electron.tron.send(`hal ${macro} --resume`); + } else { + window.electron.tron.send(`hal ${macro} --pause`); + } + }, [macro, isPaused]); + + return ( + + + {isPaused ? : } + + + ); +} diff --git a/src/renderer/HAL/Expose.tsx b/src/renderer/HAL/Expose.tsx index bf8a254..c33a7ba 100644 --- a/src/renderer/HAL/Expose.tsx +++ b/src/renderer/HAL/Expose.tsx @@ -9,6 +9,7 @@ import SendIcon from '@mui/icons-material/Send'; import { Box, Checkbox, + Collapse, Divider, FormControlLabel, Grid, @@ -29,6 +30,7 @@ import { ExposureTimeInput } from './Components/ExposureTimeInput'; import MacroPaper from './Components/MacroPaper'; import { MacroStageSelect } from './Components/MacroStageSelect'; import MacroStepper from './Components/MacroStepper'; +import PauseResumeButton from './Components/PauseResumeButton'; import macros from './macros.json'; import useIsMacroRunning from './useIsMacroRunning'; @@ -48,6 +50,8 @@ function LinearProgressWithLabel(props: LinearProgressWithLabelProps) { React.useEffect(() => { let interval: NodeJS.Timer | undefined; + const { etr: propsETR } = props; + if (propsETR) setEtrDisplay(propsETR); if (running) { interval = setInterval( () => setEtrDisplay((etrD) => (etrD - 1 <= 0 ? 0 : etrD - 1)), @@ -56,7 +60,7 @@ function LinearProgressWithLabel(props: LinearProgressWithLabelProps) { } return () => clearInterval(interval); - }, [running]); + }, [running, props]); React.useEffect(() => { setEtrDisplay(!etr || etr <= 0 ? 0 : etr); @@ -97,7 +101,7 @@ function LinearProgressWithLabel(props: LinearProgressWithLabelProps) { export default function Expose() { const macroName = 'expose'; - const isLarge = useMediaQuery('(min-width: 630px)'); + const isLarge = useMediaQuery('(min-width: 680px)'); const [apogeeReads, setApogeeReads] = React.useState( macros.expose.defaults.apogee_reads.toString() @@ -131,6 +135,9 @@ export default function Expose() { const { stages: stagesKw } = halKeywords; const { running_macros: runningMacrosKw } = halKeywords; + const { 'hal.expose_is_paused': pausedKw } = halKeywords; + const isPaused = pausedKw?.values[0] ?? false; + const getCommandString = React.useCallback( (modify = false) => { const commandString: string[] = ['hal expose']; @@ -262,7 +269,7 @@ export default function Expose() { setBossProgress( 0 && isRunning} + running={bossCurrent > 0 && isRunning && !isPaused} total={bossTotal} etr={bossEtr} header='BOSS' @@ -274,7 +281,7 @@ export default function Expose() { } setBossProgress(); - }, [actorStages, bossStateKw, isRunning]); + }, [actorStages, bossStateKw, isRunning, isPaused]); React.useEffect(() => { // Create and update the APOGEE progress bar. @@ -290,7 +297,7 @@ export default function Expose() { setApogeeProgress( 0 && isRunning} + running={apogeeCurrent > 0 && isRunning && !isPaused} total={apogeeTotal} etr={apogeeEtr} header='APOGEE' @@ -303,7 +310,7 @@ export default function Expose() { } setApogeeProgress(); - }, [actorStages, apogeeStateKw, isRunning]); + }, [actorStages, apogeeStateKw, isRunning, isPaused]); return ( @@ -399,6 +406,9 @@ export default function Expose() { /> + + +