Improved Design, new render Side

This commit is contained in:
2022-06-13 21:33:21 +02:00
parent 96223ba81b
commit 7c58e244e5
6 changed files with 108 additions and 27 deletions

View File

@@ -2,10 +2,11 @@ import { blenderPath, blenderScriptPath, dataPath, templatePath } from "./paths"
import {spawn} from "child_process"; import {spawn} from "child_process";
import logger from "./logger"; import logger from "./logger";
import { setBlenderLoading, setBlenderStatus } from "./ui/menu"; import { setBlenderLoading, setBlenderStatus } from "./ui/menu";
import { setLogNumber, setStatus } from "./ui/mainSide"; import { setLogNumber, setStatus } from "./ui/renderingSide";
import {imageLoading, imageLoaded} from "./ui/settingsSide"; import {imageLoading, imageLoaded} from "./ui/settingsSide";
import { settingList } from "./settings"; import { settingList } from "./settings";
import isValid from "is-valid-path"; import isValid from "is-valid-path";
import { sideSetRendering } from "../renderer";
const blenderStartString = [ const blenderStartString = [
templatePath, templatePath,
@@ -63,6 +64,7 @@ function startBlender() {
setStatus("Rendering Frame " + lastFrame + "/" + frames); setStatus("Rendering Frame " + lastFrame + "/" + frames);
} }
if(dataStr.includes("Finished") && renderingVideo) { if(dataStr.includes("Finished") && renderingVideo) {
sideSetRendering(false);
if(lastFrame == frames) { if(lastFrame == frames) {
setStatus("Finished Render Successfully!"); setStatus("Finished Render Successfully!");
} else { } else {
@@ -77,6 +79,8 @@ function startBlender() {
} }
if(dataStr.includes("Waiting for command")) { if(dataStr.includes("Waiting for command")) {
sideSetRendering(false);
if(renderingPicture) { if(renderingPicture) {
imageLoaded(); imageLoaded();
} }
@@ -104,6 +108,7 @@ function startBlender() {
} }
function restartBlender() { function restartBlender() {
sideSetRendering(false);
blenderConsole.kill(); blenderConsole.kill();
blenderConsole = spawn(blenderPath, blenderStartString); blenderConsole = spawn(blenderPath, blenderStartString);
startBlender(); startBlender();
@@ -134,14 +139,15 @@ function blender(command:blenderCmd) {
} else { } else {
readyToAcceptCommand = false; readyToAcceptCommand = false;
renderingVideo = true; renderingVideo = true;
sideSetRendering(true);
blenderConsole.stdin.write("startRendering\n"); blenderConsole.stdin.write("startRendering\n");
} }
} }
} else if(command === blenderCmd.stopRendering) { } else if(command === blenderCmd.stopRendering) {
restartBlender();
readyToAcceptCommand = false; readyToAcceptCommand = false;
renderingPicture = false; renderingPicture = false;
renderingVideo = false; renderingVideo = false;
restartBlender();
} }
} }

View File

@@ -5,14 +5,7 @@ import logger from "../logger";
import {exec} from "child_process"; import {exec} from "child_process";
import {blender, blenderCmd} from "../blender-controller"; import {blender, blenderCmd} from "../blender-controller";
let setStatus:React.Dispatch<React.SetStateAction<string>>;
let setLogNumber:React.Dispatch<React.SetStateAction<string>>;
function MainSide() { function MainSide() {
const [status, setStatusInner] = useState("Idle");
setStatus = setStatusInner;
const [logNumber, setLogNumberInner] = useState("0");
setLogNumber = setLogNumberInner;
const [logs, setLogs] = useState(settingList.log); const [logs, setLogs] = useState(settingList.log);
const [output, setOutput] = useState(settingList.output); const [output, setOutput] = useState(settingList.output);
const [logTable, setLogTable] = useState(logs.substring(1).slice(0, -1).split('""').map((log, index) => { const [logTable, setLogTable] = useState(logs.substring(1).slice(0, -1).split('""').map((log, index) => {
@@ -35,7 +28,7 @@ function MainSide() {
setLogTable(logListName.map((log, index) => { setLogTable(logListName.map((log, index) => {
return <tr key={index}> return <tr key={index}>
<td title={logList[index]}>{index+1}. {log}</td> <td title={logList[index]}>{index+1}. {log}</td>
<td><button onClick={() => { <td><button className="listButton" onClick={() => {
const newLogs = settingList.log.replace('"'+logList[index]+'"', ""); const newLogs = settingList.log.replace('"'+logList[index]+'"', "");
updateSettings({log:newLogs}); updateSettings({log:newLogs});
setLogs(newLogs); setLogs(newLogs);
@@ -53,12 +46,7 @@ function MainSide() {
<path d="M361 215C375.3 223.8 384 239.3 384 256C384 272.7 375.3 288.2 361 296.1L73.03 472.1C58.21 482 39.66 482.4 24.52 473.9C9.377 465.4 0 449.4 0 432V80C0 62.64 9.377 46.63 24.52 38.13C39.66 29.64 58.21 29.99 73.03 39.04L361 215z"/> <path d="M361 215C375.3 223.8 384 239.3 384 256C384 272.7 375.3 288.2 361 296.1L73.03 472.1C58.21 482 39.66 482.4 24.52 473.9C9.377 465.4 0 449.4 0 432V80C0 62.64 9.377 46.63 24.52 38.13C39.66 29.64 58.21 29.99 73.03 39.04L361 215z"/>
</svg> </svg>
</button> </button>
<p>{"Log " + logNumber + "/" + String(settingList.log.split("\"\"").length)}</p> <button id="openOutputMain" onClick={() => openOutputFolder()}>Open Output Folder</button>
<div className="dataDiv">
<p>{status}</p>
<button onClick={() => openOutputFolder()}>Open Output Folder</button>
</div>
<hr/>
<h4 className="noMarginBottom">Logs:</h4> <h4 className="noMarginBottom">Logs:</h4>
<table> <table>
<tbody> <tbody>
@@ -99,7 +87,7 @@ function addLog(updateHook:React.Dispatch<React.SetStateAction<string>>) {
result.filePaths.forEach(value => { result.filePaths.forEach(value => {
const logToAdd = "\"" + value + "\""; const logToAdd = "\"" + value + "\"";
if(settingList.log.includes(logToAdd)) { if(settingList.log.includes(logToAdd)) {
logger.warningMSG("Log already added!"); logger.warningMSG("Log already added: " + logToAdd);
} else { } else {
logStr += "\"" + String(value) + "\""; logStr += "\"" + String(value) + "\"";
} }
@@ -135,6 +123,5 @@ function openOutputFolder() {
export default MainSide; export default MainSide;
export { export {
setStatus, openOutputFolder
setLogNumber
} }

View File

@@ -1,5 +1,6 @@
import React, {useState} from "react"; import React, {useState} from "react";
import { openSide, Side } from "../../renderer"; import { openSide, Side } from "../../renderer";
import {blender, blenderCmd} from "../blender-controller";
const UpdateButton = () => ( const UpdateButton = () => (
<div id="update-available"> <div id="update-available">
@@ -21,8 +22,11 @@ const MainSideButtons = () => (
</div> </div>
) )
const OtherSideButtons = () => ( const SettingsSideButtons = () => (
<button id="settings-back" onClick={() => openSide(Side.Main)}>Back</button> <button className="back-button" onClick={() => openSide(Side.Main)}>Back</button>
)
const RenderingSideButton = () => (
<button className="back-button" id="stopRender" onClick={() => blender(blenderCmd.stopRendering)}>Stop</button>
) )
const BlenderLoadingSVG = () => ( const BlenderLoadingSVG = () => (
@@ -58,7 +62,9 @@ function Menu({updateAvailable, side}:{updateAvailable:boolean, side:Side}) {
<p>{blenderStatus}</p> <p>{blenderStatus}</p>
</div> </div>
{updateAvailable? <UpdateButton/> : null} {updateAvailable? <UpdateButton/> : null}
{(side == Side.Main)? <MainSideButtons/> : <OtherSideButtons/>} {(side == Side.Main)? <MainSideButtons/> : null}
{(side == Side.Settings)? <SettingsSideButtons/> : null}
{(side == Side.Rendering)? <RenderingSideButton/> : null}
</header> </header>
) )
} }

View File

@@ -0,0 +1,27 @@
import React, {useState} from "react";
import { settingList } from "../settings";
import {openOutputFolder} from "./mainSide";
let setLogNumber:React.Dispatch<React.SetStateAction<string>>;
let setStatus:React.Dispatch<React.SetStateAction<string>>;
function RenderingSide() {
const [logNumber, setLogNumberInner] = useState("0");
setLogNumber = setLogNumberInner;
const [status, setStatusInner] = useState("Idle");
setStatus = setStatusInner;
return (
<div id="content">
<p>{"Log " + logNumber + "/" + String(settingList.log.split("\"\"").length)}</p>
<p>{status}</p>
<button onClick={() => openOutputFolder()}>Open Output Folder</button>
</div>
)
}
export default RenderingSide;
export {
setLogNumber,
setStatus
};

View File

@@ -40,7 +40,7 @@ header h1 {
width: auto; width: auto;
} }
#settings-back { .back-button {
cursor: pointer; cursor: pointer;
padding: 10px; padding: 10px;
background-color: #2196F3; background-color: #2196F3;
@@ -51,11 +51,15 @@ header h1 {
font-size: large; font-size: large;
} }
#settings-back:hover { .back-button:hover {
transform: scale(1.05); transform: scale(1.05);
text-decoration: none; text-decoration: none;
} }
#stopRender {
background-color: #e1334e;
}
#content { #content {
padding-left: 25px; padding-left: 25px;
padding-right: 25px; padding-right: 25px;
@@ -207,6 +211,31 @@ header h1 {
margin-top: 5px; margin-top: 5px;
} }
#deleteLogsButton { #deleteLogsButton {
background-color: #e1334e;
margin-top: 5px; margin-top: 5px;
margin-left: 5px; margin-left: 5px;
} }
#openOutputMain {
margin-top: 15px;
display: block;
}
.listButton {
background-color: #e1334e;
padding: 5px;
border-radius: 12px;
}
button {
cursor: pointer;
padding: 10px;
background-color: #2196F3;
color: white;
border: none;
border-radius: 20px;
font-weight: bolder;
}
button:hover {
transform: scale(1.05);
}

View File

@@ -3,30 +3,56 @@ import ReactDOM from "react-dom/client";
import Menu from "./components/ui/menu"; import Menu from "./components/ui/menu";
import MainSide from "./components/ui/mainSide"; import MainSide from "./components/ui/mainSide";
import SettingsSite from "./components/ui/settingsSide"; import SettingsSite from "./components/ui/settingsSide";
import RenderingSide from "./components/ui/renderingSide";
import "./index.css"; import "./index.css";
import "./toggle-switchy.css"; import "./toggle-switchy.css";
import { startBlender } from "./components/blender-controller"; import { startBlender } from "./components/blender-controller";
enum Side { enum Side {
Main, Main,
Rendering,
Settings Settings
} }
let rendering = false;
let currentSide = Side.Main;
const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement); const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement);
function openSide(side:Side) { function openSide(side:Side) {
if(side == Side.Main && rendering) {
side = Side.Rendering;
}
currentSide = side;
root.render( root.render(
<React.StrictMode> <React.StrictMode>
<Menu updateAvailable={false} side={side}/> <Menu updateAvailable={false} side={side}/>
{(side == Side.Main)? <MainSide/> : <SettingsSite/>} {(side === Side.Main)? <MainSide/> : null}
{(side === Side.Settings)? <SettingsSite/> : null}
{(side === Side.Rendering)? <RenderingSide/> : null}
</React.StrictMode> </React.StrictMode>
); );
} }
openSide(Side.Main); openSide(currentSide);
startBlender(); startBlender();
function sideSetRendering(value:boolean) {
rendering = value;
if(value) {
if(currentSide === Side.Main) {
openSide(Side.Rendering);
}
} else {
if(currentSide === Side.Rendering) {
openSide(Side.Main);
}
}
}
export { export {
openSide, openSide,
Side Side,
sideSetRendering
} }