diff --git a/MainForm.pas b/MainForm.pas index d3e95cc..e87daad 100644 --- a/MainForm.pas +++ b/MainForm.pas @@ -5342,8 +5342,6 @@ begin end; procedure TMainForm.OnModeFilterSelect(Mode: Integer; FilterBW: Integer); -var - Idx: Integer; begin // Событие пришло от флага слайса (B+) — маршрутизируем в slice-API, главный не трогаем. if CurSliceId <> 0 then @@ -5353,50 +5351,11 @@ begin LayoutFlagsAllPans; Exit; end; - FController.FMode := Mode; - FController.FFilterBW := FilterBW; - case Mode of - MODE_FM: - begin - FController.FFilter := FILT_FM_DEF; - for Idx := 0 to FILT_FM_COUNT - 1 do - if FILT_FM_BW[Idx] = FilterBW then - begin - FController.FFilter := Idx; - FController.FFMDeviation := FILT_FM_DEV[Idx]; - Break; - end; - end; - MODE_WFM: - begin - FController.FFilter := FILT_WFM_DEF; - for Idx := 0 to FILT_WFM_COUNT - 1 do - if FILT_WFM_BW[Idx] = FilterBW then - begin - FController.FFilter := Idx; - Break; - end; - end; - MODE_DMR: - begin - FController.FFilter := 0; - FController.FFilterBW := FILT_DMR_BW; - FController.FFMDeviation := DMR_FM_DEV; - end; - end; - if FController.FWDSPReady then - begin - FController.FDSPEngine.SetMode(FController.FMode); - FController.ApplyModeFilter; - end; - SyncSpecViewFreq; - if Assigned(FVfoOverlay) and FVfoOverlay.Visible then - begin - FVfoOverlay.SetState(FController.FMode, FController.FFilterBW, FController.FVfoA, FController.FLastSMeter); - FVfoOverlay.SetDSPState(FController.FNRMode, FController.FNBMode, FController.FSNB, FController.FANF, FController.FAGCMode); - FVfoOverlay.SetSquelchState(FController.FFMSQOn, FController.FFMSQLevel); - FPan.LayoutFlags; // перепозиционируем при смене LSB↔USB - end; + // Main flag A and the left panel edit the same receiver. Use the public + // controller commands so rfMode/rfFilter repaint every duplicate control. + if Mode <> FController.FMode then FController.SetMode(Mode); + FController.SetFilterBW(FilterBW); + FPan.LayoutFlags; // перепозиционируем при смене LSB↔USB end; procedure TMainForm.OnVfoOverlayDSPChange(NRMode, NBMode: Integer; SNBOn, ANFOn: Boolean); diff --git a/RadioController.pas b/RadioController.pas index 0c15d4c..562024f 100644 --- a/RadioController.pas +++ b/RadioController.pas @@ -3184,6 +3184,7 @@ var BW_arr: array[0..FILT_COUNT-1] of Integer; best, dist, i: Integer; begin + if FMode = MODE_DMR then BWHz := FILT_DMR_BW; FFilterBW := BWHz; for i := 0 to FILT_COUNT-1 do BW_arr[i] := MaxInt; case FMode of