diff --git a/src/View/Stricklers/Table.py b/src/View/Stricklers/Table.py index 32731b8e..69f9942a 100644 --- a/src/View/Stricklers/Table.py +++ b/src/View/Stricklers/Table.py @@ -52,20 +52,54 @@ _translate = QCoreApplication.translate class TableModel(PamhyrTableModel): def __init__(self, *args, display_manning=False, unique_names=False, - **kwargs): + hidden_stricklers=None, **kwargs): self.display_manning = display_manning self.unique_names = unique_names + self.hidden_stricklers = hidden_stricklers or [] super(TableModel, self).__init__(*args, **kwargs) + @staticmethod + def same_strickler(first, second): + return ( + first.name == second.name + and first.comment == second.comment + and first.minor == second.minor + and first.medium == second.medium + ) + + @property + def visible_stricklers(self): + return [ + strickler + for strickler in self._data.stricklers + if not any( + self.same_strickler(strickler, hidden) + for hidden in self.hidden_stricklers + ) + ] + + def rowCount(self, parent=QModelIndex()): + return len(self.visible_stricklers) + + def get_visible(self, row): + return self.visible_stricklers[row] + + def get_data_row(self, row): + return self._data.stricklers.index(self.get_visible(row)) + def name_is_already_used(self, row, name): - current = self._data.get(row) + current = self.get_visible(row) return any( strickler is not current and strickler.name == name for strickler in self._data.stricklers ) def get_true_data_row(self, row): - el = self._data.get(row) + visible = self.visible_stricklers + if row >= len(visible): + return len(self._data._lst) + + el = visible[row] return next( map( @@ -83,18 +117,19 @@ class TableModel(PamhyrTableModel): row = index.row() column = index.column() + strickler = self.get_visible(row) if self._headers[column] == "name": - return self._data.get(row).name + return strickler.name elif self._headers[column] == "comment": - return self._data.get(row).comment + return strickler.comment elif self._headers[column] == "minor": return display_coefficient( - self._data.get(row).minor, self.display_manning + strickler.minor, self.display_manning ) elif self._headers[column] == "medium": return display_coefficient( - self._data.get(row).medium, self.display_manning + strickler.medium, self.display_manning ) return QVariant() @@ -122,6 +157,8 @@ class TableModel(PamhyrTableModel): ) return False + row = self.get_data_row(row) + try: if self._headers[column] == "name": self._undo.push( @@ -177,7 +214,7 @@ class TableModel(PamhyrTableModel): DelCommand( self._data, list( map( - lambda r: self._data.get(r), + lambda r: self.get_visible(r), rows ) ) diff --git a/src/View/Stricklers/Window.py b/src/View/Stricklers/Window.py index 356fcbda..4d0d6561 100644 --- a/src/View/Stricklers/Window.py +++ b/src/View/Stricklers/Window.py @@ -95,8 +95,10 @@ class StricklersWindow(PamhyrWindow): table = self.find(QTableView, f"tableView_{t}") if t == "study": data = self._study.river.stricklers + hidden_stricklers = self._config.stricklers.stricklers else: data = self._config.stricklers + hidden_stricklers = [] editable_headers = [] if t == "study" and self._study.is_editable(): @@ -111,6 +113,7 @@ class StricklersWindow(PamhyrWindow): display_manning=getattr( self._config, "display_manning", False ), + hidden_stricklers=hidden_stricklers, ) table.setModel(self._table[t])