diff --git a/src/App/App.tsx b/src/App/App.tsx index bd89a9b..9faad11 100644 --- a/src/App/App.tsx +++ b/src/App/App.tsx @@ -17,7 +17,6 @@ import { useUrlHashState } from "../hooks/useUrlHashState"; import { plants } from "./plants"; import { emptyState } from "@/statecharts/concrete_syntax"; import { ModalOverlay } from "./Modals/ModalOverlay"; -import { usePersistentState } from "@/hooks/usePersistentState"; export type EditHistory = { current: VisualEditorState, diff --git a/src/App/TopPanel/SpeedControl.tsx b/src/App/TopPanel/SpeedControl.tsx index 9e936af..0343d1a 100644 --- a/src/App/TopPanel/SpeedControl.tsx +++ b/src/App/TopPanel/SpeedControl.tsx @@ -2,6 +2,8 @@ import { Dispatch, memo, SetStateAction, useCallback, useEffect } from "react"; import { KeyInfoHidden, KeyInfoVisible } from "./KeyInfo"; import { setRealtime, TimeMode } from "@/statecharts/time"; +import SpeedIcon from '@mui/icons-material/Speed'; + export const SpeedControl = memo(function SpeedControl({showKeys, timescale, setTimescale, setTime}: {showKeys: boolean, timescale: number, setTimescale: Dispatch>, setTime: Dispatch>}) { const onTimeScaleChange = useCallback((newValue: string, wallclktime: number) => { @@ -51,7 +53,7 @@ export const SpeedControl = memo(function SpeedControl({showKeys, timescale, set const KeyInfo = showKeys ? KeyInfoVisible : KeyInfoHidden; return <> -   +   S}> diff --git a/src/App/TopPanel/TopPanel.tsx b/src/App/TopPanel/TopPanel.tsx index 7e922c4..1974f83 100644 --- a/src/App/TopPanel/TopPanel.tsx +++ b/src/App/TopPanel/TopPanel.tsx @@ -1,4 +1,4 @@ -import { Dispatch, memo, ReactElement, SetStateAction, useCallback, useEffect, useState } from "react"; +import { Dispatch, memo, ReactElement, SetStateAction, useCallback, useEffect, useMemo, useState } from "react"; import { TimerElapseEvent, Timers } from "../../statecharts/runtime_types"; import { getSimTime, setPaused, setRealtime, TimeMode } from "../../statecharts/time"; import { InsertMode } from "./InsertModes"; @@ -13,6 +13,9 @@ import DarkModeIcon from '@mui/icons-material/DarkMode'; import LightModeIcon from '@mui/icons-material/LightMode'; import BrightnessAutoIcon from '@mui/icons-material/BrightnessAuto'; +import SpeedIcon from '@mui/icons-material/Speed'; +import AccessTimeIcon from '@mui/icons-material/AccessTime'; + import AccessAlarmIcon from '@mui/icons-material/AccessAlarm'; import CachedIcon from '@mui/icons-material/Cached'; import InfoOutlineIcon from '@mui/icons-material/InfoOutline'; @@ -52,7 +55,7 @@ export type TopPanelProps = { const ShortCutShowKeys = ~; export const TopPanel = memo(function TopPanel({trace, time, setTime, onUndo, onRedo, onRotate, onInit, onClear, onBack, insertMode, setInsertMode, setModal, zoom, setZoom, showKeys, setShowKeys, editHistory}: TopPanelProps) { - const [displayTime, setDisplayTime] = useState("0.000"); + const [displayTime, setDisplayTime] = useState(0); const [timescale, setTimescale] = usePersistentState("timescale", 1); const config = trace && trace.trace[trace.idx]; @@ -62,9 +65,16 @@ export const TopPanel = memo(function TopPanel({trace, time, setTime, onUndo, on const updateDisplayedTime = useCallback(() => { const now = Math.round(performance.now()); const timeMs = getSimTime(time, now); - setDisplayTime(formatTime(timeMs)); + setDisplayTime((timeMs)); }, [time, setDisplayTime]); + const formattedDisplayTime = useMemo(() => formatTime(displayTime), [displayTime]); + + // const lastSimTime = useMemo(() => time.kind === "realtime" ? time.since.simtime : time.simtime, [time]); + + const lastSimTime = config?.simtime || 0; + + useEffect(() => { // This has no effect on statechart execution. In between events, the statechart is doing nothing. However, by updating the displayed time, we give the illusion of continuous progress. const interval = setInterval(() => { @@ -105,6 +115,9 @@ export const TopPanel = memo(function TopPanel({trace, time, setTime, onUndo, on } }, [nextTimedTransition, setTime]); + + console.log({lastSimTime, displayTime, nxt: nextTimedTransition?.[0]}); + useEffect(() => { const onKeyDown = (e: KeyboardEvent) => { // don't capture keyboard events when focused on an input element: @@ -228,15 +241,20 @@ export const TopPanel = memo(function TopPanel({trace, time, setTime, onUndo, on {/* time, next */}
-   - +   + + +
+  
-   +   Tab}> - +