feat(sat): the pass list becomes a table worth reading

Headings, because a column of numbers with nothing above it makes an
operator work out what they are looking at every time. A real table, so
the satellite column takes the width the longest name needs — "ZHUHAI-1
OVS-1A" was cut to eight characters in a fixed one.

Colour where it carries meaning, and nowhere else. The maximum elevation
is the quality of the pass, so it is coloured like one: a bird 70°
overhead and one scraping 12° along the horizon are not the same evening,
and the table should say so without the operator reading every number. A
pass in progress is green, one starting within five minutes is amber. And
a dot for the mode: FM and SSB call for a completely different set-up,
and which the next pass is decides whether you reach for a handheld or
for the whole station.

The rotator's baud rate is a dropdown, like every other one in OpsLog.
This commit is contained in:
2026-09-07 22:43:55 +02:00
parent b478cbfd2a
commit 37dadeda84
4 changed files with 104 additions and 27 deletions
+8 -2
View File
@@ -4651,8 +4651,14 @@ function SettingsModalImpl({ onClose, onSaved, initialSection, onMainPaneChanged
</div>
<div className="space-y-1">
<Label>{t('satset.rotBaud')}</Label>
<Input className="font-mono" value={String(satCfg.rot_baud ?? 9600)}
onChange={(e) => set('rot_baud', num(e.target.value))} />
<Select value={String(satCfg.rot_baud || 9600)} onValueChange={(v) => set('rot_baud', parseInt(v, 10) || 9600)}>
<SelectTrigger className="h-9"><SelectValue /></SelectTrigger>
<SelectContent>
{[1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200].map((b) => (
<SelectItem key={b} value={String(b)}>{b}</SelectItem>
))}
</SelectContent>
</Select>
</div>
</>
)}