diff --git a/src/Model/BoundaryConditionsAdisTS/BoundaryConditionAdisTS.py b/src/Model/BoundaryConditionsAdisTS/BoundaryConditionAdisTS.py index a83d49b5..9a4ecf9b 100644 --- a/src/Model/BoundaryConditionsAdisTS/BoundaryConditionAdisTS.py +++ b/src/Model/BoundaryConditionsAdisTS/BoundaryConditionAdisTS.py @@ -143,9 +143,9 @@ class Data(SQLSubModel): table = execute( "SELECT pamhyr_id, deleted, data0, data1, scenario FROM " + "boundary_condition_data_adists " + - f"WHERE bca = {bca.id} " + - f"AND pamhyr_id NOT IN ({', '.join(map(str, loaded))}) " + - f"AND scenario = {scenario.id}" + f"WHERE scenario = {scenario.id} " + + # f"AND pamhyr_id NOT IN ({', '.join(map(str, loaded))}) " + + f"AND bca = {bca.id}" ) if table is not None: @@ -188,8 +188,8 @@ class Data(SQLSubModel): execute( "INSERT INTO " + "boundary_condition_data_adists(" + - "pamhyr_id, data0, data1, bca, scenario) " + - f"VALUES ({self.id}, '{data0}', {data1}, {bca.id}, " + + "pamhyr_id, deleted, data0, data1, bca, scenario) " + + f"VALUES ({self.id}, {self._db_format(self.is_deleted())}, '{data0}', {data1}, {bca.id}, " + f"{self._status.scenario_id})" ) @@ -437,7 +437,14 @@ class BoundaryConditionAdisTS(SQLSubModel): d._data_traversal(predicate, modifier, data) def __len__(self): - return len(self._data) + return len( + list( + filter( + lambda el: el is not None and not el.is_deleted(), + self._data + ) + ) + ) @classmethod def time_convert(cls, data): @@ -493,7 +500,12 @@ class BoundaryConditionAdisTS(SQLSubModel): @property def data(self): - return self._data.copy() + return list( + filter( + lambda el: el is not None and not el.is_deleted(), + self._data + ) + ) @property def _default_0(self): @@ -537,7 +549,7 @@ class BoundaryConditionAdisTS(SQLSubModel): def delete_i(self, indexes): self._data = list( map( - lambda e: e[1], + lambda e: e[1].set_as_deleted(), filter( lambda e: e[0] not in indexes, enumerate(self.data) diff --git a/src/Model/LateralContributionsAdisTS/LateralContributionAdisTS.py b/src/Model/LateralContributionsAdisTS/LateralContributionAdisTS.py index 302093e9..b2b903cf 100644 --- a/src/Model/LateralContributionsAdisTS/LateralContributionAdisTS.py +++ b/src/Model/LateralContributionsAdisTS/LateralContributionAdisTS.py @@ -410,7 +410,7 @@ class LateralContributionAdisTS(SQLSubModel): return len( list( filter( - lambda el: not el.is_deleted(), + lambda el: el is not None and not el.is_deleted(), self._data ) ) @@ -456,7 +456,12 @@ class LateralContributionAdisTS(SQLSubModel): @property def data(self): - return self._data.copy() + return list( + filter( + lambda el: el is not None and not el.is_deleted(), + self._data + ) + ) @property def begin_rk(self): @@ -497,7 +502,7 @@ class LateralContributionAdisTS(SQLSubModel): def delete_i(self, indexes): self._data = list( map( - lambda e: e[1], + lambda e: e[1].set_as_deleted(), filter( lambda e: e[0] not in indexes, enumerate(self.data) diff --git a/src/View/BoundaryConditionsAdisTS/Edit/Table.py b/src/View/BoundaryConditionsAdisTS/Edit/Table.py index 13f1aa2c..03bf059c 100644 --- a/src/View/BoundaryConditionsAdisTS/Edit/Table.py +++ b/src/View/BoundaryConditionsAdisTS/Edit/Table.py @@ -50,6 +50,22 @@ logger = logging.getLogger() class TableModel(PamhyrTableModel): + def get_true_data_row(self, row): + if len(self._data.data) > 0: + bc = self._data.data[row] + else: + return 0 + + return next( + map( + lambda e: e[0], + filter( + lambda e: e[1] == bc, + enumerate(self._data._data) + ) + ), 0 + ) + def data(self, index, role): if role == Qt.TextAlignmentRole: return Qt.AlignHCenter | Qt.AlignVCenter @@ -63,6 +79,7 @@ class TableModel(PamhyrTableModel): value = QVariant() if 0 <= column < 2: + row = self.get_true_data_row(row) v = self._data._data[row][column] if self._data._types[column] == float: value = f"{v:.4f}" @@ -84,6 +101,8 @@ class TableModel(PamhyrTableModel): column = index.column() try: + row = self.get_true_data_row(row) + self._undo.push( SetDataCommand( self._data, row, column, value @@ -110,14 +129,20 @@ class TableModel(PamhyrTableModel): def delete(self, rows, parent=QModelIndex()): self.beginRemoveRows(parent, rows[0], rows[-1]) - + _rows = list( + map( + lambda r: self.get_true_data_row(r), + rows + ) + ) self._undo.push( DelCommand( - self._data, rows + self._data, _rows ) ) self.endRemoveRows() + self.layoutChanged.emit() def sort(self, _reverse, parent=QModelIndex()): self.layoutAboutToBeChanged.emit() diff --git a/src/View/BoundaryConditionsAdisTS/Edit/UndoCommand.py b/src/View/BoundaryConditionsAdisTS/Edit/UndoCommand.py index e4858bb1..1319a105 100644 --- a/src/View/BoundaryConditionsAdisTS/Edit/UndoCommand.py +++ b/src/View/BoundaryConditionsAdisTS/Edit/UndoCommand.py @@ -80,10 +80,11 @@ class DelCommand(QUndoCommand): def undo(self): for row, el in self._bc: - self._data.insert(row, el) + el.set_as_not_deleted() def redo(self): - self._data.delete_i(self._rows) + for row, el in self._bc: + el.set_as_deleted() class PasteCommand(QUndoCommand): diff --git a/src/View/LateralContributionsAdisTS/Edit/Table.py b/src/View/LateralContributionsAdisTS/Edit/Table.py index af5d144e..4dc431f8 100644 --- a/src/View/LateralContributionsAdisTS/Edit/Table.py +++ b/src/View/LateralContributionsAdisTS/Edit/Table.py @@ -52,6 +52,23 @@ logger = logging.getLogger() class TableModel(PamhyrTableModel): + def get_true_data_row(self, row): + + if len(self._data.data) > 0: + lc = self._data.data[row] + else: + return 0 + + return next( + map( + lambda e: e[0], + filter( + lambda e: e[1] == lc, + enumerate(self._data._data) + ) + ), 0 + ) + def data(self, index, role): if role == Qt.TextAlignmentRole: return Qt.AlignHCenter | Qt.AlignVCenter @@ -65,6 +82,7 @@ class TableModel(PamhyrTableModel): value = QVariant() if 0 <= column < 2: + row = self.get_true_data_row(row) v = self._data._data[row][column] if self._data._types[column] == float: value = f"{v:.4f}" @@ -86,6 +104,8 @@ class TableModel(PamhyrTableModel): column = index.column() try: + row = self.get_true_data_row(row) + self._undo.push( SetDataCommand( self._data, row, column, value @@ -113,10 +133,18 @@ class TableModel(PamhyrTableModel): def delete(self, rows, parent=QModelIndex()): self.beginRemoveRows(parent, rows[0], rows[-1]) + _rows = list( + map( + lambda r: self.get_true_data_row(r), + rows + ) + ) + self._undo.push( DelCommand( - self._data, rows + self._data, _rows ) ) self.endRemoveRows() + self.layoutChanged.emit() diff --git a/src/View/LateralContributionsAdisTS/Edit/UndoCommand.py b/src/View/LateralContributionsAdisTS/Edit/UndoCommand.py index 88fe63ad..86005e98 100644 --- a/src/View/LateralContributionsAdisTS/Edit/UndoCommand.py +++ b/src/View/LateralContributionsAdisTS/Edit/UndoCommand.py @@ -76,8 +76,8 @@ class DelCommand(QUndoCommand): def undo(self): for row, el in self._lc: - self._data._data.insert(row, el) + el.set_as_not_deleted() def redo(self): - for row in self._rows: - del self._data._data[row] + for row, el in self._lc: + el.set_as_deleted()