diff --git a/src/View/LateralContribution/Edit/Table.py b/src/View/LateralContribution/Edit/Table.py index e9e878fddc8fd623d18ee683674e1030ec5cb94e..034c914d28dfbe6d2bbcffc395acd565db045be9 100644 --- a/src/View/LateralContribution/Edit/Table.py +++ b/src/View/LateralContribution/Edit/Table.py @@ -24,6 +24,7 @@ from tools import trace, timer from View.ASubWindow import ASubMainWindow, AWidget from View.ListedSubWindow import ListedSubWindow +from View.Tools.PamhyrTable import PamhyrTableModel from PyQt5.QtCore import ( Qt, QVariant, QAbstractTableModel, @@ -150,26 +151,7 @@ class ExTimeDelegate(QItemDelegate): self.commitData.emit(self.sender()) -class TableModel(QAbstractTableModel): - def __init__(self, data=None, mode="time", undo=None): - super(QAbstractTableModel, self).__init__() - self._headers = data.header - self._data = data - self._mode = mode - self._undo = undo - - def flags(self, index): - options = Qt.ItemIsEnabled | Qt.ItemIsSelectable - options |= Qt.ItemIsEditable - - return options - - def rowCount(self, parent): - return len(self._data) - - def columnCount(self, parent): - return len(self._headers) - +class TableModel(PamhyrTableModel): def data(self, index, role): if role == Qt.TextAlignmentRole: return Qt.AlignHCenter | Qt.AlignVCenter @@ -187,7 +169,7 @@ class TableModel(QAbstractTableModel): if self._data.get_type_column(column) == float: value = f"{v:.4f}" elif self._data.header[column] == "time": - if self._mode == "time": + if self._opt_data == "time": t0 = datetime.fromtimestamp(0) t = datetime.fromtimestamp(v) value = str(t - t0) @@ -198,12 +180,6 @@ class TableModel(QAbstractTableModel): return value - def headerData(self, section, orientation, role): - if role == Qt.ItemDataRole.DisplayRole and orientation == Qt.Orientation.Horizontal: - return table_headers[self._headers[section]] - - return QVariant() - def setData(self, index, value, role=Qt.EditRole): if not index.isValid() or role != Qt.EditRole: return False @@ -313,12 +289,3 @@ class TableModel(QAbstractTableModel): self.layoutAboutToBeChanged.emit() self.layoutChanged.emit() - - - def undo(self): - self._undo.undo() - self.layoutChanged.emit() - - def redo(self): - self._undo.redo() - self.layoutChanged.emit() diff --git a/src/View/LateralContribution/Edit/Window.py b/src/View/LateralContribution/Edit/Window.py index 413667d0e0b7a56cc22aa0503cc8f71d962aefe6..0fd6720cf6e22c291bd15441e398057fa5084112 100644 --- a/src/View/LateralContribution/Edit/Window.py +++ b/src/View/LateralContribution/Edit/Window.py @@ -40,6 +40,7 @@ from View.Plot.MplCanvas import MplCanvas from View.Plot.navigation_toolbar_2qt import PamHyrNavigationToolbar2QT from View.LateralContribution.translate import long_types +from View.LateralContribution.Edit.translate import table_headers from View.LateralContribution.Edit.Table import TableModel, ExTimeDelegate from View.LateralContribution.Edit.Plot import Plot @@ -85,24 +86,29 @@ class EditLateralContributionWindow(ASubMainWindow, ListedSubWindow): self.paste_sc = QShortcut(QKeySequence.Paste, self) def setup_table(self): + headers = {} + for h in self._data.header: + headers[h] = table_headers[h] + + self._delegate_time = ExTimeDelegate( + data = self._data, + mode = self._study.time_system, + parent = self + ) + table = self.find(QTableView, "tableView") self._table = TableModel( + table_view = table, + table_headers = headers, + editable_headers = self._data.header, + delegates = { + "time": self._delegate_time, + }, data = self._data, undo = self._undo_stack, - mode = self._study.time_system + opt_data = self._study.time_system ) - if self._data.header[0] == "time": - self._delegate_time = ExTimeDelegate( - data = self._data, - mode = self._study.time_system, - parent = self - ) - - table.setItemDelegateForColumn( - 0, self._delegate_time - ) - table.setModel(self._table) table.setSelectionBehavior(QAbstractItemView.SelectRows) table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) diff --git a/src/View/LateralContribution/Table.py b/src/View/LateralContribution/Table.py index 682bf00dc8a0ab23fbdcc7c53b5cb82a34855976..2a3f41961bbba6cdbb95cdb6542b5ea1466449fb 100644 --- a/src/View/LateralContribution/Table.py +++ b/src/View/LateralContribution/Table.py @@ -44,6 +44,8 @@ from View.LateralContribution.UndoCommand import ( from Model.LateralContribution.LateralContributionTypes import ( NotDefined, LateralContrib, Rain, Evaporation, ) + +from View.Tools.PamhyrTable import PamhyrTableModel from View.LateralContribution.translate import * logger = logging.getLogger() @@ -102,26 +104,13 @@ class ComboBoxDelegate(QItemDelegate): self.commitData.emit(self.sender()) -class TableModel(QAbstractTableModel): - def __init__(self, data=None, undo=None, tab=""): - super(QAbstractTableModel, self).__init__() - self._headers = list(table_headers.keys()) - self._data = data - self._undo = undo - self._tab = tab - self._lcs = self._data.lateral_contribution - - def flags(self, index): - options = Qt.ItemIsEnabled | Qt.ItemIsSelectable - options |= Qt.ItemIsEditable - - return options +class TableModel(PamhyrTableModel): + def _setup_lst(self): + self._lst = self._data.lateral_contribution + self._tab = self._opt_data def rowCount(self, parent): - return self._lcs.len(self._tab) - - def columnCount(self, parent): - return len(self._headers) + return self._lst.len(self._tab) def data(self, index, role): if role != Qt.ItemDataRole.DisplayRole: @@ -131,26 +120,19 @@ class TableModel(QAbstractTableModel): column = index.column() if self._headers[column] == "name": - return self._lcs.get(self._tab, row).name + return self._lst.get(self._tab, row).name elif self._headers[column] == "type": - t = self._lcs.get(self._tab, row).lctype + t = self._lst.get(self._tab, row).lctype return long_types[t] elif self._headers[column] == "edge": - n = self._lcs.get(self._tab, row).edge + n = self._lst.get(self._tab, row).edge if n is None: return _translate("LateralContribution", "Not associate") return n.name elif self._headers[column] == "begin_kp": - return self._lcs.get(self._tab, row).begin_kp + return self._lst.get(self._tab, row).begin_kp elif self._headers[column] == "end_kp": - return self._lcs.get(self._tab, row).end_kp - - - return QVariant() - - def headerData(self, section, orientation, role): - if role == Qt.ItemDataRole.DisplayRole and orientation == Qt.Orientation.Horizontal: - return table_headers[self._headers[section]] + return self._lst.get(self._tab, row).end_kp return QVariant() @@ -165,32 +147,32 @@ class TableModel(QAbstractTableModel): if self._headers[column] == "name": self._undo.push( SetNameCommand( - self._lcs, self._tab, row, value + self._lst, self._tab, row, value ) ) elif self._headers[column] == "type": key = next(k for k, v in long_types.items() if v == value) self._undo.push( SetTypeCommand( - self._lcs, self._tab, row, LC_types[key] + self._lst, self._tab, row, LC_types[key] ) ) elif self._headers[column] == "edge": self._undo.push( SetEdgeCommand( - self._lcs, self._tab, row, self._data.edge(value) + self._lst, self._tab, row, self._data.edge(value) ) ) elif self._headers[column] == "begin_kp": self._undo.push( SetBeginCommand( - self._lcs, self._tab, row, value + self._lst, self._tab, row, value ) ) elif self._headers[column] == "end_kp": self._undo.push( SetEndCommand( - self._lcs, self._tab, row, value + self._lst, self._tab, row, value ) ) except Exception as e: @@ -205,7 +187,7 @@ class TableModel(QAbstractTableModel): self._undo.push( AddCommand( - self._lcs, self._tab, row + self._lst, self._tab, row ) ) @@ -217,7 +199,7 @@ class TableModel(QAbstractTableModel): self._undo.push( DelCommand( - self._lcs, self._tab, rows + self._lst, self._tab, rows ) ) @@ -229,7 +211,7 @@ class TableModel(QAbstractTableModel): self._undo.push( SortCommand( - self._lcs, self._tab, False + self._lst, self._tab, False ) ) @@ -246,7 +228,7 @@ class TableModel(QAbstractTableModel): self._undo_stack.push( MoveCommand( - self._lcs, self._tab,"up", row + self._lst, self._tab, "up", row ) ) @@ -254,7 +236,7 @@ class TableModel(QAbstractTableModel): self.layoutChanged.emit() def move_down(self, index, parent=QModelIndex()): - if row > len(self._lcs): + if row > len(self._lst): return target = row @@ -263,17 +245,9 @@ class TableModel(QAbstractTableModel): self._undo_stack.push( MoveCommand( - self._lcs, self._tab,"down", row + self._lst, self._tab, "down", row ) ) self.endMoveRows() self.layoutChanged.emit() - - def undo(self): - self._undo.undo() - self.layoutChanged.emit() - - def redo(self): - self._undo.redo() - self.layoutChanged.emit() diff --git a/src/View/LateralContribution/Window.py b/src/View/LateralContribution/Window.py index dc3dd94f7449092252c7b16d5ab0bd7a50fe9087..3a181f4656a3f97149fbbe72f332e37dd8a616ec 100644 --- a/src/View/LateralContribution/Window.py +++ b/src/View/LateralContribution/Window.py @@ -93,14 +93,6 @@ class LateralContributionWindow(ASubMainWindow, ListedSubWindow): self._table = {} for t in ["liquid", "solid", "suspenssion"]: - table = self.find(QTableView, f"tableView_{t}") - self._table[t] = TableModel( - data = self._study.river, - undo = self._undo_stack, - tab = t, - ) - table.setModel(self._table[t]) - self._delegate_type = ComboBoxDelegate( data = self._study.river, mode = "type", @@ -114,13 +106,20 @@ class LateralContributionWindow(ASubMainWindow, ListedSubWindow): parent=self ) - table.setItemDelegateForColumn( - 1, self._delegate_type - ) - table.setItemDelegateForColumn( - 2, self._delegate_edge + table = self.find(QTableView, f"tableView_{t}") + self._table[t] = TableModel( + table_view = table, + table_headers = table_headers, + editable_headers = True, + delegates = { + "type": self._delegate_type, + "edge": self._delegate_edge, + }, + data = self._study.river, + undo = self._undo_stack, + opt_data = t, ) - + table.setModel(self._table[t]) table.setSelectionBehavior(QAbstractItemView.SelectRows) table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) table.setAlternatingRowColors(True) diff --git a/src/View/Tools/PamhyrTable.py b/src/View/Tools/PamhyrTable.py index 44e765e70b33ed825d6d2ec2a7fd89f544adb8f5..623ebd3b0a91dd964b17fd319b6defdddc8c24dc 100644 --- a/src/View/Tools/PamhyrTable.py +++ b/src/View/Tools/PamhyrTable.py @@ -107,7 +107,8 @@ class PamhyrTableModel(QAbstractTableModel): options = Qt.ItemIsEnabled | Qt.ItemIsSelectable - if self._headers[column] in self._editable_headers: + if (self._editable_headers or + self._headers[column] in self._editable_headers): options |= Qt.ItemIsEditable return options