mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 17:27:32 +00:00
feat(slices): SPLIT только у главного флага
У слайса нет своего VFO B — кросс-частотный TX делается TX-бейджем слайса. Бейдж SPLIT (и его хит-зона) рисуется лишь при IsMain; «×» флага слайса переехал вплотную к TX. SPLIT главного гаснет, пока TX-источник — слайс (ActiveTXFreqHz берёт частоту слайса, а не VFO B). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+1
-1
@@ -5380,7 +5380,7 @@ end;
|
||||
|
||||
procedure TMainForm.OnVfoOverlaySplit(Sender: TObject);
|
||||
begin
|
||||
if CurSliceId <> 0 then Exit; // SPLIT — только главный (слайсы не передают)
|
||||
if CurSliceId <> 0 then Exit; // SPLIT-бейджа у слайсов нет (страховка)
|
||||
FController.SetSplit(not FController.FSplitTxB);
|
||||
FPan.PushMainFlagExtState;
|
||||
end;
|
||||
|
||||
+3
-1
@@ -1346,8 +1346,10 @@ procedure TPanafallPanel.PushMainFlagExtState;
|
||||
begin
|
||||
if not (Assigned(FMainFlag) and FMainFlag.Visible) or (FController = nil) then Exit;
|
||||
// Главный VFO = «слайс A» (id 0). TxSel/Tx активны, когда TX-источник = главный.
|
||||
// SPLIT (TX на VFO B) актуален только при TX-источнике = главный: когда
|
||||
// передаём со слайса, ActiveTXFreqHz берёт его частоту, а не VFO B.
|
||||
FMainFlag.SetExtState(FController.ActiveVolume, FController.FMuted,
|
||||
FController.FSplitTxB,
|
||||
FController.FSplitTxB and (FController.FTxSliceId = 0),
|
||||
FController.FTransmitting and (FController.FTxSliceId = 0),
|
||||
FController.FTxSliceId = 0);
|
||||
end;
|
||||
|
||||
+12
-7
@@ -981,13 +981,14 @@ begin
|
||||
RW := W - PAD*2;
|
||||
CurY := PAD;
|
||||
|
||||
{ --- Шапка: [A] BW ... [×] SPLIT [TX] --- }
|
||||
{ --- Шапка: главный [A] BW ... SPLIT [TX]; слайс [B] BW ... [×] [TX] --- }
|
||||
DrawBadge(C, Rect(X, CurY, X+16, CurY+HDR_BADGE_H), FSlice, SliceColor(FSlice), CLR_BADGE_TXT);
|
||||
RegisterHit(Rect(X, CurY, X+16, CurY+HDR_BADGE_H), HIT_SLICE_SEL); // бейдж = выбор слайса
|
||||
// Кнопка закрытия × — только у неглавных слайсов (главный приёмник не закрыть).
|
||||
// Место освободилось от SPLIT (его у слайсов нет) — ставим вплотную к TX.
|
||||
if not FIsMain then
|
||||
begin
|
||||
R := Rect(W - PAD - 26 - 44 - 6 - 14, CurY, W - PAD - 26 - 44 - 6, CurY + HDR_BADGE_H);
|
||||
R := Rect(W - PAD - 26 - 6 - 14, CurY, W - PAD - 26 - 6, CurY + HDR_BADGE_H);
|
||||
DrawBadge(C, R, #$C3#$97, CLR_BTN_NORM, CLR_DIM); // UTF-8 '×'
|
||||
RegisterHit(R, HIT_CLOSE);
|
||||
end;
|
||||
@@ -1004,11 +1005,15 @@ begin
|
||||
else if FTxSel then DrawBadge(C, R, 'TX', CLR_TX_SEL, CLR_BADGE_TXT)
|
||||
else DrawBadge(C, R, 'TX', CLR_BTN_NORM, CLR_DIM);
|
||||
RegisterHit(R, HIT_TX);
|
||||
// SPLIT (левее TX) — кликабельно
|
||||
R := Rect(W - PAD - 26 - 44, CurY, W - PAD - 26 - 4, CurY + HDR_BADGE_H);
|
||||
if FSplit then DrawBadge(C, R, 'SPLIT', CLR_SPLIT_ON, CLR_BADGE_TXT)
|
||||
else DrawBadge(C, R, 'SPLIT', CLR_BTN_NORM, CLR_DIM);
|
||||
RegisterHit(R, HIT_SPLIT);
|
||||
// SPLIT (левее TX) — кликабельно; только у главного: split = TX на VFO B,
|
||||
// у слайса своего B-VFO нет (кросс-частотный TX делается TX-бейджем слайса).
|
||||
if FIsMain then
|
||||
begin
|
||||
R := Rect(W - PAD - 26 - 44, CurY, W - PAD - 26 - 4, CurY + HDR_BADGE_H);
|
||||
if FSplit then DrawBadge(C, R, 'SPLIT', CLR_SPLIT_ON, CLR_BADGE_TXT)
|
||||
else DrawBadge(C, R, 'SPLIT', CLR_BTN_NORM, CLR_DIM);
|
||||
RegisterHit(R, HIT_SPLIT);
|
||||
end;
|
||||
Inc(CurY, HDR_H);
|
||||
|
||||
{ --- Метр: индикаторы + сигнал-бар --- }
|
||||
|
||||
Reference in New Issue
Block a user