diff --git a/nerfactory/viewer/app/src/index.scss b/nerfactory/viewer/app/src/index.scss
index 74acb2f9c..d3eb5b914 100644
--- a/nerfactory/viewer/app/src/index.scss
+++ b/nerfactory/viewer/app/src/index.scss
@@ -103,8 +103,13 @@ $sidebar-width: 100% !default;
// height: 170px;
}
+.StatusPanel .StatusPanel-play-button {
+ width: 90%;
+ margin: 10px;
+}
+
.StatusPanel .StatusPanel-button-group {
- margin: 12px;
+ margin: 10px;
}
.StatusPanel .StatusPanel-hide-scene-button {
diff --git a/nerfactory/viewer/app/src/modules/ConfigPanel/ConfigPanel.jsx b/nerfactory/viewer/app/src/modules/ConfigPanel/ConfigPanel.jsx
index 14e5f9c1d..1e25e380b 100644
--- a/nerfactory/viewer/app/src/modules/ConfigPanel/ConfigPanel.jsx
+++ b/nerfactory/viewer/app/src/modules/ConfigPanel/ConfigPanel.jsx
@@ -1,4 +1,4 @@
-import { button, buttonGroup, useControls } from 'leva';
+import { buttonGroup, useControls } from 'leva';
import { useContext, useEffect } from 'react';
import { useDispatch, useSelector } from 'react-redux';
@@ -9,7 +9,6 @@ const msgpack = require('msgpack-lite');
export function RenderControls() {
// connection status indicators
const websocket = useContext(WebSocketContext).socket;
- const isTraining = useSelector((state) => state.renderingState.isTraining);
const outputOptions = useSelector(
(state) => state.renderingState.output_options,
);
@@ -131,53 +130,6 @@ export function RenderControls() {
const [, setControls] = useControls(
() => ({
- // isTraining
- 'Pause Training': button(
- () => {
- // write locally to store
- dispatch({
- type: 'write',
- path: 'renderingState/isTraining',
- data: false,
- });
- // write to server
- const cmd = 'write';
- const path = 'renderingState/isTraining';
- const data = {
- type: cmd,
- path,
- data: false,
- };
- const message = msgpack.encode(data);
- websocket.send(message);
- },
- {
- disabled: !isTraining,
- },
- ),
- 'Resume Training': button(
- () => {
- // write locally to store
- dispatch({
- type: 'write',
- path: 'renderingState/isTraining',
- data: true,
- });
- // write to server
- const cmd = 'write';
- const path = 'renderingState/isTraining';
- const data = {
- type: cmd,
- path,
- data: true,
- };
- const message = msgpack.encode(data);
- websocket.send(message);
- },
- {
- disabled: isTraining,
- },
- ),
// output_options
output_options: {
label: 'Output Render',
@@ -245,7 +197,6 @@ export function RenderControls() {
}),
}),
[
- isTraining,
outputOptions,
outputChoice,
colormapOptions,
@@ -265,7 +216,6 @@ export function RenderControls() {
setControls({ 'Camera FoV': field_of_view });
}, [
setControls,
- isTraining,
outputOptions,
outputChoice,
colormapOptions,
diff --git a/nerfactory/viewer/app/src/modules/SidePanel/StatusPanel/StatusPanel.jsx b/nerfactory/viewer/app/src/modules/SidePanel/StatusPanel/StatusPanel.jsx
index 9d9c9dd3a..97d736606 100644
--- a/nerfactory/viewer/app/src/modules/SidePanel/StatusPanel/StatusPanel.jsx
+++ b/nerfactory/viewer/app/src/modules/SidePanel/StatusPanel/StatusPanel.jsx
@@ -2,15 +2,24 @@ import * as React from 'react';
import Button from '@mui/material/Button';
import { ButtonGroup } from '@mui/material';
-import { useSelector } from 'react-redux';
+import { useDispatch, useSelector } from 'react-redux';
+import PauseIcon from '@mui/icons-material/Pause';
+import PlayArrowIcon from '@mui/icons-material/PlayArrow';
import ViewInArIcon from '@mui/icons-material/ViewInAr';
import WebSocketUrlField from '../../WebSocketUrlField';
+import { WebSocketContext } from '../../WebSocket/WebSocket';
+
+const msgpack = require('msgpack-lite');
+
interface StatusPanelProps {
sceneTree: object;
}
export default function StatusPanel(props: StatusPanelProps) {
+ const dispatch = useDispatch();
+ const websocket = React.useContext(WebSocketContext).socket;
+ const isTraining = useSelector((state) => state.renderingState.isTraining);
const sceneTree = props.sceneTree;
const isWebsocketConnected = useSelector(
@@ -30,33 +39,51 @@ export default function StatusPanel(props: StatusPanelProps) {
const handleChange = () => {
setValue(!value);
};
+
+ const handlePlayChange = () => {
+ dispatch({
+ type: 'write',
+ path: 'renderingState/isTraining',
+ data: !isTraining,
+ });
+ // write to server
+ const cmd = 'write';
+ const path = 'renderingState/isTraining';
+ const data = {
+ type: cmd,
+ path,
+ data: !isTraining,
+ };
+ const message = msgpack.encode(data);
+ websocket.send(message);
+ };
const scene_button = value ? 'Hide Scene' : 'Show Scene';
+ const is_training_text = isTraining ? 'Pause Training' : 'Resume Training';
+ const training_icon = isTraining ?