From c69cbdb34eab3bfbf440c83a1ec533c4f4b62c82 Mon Sep 17 00:00:00 2001
From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr>
Date: Mon, 27 Nov 2023 08:55:14 +0100
Subject: [PATCH] BC: Make node association unique (#25).

---
 src/Model/BoundaryCondition/BoundaryConditionList.py | 8 ++++++++
 src/View/BoundaryCondition/UndoCommand.py            | 7 +++++++
 2 files changed, 15 insertions(+)

diff --git a/src/Model/BoundaryCondition/BoundaryConditionList.py b/src/Model/BoundaryCondition/BoundaryConditionList.py
index 051a3ea8..b2c7b8bc 100644
--- a/src/Model/BoundaryCondition/BoundaryConditionList.py
+++ b/src/Model/BoundaryCondition/BoundaryConditionList.py
@@ -89,3 +89,11 @@ class BoundaryConditionList(PamhyrModelListWithTab):
 
     def copy(self):
         return copy(self)
+
+    def get_assoc_to_node(self, tab, node):
+        return next(
+            filter(
+                lambda i: i.node is node,
+                self._tabs[tab]
+            )
+        )
diff --git a/src/View/BoundaryCondition/UndoCommand.py b/src/View/BoundaryCondition/UndoCommand.py
index 64bfebbe..fd2923d3 100644
--- a/src/View/BoundaryCondition/UndoCommand.py
+++ b/src/View/BoundaryCondition/UndoCommand.py
@@ -53,12 +53,19 @@ class SetNodeCommand(QUndoCommand):
         self._index = index
         self._old = self._bcs.get(self._tab, self._index).node
         self._new = node
+        self._prev_assoc_to_node = self._bcs.get_assoc_to_node(tab, node)
+
+    def _previous_assoc_node(self, node):
+        if self._prev_assoc_to_node is not None:
+            self._prev_assoc_to_node.node = node
 
     def undo(self):
         self._bcs.get(self._tab, self._index).node = self._old
+        self._previous_assoc_node(self._new)
 
     def redo(self):
         self._bcs.get(self._tab, self._index).node = self._new
+        self._previous_assoc_node(None)
 
 
 class SetTypeCommand(QUndoCommand):
-- 
GitLab