mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 18:43:51 +00:00
refactor(controller): единая дверь SetTXSettings для правки TX-настроек
Применение TX-настроек (WDSP, DUC Specific при смене mic-битов/ATT, живое обновление TUN, запись в активный профиль, персист) жило в обработчике MainForm — то есть было недоступно ничему, кроме вкладки Transmit. CAT и web по архитектуре ходят только в контроллер и дотянуться туда не могли. Логика переехала в TRadioController.SetTXSettings по образцу уже существовавшего SetCWSettings; MainForm делегирует ей и оставляет себе только рендер. Notify=False у формы — иначе rfTXProfile перезагрузил бы вкладку Transmit прямо под руками у того, кто её правит. Заодно SetTXMonVolume: громкость self-monitor'а адресно, вне TX-контекста (слайдер добирается до неё только на передаче, CAT-клиенту такой контекст не нужен). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+7
-48
@@ -8520,64 +8520,23 @@ begin
|
||||
end;
|
||||
|
||||
procedure TMainForm.OnTXSettingsChange(const T: TTXSettings);
|
||||
// Любая правка в Settings→Transmit летит сюда: обновляем FController.FTXSettings,
|
||||
// перешиваем WDSP TX-цепь и (если поменялись mic-биты) перепосылаем DUC Specific.
|
||||
var
|
||||
OldMicByte, NewMicByte: Byte;
|
||||
OldAtt, OldTUNLevel, OldTUNFreq: Integer;
|
||||
GridChanged: Boolean;
|
||||
// Любая правка в Settings→Transmit летит сюда. Применение записи (WDSP, DUC
|
||||
// Specific, живой TUN, профиль, персист) — в контроллере: SetTXSettings, та же
|
||||
// дверь, что у CAT и web. Форме остаётся рендер.
|
||||
// Notify=False — иначе rfTXProfile перезагрузил бы вкладку Transmit прямо под
|
||||
// руками у того, кто её сейчас правит.
|
||||
var GridChanged: Boolean;
|
||||
begin
|
||||
OldMicByte := FController.BuildMicLineSelectByte;
|
||||
OldAtt := FController.FTXSettings.AttOnTX;
|
||||
OldTUNLevel := FController.FTXSettings.TUNLevel;
|
||||
OldTUNFreq := FController.FTXSettings.TUNFreq;
|
||||
GridChanged := (FController.FTXSpecRefLevel <> T.TXSpecRefLevel)
|
||||
or (FController.FTXSpecRange <> T.TXSpecRange)
|
||||
or (FController.FTXSpecGridStep <> T.TXSpecGridStep);
|
||||
FController.FTXSettings := T;
|
||||
NewMicByte := FController.BuildMicLineSelectByte;
|
||||
// TX-grid в момент правки — обновляем рабочие поля и (если на передаче) пушим в FSpecView
|
||||
FController.FTXSpecRefLevel := FController.FTXSettings.TXSpecRefLevel;
|
||||
FController.FTXSpecRange := FController.FTXSettings.TXSpecRange;
|
||||
if FController.FTXSettings.TXSpecGridStep > 0 then
|
||||
FController.FTXSpecGridStep := FController.FTXSettings.TXSpecGridStep;
|
||||
FController.SetTXSettings(T, False);
|
||||
if GridChanged and FController.FTransmitting then
|
||||
ApplySpecViewGridFromState;
|
||||
FController.ApplyTXSettingsToDSP;
|
||||
// Low/High из вкладки Transmit — та же полоска фильтра на спектре: кромки
|
||||
// берём уже пересчитанными движком (знак боковой) и на передаче перерисовываем.
|
||||
PushFilterEdgesToView;
|
||||
if FController.FTransmitting then FSpectrumDirty := True;
|
||||
if (OldMicByte <> NewMicByte) or (OldAtt <> FController.FTXSettings.AttOnTX) then
|
||||
FController.SendDUCSpecificFromSettings;
|
||||
// TUN-параметры live: если идёт tune — обновить тон/drive, иначе просто запомнить.
|
||||
if FController.FTuning then
|
||||
begin
|
||||
if (OldTUNFreq <> FController.FTXSettings.TUNFreq) and FController.FWDSPReady then
|
||||
FController.FDSPEngine.SetTXTone(True, FController.FTXSettings.TUNFreq, 1.0);
|
||||
if OldTUNLevel <> FController.FTXSettings.TUNLevel then
|
||||
begin
|
||||
FController.FDriveLevel := CalcDriveByte;
|
||||
if FController.FWDSPReady then
|
||||
FController.FDSPEngine.SetDriveLevel(FController.FTXSettings.TUNLevel / 100.0);
|
||||
if FController.FNetwork.Connected and FController.FNetwork.Running then
|
||||
begin
|
||||
FController.FNetwork.UpdateState(XvtrTranslate(FController.FCenterFreq), FController.TXTuneFreqHz, FController.FDriveLevel,
|
||||
FController.FTransmitting, True, True, FController.FTuning, FController.FTwoTone);
|
||||
FController.FNetwork.SendFullHP;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
// Правка «звуковых» полей — это правка активного профиля: отдельной кнопки
|
||||
// «сохранить» нет, профиль ведётся за живым состоянием (см. TTXProfile).
|
||||
FController.StoreActiveTXProfile;
|
||||
// Сохраняем сразу — настройки per-device, попадают в hpsdr_settings.json
|
||||
if FController.FDevConnected then
|
||||
begin
|
||||
FController.FSettings.SaveTX(FController.FDevMAC, FController.FTXSettings);
|
||||
FController.FSettings.SaveTXProfiles(FController.FDevMAC, FController.FTXProfiles);
|
||||
FController.FSettings.Save;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.OnCWSettingsChange(const C: TCWSettings);
|
||||
|
||||
Reference in New Issue
Block a user