From 1d45ccb8b80e091be5454614db36b60f761a54ab Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr> Date: Wed, 4 Oct 2023 15:19:27 +0200 Subject: [PATCH] refactoring: refacto SL list & edit. --- src/View/MainWindow.py | 2 +- src/View/SedimentLayers/Edit/Plot.py | 28 ++++------ src/View/SedimentLayers/Edit/Table.py | 64 +++++++---------------- src/View/SedimentLayers/Edit/Window.py | 22 ++++---- src/View/SedimentLayers/Edit/translate.py | 30 +++++------ src/View/SedimentLayers/Table.py | 50 +++++------------- src/View/SedimentLayers/Window.py | 28 +++++----- src/View/SedimentLayers/translate.py | 16 +++--- 8 files changed, 91 insertions(+), 149 deletions(-) diff --git a/src/View/MainWindow.py b/src/View/MainWindow.py index 9df2d45e..20ab32e2 100644 --- a/src/View/MainWindow.py +++ b/src/View/MainWindow.py @@ -50,7 +50,7 @@ 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.SedimentLayers.Window import SedimentLayersWindow +from View.SedimentLayers.Window import SedimentLayersWindow # from View.SedimentLayers.Reach.Window import ReachSedimentLayersWindow # from View.SolverParameters.Window import SolverParametersWindow # from View.RunSolver.Window import SelectSolverWindow, SolverLogWindow diff --git a/src/View/SedimentLayers/Edit/Plot.py b/src/View/SedimentLayers/Edit/Plot.py index e48ec5eb..a6fa2185 100644 --- a/src/View/SedimentLayers/Edit/Plot.py +++ b/src/View/SedimentLayers/Edit/Plot.py @@ -5,23 +5,19 @@ import logging from functools import reduce from tools import timer -from View.Plot.APlot import APlot - -from PyQt5.QtCore import ( - QCoreApplication -) - -_translate = QCoreApplication.translate +from View.Tools.PamhyrPlot import PamhyrPlot logger = logging.getLogger() -class Plot(APlot): - def __init__(self, canvas=None, data=None, toolbar=None, - display_current=True): +class Plot(PamhyrPlot): + def __init__(self, canvas=None, trad=None, data=None, toolbar=None, + display_current=True, 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 @@ -34,13 +30,9 @@ class Plot(APlot): self.canvas.axes.cla() self.canvas.axes.grid(color='grey', linestyle='--', linewidth=0.5) - # self.canvas.axes.set_xlabel( - # _translate("MainWindow_reach", "X (m)"), - # color='green', fontsize=12 - # ) self.canvas.axes.axes.get_xaxis().set_visible(False) self.canvas.axes.set_ylabel( - _translate("MainWindow_reach", "Height (m)"), + self._trad["height"], color='green', fontsize=12 ) diff --git a/src/View/SedimentLayers/Edit/Table.py b/src/View/SedimentLayers/Edit/Table.py index e1a41cb2..ea7cd934 100644 --- a/src/View/SedimentLayers/Edit/Table.py +++ b/src/View/SedimentLayers/Edit/Table.py @@ -15,32 +15,14 @@ from PyQt5.QtWidgets import ( QComboBox, ) +from View.Tools.PamhyrTable import PamhyrTableModel + from View.SedimentLayers.Edit.UndoCommand import * -from View.SedimentLayers.Edit.translate import * _translate = QCoreApplication.translate -class TableModel(QAbstractTableModel): - def __init__(self, study=None, sl=None, undo=None): - super(QAbstractTableModel, self).__init__() - self._headers = list(table_headers.keys()) - self._study = study - self._undo = undo - self._sl = sl - - def flags(self, index): - options = Qt.ItemIsEnabled | Qt.ItemIsSelectable - options |= Qt.ItemIsEditable - - return options - - def rowCount(self, parent): - return len(self._sl) - - def columnCount(self, parent): - return len(self._headers) - +class TableModel(PamhyrTableModel): def data(self, index, role): if role != Qt.ItemDataRole.DisplayRole: return QVariant() @@ -49,23 +31,17 @@ class TableModel(QAbstractTableModel): column = index.column() if self._headers[column] == "name": - return self._sl.get(row).name + return self._data.get(row).name elif self._headers[column] == "type": - return self._sl.get(row).type + return self._data.get(row).type elif self._headers[column] == "height": - return self._sl.get(row).height + return self._data.get(row).height elif self._headers[column] == "d50": - return self._sl.get(row).d50 + return self._data.get(row).d50 elif self._headers[column] == "sigma": - return self._sl.get(row).sigma + return self._data.get(row).sigma elif self._headers[column] == "critical_constraint": - return self._sl.get(row).critical_constraint - - 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.get(row).critical_constraint return QVariant() @@ -79,37 +55,37 @@ class TableModel(QAbstractTableModel): if self._headers[column] == "name": self._undo.push( SetNameCommand( - self._sl, row, value + self._data, row, value ) ) if self._headers[column] == "type": self._undo.push( SetTypeCommand( - self._sl, row, value + self._data, row, value ) ) if self._headers[column] == "height": self._undo.push( SetHeightCommand( - self._sl, row, value + self._data, row, value ) ) if self._headers[column] == "d50": self._undo.push( SetD50Command( - self._sl, row, value + self._data, row, value ) ) if self._headers[column] == "sigma": self._undo.push( SetSigmaCommand( - self._sl, row, value + self._data, row, value ) ) if self._headers[column] == "critical_constraint": self._undo.push( SetCriticalConstraintCommand( - self._sl, row, value + self._data, row, value ) ) @@ -121,7 +97,7 @@ class TableModel(QAbstractTableModel): self._undo.push( AddCommand( - self._sl, row + self._data, row ) ) @@ -133,7 +109,7 @@ class TableModel(QAbstractTableModel): self._undo.push( DelCommand( - self._sl, rows + self._data, rows ) ) @@ -150,7 +126,7 @@ class TableModel(QAbstractTableModel): self._undo.push( MoveCommand( - self._sl, "up", row + self._data, "up", row ) ) @@ -158,7 +134,7 @@ class TableModel(QAbstractTableModel): self.layoutChanged.emit() def move_down(self, row, parent=QModelIndex()): - if row + 1 >= len(self._sl): + if row + 1 >= len(self._data): return target = row @@ -167,7 +143,7 @@ class TableModel(QAbstractTableModel): self._undo.push( MoveCommand( - self._sl, "down", row + self._data, "down", row ) ) diff --git a/src/View/SedimentLayers/Edit/Window.py b/src/View/SedimentLayers/Edit/Window.py index ebe3aece..e5835c97 100644 --- a/src/View/SedimentLayers/Edit/Window.py +++ b/src/View/SedimentLayers/Edit/Window.py @@ -39,13 +39,13 @@ from PyQt5.QtWidgets import ( QComboBox, QVBoxLayout, QHeaderView, QTabWidget, ) -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.Edit.UndoCommand import * from View.SedimentLayers.Edit.Table import * from View.SedimentLayers.Edit.Plot import Plot -from View.SedimentLayers.Edit.translate import table_headers, retranslate +from View.SedimentLayers.Edit.translate import SedimentEditTranslate _translate = QCoreApplication.translate @@ -71,7 +71,8 @@ class EditSedimentLayersWindow(PamhyrWindow): title = name, study = study, config = config, - parent=parent + trad = SedimentEditTranslate(), + parent = parent ) self.setup_table() @@ -79,17 +80,17 @@ class EditSedimentLayersWindow(PamhyrWindow): self.setup_connections() def setup_table(self): - retranslate() - self._table = {} - + table_headers = self._trad.get_dict("table_headers") table = self.find(QTableView, f"tableView") self._table = TableModel( - study = self._study, - sl = self._sl, + table_view = table, + table_headers = table_headers, + editable_headers = list(table_headers), + data = self._sl, + trad = self._trad, undo = self._undo_stack, ) table.setModel(self._table) - table.setSelectionBehavior(QAbstractItemView.SelectRows) table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) table.setAlternatingRowColors(True) @@ -110,6 +111,7 @@ class EditSedimentLayersWindow(PamhyrWindow): canvas = self.canvas, data = self._sl, toolbar = self.toolbar, + trad = self._trad, display_current = False ) self.plot.draw() diff --git a/src/View/SedimentLayers/Edit/translate.py b/src/View/SedimentLayers/Edit/translate.py index a6b77897..658d4f23 100644 --- a/src/View/SedimentLayers/Edit/translate.py +++ b/src/View/SedimentLayers/Edit/translate.py @@ -2,21 +2,21 @@ from PyQt5.QtCore import QCoreApplication +from View.SedimentLayers.translate import SedimentTranslate + _translate = QCoreApplication.translate -table_headers = { - "name": _translate("SedimentLayers", "Name"), - # "type": _translate("SedimentLayers", "Type"), - "height": _translate("SedimentLayers", "Height"), - "d50": _translate("SedimentLayers", "D50"), - "sigma": _translate("SedimentLayers", "Sigma"), - "critical_constraint": _translate("SedimentLayers", "Critical constraint"), -} +class SedimentEditTranslate(SedimentTranslate): + def __init__(self): + super(SedimentEditTranslate, self).__init__() + + self._dict["height"] = _translate("SedimentLayers", "Height (m)"), -def retranslate(): - table_headers["name"] = _translate("SedimentLayers", "Name") - # table_headers["type"] = _translate("SedimentLayers", "Type") - table_headers["height"] = _translate("SedimentLayers", "Height") - table_headers["d50"] = _translate("SedimentLayers", "D50") - table_headers["sigma"] = _translate("SedimentLayers", "Sigma") - table_headers["critical_constraint"] = _translate("SedimentLayers", "Critical constraint") + self._sub_dict["table_headers"] = { + "name": _translate("SedimentLayers", "Name"), + # "type": _translate("SedimentLayers", "Type"), + "height": _translate("SedimentLayers", "Height"), + "d50": _translate("SedimentLayers", "D50"), + "sigma": _translate("SedimentLayers", "Sigma"), + "critical_constraint": _translate("SedimentLayers", "Critical constraint"), + } diff --git a/src/View/SedimentLayers/Table.py b/src/View/SedimentLayers/Table.py index f375c318..2b7a00f6 100644 --- a/src/View/SedimentLayers/Table.py +++ b/src/View/SedimentLayers/Table.py @@ -15,32 +15,12 @@ from PyQt5.QtWidgets import ( QComboBox, ) -from View.SedimentLayers.UndoCommand import * -from View.SedimentLayers.translate import * - -_translate = QCoreApplication.translate - - -class TableModel(QAbstractTableModel): - def __init__(self, study=None, undo=None): - super(QAbstractTableModel, self).__init__() - self._headers = list(table_headers.keys()) - self._study = study - self._undo = undo - self._sl = self._study.river.sediment_layers - - def flags(self, index): - options = Qt.ItemIsEnabled | Qt.ItemIsSelectable - options |= Qt.ItemIsEditable +from View.Tools.PamhyrTable import PamhyrTableModel - return options - - def rowCount(self, parent): - return len(self._sl) +from View.SedimentLayers.UndoCommand import * - def columnCount(self, parent): - return len(self._headers) +class TableModel(PamhyrTableModel): def data(self, index, role): if role != Qt.ItemDataRole.DisplayRole: return QVariant() @@ -49,15 +29,9 @@ class TableModel(QAbstractTableModel): column = index.column() if self._headers[column] == "name": - return self._sl.get(row).name + return self._data.get(row).name elif self._headers[column] == "comment": - return self._sl.get(row).comment - - 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.get(row).comment return QVariant() @@ -71,13 +45,13 @@ class TableModel(QAbstractTableModel): if self._headers[column] == "name": self._undo.push( SetNameCommand( - self._sl, row, value + self._data, row, value ) ) if self._headers[column] == "comment": self._undo.push( SetCommentCommand( - self._sl, row, value + self._data, row, value ) ) @@ -89,7 +63,7 @@ class TableModel(QAbstractTableModel): self._undo.push( AddCommand( - self._sl, row + self._data, row ) ) @@ -101,7 +75,7 @@ class TableModel(QAbstractTableModel): self._undo.push( DelCommand( - self._sl, rows + self._data, rows ) ) @@ -118,7 +92,7 @@ class TableModel(QAbstractTableModel): self._undo_stack.push( MoveCommand( - self._sl, "up", row + self._data, "up", row ) ) @@ -126,7 +100,7 @@ class TableModel(QAbstractTableModel): self.layoutChanged.emit() def move_down(self, index, parent=QModelIndex()): - if row > len(self._sl): + if row > len(self._data): return target = row @@ -135,7 +109,7 @@ class TableModel(QAbstractTableModel): self._undo_stack.push( MoveCommand( - self._sl, "down", row + self._data, "down", row ) ) diff --git a/src/View/SedimentLayers/Window.py b/src/View/SedimentLayers/Window.py index c4010745..3c394de0 100644 --- a/src/View/SedimentLayers/Window.py +++ b/src/View/SedimentLayers/Window.py @@ -44,13 +44,11 @@ from View.SedimentLayers.Table import * from View.SedimentLayers.Edit.Plot import Plot -from View.Plot.MplCanvas import MplCanvas -from View.SedimentLayers.translate import table_headers, retranslate +from View.Tools.Plot.PamhyrCanvas import MplCanvas +from View.SedimentLayers.translate import SedimentTranslate from View.SedimentLayers.Edit.Window import EditSedimentLayersWindow -_translate = QCoreApplication.translate - logger = logging.getLogger() class SedimentLayersWindow(PamhyrWindow): @@ -68,34 +66,31 @@ class SedimentLayersWindow(PamhyrWindow): title = name, study = study, config = config, + trad = SedimentTranslate(), parent=parent ) self.setup_table() - self.setup_graph() + self.setup_plot() self.setup_connections() - def setup_title(self, title): - self._title = ( - title + " - " + self._study.name - ) - def setup_table(self): - retranslate() - table = self.find(QTableView, f"tableView") self._table = TableModel( - study = self._study, + table_view = table, + table_headers = self._trad.get_dict("table_headers"), + editable_headers = ["name", "comment"], + data = self._study.river.sediment_layers, + 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): - self.canvas = MplCanvas(width=5, height=4, dpi=100) + def setup_plot(self): + self.canvas = MplCanvas(width=2, height=4, dpi=100) self.canvas.setObjectName("canvas") self.plot_layout = self.find(QVBoxLayout, "verticalLayout") self.plot_layout.addWidget(self.canvas) @@ -122,6 +117,7 @@ class SedimentLayersWindow(PamhyrWindow): self.plot = Plot( canvas = self.canvas, data = self._sediment_layers.get(rows[0]), + trad = self._trad, toolbar = None, display_current = False ) diff --git a/src/View/SedimentLayers/translate.py b/src/View/SedimentLayers/translate.py index 29053e17..42d59f92 100644 --- a/src/View/SedimentLayers/translate.py +++ b/src/View/SedimentLayers/translate.py @@ -2,13 +2,15 @@ from PyQt5.QtCore import QCoreApplication +from View.Tools.PamhyrTranslate import PamhyrTranslate + _translate = QCoreApplication.translate -table_headers = { - "name": _translate("SedimentLayers", "Name"), - "comment": _translate("SedimentLayers", "Comment"), -} +class SedimentTranslate(PamhyrTranslate): + def __init__(self): + super(SedimentTranslate, self).__init__() -def retranslate(): - table_headers["name"] = _translate("SedimentLayers", "Name") - table_headers["comment"] = _translate("SedimentLayers", "Comment") + self._sub_dict["table_headers"] = { + "name": _translate("SedimentLayers", "Name"), + "comment": _translate("SedimentLayers", "Comment"), + } -- GitLab