From 09997a0074c41d2c6038b3828cd9d3196e004d89 Mon Sep 17 00:00:00 2001 From: Dylan Jeannin Date: Tue, 26 May 2026 12:27:41 +0200 Subject: [PATCH] Tables: Skip table undo commands when data is unchanged (avoid data duplicates in db) --- src/View/BoundaryCondition/Edit/Table.py | 3 +++ src/View/BoundaryCondition/Table.py | 3 +++ .../BoundaryConditionsAdisTS/Edit/Table.py | 3 +++ src/View/BoundaryConditionsAdisTS/Table.py | 3 +++ src/View/D90AdisTS/Table.py | 3 +++ src/View/DIFAdisTS/Table.py | 3 +++ src/View/Frictions/Table.py | 3 +++ src/View/Geometry/Profile/Table.py | 3 +++ src/View/Geometry/Table.py | 3 +++ .../BasicHydraulicStructures/Table.py | 6 +++++ src/View/HydraulicStructures/Table.py | 3 +++ src/View/InitialConditions/Table.py | 3 +++ src/View/InitialConditionsAdisTS/Table.py | 3 +++ src/View/LateralContribution/Edit/Table.py | 3 +++ src/View/LateralContribution/Table.py | 3 +++ .../LateralContributionsAdisTS/Edit/Table.py | 3 +++ src/View/LateralContributionsAdisTS/Table.py | 3 +++ src/View/Network/Table.py | 6 +++++ src/View/OutputRKAdisTS/Table.py | 3 +++ src/View/Pollutants/Edit/Table.py | 3 +++ src/View/Pollutants/Table.py | 3 +++ src/View/Reservoir/Edit/Table.py | 3 +++ src/View/Reservoir/Table.py | 3 +++ src/View/Scenarios/Table.py | 3 +++ src/View/SedimentLayers/Edit/Table.py | 3 +++ .../SedimentLayers/Reach/Profile/Table.py | 3 +++ src/View/SedimentLayers/Reach/Table.py | 3 +++ src/View/SedimentLayers/Table.py | 3 +++ src/View/SolverParameters/Table.py | 3 +++ src/View/Stricklers/Table.py | 3 +++ src/View/Tools/PamhyrTable.py | 24 +++++++++++++++++++ 31 files changed, 120 insertions(+) diff --git a/src/View/BoundaryCondition/Edit/Table.py b/src/View/BoundaryCondition/Edit/Table.py index 8df696f0..eec7cbcd 100644 --- a/src/View/BoundaryCondition/Edit/Table.py +++ b/src/View/BoundaryCondition/Edit/Table.py @@ -107,6 +107,9 @@ class TableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() diff --git a/src/View/BoundaryCondition/Table.py b/src/View/BoundaryCondition/Table.py index 08ca784f..a1fa14cb 100644 --- a/src/View/BoundaryCondition/Table.py +++ b/src/View/BoundaryCondition/Table.py @@ -167,6 +167,9 @@ class TableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() diff --git a/src/View/BoundaryConditionsAdisTS/Edit/Table.py b/src/View/BoundaryConditionsAdisTS/Edit/Table.py index 03bf059c..a61aabfc 100644 --- a/src/View/BoundaryConditionsAdisTS/Edit/Table.py +++ b/src/View/BoundaryConditionsAdisTS/Edit/Table.py @@ -97,6 +97,9 @@ class TableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() diff --git a/src/View/BoundaryConditionsAdisTS/Table.py b/src/View/BoundaryConditionsAdisTS/Table.py index 6f7f54a0..5f78881d 100644 --- a/src/View/BoundaryConditionsAdisTS/Table.py +++ b/src/View/BoundaryConditionsAdisTS/Table.py @@ -170,6 +170,9 @@ class TableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() diff --git a/src/View/D90AdisTS/Table.py b/src/View/D90AdisTS/Table.py index 71614dce..674f2aca 100644 --- a/src/View/D90AdisTS/Table.py +++ b/src/View/D90AdisTS/Table.py @@ -174,6 +174,9 @@ class D90TableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() diff --git a/src/View/DIFAdisTS/Table.py b/src/View/DIFAdisTS/Table.py index 12e8d382..33a93e78 100644 --- a/src/View/DIFAdisTS/Table.py +++ b/src/View/DIFAdisTS/Table.py @@ -186,6 +186,9 @@ class DIFTableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() diff --git a/src/View/Frictions/Table.py b/src/View/Frictions/Table.py index f1b407ac..c31a85f5 100644 --- a/src/View/Frictions/Table.py +++ b/src/View/Frictions/Table.py @@ -134,6 +134,9 @@ class FrictionTableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() diff --git a/src/View/Geometry/Profile/Table.py b/src/View/Geometry/Profile/Table.py index 4fe937b9..e03c4d92 100644 --- a/src/View/Geometry/Profile/Table.py +++ b/src/View/Geometry/Profile/Table.py @@ -114,6 +114,9 @@ class GeometryProfileTableModel(PamhyrTableModel): column = index.column() if role == Qt.EditRole: + if self.is_same_data(index, value): + return False + try: if column == 0: self._undo.push( diff --git a/src/View/Geometry/Table.py b/src/View/Geometry/Table.py index d51d1f22..a337624d 100644 --- a/src/View/Geometry/Table.py +++ b/src/View/Geometry/Table.py @@ -95,6 +95,9 @@ class GeometryReachTableModel(PamhyrTableModel): column = index.column() if role == Qt.EditRole and index.column() != 2: + if self.is_same_data(index, value): + return False + try: if index.column() == 0: self._undo.push( diff --git a/src/View/HydraulicStructures/BasicHydraulicStructures/Table.py b/src/View/HydraulicStructures/BasicHydraulicStructures/Table.py index e0d894b2..224c2e5b 100644 --- a/src/View/HydraulicStructures/BasicHydraulicStructures/Table.py +++ b/src/View/HydraulicStructures/BasicHydraulicStructures/Table.py @@ -138,6 +138,9 @@ class TableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() @@ -288,6 +291,9 @@ class ParametersTableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + if self._hs_index is None: return QVariant() diff --git a/src/View/HydraulicStructures/Table.py b/src/View/HydraulicStructures/Table.py index 459b270c..a362bf57 100644 --- a/src/View/HydraulicStructures/Table.py +++ b/src/View/HydraulicStructures/Table.py @@ -169,6 +169,9 @@ class TableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() na = self._trad['not_associated'] diff --git a/src/View/InitialConditions/Table.py b/src/View/InitialConditions/Table.py index 98aace64..b715dea9 100644 --- a/src/View/InitialConditions/Table.py +++ b/src/View/InitialConditions/Table.py @@ -153,6 +153,9 @@ class InitialConditionTableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() diff --git a/src/View/InitialConditionsAdisTS/Table.py b/src/View/InitialConditionsAdisTS/Table.py index 005b8161..d6524528 100644 --- a/src/View/InitialConditionsAdisTS/Table.py +++ b/src/View/InitialConditionsAdisTS/Table.py @@ -188,6 +188,9 @@ class InitialConditionTableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() diff --git a/src/View/LateralContribution/Edit/Table.py b/src/View/LateralContribution/Edit/Table.py index 0676f3f0..d46848b5 100644 --- a/src/View/LateralContribution/Edit/Table.py +++ b/src/View/LateralContribution/Edit/Table.py @@ -86,6 +86,9 @@ class TableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() diff --git a/src/View/LateralContribution/Table.py b/src/View/LateralContribution/Table.py index 3a1a7fab..78c03543 100644 --- a/src/View/LateralContribution/Table.py +++ b/src/View/LateralContribution/Table.py @@ -197,6 +197,9 @@ class TableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() diff --git a/src/View/LateralContributionsAdisTS/Edit/Table.py b/src/View/LateralContributionsAdisTS/Edit/Table.py index 4dc431f8..482c5f05 100644 --- a/src/View/LateralContributionsAdisTS/Edit/Table.py +++ b/src/View/LateralContributionsAdisTS/Edit/Table.py @@ -100,6 +100,9 @@ class TableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() diff --git a/src/View/LateralContributionsAdisTS/Table.py b/src/View/LateralContributionsAdisTS/Table.py index dc3b614d..a51ae3bd 100644 --- a/src/View/LateralContributionsAdisTS/Table.py +++ b/src/View/LateralContributionsAdisTS/Table.py @@ -162,6 +162,9 @@ class TableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() diff --git a/src/View/Network/Table.py b/src/View/Network/Table.py index 9648566d..d91b775a 100644 --- a/src/View/Network/Table.py +++ b/src/View/Network/Table.py @@ -105,6 +105,9 @@ class NodeTableModel(PamhyrTableModel): return False if role == Qt.EditRole: + if self.is_same_data(index, value): + return False + try: self._undo.push( SetCommand( @@ -155,6 +158,9 @@ class EdgeTableModel(PamhyrTableModel): if role != Qt.EditRole: return QVariant() + if self.is_same_data(index, value): + return False + try: if (self._headers[index.column()] == "node1" or self._headers[index.column()] == "node2"): diff --git a/src/View/OutputRKAdisTS/Table.py b/src/View/OutputRKAdisTS/Table.py index 228c768e..994510da 100644 --- a/src/View/OutputRKAdisTS/Table.py +++ b/src/View/OutputRKAdisTS/Table.py @@ -149,6 +149,9 @@ class TableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() na = self._trad['not_associated'] diff --git a/src/View/Pollutants/Edit/Table.py b/src/View/Pollutants/Edit/Table.py index b3d4e96d..758eb496 100644 --- a/src/View/Pollutants/Edit/Table.py +++ b/src/View/Pollutants/Edit/Table.py @@ -64,6 +64,9 @@ class TableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() diff --git a/src/View/Pollutants/Table.py b/src/View/Pollutants/Table.py index 57cd9bc9..994f2089 100644 --- a/src/View/Pollutants/Table.py +++ b/src/View/Pollutants/Table.py @@ -74,6 +74,9 @@ class TableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() diff --git a/src/View/Reservoir/Edit/Table.py b/src/View/Reservoir/Edit/Table.py index cf21ca28..b96988ed 100644 --- a/src/View/Reservoir/Edit/Table.py +++ b/src/View/Reservoir/Edit/Table.py @@ -68,6 +68,9 @@ class TableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() diff --git a/src/View/Reservoir/Table.py b/src/View/Reservoir/Table.py index c9b560d2..b0e646b7 100644 --- a/src/View/Reservoir/Table.py +++ b/src/View/Reservoir/Table.py @@ -140,6 +140,9 @@ class TableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() diff --git a/src/View/Scenarios/Table.py b/src/View/Scenarios/Table.py index 66376d9c..d7fceaad 100644 --- a/src/View/Scenarios/Table.py +++ b/src/View/Scenarios/Table.py @@ -74,6 +74,9 @@ class ScenariosTableModel(PamhyrTableModel): return False if role == Qt.EditRole: + if self.is_same_data(index, value): + return False + try: self._undo.push( SetCommand( diff --git a/src/View/SedimentLayers/Edit/Table.py b/src/View/SedimentLayers/Edit/Table.py index 08ef7ddb..efeee3c5 100644 --- a/src/View/SedimentLayers/Edit/Table.py +++ b/src/View/SedimentLayers/Edit/Table.py @@ -65,6 +65,9 @@ class TableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() diff --git a/src/View/SedimentLayers/Reach/Profile/Table.py b/src/View/SedimentLayers/Reach/Profile/Table.py index 24e606fd..4b79da45 100644 --- a/src/View/SedimentLayers/Reach/Profile/Table.py +++ b/src/View/SedimentLayers/Reach/Profile/Table.py @@ -121,6 +121,9 @@ class TableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() diff --git a/src/View/SedimentLayers/Reach/Table.py b/src/View/SedimentLayers/Reach/Table.py index ffd2c089..6b7c717d 100644 --- a/src/View/SedimentLayers/Reach/Table.py +++ b/src/View/SedimentLayers/Reach/Table.py @@ -116,6 +116,9 @@ class TableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() diff --git a/src/View/SedimentLayers/Table.py b/src/View/SedimentLayers/Table.py index a5feed8e..ca706bd5 100644 --- a/src/View/SedimentLayers/Table.py +++ b/src/View/SedimentLayers/Table.py @@ -55,6 +55,9 @@ class TableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() diff --git a/src/View/SolverParameters/Table.py b/src/View/SolverParameters/Table.py index 7b3cfca9..df11ac40 100644 --- a/src/View/SolverParameters/Table.py +++ b/src/View/SolverParameters/Table.py @@ -79,6 +79,9 @@ class TableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() diff --git a/src/View/Stricklers/Table.py b/src/View/Stricklers/Table.py index 2f97e684..071b4e0d 100644 --- a/src/View/Stricklers/Table.py +++ b/src/View/Stricklers/Table.py @@ -84,6 +84,9 @@ class TableModel(PamhyrTableModel): if not index.isValid() or role != Qt.EditRole: return False + if self.is_same_data(index, value): + return False + row = index.row() column = index.column() diff --git a/src/View/Tools/PamhyrTable.py b/src/View/Tools/PamhyrTable.py index b864ac4d..e81c8477 100644 --- a/src/View/Tools/PamhyrTable.py +++ b/src/View/Tools/PamhyrTable.py @@ -142,6 +142,30 @@ class PamhyrTableModel(QAbstractTableModel): return QVariant() + def is_same_data(self, index, value): + current = self.data(index, Qt.ItemDataRole.DisplayRole) + if isinstance(current, QVariant): + current = current.value() + + if str(current) == str(value): + return True + + if hasattr(value, "display_name"): + if str(current) == str(value.display_name()): + return True + + if hasattr(value, "name"): + if str(current) == str(value.name): + return True + + try: + return ( + float(str(current).replace(",", ".")) == + float(str(value).replace(",", ".")) + ) + except (TypeError, ValueError): + return False + def data(self, index, role): raise NotImplementedMethodeError(self, self.data)