diff --git a/src/View/Frictions/PlotStricklers.py b/src/View/Frictions/PlotStricklers.py index 71ff6e6f5ab8134374fe5ae22befef9a9ae64e92..c6b58dcd40a2287fe9a5cc84e803a992c800ea96 100644 --- a/src/View/Frictions/PlotStricklers.py +++ b/src/View/Frictions/PlotStricklers.py @@ -17,7 +17,7 @@ # -*- coding: utf-8 -*- from tools import timer, flatten -from View.Plot.APlot import APlot +from View.Tools.PamhyrPlot import PamhyrPlot from PyQt5.QtCore import ( QCoreApplication @@ -25,14 +25,7 @@ from PyQt5.QtCore import ( _translate = QCoreApplication.translate -class PlotStricklers(APlot): - def __init__(self, canvas=None, data=None, toolbar=None): - super(PlotStricklers, self).__init__( - canvas=canvas, - data=data, - toolbar=toolbar - ) - +class PlotStricklers(PamhyrPlot): def draw_frictions(self, frictions, color="r"): lst = frictions lst.sort(key = lambda s: s.begin_kp) diff --git a/src/View/Frictions/Table.py b/src/View/Frictions/Table.py index ef9dc32f5cce327fc5e10efbc17520c7dbaa0cd3..f4ad4f8ee638b0f97234dd1694d232bb8f76d8c0 100644 --- a/src/View/Frictions/Table.py +++ b/src/View/Frictions/Table.py @@ -41,6 +41,8 @@ from View.Frictions.UndoCommand import ( MoveCommand, PasteCommand, DuplicateCommand, ) +from View.Tools.PamhyrTable import PamhyrTableModel + from View.Frictions.translate import * logger = logging.getLogger() @@ -93,26 +95,10 @@ class ComboBoxDelegate(QItemDelegate): self.commitData.emit(self.sender()) -class TableModel(QAbstractTableModel): - def __init__(self, data=None, study=None, undo=None): - super(QAbstractTableModel, self).__init__() - self._headers = list(table_headers.keys()) - self._data = data - self._study = study - self._undo = undo - self._frictions = self._data.frictions - - def flags(self, index): - options = Qt.ItemIsEnabled | Qt.ItemIsSelectable - options |= Qt.ItemIsEditable - - return options - - def rowCount(self, parent): - return len(self._frictions) - - def columnCount(self, parent): - return len(self._headers) +class TableModel(PamhyrTableModel): + def _setup_lst(self): + self._lst = self._data.frictions + self._study = self._opt_data def data(self, index, role): if role != Qt.ItemDataRole.DisplayRole: @@ -122,30 +108,24 @@ class TableModel(QAbstractTableModel): column = index.column() if self._headers[column] == "name": - return self._frictions.get(row).name + return self._lst.get(row).name elif self._headers[column] == "begin_kp": - return self._frictions.get(row).begin_kp + return self._lst.get(row).begin_kp elif self._headers[column] == "end_kp": - return self._frictions.get(row).end_kp + return self._lst.get(row).end_kp elif self._headers[column] == "begin_strickler": - value = self._frictions.get(row).begin_strickler + value = self._lst.get(row).begin_strickler if value == None: return _translate("Frictions", "Not defined") return str(value) elif self._headers[column] == "end_strickler": - value = self._frictions.get(row).end_strickler + value = self._lst.get(row).end_strickler if value == None: return _translate("Frictions", "Not defined") return str(value) return QVariant() - def headerData(self, friction, orientation, role): - if role == Qt.ItemDataRole.DisplayRole and orientation == Qt.Orientation.Horizontal: - return table_headers[self._headers[friction]] - - return QVariant() - def setData(self, index, value, role=Qt.EditRole): if not index.isValid() or role != Qt.EditRole: return False @@ -157,31 +137,31 @@ class TableModel(QAbstractTableModel): if self._headers[column] == "name": self._undo.push( SetNameCommand( - self._frictions, row, value + self._lst, row, value ) ) elif self._headers[column] == "begin_kp": self._undo.push( SetBeginCommand( - self._frictions, row, value + self._lst, row, value ) ) elif self._headers[column] == "end_kp": self._undo.push( SetEndCommand( - self._frictions, row, value + self._lst, row, value ) ) elif self._headers[column] == "begin_strickler": self._undo.push( SetBeginStricklerCommand( - self._frictions, row, self._study.river.strickler(value) + self._lst, row, self._study.river.strickler(value) ) ) elif self._headers[column] == "end_strickler": self._undo.push( SetEndStricklerCommand( - self._frictions, row, self._study.river.strickler(value) + self._lst, row, self._study.river.strickler(value) ) ) except Exception as e: @@ -196,7 +176,7 @@ class TableModel(QAbstractTableModel): self._undo.push( AddCommand( - self._frictions, row, self._data + self._lst, row, self._data ) ) @@ -208,7 +188,7 @@ class TableModel(QAbstractTableModel): self._undo.push( DelCommand( - self._frictions, rows + self._lst, rows ) ) @@ -220,7 +200,7 @@ class TableModel(QAbstractTableModel): self._undo.push( SortCommand( - self._frictions, False + self._lst, False ) ) @@ -237,7 +217,7 @@ class TableModel(QAbstractTableModel): self._undo_stack.push( MoveCommand( - self._frictions, "up", row + self._lst, "up", row ) ) @@ -245,7 +225,7 @@ class TableModel(QAbstractTableModel): self.layoutChanged.emit() def move_down(self, index, parent=QModelIndex()): - if row > len(self._frictions): + if row > len(self._lst): return target = row @@ -254,7 +234,7 @@ class TableModel(QAbstractTableModel): self._undo_stack.push( MoveCommand( - self._frictions, "down", row + self._lst, "down", row ) ) diff --git a/src/View/Frictions/Window.py b/src/View/Frictions/Window.py index 2a5475281b9e105d700c00bef392223b9dfd2f34..74d96b63de240ba78669362023bd5754a193d9a0 100644 --- a/src/View/Frictions/Window.py +++ b/src/View/Frictions/Window.py @@ -47,15 +47,13 @@ from View.Frictions.Table import ( TableModel, ComboBoxDelegate ) -from View.Plot.MplCanvas import MplCanvas +from View.Tools.Plot.PamhyrCanvas import MplCanvas from View.Geometry.PlotKPZ import PlotKPZ from View.Frictions.PlotStricklers import PlotStricklers -from View.Frictions.translate import table_headers, retranslate +from View.Frictions.translate import FrictionsTranslate from View.Stricklers.Window import StricklersWindow -_translate = QCoreApplication.translate - logger = logging.getLogger() class FrictionsWindow(PamhyrWindow): @@ -80,6 +78,7 @@ class FrictionsWindow(PamhyrWindow): title = name, study = study, config = config, + trad = FrictionsTranslate(), parent = parent ) @@ -89,17 +88,8 @@ class FrictionsWindow(PamhyrWindow): def setup_table(self): - retranslate() self._table = {} - table = self.find(QTableView, f"tableView") - self._table = TableModel( - data = self._reach, - study = self._study, - undo = self._undo_stack, - ) - table.setModel(self._table) - self._delegate_stricklers = ComboBoxDelegate( data = self._reach, study = self._study, @@ -107,13 +97,23 @@ class FrictionsWindow(PamhyrWindow): parent=self ) - table.setItemDelegateForColumn( - 3, self._delegate_stricklers - ) - table.setItemDelegateForColumn( - 4, self._delegate_stricklers + table = self.find(QTableView, f"tableView") + self._table = TableModel( + table_view = table, + table_headers = self._trad.get_dict("table_headers"), + editable_headers = [ + "name", "begin_kp", "end_kp", + "begin_strickler", "end_strickler" + ], + delegates = { + "begin_strickler": self._delegate_stricklers, + "end_strickler": self._delegate_stricklers, + }, + data = self._reach, + undo = self._undo_stack, + opt_data = self._study ) - + table.setModel(self._table) table.setSelectionBehavior(QAbstractItemView.SelectRows) table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) table.setAlternatingRowColors(True) diff --git a/src/View/Frictions/translate.py b/src/View/Frictions/translate.py index 68bebb96c33e532c3ad6f0e48419dac83f8022e9..1014d8c1ef4b6c6e8b3fbe364b7b67d95a109742 100644 --- a/src/View/Frictions/translate.py +++ b/src/View/Frictions/translate.py @@ -18,21 +18,19 @@ from PyQt5.QtCore import QCoreApplication +from View.Tools.PamhyrTranslate import PamhyrTranslate + _translate = QCoreApplication.translate -table_headers = { - "name": _translate("Frictions", "Name"), - # "edge": _translate("Frictions", "Reach"), - "begin_kp": _translate("Frictions", "Begin kp (m)"), - "end_kp": _translate("Frictions", "End kp (m)"), - "begin_strickler": _translate("Frictions", "Begin strickler"), - "end_strickler": _translate("Frictions", "End strickler"), -} +class FrictionsTranslate(PamhyrTranslate): + def __init__(self): + super(FrictionsTranslate, self).__init__() -def retranslate(): - table_headers["name"] = _translate("Frictions", "Name") - # table_headers["edge"] = _translate("Frictions", "Reach") - table_headers["begin_kp"] = _translate("Frictions", "Begin kp (m)") - table_headers["end_kp"] = _translate("Frictions", "End kp (m)") - table_headers["begin_strickler"] = _translate("Frictions", "Begin strickler") - table_headers["end_strickler"] = _translate("Frictions", "End strickler") + self._sub_dict["table_headers"] = { + "name": _translate("Frictions", "Name"), + # "edge": _translate("Frictions", "Reach"), + "begin_kp": _translate("Frictions", "Begin kp (m)"), + "end_kp": _translate("Frictions", "End kp (m)"), + "begin_strickler": _translate("Frictions", "Begin strickler"), + "end_strickler": _translate("Frictions", "End strickler"), + } diff --git a/src/View/MainWindow.py b/src/View/MainWindow.py index c3ec403cd1016d22ac2c37083513c24db039629c..9df2d45e18834620ff14ce66fb2869ed425722ad 100644 --- a/src/View/MainWindow.py +++ b/src/View/MainWindow.py @@ -48,8 +48,8 @@ from View.Geometry.Window import GeometryWindow from View.BoundaryCondition.Window import BoundaryConditionWindow from View.LateralContribution.Window import LateralContributionWindow from View.InitialConditions.Window import InitialConditionsWindow -# from View.Stricklers.Window import StricklersWindow -# from View.Frictions.Window import FrictionsWindow +from View.Stricklers.Window import StricklersWindow +from View.Frictions.Window import FrictionsWindow # from View.SedimentLayers.Window import SedimentLayersWindow # from View.SedimentLayers.Reach.Window import ReachSedimentLayersWindow # from View.SolverParameters.Window import SolverParametersWindow diff --git a/src/View/Stricklers/Window.py b/src/View/Stricklers/Window.py index d9128d0050db8647f9bdd112e12ef443c9eea2e3..792ed4e3114690eac33b72f6f069193d9d91787e 100644 --- a/src/View/Stricklers/Window.py +++ b/src/View/Stricklers/Window.py @@ -43,7 +43,7 @@ from Model.Stricklers.Stricklers import Stricklers from View.Stricklers.UndoCommand import PasteCommand from View.Stricklers.Table import TableModel -from View.Stricklers.translate import table_headers, retranslate +from View.Stricklers.translate import StricklersTranslate _translate = QCoreApplication.translate @@ -60,6 +60,7 @@ class StricklersWindow(PamhyrWindow): title = name, study = study, config = config, + trad = StricklersTranslate(), parent = parent ) @@ -67,7 +68,6 @@ class StricklersWindow(PamhyrWindow): self.setup_connections() def setup_table(self): - retranslate() self._table = {} for t in ["app", "study"]: @@ -79,7 +79,7 @@ class StricklersWindow(PamhyrWindow): self._table[t] = TableModel( table_view = table, - table_headers = table_headers, + table_headers = self._trad.get_dict("table_headers"), editable_headers = ["name", "comment", "minor", "medium"], data = data, undo = self._undo_stack, diff --git a/src/View/Stricklers/translate.py b/src/View/Stricklers/translate.py index 9102ac6d016a5151e33498ccd74592c195ee78e4..489094cf0f99c9fce1b3f5721a03920b57f8f1c3 100644 --- a/src/View/Stricklers/translate.py +++ b/src/View/Stricklers/translate.py @@ -18,21 +18,18 @@ from PyQt5.QtCore import QCoreApplication -from Model.LateralContribution.LateralContributionTypes import ( - NotDefined, LateralContrib, Rain, Evaporation, -) +from View.Tools.PamhyrTranslate import PamhyrTranslate _translate = QCoreApplication.translate -table_headers = { - "name": _translate("LateralContribution", "Name"), - "minor": _translate("LateralContribution", "Minor bed"), - "medium": _translate("LateralContribution", "Medium bed"), - "comment": _translate("LateralContribution", "Comment"), -} -def retranslate(): - table_headers["name"] = _translate("LateralContribution", "Name") - table_headers["minor"] = _translate("LateralContribution", "Minor bed") - table_headers["medium"] = _translate("LateralContribution", "Medium bed") - table_headers["comment"] = _translate("LateralContribution", "Comment") +class StricklersTranslate(PamhyrTranslate): + def __init__(self): + super(StricklersTranslate, self).__init__() + + self._sub_dict["table_headers"] = { + "name": _translate("LateralContribution", "Name"), + "minor": _translate("LateralContribution", "Minor bed"), + "medium": _translate("LateralContribution", "Medium bed"), + "comment": _translate("LateralContribution", "Comment"), + }