diff --git a/src/View/MainWindow.py b/src/View/MainWindow.py index 20ab32e227b131f075b52041ab17b624a6823b42..9fee3a7618be14ccf7bbd19cdc52fc276a468683 100644 --- a/src/View/MainWindow.py +++ b/src/View/MainWindow.py @@ -51,7 +51,7 @@ from View.InitialConditions.Window import InitialConditionsWindow 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.SedimentLayers.Reach.Window import ReachSedimentLayersWindow # from View.SolverParameters.Window import SolverParametersWindow # from View.RunSolver.Window import SelectSolverWindow, SolverLogWindow # from View.CheckList.Window import CheckListWindow diff --git a/src/View/SedimentLayers/Reach/Plot.py b/src/View/SedimentLayers/Reach/Plot.py index a312a8ceea6ffd9784cd8d56b83781f029250063..069a09d711c667e0882e89599be3a8726bcb48a5 100644 --- a/src/View/SedimentLayers/Reach/Plot.py +++ b/src/View/SedimentLayers/Reach/Plot.py @@ -5,7 +5,7 @@ import logging from functools import reduce from tools import timer -from View.Plot.APlot import APlot +from View.Tools.PamhyrPlot import PamhyrPlot from PyQt5.QtCore import ( QCoreApplication @@ -15,13 +15,16 @@ _translate = QCoreApplication.translate logger = logging.getLogger() -class Plot(APlot): - def __init__(self, canvas=None, data=None, toolbar=None, - display_current=True): +class Plot(PamhyrPlot): + def __init__(self, data=None, display_current=True, + canvas=None, trad=None, toolbar=None, + parent=None): super(Plot, self).__init__( - canvas=canvas, - data=data, - toolbar=toolbar + canvas = canvas, + trad = trad, + data = data, + toolbar = toolbar, + parent = parent ) self._display_current = display_current @@ -41,11 +44,11 @@ class Plot(APlot): return self.canvas.axes.set_xlabel( - _translate("MainWindow_reach", "Kp (m)"), + self._trad["kp"], color='green', fontsize=12 ) self.canvas.axes.set_ylabel( - _translate("MainWindow_reach", "Height (m)"), + self._trad["height"], color='green', fontsize=12 ) diff --git a/src/View/SedimentLayers/Reach/Profile/Plot.py b/src/View/SedimentLayers/Reach/Profile/Plot.py index 50b4bba26c40ebaf4b10c04bbe82d9184407396d..01b2fe245b1e01bb73080ef5e403b4deec3b2128 100644 --- a/src/View/SedimentLayers/Reach/Profile/Plot.py +++ b/src/View/SedimentLayers/Reach/Profile/Plot.py @@ -5,7 +5,7 @@ import logging from functools import reduce from tools import timer -from View.Plot.APlot import APlot +from View.Tools.PamhyrPlot import PamhyrPlot from PyQt5.QtCore import ( QCoreApplication @@ -15,13 +15,16 @@ _translate = QCoreApplication.translate logger = logging.getLogger() -class Plot(APlot): - def __init__(self, canvas=None, data=None, toolbar=None, - display_current=True): +class Plot(PamhyrPlot): + def __init__(self, data=None, display_current=True, + canvas=None, trad=None, toolbar=None, + parent=None): super(Plot, self).__init__( - canvas=canvas, - data=data, - toolbar=toolbar + canvas = canvas, + trad = trad, + data = data, + toolbar = toolbar, + parent = parent ) self._display_current = display_current diff --git a/src/View/SedimentLayers/Reach/Profile/Table.py b/src/View/SedimentLayers/Reach/Profile/Table.py index 102bec3274033651495cb25ab06f78ff4517c3e8..3550940b50659715965d0d211593ff0071b14b03 100644 --- a/src/View/SedimentLayers/Reach/Profile/Table.py +++ b/src/View/SedimentLayers/Reach/Profile/Table.py @@ -20,6 +20,8 @@ from PyQt5.QtWidgets import ( from View.SedimentLayers.Reach.Profile.UndoCommand import * from View.SedimentLayers.Reach.Profile.translate import * +from View.Tools.PamhyrTable import PamhyrTableModel + _translate = QCoreApplication.translate logger = logging.getLogger() @@ -67,28 +69,10 @@ class ComboBoxDelegate(QItemDelegate): self.commitData.emit(self.sender()) -class TableModel(QAbstractTableModel): - def __init__(self, study=None, profile=None, undo=None): - super(QAbstractTableModel, self).__init__() - self._headers = list(table_headers.keys()) - self._study = study - self._undo = undo - self._profile = profile - - def flags(self, index): - column = index.column() - - options = Qt.ItemIsEnabled | Qt.ItemIsSelectable - if self._headers[column] == "sl": - options |= Qt.ItemIsEditable - - return options - - def rowCount(self, parent): - return self._profile.number_points - - def columnCount(self, parent): - return len(self._headers) +class TableModel(PamhyrTableModel): + def _setup_lst(self): + self._lst = self._data + self._study = self._opt_data def data(self, index, role): if role != Qt.ItemDataRole.DisplayRole: @@ -98,25 +82,19 @@ class TableModel(QAbstractTableModel): column = index.column() if self._headers[column] == "name": - return self._profile.point(row).name + return self._data.point(row).name elif self._headers[column] == "sl": - value = self._profile.point(row).sl + value = self._data.point(row).sl if value == None: text = _translate("SedimentLayers", "Not defined") return text return str(value) elif self._headers[column] == "x": - return self._profile.point(row).x + return self._data.point(row).x elif self._headers[column] == "y": - return self._profile.point(row).y + return self._data.point(row).y elif self._headers[column] == "z": - return self._profile.point(row).z - - 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 self._data.point(row).z return QVariant() @@ -139,7 +117,7 @@ class TableModel(QAbstractTableModel): self._undo.push( SetSLCommand( - self._profile, row, new + self._data, row, new ) ) diff --git a/src/View/SedimentLayers/Reach/Profile/Window.py b/src/View/SedimentLayers/Reach/Profile/Window.py index f424e06a8a3b64fab29a186d3af6463be448d362..e2c2464b0ffe8a23c278cafc6098ffe264bf33d9 100644 --- a/src/View/SedimentLayers/Reach/Profile/Window.py +++ b/src/View/SedimentLayers/Reach/Profile/Window.py @@ -27,10 +27,10 @@ from View.SedimentLayers.Reach.Profile.UndoCommand import * from View.SedimentLayers.Reach.Profile.Table import * from View.SedimentLayers.Reach.Profile.Plot import Plot -from View.Plot.MplCanvas import MplCanvas -from View.Plot.PamhyrToolbar import PamhyrPlotToolbar +from View.Tools.Plot.PamhyrCanvas import MplCanvas +from View.Tools.Plot.PamhyrToolbar import PamhyrPlotToolbar -from View.SedimentLayers.Reach.Profile.translate import table_headers, retranslate +from View.SedimentLayers.Reach.Profile.translate import SedimentProfileTranslate from View.SedimentLayers.Window import SedimentLayersWindow _translate = QCoreApplication.translate @@ -52,7 +52,8 @@ class ProfileSedimentLayersWindow(PamhyrWindow): title = name, study = study, config = config, - parent=parent + trad = SedimentProfileTranslate(), + parent = parent ) self.setup_table() @@ -80,26 +81,25 @@ class ProfileSedimentLayersWindow(PamhyrWindow): ) def setup_table(self): - retranslate() + table_headers = self._trad.get_dict("table_headers") - table = self.find(QTableView, f"tableView") - self._table = TableModel( - study = self._study, - profile = self._profile, - undo = self._undo_stack, - ) - table.setModel(self._table) - - self._delegate_stricklers = ComboBoxDelegate( + self._delegate_sl = ComboBoxDelegate( study = self._study, parent=self ) - table.setItemDelegateForColumn( - list(table_headers).index("sl"), - self._delegate_stricklers + table = self.find(QTableView, f"tableView") + self._table = TableModel( + table_view = table, + data = self._profile, + opt_data = self._study, + table_headers = table_headers, + editable_headers = ["sl"], + delegates = {"sl": self._delegate_sl}, + trad = self._trad, + undo = self._undo_stack, ) - + table.setModel(self._table) table.setSelectionBehavior(QAbstractItemView.SelectRows) table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) table.setAlternatingRowColors(True) diff --git a/src/View/SedimentLayers/Reach/Profile/translate.py b/src/View/SedimentLayers/Reach/Profile/translate.py index da256cbed561b7780ac2aae1969992e1b1c1d45c..b1c124051a5d108edd2f4f7af475acfcfad39019 100644 --- a/src/View/SedimentLayers/Reach/Profile/translate.py +++ b/src/View/SedimentLayers/Reach/Profile/translate.py @@ -2,19 +2,18 @@ from PyQt5.QtCore import QCoreApplication +from View.SedimentLayers.Reach.translate import SedimentReachTranslate + _translate = QCoreApplication.translate -table_headers = { - "x": _translate("SedimentLayers", "X (m)"), - "y": _translate("SedimentLayers", "Y (m)"), - "z": _translate("SedimentLayers", "Z (m)"), - "name": _translate("SedimentLayers", "Name"), - "sl": _translate("SedimentLayers", "Sediment layers"), -} +class SedimentProfileTranslate(SedimentReachTranslate): + def __init__(self): + super(SedimentProfileTranslate, self).__init__() -def retranslate(): - table_headers["x"] = _translate("SedimentLayers", "X (m)") - table_headers["y"] = _translate("SedimentLayers", "Y (m)") - table_headers["z"] = _translate("SedimentLayers", "Z (m)") - table_headers["name"] = _translate("SedimentLayers", "Name") - table_headers["sl"] = _translate("SedimentLayers", "Sediment layers") + self._sub_dict["table_headers"] = { + "x": _translate("SedimentLayers", "X (m)"), + "y": _translate("SedimentLayers", "Y (m)"), + "z": _translate("SedimentLayers", "Z (m)"), + "name": _translate("SedimentLayers", "Name"), + "sl": _translate("SedimentLayers", "Sediment layers"), + } diff --git a/src/View/SedimentLayers/Reach/Table.py b/src/View/SedimentLayers/Reach/Table.py index 8fdb8d7e87099902ccab21d6799edf3a1f65e8ae..250a47357f634aea59121c5761e8453923cef8aa 100644 --- a/src/View/SedimentLayers/Reach/Table.py +++ b/src/View/SedimentLayers/Reach/Table.py @@ -18,23 +18,25 @@ from PyQt5.QtWidgets import ( ) from View.SedimentLayers.Reach.UndoCommand import * -from View.SedimentLayers.Reach.translate import * + +from View.Tools.PamhyrTable import PamhyrTableModel _translate = QCoreApplication.translate logger = logging.getLogger() class ComboBoxDelegate(QItemDelegate): - def __init__(self, study=None, parent=None): + def __init__(self, study=None, trad=None, parent=None): super(ComboBoxDelegate, self).__init__(parent) self._study = study + self._trad = trad def createEditor(self, parent, option, index): self.editor = QComboBox(parent) self.editor.addItems( - [_translate("SedimentLayers", "Not defined")] + + [self._trad["nd"]] + list( map( lambda sl: str(sl), @@ -67,28 +69,10 @@ class ComboBoxDelegate(QItemDelegate): self.commitData.emit(self.sender()) -class TableModel(QAbstractTableModel): - def __init__(self, study=None, reach=None, undo=None): - super(QAbstractTableModel, self).__init__() - self._headers = list(table_headers.keys()) - self._study = study - self._undo = undo - self._reach = reach - - def flags(self, index): - column = index.column() - - options = Qt.ItemIsEnabled | Qt.ItemIsSelectable - if self._headers[column] == "sl": - options |= Qt.ItemIsEditable - - return options - - def rowCount(self, parent): - return self._reach.number_profiles - - def columnCount(self, parent): - return len(self._headers) +class TableModel(PamhyrTableModel): + def _setup_lst(self): + self._lst = self._data + self._study = self._opt_data def data(self, index, role): if role != Qt.ItemDataRole.DisplayRole: @@ -98,11 +82,11 @@ class TableModel(QAbstractTableModel): column = index.column() if self._headers[column] == "name": - return self._reach.profile(row).name + return self._data.profile(row).name if self._headers[column] == "kp": - return self._reach.profile(row).kp + return self._data.profile(row).kp if self._headers[column] == "sl": - value = self._reach.profile(row).sl + value = self._data.profile(row).sl if value == None: text = _translate("SedimentLayers", "Not defined") return text @@ -110,12 +94,6 @@ class TableModel(QAbstractTableModel): 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 @@ -135,7 +113,7 @@ class TableModel(QAbstractTableModel): self._undo.push( SetSLCommand( - self._reach, row, new + self._data, row, new ) ) @@ -145,7 +123,7 @@ class TableModel(QAbstractTableModel): def apply_sl_each_profile(self, sl): self._undo.push( ApplySLCommand( - self._reach, sl + self._data, sl ) ) self.layoutChanged.emit() diff --git a/src/View/SedimentLayers/Reach/Window.py b/src/View/SedimentLayers/Reach/Window.py index 2a655b7c3c7d7bbfcc2b57d28c25aad741838c32..829bf035b39d2b073c62044ecd2785f125d6d534 100644 --- a/src/View/SedimentLayers/Reach/Window.py +++ b/src/View/SedimentLayers/Reach/Window.py @@ -28,10 +28,10 @@ from View.SedimentLayers.Reach.Table import * from View.SedimentLayers.Reach.Plot import Plot from View.SedimentLayers.Reach.SLDialog import SLDialog -from View.Plot.MplCanvas import MplCanvas -from View.Plot.PamhyrToolbar import PamhyrPlotToolbar +from View.Tools.Plot.PamhyrCanvas import MplCanvas +from View.Tools.Plot.PamhyrToolbar import PamhyrPlotToolbar -from View.SedimentLayers.Reach.translate import table_headers, retranslate +from View.SedimentLayers.Reach.translate import SedimentReachTranslate from View.SedimentLayers.Window import SedimentLayersWindow from View.SedimentLayers.Reach.Profile.Window import ProfileSedimentLayersWindow @@ -57,39 +57,40 @@ class ReachSedimentLayersWindow(PamhyrWindow): title = name, study = study, config = config, + trad = SedimentReachTranslate(), parent = parent ) self.setup_table() - self.setup_graph() + self.setup_plot() self.setup_connections() def setup_table(self): - retranslate() + table_headers = self._trad.get_dict("table_headers") - table = self.find(QTableView, f"tableView") - self._table = TableModel( - study = self._study, - reach = self._reach, - undo = self._undo_stack, - ) - table.setModel(self._table) - - self._delegate_stricklers = ComboBoxDelegate( + self._delegate_sl = ComboBoxDelegate( study = self._study, + trad = self._trad, parent=self ) - table.setItemDelegateForColumn( - list(table_headers).index("sl"), - self._delegate_stricklers + table = self.find(QTableView, f"tableView") + self._table = TableModel( + table_view = table, + data = self._reach, + opt_data = self._study, + table_headers = table_headers, + editable_headers = ["sl"], + delegates = {"sl": self._delegate_sl}, + trad = self._trad, + undo = self._undo_stack, ) - + table.setModel(self._table) table.setSelectionBehavior(QAbstractItemView.SelectRows) table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) table.setAlternatingRowColors(True) - def setup_graph(self): + def setup_plot(self): self.canvas = MplCanvas(width=5, height=4, dpi=100) self.canvas.setObjectName("canvas") self.toolbar = PamhyrPlotToolbar( @@ -106,6 +107,7 @@ class ReachSedimentLayersWindow(PamhyrWindow): canvas = self.canvas, data = self._reach, toolbar = self.toolbar, + trad = self._trad, display_current = False ) self.plot.draw() diff --git a/src/View/SedimentLayers/Reach/translate.py b/src/View/SedimentLayers/Reach/translate.py index ef45f0766c14b9a885d5959bbd52ca6774608aba..34785f32b691f759a8cbb918ca06db71ecd1be4c 100644 --- a/src/View/SedimentLayers/Reach/translate.py +++ b/src/View/SedimentLayers/Reach/translate.py @@ -2,15 +2,20 @@ from PyQt5.QtCore import QCoreApplication +from View.SedimentLayers.translate import SedimentTranslate + _translate = QCoreApplication.translate -table_headers = { - "name": _translate("SedimentLayers", "Name"), - "kp": _translate("SedimentLayers", "KP (m)"), - "sl": _translate("SedimentLayers", "Sediment layers"), -} +class SedimentReachTranslate(SedimentTranslate): + def __init__(self): + super(SedimentReachTranslate, self).__init__() + + self._dict["nd"] = _translate("SedimentLayers", "Not defined") + self._dict["kp"] = _translate("SedimentLayers", "Kp (m)") + self._dict["height"] = _translate("SedimentLayers", "Height (m)") -def retranslate(): - table_headers["name"] = _translate("SedimentLayers", "Name") - table_headers["kp"] = _translate("SedimentLayers", "KP (m)") - table_headers["sl"] = _translate("SedimentLayers", "Sediment layers") + self._sub_dict["table_headers"] = { + "name": _translate("SedimentLayers", "Name"), + "kp": _translate("SedimentLayers", "KP (m)"), + "sl": _translate("SedimentLayers", "Sediment layers"), + }