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() {
/>
+
+
+