From b55ea8b91f012ca3a4d906690a636b4b3ead2d9d Mon Sep 17 00:00:00 2001 From: FaberVS <54268603+FaberVS@users.noreply.github.com> Date: Wed, 30 Apr 2025 13:23:18 +0300 Subject: [PATCH] Add files via upload --- js/active_model.js | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/js/active_model.js b/js/active_model.js index 05d1ebf..cfe680a 100644 --- a/js/active_model.js +++ b/js/active_model.js @@ -93,31 +93,38 @@ function findTargetNodes() { return HubNodesService.getHubNodes(); } +// --- Нова функція для оновлення всіх перемикачів для всіх хабів --- +function updateAllBypasserWidgetsForAllHubs() { + const allHubNodes = HubNodesService.getHubNodes(); + allHubNodes.forEach(hubNode => { + updateAllBypasserWidgets(hubNode); + }); +} + // Функція зміни режиму ОДНОГО вузла function setHubMode(targetNode, mode) { if (!targetNode) return; const currentMode = targetNode.mode; - const modeStr = mode === MODE_ALWAYS ? "ON" : "OFF"; - + // const modeStr = mode === MODE_ALWAYS ? "ON" : "OFF"; + // console.log(`[setHubMode] Перемикач вузла id=${targetNode.id} → ${modeStr}`); // Якщо ми вмикаємо вузол (MODE_ALWAYS), і при цьому поточний режим НЕ MODE_ALWAYS - // (тобто вузол був вимкнений, а тепер ми його вмикаємо) if (mode === MODE_ALWAYS && currentMode !== MODE_ALWAYS) { - // Потрібно перевірити, чи є інші активні вузли, і вимкнути їх const allHubNodes = HubNodesService.getHubNodes(); const otherActiveNodes = allHubNodes.filter(n => n.id !== targetNode.id && n.mode === MODE_ALWAYS); - if (otherActiveNodes.length > 0) { otherActiveNodes.forEach(node => { + // console.log(`[setHubMode] Вимикаємо інший перемикач id=${node.id} → OFF`); node.mode = MODE_BYPASS; }); } } - - // Змінюємо режим цільового вузла, незалежно від того, чи є інші активні вузли if (currentMode !== mode) { targetNode.mode = mode; app.graph.setDirtyCanvas(true, true); + } else { + // console.log(`[setHubMode] Перемикач вузла id=${targetNode.id} вже у стані ${modeStr}, зміна не потрібна.`); } + updateAllBypasserWidgetsForAllHubs(); } // Нова функція для оновлення віджетів у всіх байпасерах для конкретного вузла @@ -362,10 +369,10 @@ app.registerExtension({ if (!existingWidget.callback) { existingWidget.callback = (value) => { - // Нова логіка: якщо перемикач вмикається, вимикаємо всі інші - // якщо вимикається - просто вимикаємо const nodeToChange = app.graph.getNodeById(targetNode.id); - if (nodeToChange) setHubMode(nodeToChange, value ? MODE_ALWAYS : MODE_BYPASS); + if (nodeToChange) { + setHubMode(nodeToChange, value ? MODE_ALWAYS : MODE_BYPASS); + } }; widgetsChanged = true; } @@ -373,9 +380,10 @@ app.registerExtension({ this.addWidget( "toggle", widgetName, widgetValue, (value) => { - // Нова логіка: дозволяємо будь-які переключення const nodeToChange = app.graph.getNodeById(targetNode.id); - if (nodeToChange) setHubMode(nodeToChange, value ? MODE_ALWAYS : MODE_BYPASS); + if (nodeToChange) { + setHubMode(nodeToChange, value ? MODE_ALWAYS : MODE_BYPASS); + } else this.refreshWidgets(); }, { on: "ON", off: "OFF" }