mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
fix(tci): клик по DX-споту на доп. пане слал номер ПАНА вместо номера приёмника
Приёмником TCI в этой ветке стал слот СЛАЙСА (TCI_MAX_RX = 1 + MAX_SLICES,
«панадаптером приёмник быть перестал»), а PanNSpectrumMouseDown отдавал в
rx_clicked_on_spot P.PanId. Клик по пану 1 уезжал как «rx_clicked_on_spot:1,…»,
то есть адресовал слайс в слоте 0 — возможно, стоящий на ГЛАВНОМ пане, — а то и
приёмник, которого нет вовсе: клиенты, фильтрующие по номеру, такое уведомление
просто теряют. Вызов rx0 с главного пана был и остаётся верным.
Теперь номер берётся у слайса, который на спот и увели: DXTuneSpotOnPan стал
функцией и возвращает его, TTCIAdapter.RxOfSlice переводит id в номер TCI.
Заодно два следствия того же места:
* Не увели ничего (спот вне полосы захвата зумнутого пана, слоты кончились) —
молчим. Иначе уведомление уходило под номером 0, то есть от имени главного
приёмника, который никуда не двигался, и логгер открывал карточку QSO с QSY
на частоту, где радио не стоит.
* AddSliceAtFreqPan стал функцией и честно сообщает, что получилось. При
неудаче (нет свободных слотов, частота вне захвата) он не трогает
FActiveSliceId, а DXTuneSpotOnPan читал именно его — и уводил на спот ЧУЖОЙ
слайс, вообще говоря с другого пана, вместе с SetSliceModeBW и
PushSliceFlagState не на том пане.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -353,6 +353,10 @@ type
|
||||
{ Уведомление о клике по споту на панораме (§4.4) — зовёт UI. }
|
||||
procedure NotifySpotClicked(const Call: string; FreqHz: Double;
|
||||
Rx: Integer = 0; Ch: Integer = 0);
|
||||
{ Номер TCI-приёмника, за которым стоит слайс Id. Нужен UI: уведомления
|
||||
адресуются номерами TCI, а он знает только id слайса. 0 — слайса нет в
|
||||
снимке (или Id = 0): адресуем главный тракт, он есть всегда. }
|
||||
function RxOfSlice(Id: Integer): Integer;
|
||||
{ Статус фокуса главного окна (APP_FOCUS) — зовёт UI. }
|
||||
procedure NotifyAppFocus(InFocus: Boolean);
|
||||
|
||||
@@ -3790,6 +3794,12 @@ end;
|
||||
Уведомления, которые инициирует UI
|
||||
═══════════════════════════════════════════════════════════════════════════ }
|
||||
|
||||
function TTCIAdapter.RxOfSlice(Id: Integer): Integer;
|
||||
var Rx, Ch: Integer;
|
||||
begin
|
||||
if SliceRxCh(Id, Rx, Ch) then Result := Rx else Result := 0;
|
||||
end;
|
||||
|
||||
procedure TTCIAdapter.NotifySpotClicked(const Call: string; FreqHz: Double;
|
||||
Rx, Ch: Integer);
|
||||
begin
|
||||
|
||||
Reference in New Issue
Block a user