2025-11-25 14:57:18 +00:00
|
|
|
import { useRef, useState } from "react";
|
2025-11-21 16:01:34 +00:00
|
|
|
|
2025-11-24 12:19:51 +00:00
|
|
|
import VideoFeedGridPainter from "./Video/VideoFeedGridPainter";
|
|
|
|
|
import CameraSettings from "./CameraSettings/CameraSettings";
|
2025-11-25 14:57:18 +00:00
|
|
|
import type { PaintedCell, Region } from "../../../types/types";
|
2025-11-24 12:19:51 +00:00
|
|
|
import PlatePatch from "./PlatePatch/PlatePatch";
|
2025-11-21 10:12:42 +00:00
|
|
|
|
|
|
|
|
const CameraGrid = () => {
|
2025-11-21 16:01:34 +00:00
|
|
|
const [regions, setRegions] = useState<Region[]>([
|
|
|
|
|
{ name: "Region 1", brushColour: "#ff0000" },
|
|
|
|
|
{ name: "Region 2", brushColour: "#00ff00" },
|
2025-11-23 22:36:08 +00:00
|
|
|
{ name: "Region 3", brushColour: "#0400ff" },
|
2025-11-21 16:01:34 +00:00
|
|
|
]);
|
|
|
|
|
const [selectedRegionIndex, setSelectedRegionIndex] = useState(0);
|
2025-11-24 13:29:00 +00:00
|
|
|
const [mode, setMode] = useState("");
|
|
|
|
|
const [tabIndex, setTabIndex] = useState(0);
|
2025-11-25 14:57:18 +00:00
|
|
|
|
2025-11-21 16:01:34 +00:00
|
|
|
const updateRegionColour = (index: number, newColour: string) => {
|
|
|
|
|
setRegions((prev) => prev.map((r, i) => (i === index ? { ...r, brushColour: newColour } : r)));
|
|
|
|
|
};
|
2025-11-25 14:57:18 +00:00
|
|
|
|
|
|
|
|
const paintedCellsRef = useRef<Map<string, PaintedCell>>(new Map());
|
|
|
|
|
|
2025-11-21 10:12:42 +00:00
|
|
|
return (
|
2025-11-25 14:57:18 +00:00
|
|
|
<div className="grid grid-cols-1 md:grid-cols-5 md:grid-rows-5 max-h-screen">
|
|
|
|
|
<VideoFeedGridPainter
|
|
|
|
|
regions={regions}
|
|
|
|
|
selectedRegionIndex={selectedRegionIndex}
|
|
|
|
|
mode={mode}
|
|
|
|
|
paintedCells={paintedCellsRef}
|
|
|
|
|
/>
|
2025-11-21 16:01:34 +00:00
|
|
|
<CameraSettings
|
|
|
|
|
regions={regions}
|
|
|
|
|
selectedRegionIndex={selectedRegionIndex}
|
|
|
|
|
onSelectRegion={setSelectedRegionIndex}
|
|
|
|
|
onChangeRegionColour={updateRegionColour}
|
2025-11-24 13:29:00 +00:00
|
|
|
mode={mode}
|
|
|
|
|
onSelectMode={setMode}
|
|
|
|
|
tabIndex={tabIndex}
|
|
|
|
|
setTabIndex={setTabIndex}
|
2025-11-25 14:57:18 +00:00
|
|
|
paintedCells={paintedCellsRef}
|
2025-11-25 20:49:11 +00:00
|
|
|
onAddRegion={() => {
|
|
|
|
|
setRegions((prev) => [...prev, { name: `Region ${prev.length + 1}`, brushColour: "#ffffff" }]);
|
|
|
|
|
}}
|
|
|
|
|
OnRemoveRegion={() => {
|
|
|
|
|
setRegions((prev) => prev.filter((_, i) => i !== selectedRegionIndex));
|
|
|
|
|
setSelectedRegionIndex((prev) => (prev > 0 ? prev - 1 : 0));
|
|
|
|
|
}}
|
2025-11-21 16:01:34 +00:00
|
|
|
/>
|
2025-11-24 12:19:51 +00:00
|
|
|
<PlatePatch />
|
2025-11-21 10:12:42 +00:00
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export default CameraGrid;
|