diff --git a/src/View/HydraulicStructures/Table.py b/src/View/HydraulicStructures/Table.py index 44e5d1690ea6bd5e44263c08d411274f36160dd8..e61d9094adef9f9ac96a867be590b34cb92e7e77 100644 --- a/src/View/HydraulicStructures/Table.py +++ b/src/View/HydraulicStructures/Table.py @@ -38,7 +38,7 @@ from View.Tools.PamhyrTable import PamhyrTableModel from View.HydraulicStructures.UndoCommand import ( SetNameCommand, SetReachCommand, SetKpCommand, - AddCommand, DelCommand, + SetEnabledCommand, AddCommand, DelCommand, ) logger = logging.getLogger() @@ -189,6 +189,14 @@ class TableModel(PamhyrTableModel): self.endRemoveRows() self.layoutChanged.emit() + def enabled(self, row, enabled, parent=QModelIndex()): + self._undo.push( + SetEnabledCommand( + self._lst, row, enabled + ) + ) + self.layoutChanged.emit() + def undo(self): self._undo.undo() self.layoutChanged.emit() diff --git a/src/View/HydraulicStructures/UndoCommand.py b/src/View/HydraulicStructures/UndoCommand.py index c1a53f0dfe36821e7311600429993d62e63733e7..75e2886b972eda03713a56297a99c52e5277c4d0 100644 --- a/src/View/HydraulicStructures/UndoCommand.py +++ b/src/View/HydraulicStructures/UndoCommand.py @@ -16,6 +16,8 @@ # -*- coding: utf-8 -*- +import logging + from copy import deepcopy from tools import trace, timer @@ -23,6 +25,8 @@ from PyQt5.QtWidgets import ( QMessageBox, QUndoCommand, QUndoStack, ) +logger = logging.getLogger() + class SetNameCommand(QUndoCommand): def __init__(self, h_s_lst, index, new_value): @@ -78,6 +82,23 @@ class SetKpCommand(QUndoCommand): self._h_s_lst.get(self._index).input_kp = self._new +class SetEnabledCommand(QUndoCommand): + def __init__(self, h_s_lst, index, enabled): + QUndoCommand.__init__(self) + + self._h_s_lst = h_s_lst + self._index = index + self._old = not enabled + self._new = enabled + + def undo(self): + logger.info(f"Undo {self._new} -> {self._old}") + self._h_s_lst.get(self._index).enabled = self._old + + def redo(self): + logger.info(f"Undo {self._old} -> {self._new}") + self._h_s_lst.get(self._index).enabled = self._new + class AddCommand(QUndoCommand): def __init__(self, h_s_lst, index): QUndoCommand.__init__(self) diff --git a/src/View/HydraulicStructures/Window.py b/src/View/HydraulicStructures/Window.py index 0b322844bb1ac3b70398f2f02b80a4b86a5eb626..ce90eafd57613331c37719aed4ee1d3e8bc0de8f 100644 --- a/src/View/HydraulicStructures/Window.py +++ b/src/View/HydraulicStructures/Window.py @@ -163,7 +163,7 @@ class HydraulicStructuresWindow(PamhyrWindow): self.find(QAction, "action_add").triggered.connect(self.add) self.find(QAction, "action_delete").triggered.connect(self.delete) self.find(QAction, "action_edit").triggered.connect(self.edit) - self._checkbox.stateChanged.connect(self._set_structure_state) + self._checkbox.clicked.connect(self._set_structure_state) table = self.find(QTableView, "tableView") table.selectionModel()\ @@ -175,8 +175,8 @@ class HydraulicStructuresWindow(PamhyrWindow): def index_selected(self): table = self.find(QTableView, "tableView") - r = table.selectionModel()\ - .selectedRows() + r = table.selectionModel().selectedRows() + if len(r)>0: return r[0] else: @@ -184,8 +184,8 @@ class HydraulicStructuresWindow(PamhyrWindow): def index_selected_row(self): table = self.find(QTableView, "tableView") - r = table.selectionModel()\ - .selectedRows() + r = table.selectionModel().selectedRows() + if len(r)>0: return r[0].row() else: @@ -258,10 +258,11 @@ class HydraulicStructuresWindow(PamhyrWindow): def _set_structure_state(self): row = self.index_selected_row() - if row is None: - self._checkbox.setEnabled(False) - else: - self._hs_lst.get(row).enabled = self._checkbox.isChecked() + if row is not None: + self._table.enabled( + row, + self._checkbox.isChecked() + ) def update(self): self._set_checkbox_state()