refactoring: refacto SL reach and profile window.

setup.py
Pierre-Antoine Rouby 2023-10-04 16:16:37 +02:00
parent 1d45ccb8b8
commit 63d6c114c0
9 changed files with 114 additions and 146 deletions

View File

@ -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

View File

@ -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,
trad = trad,
data = data,
toolbar=toolbar
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
)

View File

@ -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,
trad = trad,
data = data,
toolbar=toolbar
toolbar = toolbar,
parent = parent
)
self._display_current = display_current

View File

@ -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
)
)

View File

@ -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,6 +52,7 @@ class ProfileSedimentLayersWindow(PamhyrWindow):
title = name,
study = study,
config = config,
trad = SedimentProfileTranslate(),
parent = parent
)
@ -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)

View File

@ -2,19 +2,18 @@
from PyQt5.QtCore import QCoreApplication
from View.SedimentLayers.Reach.translate import SedimentReachTranslate
_translate = QCoreApplication.translate
table_headers = {
class SedimentProfileTranslate(SedimentReachTranslate):
def __init__(self):
super(SedimentProfileTranslate, self).__init__()
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"),
}
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")

View File

@ -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()

View File

@ -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()

View File

@ -2,15 +2,20 @@
from PyQt5.QtCore import QCoreApplication
from View.SedimentLayers.translate import SedimentTranslate
_translate = QCoreApplication.translate
table_headers = {
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)")
self._sub_dict["table_headers"] = {
"name": _translate("SedimentLayers", "Name"),
"kp": _translate("SedimentLayers", "KP (m)"),
"sl": _translate("SedimentLayers", "Sediment layers"),
}
def retranslate():
table_headers["name"] = _translate("SedimentLayers", "Name")
table_headers["kp"] = _translate("SedimentLayers", "KP (m)")
table_headers["sl"] = _translate("SedimentLayers", "Sediment layers")