From d6f7755d12b8cdb1075e63826872eec3afef940e Mon Sep 17 00:00:00 2001 From: Dylan Jeannin Date: Wed, 22 Apr 2026 12:05:28 +0200 Subject: [PATCH] debug save BoundaryConditionsAdisTS --- .../BoundaryConditionAdisTS.py | 25 ++++++---- .../BoundaryConditionsAdisTSList.py | 10 ++-- .../Edit/UndoCommand.py | 4 +- src/View/BoundaryConditionsAdisTS/Table.py | 46 +++++++++++++++---- .../BoundaryConditionsAdisTS/UndoCommand.py | 2 +- src/View/BoundaryConditionsAdisTS/Window.py | 4 +- 6 files changed, 63 insertions(+), 28 deletions(-) diff --git a/src/Model/BoundaryConditionsAdisTS/BoundaryConditionAdisTS.py b/src/Model/BoundaryConditionsAdisTS/BoundaryConditionAdisTS.py index c505e35d..60a070a7 100644 --- a/src/Model/BoundaryConditionsAdisTS/BoundaryConditionAdisTS.py +++ b/src/Model/BoundaryConditionsAdisTS/BoundaryConditionAdisTS.py @@ -312,19 +312,21 @@ class BoundaryConditionAdisTS(SQLSubModel): status = data['status'] nodes = data['nodes'] scenario = data["scenario"] - pollutant = data["pollutant"] + pollutant = data.get("pollutant") loaded = data['loaded_pid'] if scenario is None: return new - table = execute( - "SELECT pamhyr_id, deleted, pollutant, type, node, scenario " + + sql = ( + "SELECT pamhyr_id, deleted, pollutant, type, node, scenario " "FROM boundary_condition_adists " + - f"WHERE scenario = {scenario.id} " + - f"AND pamhyr_id NOT IN ({', '.join(map(str, loaded))}) " + - f"AND pollutant = {pollutant.id} " + f"WHERE scenario = {scenario.id} " ) + if pollutant is not None: + sql += f"AND pollutant = {pollutant.id} " + + table = execute(sql) if table is not None: for row in table: @@ -349,7 +351,7 @@ class BoundaryConditionAdisTS(SQLSubModel): bc.type = bc_type bc.node = None - if row[3] != -1: + if node != -1: tmp = next( filter( lambda n: n.id == node, nodes @@ -513,7 +515,10 @@ class BoundaryConditionAdisTS(SQLSubModel): return (new_0, new_1) def add(self, index: int): - value = (self._default_0, self._default_1) + value = Data( + self._default_0, self._default_1, + status=self._status + ) self._data.insert(index, value) self._status.modified() return value @@ -554,9 +559,9 @@ class BoundaryConditionAdisTS(SQLSubModel): return lst def _set_i_c_v(self, index, column, value): - v = list(self._data[index]) + v = self._data[index] v[column] = self._types[column](value) - self._data[index] = tuple(v) + self._data[index] = v self._status.modified() def set_i_0(self, index: int, value): diff --git a/src/Model/BoundaryConditionsAdisTS/BoundaryConditionsAdisTSList.py b/src/Model/BoundaryConditionsAdisTS/BoundaryConditionsAdisTSList.py index 0d1d729f..4bb90dbc 100644 --- a/src/Model/BoundaryConditionsAdisTS/BoundaryConditionsAdisTSList.py +++ b/src/Model/BoundaryConditionsAdisTS/BoundaryConditionsAdisTSList.py @@ -38,9 +38,13 @@ class BoundaryConditionsAdisTSList(PamhyrModelList): if data is None: data = {} - new._lst = BoundaryConditionAdisTS._db_load( - execute, data - ) + previous_pollutant = data.get("pollutant") + data.pop("pollutant", None) + + new._lst = BoundaryConditionAdisTS._db_load(execute, data) + + if previous_pollutant is not None: + data["pollutant"] = previous_pollutant return new diff --git a/src/View/BoundaryConditionsAdisTS/Edit/UndoCommand.py b/src/View/BoundaryConditionsAdisTS/Edit/UndoCommand.py index a4170a20..e4858bb1 100644 --- a/src/View/BoundaryConditionsAdisTS/Edit/UndoCommand.py +++ b/src/View/BoundaryConditionsAdisTS/Edit/UndoCommand.py @@ -61,9 +61,7 @@ class AddCommand(QUndoCommand): def redo(self): if self._new is None: - self._new = self._data.insert(self._index, ( - self._data._types[0](0), self._data._types[1](0.0) - )) + self._new = self._data.add(self._index) else: self._data.insert(self._index, self._new) diff --git a/src/View/BoundaryConditionsAdisTS/Table.py b/src/View/BoundaryConditionsAdisTS/Table.py index e4e79879..f0552029 100644 --- a/src/View/BoundaryConditionsAdisTS/Table.py +++ b/src/View/BoundaryConditionsAdisTS/Table.py @@ -121,9 +121,25 @@ class TableModel(PamhyrTableModel): super(TableModel, self).__init__(trad=trad, **kwargs) def _setup_lst(self): - self._lst = self._pollutant_bc_list.boundary_conditions_adists + self._lst = list( + filter( + lambda bc: bc.pollutant == self._pollutant, + self._bc_list.lst + ) + ) - def rowCount(self, parent): + def get(self, row): + if row < 0 or row >= len(self._lst): + return None + return self._lst[row] + + def _global_row(self, row): + bc = self.get(row) + if bc is None: + return None + return self._bc_list.index(bc) + + def rowCount(self, parent=QModelIndex()): return len(self._lst) def data(self, index, role): @@ -159,15 +175,21 @@ class TableModel(PamhyrTableModel): try: if self._headers[column] == "type": + global_row = self._global_row(row) self._undo.push( SetTypeCommand( - self._bc_list, row, value + self._bc_list, global_row, value ) ) elif self._headers[column] == "node": + global_row = self._global_row(row) + node = next( + filter(lambda n: n.name == value, self._data.nodes()), + None + ) self._undo.push( SetNodeCommand( - self._bc_list, row, self._data.node(value) + self._bc_list, global_row, node ) ) @@ -179,33 +201,39 @@ class TableModel(PamhyrTableModel): return True def add(self, row, parent=QModelIndex()): - self.beginInsertRows(parent, row, row - 1) - + row = len(self._lst) + self.beginInsertRows(parent, row, row) self._undo.push( AddCommand( - self._pollutant, self._bc_list, row + self._pollutant, self._bc_list, len(self._bc_list) ) ) - + self._setup_lst() self.endInsertRows() self.layoutChanged.emit() def delete(self, rows, parent=QModelIndex()): self.beginRemoveRows(parent, rows[0], rows[-1]) + global_rows = list( + map(self._global_row, rows) + ) self._undo.push( DelCommand( - self._bc_list, rows + self._bc_list, global_rows ) ) + self._setup_lst() self.endRemoveRows() self.layoutChanged.emit() def undo(self): self._undo.undo() + self._setup_lst() self.layoutChanged.emit() def redo(self): self._undo.redo() + self._setup_lst() self.layoutChanged.emit() diff --git a/src/View/BoundaryConditionsAdisTS/UndoCommand.py b/src/View/BoundaryConditionsAdisTS/UndoCommand.py index 9a8d8243..f1531d71 100644 --- a/src/View/BoundaryConditionsAdisTS/UndoCommand.py +++ b/src/View/BoundaryConditionsAdisTS/UndoCommand.py @@ -36,7 +36,7 @@ class SetNodeCommand(QUndoCommand): self._bcs = bcs self._index = index self._old = self._bcs.get(self._index).node - self._new = node.id + self._new = node.id if node is not None else None def undo(self): self._bcs.get(self._index).node = self._old diff --git a/src/View/BoundaryConditionsAdisTS/Window.py b/src/View/BoundaryConditionsAdisTS/Window.py index 8272efe5..4c95befe 100644 --- a/src/View/BoundaryConditionsAdisTS/Window.py +++ b/src/View/BoundaryConditionsAdisTS/Window.py @@ -159,7 +159,7 @@ class BoundaryConditionAdisTSWindow(PamhyrWindow): ) def add(self): - self._table.add(len(self._data.boundary_conditions_adists)) + self._table.add(self._table.rowCount()) def delete(self): rows = self.index_selected_rows() @@ -183,7 +183,7 @@ class BoundaryConditionAdisTSWindow(PamhyrWindow): def edit(self): rows = self.index_selected_rows() for row in rows: - data = self._bcs.get(row) + data = self._table.get(row) if data.node is None: continue