mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 17:27:32 +00:00
Fix XVTR/FM frequency, mode and step persistence
- Fix web spectrum scroll resetting freq to XVTR minimum (same root cause as desktop: hardcoded 60 MHz clamp; now delegates to server) - Save/restore FM mode, NFM/WFM filter, squelch, CTCSS per XVTR slot and per HF band (CTCSSOn/ToneIdx added to TBandSettings; full state added to TXvtrEntry; ActivateXvtrBand restores all on slot switch) - Fix UpdateFilterButtons always resetting NFM/WFM to default on mode restore; now preserves saved filter index - Add FM Step tuning: panel with STEP toggle + 6.25/12.5/20/25 kHz selector (popup); mouse wheel uses selected step in FM mode; state saved per band and XVTR slot Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+5
-3
@@ -646,8 +646,10 @@ begin
|
||||
'function activeVfoHz(){return activeVfo==="A"?vfoA:vfoB;}' +
|
||||
'function setActiveVfoHz(f){if(activeVfo==="A")vfoA=f;else vfoB=f;}' +
|
||||
'function sendActiveFreq(f){if(activeVfo==="A")ws2({cmd:"freq",hz:f});else ws2({cmd:"freq",hz:f});}' +
|
||||
'function vfoMin(){return XVTR_CUR>=0?0:30000;}' +
|
||||
'function vfoMax(){return XVTR_CUR>=0?999999999999:60000000;}' +
|
||||
'function doWheel(e){e.preventDefault();e.stopPropagation();audioKick();const dir=e.deltaY<0?1:-1,st=tuneStep(e),base=Math.floor(activeVfoHz()/st)*st;' +
|
||||
'const nf=cl(dir>0?base+st:(Math.round(activeVfoHz())===base?base-st:base),30000,60000000);' +
|
||||
'const nf=cl(dir>0?base+st:(Math.round(activeVfoHz())===base?base-st:base),vfoMin(),vfoMax());' +
|
||||
'setActiveVfoHz(nf);wheelActiveTs=Date.now();' +
|
||||
'if(activeVfo==="A"){cur.vfo_a_hz=nf;}else{cur.vfo_b_hz=nf;}' +
|
||||
'renderVfos();pend("freq");ws2({cmd:"freq",hz:nf});}' +
|
||||
@@ -674,7 +676,7 @@ begin
|
||||
'localCenter=Math.round(dragCen0-dHz);' +
|
||||
'ws2({cmd:"set_center",hz:localCenter});' +
|
||||
'}else{' +
|
||||
'const nf=cl(Math.round(dragVfo0-dHz),30000,60000000);' +
|
||||
'const nf=cl(Math.round(dragVfo0-dHz),vfoMin(),vfoMax());' +
|
||||
'setActiveVfoHz(nf);localCenter=nf;' +
|
||||
'if(activeVfo==="A")cur.vfo_a_hz=nf;else cur.vfo_b_hz=nf;' +
|
||||
'renderVfos();pend("freq");ws2({cmd:"freq",hz:nf});' +
|
||||
@@ -686,7 +688,7 @@ begin
|
||||
'if(dragging&&Math.abs(e.offsetX-dragX0)<4){' +
|
||||
// клик — не трогаем localCenter: фильтр встаёт точно туда куда кликнули.
|
||||
// Спектр остаётся на месте, сервер пришлёт center_hz через ~200ms и всё перецентрируется.
|
||||
'const nf=cl(Math.round(xToHz(e.offsetX,cv.clientWidth)/100)*100,30000,60000000);' +
|
||||
'const nf=cl(Math.round(xToHz(e.offsetX,cv.clientWidth)/100)*100,vfoMin(),vfoMax());' +
|
||||
'setActiveVfoHz(nf);' +
|
||||
'if(activeVfo==="A")cur.vfo_a_hz=nf;else cur.vfo_b_hz=nf;' +
|
||||
'renderVfos();pend("freq");ws2({cmd:"freq",hz:nf});' +
|
||||
|
||||
Reference in New Issue
Block a user