1// SPDX-License-Identifier: GPL-2.0-only
2// Copyright (c) 2025-present FERS Contributors (see AUTHORS.md).
11} from '@mui/material';
12import { useScenarioStore, Antenna } from '@/stores/scenarioStore';
13import { FileInput, NumberField } from './InspectorControls';
15interface AntennaInspectorProps {
19export function AntennaInspector({ item }: AntennaInspectorProps) {
20 const { updateItem, setAntennaPattern } = useScenarioStore.getState();
21 const handleChange = (path: string, value: unknown) =>
22 updateItem(item.id, path, value);
25 <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>
32 onChange={(e) => handleChange('name', e.target.value)}
34 <FormControl fullWidth size="small">
35 <InputLabel>Pattern</InputLabel>
42 e.target.value as Antenna['pattern']
46 <MenuItem value="isotropic">Isotropic</MenuItem>
47 <MenuItem value="sinc">Sinc</MenuItem>
48 <MenuItem value="gaussian">Gaussian</MenuItem>
49 <MenuItem value="squarehorn">Square Horn</MenuItem>
50 <MenuItem value="parabolic">Parabolic</MenuItem>
51 <MenuItem value="xml">XML</MenuItem>
52 <MenuItem value="file">File (H5)</MenuItem>
57 value={item.efficiency}
58 onChange={(v) => handleChange('efficiency', v)}
61 label="Mesh Scale Multiplier"
62 value={item.meshScale ?? null}
63 onChange={(v) => handleChange('meshScale', v)}
66 {item.pattern === 'sinc' && (
70 value={item.alpha ?? null}
71 onChange={(v) => handleChange('alpha', v)}
75 value={item.beta ?? null}
76 onChange={(v) => handleChange('beta', v)}
80 value={item.gamma ?? null}
81 onChange={(v) => handleChange('gamma', v)}
85 {item.pattern === 'gaussian' && (
89 value={item.azscale ?? null}
90 onChange={(v) => handleChange('azscale', v)}
93 label="Elevation Scale"
94 value={item.elscale ?? null}
95 onChange={(v) => handleChange('elscale', v)}
99 {(item.pattern === 'squarehorn' ||
100 item.pattern === 'parabolic') && (
104 value={item.diameter ?? null}
105 onChange={(v) => handleChange('diameter', v)}
108 label="Design Frequency (Hz)"
109 value={item.design_frequency ?? null}
110 onChange={(v) => handleChange('design_frequency', v)}
115 {(item.pattern === 'xml' || item.pattern === 'file') && (
118 value={item.filename}
119 onChange={(v) => handleChange('filename', v)}
122 name: 'Antenna Pattern',
124 item.pattern === 'xml' ? ['xml'] : ['h5'],
126 { name: 'All Files', extensions: ['*'] },