diff --git a/src/trx-client/trx-frontend/trx-frontend-http/assets/web/app.js b/src/trx-client/trx-frontend/trx-frontend-http/assets/web/app.js
index 7f435438..1d101548 100644
--- a/src/trx-client/trx-frontend/trx-frontend-http/assets/web/app.js
+++ b/src/trx-client/trx-frontend/trx-frontend-http/assets/web/app.js
@@ -1282,6 +1282,7 @@ function applyRigList(activeRigId, rigIds, displayNames) {
const disableSwitch = lastRigIds.length === 0 || !authRole || authRole === "rx";
populateRigPicker(headerRigSwitchSelect, lastRigIds, lastActiveRigId, disableSwitch);
updateRigSubtitle(lastActiveRigId);
+ window.trxUi?.setActiveRig(lastActiveRigId);
if (rigListChanged) {
if (typeof setSchedulerRig === "function") setSchedulerRig(lastActiveRigId);
if (typeof setBackgroundDecodeRig === "function") setBackgroundDecodeRig(lastActiveRigId);
diff --git a/src/trx-client/trx-frontend/trx-frontend-http/assets/web/ui-core.js b/src/trx-client/trx-frontend/trx-frontend-http/assets/web/ui-core.js
index 1bfe06f9..2e9792dc 100644
--- a/src/trx-client/trx-frontend/trx-frontend-http/assets/web/ui-core.js
+++ b/src/trx-client/trx-frontend/trx-frontend-http/assets/web/ui-core.js
@@ -132,6 +132,15 @@
full: { label: "Full controls", description: "Every control supported by the selected rig", advanced: true, preferredTab: "main" },
};
const layoutCapabilities = { broadcast: false, digital: false };
+ let activeRigId = null;
+
+ function layoutStorageKey() {
+ return activeRigId ? `trxOperatorLayout:${activeRigId}` : "trxOperatorLayout";
+ }
+
+ function savedLayoutName() {
+ return localStorage.getItem(layoutStorageKey()) || localStorage.getItem("trxOperatorLayout") || "compact";
+ }
function layoutAvailable(layout) {
return !layout.capability || layoutCapabilities[layout.capability] === true;
@@ -148,7 +157,7 @@
});
const available = Array.from(select.options).some(option => option.value === previous);
select.value = available ? previous : "compact";
- if (!available && previous === "broadcast") api.applyLayout("compact");
+ if (!available && previous !== "compact") api.applyLayout("compact", { persist: false });
}
api.setLayoutCapabilities = function setLayoutCapabilities(capabilities = {}) {
@@ -156,6 +165,20 @@
if (name in capabilities) layoutCapabilities[name] = Boolean(capabilities[name]);
});
refreshLayoutOptions();
+ const select = document.getElementById("operator-layout-select");
+ const saved = savedLayoutName();
+ if (select && Array.from(select.options).some(option => option.value === saved)) {
+ select.value = saved;
+ api.applyLayout(saved, { persist: false });
+ }
+ };
+
+ api.setActiveRig = function setActiveRig(rigId) {
+ activeRigId = typeof rigId === "string" && rigId ? rigId : null;
+ const saved = savedLayoutName();
+ const select = document.getElementById("operator-layout-select");
+ if (select) select.value = Array.from(select.options).some(option => option.value === saved) ? saved : "compact";
+ api.applyLayout(select?.value || saved, { persist: false });
};
api.applyLayout = function applyLayout(name, options = {}) {
@@ -163,7 +186,7 @@
const permittedName = requestedLayout && layoutAvailable(requestedLayout) ? name : "compact";
const layout = layouts[permittedName];
document.body.dataset.operatorLayout = permittedName in layouts ? permittedName : "compact";
- localStorage.setItem("trxOperatorLayout", document.body.dataset.operatorLayout);
+ if (options.persist !== false) localStorage.setItem(layoutStorageKey(), document.body.dataset.operatorLayout);
const details = document.getElementById("advanced-radio-controls");
if (details) details.open = layout.advanced;
const description = document.getElementById("operator-layout-description");
@@ -180,7 +203,7 @@
label.className = "operator-layout-picker";
label.innerHTML = 'Operator layout';
const select = label.querySelector("select");
- const savedLayout = localStorage.getItem("trxOperatorLayout") || "compact";
+ const savedLayout = savedLayoutName();
actions.insertBefore(label, actions.firstChild);
select.value = savedLayout;
refreshLayoutOptions();
@@ -201,7 +224,7 @@
if (element) body.appendChild(element);
});
tray.appendChild(details);
- api.applyLayout(localStorage.getItem("trxOperatorLayout") || "compact");
+ api.applyLayout(savedLayoutName(), { persist: false });
}
}