[feat](trx-frontend-http): sync mode picker to active virtual channel
- Add vchanSyncModeDisplay() in vchan.js; called from vchanSyncAccentUI() and vchanSubscribe() so the mode picker always reflects the active virtual channel's mode on switch and on channel-list refresh - Guard the rig-state mode picker update in render() so it is skipped when vchanIsOnVirtual() is true, preventing primary-channel mode from overwriting the virtual channel selection Note: per-channel audio and decoder output require server-side protocol changes (separate Opus streams per virtual channel) and are not yet implemented. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: Stan Grams <sjg@haxx.space>
This commit is contained in:
@@ -2445,7 +2445,12 @@ function render(update) {
|
|||||||
if (update.status && update.status.mode) {
|
if (update.status && update.status.mode) {
|
||||||
const mode = normalizeMode(update.status.mode);
|
const mode = normalizeMode(update.status.mode);
|
||||||
const modeUpper = mode ? mode.toUpperCase() : "";
|
const modeUpper = mode ? mode.toUpperCase() : "";
|
||||||
|
// When subscribed to a virtual channel the mode picker must reflect
|
||||||
|
// that channel's mode, not the primary rig mode. Skip the update here;
|
||||||
|
// vchan.js will apply the correct mode via vchanSyncModeDisplay().
|
||||||
|
if (typeof vchanIsOnVirtual !== "function" || !vchanIsOnVirtual()) {
|
||||||
modeEl.value = modeUpper;
|
modeEl.value = modeUpper;
|
||||||
|
}
|
||||||
if (modeUpper === "WFM" && lastModeName !== "WFM") {
|
if (modeUpper === "WFM" && lastModeName !== "WFM") {
|
||||||
setJogDivisor(10);
|
setJogDivisor(10);
|
||||||
resetRdsDisplay();
|
resetRdsDisplay();
|
||||||
|
|||||||
@@ -158,6 +158,7 @@ async function vchanSubscribe(channelId) {
|
|||||||
}
|
}
|
||||||
vchanActiveId = channelId;
|
vchanActiveId = channelId;
|
||||||
vchanRender();
|
vchanRender();
|
||||||
|
vchanSyncModeDisplay();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error("vchan: subscribe error", e);
|
console.error("vchan: subscribe error", e);
|
||||||
}
|
}
|
||||||
@@ -198,6 +199,18 @@ function vchanUpdateFreqDisplay() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sync the mode picker to the active virtual channel's mode.
|
||||||
|
// Called whenever the active channel changes or the channel list is refreshed.
|
||||||
|
function vchanSyncModeDisplay() {
|
||||||
|
const modeEl = document.getElementById("mode");
|
||||||
|
if (!modeEl) return;
|
||||||
|
if (vchanIsOnVirtual()) {
|
||||||
|
const ch = vchanActiveChannel();
|
||||||
|
if (ch && ch.mode) modeEl.value = ch.mode.toUpperCase();
|
||||||
|
}
|
||||||
|
// When on primary channel, app.js rig-state updates handle the picker.
|
||||||
|
}
|
||||||
|
|
||||||
// Add / remove the vchan accent class from the freq and BW inputs.
|
// Add / remove the vchan accent class from the freq and BW inputs.
|
||||||
function vchanSyncAccentUI() {
|
function vchanSyncAccentUI() {
|
||||||
const onVirtual = vchanIsOnVirtual();
|
const onVirtual = vchanIsOnVirtual();
|
||||||
@@ -207,6 +220,7 @@ function vchanSyncAccentUI() {
|
|||||||
if (bwEl) bwEl.classList.toggle("vchan-ch-active", onVirtual);
|
if (bwEl) bwEl.classList.toggle("vchan-ch-active", onVirtual);
|
||||||
if (onVirtual) {
|
if (onVirtual) {
|
||||||
vchanUpdateFreqDisplay();
|
vchanUpdateFreqDisplay();
|
||||||
|
vchanSyncModeDisplay();
|
||||||
} else if (typeof _origRefreshFreqDisplay === "function") {
|
} else if (typeof _origRefreshFreqDisplay === "function") {
|
||||||
_origRefreshFreqDisplay();
|
_origRefreshFreqDisplay();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user