Commit 63d6c114 authored by Pierre-Antoine Rouby's avatar Pierre-Antoine Rouby
Browse files

refactoring: refacto SL reach and profile window.

Showing with 114 additions and 146 deletions
+114 -146
...@@ -51,7 +51,7 @@ from View.InitialConditions.Window import InitialConditionsWindow ...@@ -51,7 +51,7 @@ from View.InitialConditions.Window import InitialConditionsWindow
from View.Stricklers.Window import StricklersWindow from View.Stricklers.Window import StricklersWindow
from View.Frictions.Window import FrictionsWindow 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.SedimentLayers.Reach.Window import ReachSedimentLayersWindow
# from View.SolverParameters.Window import SolverParametersWindow # from View.SolverParameters.Window import SolverParametersWindow
# from View.RunSolver.Window import SelectSolverWindow, SolverLogWindow # from View.RunSolver.Window import SelectSolverWindow, SolverLogWindow
# from View.CheckList.Window import CheckListWindow # from View.CheckList.Window import CheckListWindow
......
...@@ -5,7 +5,7 @@ import logging ...@@ -5,7 +5,7 @@ import logging
from functools import reduce from functools import reduce
from tools import timer from tools import timer
from View.Plot.APlot import APlot from View.Tools.PamhyrPlot import PamhyrPlot
from PyQt5.QtCore import ( from PyQt5.QtCore import (
QCoreApplication QCoreApplication
...@@ -15,13 +15,16 @@ _translate = QCoreApplication.translate ...@@ -15,13 +15,16 @@ _translate = QCoreApplication.translate
logger = logging.getLogger() logger = logging.getLogger()
class Plot(APlot): class Plot(PamhyrPlot):
def __init__(self, canvas=None, data=None, toolbar=None, def __init__(self, data=None, display_current=True,
display_current=True): canvas=None, trad=None, toolbar=None,
parent=None):
super(Plot, self).__init__( super(Plot, self).__init__(
canvas=canvas, canvas = canvas,
data=data, trad = trad,
toolbar=toolbar data = data,
toolbar = toolbar,
parent = parent
) )
self._display_current = display_current self._display_current = display_current
...@@ -41,11 +44,11 @@ class Plot(APlot): ...@@ -41,11 +44,11 @@ class Plot(APlot):
return return
self.canvas.axes.set_xlabel( self.canvas.axes.set_xlabel(
_translate("MainWindow_reach", "Kp (m)"), self._trad["kp"],
color='green', fontsize=12 color='green', fontsize=12
) )
self.canvas.axes.set_ylabel( self.canvas.axes.set_ylabel(
_translate("MainWindow_reach", "Height (m)"), self._trad["height"],
color='green', fontsize=12 color='green', fontsize=12
) )
......
...@@ -5,7 +5,7 @@ import logging ...@@ -5,7 +5,7 @@ import logging
from functools import reduce from functools import reduce
from tools import timer from tools import timer
from View.Plot.APlot import APlot from View.Tools.PamhyrPlot import PamhyrPlot
from PyQt5.QtCore import ( from PyQt5.QtCore import (
QCoreApplication QCoreApplication
...@@ -15,13 +15,16 @@ _translate = QCoreApplication.translate ...@@ -15,13 +15,16 @@ _translate = QCoreApplication.translate
logger = logging.getLogger() logger = logging.getLogger()
class Plot(APlot): class Plot(PamhyrPlot):
def __init__(self, canvas=None, data=None, toolbar=None, def __init__(self, data=None, display_current=True,
display_current=True): canvas=None, trad=None, toolbar=None,
parent=None):
super(Plot, self).__init__( super(Plot, self).__init__(
canvas=canvas, canvas = canvas,
data=data, trad = trad,
toolbar=toolbar data = data,
toolbar = toolbar,
parent = parent
) )
self._display_current = display_current self._display_current = display_current
......
...@@ -20,6 +20,8 @@ from PyQt5.QtWidgets import ( ...@@ -20,6 +20,8 @@ from PyQt5.QtWidgets import (
from View.SedimentLayers.Reach.Profile.UndoCommand import * from View.SedimentLayers.Reach.Profile.UndoCommand import *
from View.SedimentLayers.Reach.Profile.translate import * from View.SedimentLayers.Reach.Profile.translate import *
from View.Tools.PamhyrTable import PamhyrTableModel
_translate = QCoreApplication.translate _translate = QCoreApplication.translate
logger = logging.getLogger() logger = logging.getLogger()
...@@ -67,28 +69,10 @@ class ComboBoxDelegate(QItemDelegate): ...@@ -67,28 +69,10 @@ class ComboBoxDelegate(QItemDelegate):
self.commitData.emit(self.sender()) self.commitData.emit(self.sender())
class TableModel(QAbstractTableModel): class TableModel(PamhyrTableModel):
def __init__(self, study=None, profile=None, undo=None): def _setup_lst(self):
super(QAbstractTableModel, self).__init__() self._lst = self._data
self._headers = list(table_headers.keys()) self._study = self._opt_data
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)
def data(self, index, role): def data(self, index, role):
if role != Qt.ItemDataRole.DisplayRole: if role != Qt.ItemDataRole.DisplayRole:
...@@ -98,25 +82,19 @@ class TableModel(QAbstractTableModel): ...@@ -98,25 +82,19 @@ class TableModel(QAbstractTableModel):
column = index.column() column = index.column()
if self._headers[column] == "name": if self._headers[column] == "name":
return self._profile.point(row).name return self._data.point(row).name
elif self._headers[column] == "sl": elif self._headers[column] == "sl":
value = self._profile.point(row).sl value = self._data.point(row).sl
if value == None: if value == None:
text = _translate("SedimentLayers", "Not defined") text = _translate("SedimentLayers", "Not defined")
return text return text
return str(value) return str(value)
elif self._headers[column] == "x": elif self._headers[column] == "x":
return self._profile.point(row).x return self._data.point(row).x
elif self._headers[column] == "y": elif self._headers[column] == "y":
return self._profile.point(row).y return self._data.point(row).y
elif self._headers[column] == "z": elif self._headers[column] == "z":
return self._profile.point(row).z return self._data.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 QVariant() return QVariant()
...@@ -139,7 +117,7 @@ class TableModel(QAbstractTableModel): ...@@ -139,7 +117,7 @@ class TableModel(QAbstractTableModel):
self._undo.push( self._undo.push(
SetSLCommand( SetSLCommand(
self._profile, row, new self._data, row, new
) )
) )
......
...@@ -27,10 +27,10 @@ from View.SedimentLayers.Reach.Profile.UndoCommand import * ...@@ -27,10 +27,10 @@ from View.SedimentLayers.Reach.Profile.UndoCommand import *
from View.SedimentLayers.Reach.Profile.Table import * from View.SedimentLayers.Reach.Profile.Table import *
from View.SedimentLayers.Reach.Profile.Plot import Plot from View.SedimentLayers.Reach.Profile.Plot import Plot
from View.Plot.MplCanvas import MplCanvas from View.Tools.Plot.PamhyrCanvas import MplCanvas
from View.Plot.PamhyrToolbar import PamhyrPlotToolbar 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 from View.SedimentLayers.Window import SedimentLayersWindow
_translate = QCoreApplication.translate _translate = QCoreApplication.translate
...@@ -52,7 +52,8 @@ class ProfileSedimentLayersWindow(PamhyrWindow): ...@@ -52,7 +52,8 @@ class ProfileSedimentLayersWindow(PamhyrWindow):
title = name, title = name,
study = study, study = study,
config = config, config = config,
parent=parent trad = SedimentProfileTranslate(),
parent = parent
) )
self.setup_table() self.setup_table()
...@@ -80,26 +81,25 @@ class ProfileSedimentLayersWindow(PamhyrWindow): ...@@ -80,26 +81,25 @@ class ProfileSedimentLayersWindow(PamhyrWindow):
) )
def setup_table(self): def setup_table(self):
retranslate() table_headers = self._trad.get_dict("table_headers")
table = self.find(QTableView, f"tableView") self._delegate_sl = ComboBoxDelegate(
self._table = TableModel(
study = self._study,
profile = self._profile,
undo = self._undo_stack,
)
table.setModel(self._table)
self._delegate_stricklers = ComboBoxDelegate(
study = self._study, study = self._study,
parent=self parent=self
) )
table.setItemDelegateForColumn( table = self.find(QTableView, f"tableView")
list(table_headers).index("sl"), self._table = TableModel(
self._delegate_stricklers 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.setSelectionBehavior(QAbstractItemView.SelectRows)
table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
table.setAlternatingRowColors(True) table.setAlternatingRowColors(True)
......
...@@ -2,19 +2,18 @@ ...@@ -2,19 +2,18 @@
from PyQt5.QtCore import QCoreApplication from PyQt5.QtCore import QCoreApplication
from View.SedimentLayers.Reach.translate import SedimentReachTranslate
_translate = QCoreApplication.translate _translate = QCoreApplication.translate
table_headers = { class SedimentProfileTranslate(SedimentReachTranslate):
"x": _translate("SedimentLayers", "X (m)"), def __init__(self):
"y": _translate("SedimentLayers", "Y (m)"), super(SedimentProfileTranslate, self).__init__()
"z": _translate("SedimentLayers", "Z (m)"),
"name": _translate("SedimentLayers", "Name"),
"sl": _translate("SedimentLayers", "Sediment layers"),
}
def retranslate(): self._sub_dict["table_headers"] = {
table_headers["x"] = _translate("SedimentLayers", "X (m)") "x": _translate("SedimentLayers", "X (m)"),
table_headers["y"] = _translate("SedimentLayers", "Y (m)") "y": _translate("SedimentLayers", "Y (m)"),
table_headers["z"] = _translate("SedimentLayers", "Z (m)") "z": _translate("SedimentLayers", "Z (m)"),
table_headers["name"] = _translate("SedimentLayers", "Name") "name": _translate("SedimentLayers", "Name"),
table_headers["sl"] = _translate("SedimentLayers", "Sediment layers") "sl": _translate("SedimentLayers", "Sediment layers"),
}
...@@ -18,23 +18,25 @@ from PyQt5.QtWidgets import ( ...@@ -18,23 +18,25 @@ from PyQt5.QtWidgets import (
) )
from View.SedimentLayers.Reach.UndoCommand import * from View.SedimentLayers.Reach.UndoCommand import *
from View.SedimentLayers.Reach.translate import *
from View.Tools.PamhyrTable import PamhyrTableModel
_translate = QCoreApplication.translate _translate = QCoreApplication.translate
logger = logging.getLogger() logger = logging.getLogger()
class ComboBoxDelegate(QItemDelegate): class ComboBoxDelegate(QItemDelegate):
def __init__(self, study=None, parent=None): def __init__(self, study=None, trad=None, parent=None):
super(ComboBoxDelegate, self).__init__(parent) super(ComboBoxDelegate, self).__init__(parent)
self._study = study self._study = study
self._trad = trad
def createEditor(self, parent, option, index): def createEditor(self, parent, option, index):
self.editor = QComboBox(parent) self.editor = QComboBox(parent)
self.editor.addItems( self.editor.addItems(
[_translate("SedimentLayers", "Not defined")] + [self._trad["nd"]] +
list( list(
map( map(
lambda sl: str(sl), lambda sl: str(sl),
...@@ -67,28 +69,10 @@ class ComboBoxDelegate(QItemDelegate): ...@@ -67,28 +69,10 @@ class ComboBoxDelegate(QItemDelegate):
self.commitData.emit(self.sender()) self.commitData.emit(self.sender())
class TableModel(QAbstractTableModel): class TableModel(PamhyrTableModel):
def __init__(self, study=None, reach=None, undo=None): def _setup_lst(self):
super(QAbstractTableModel, self).__init__() self._lst = self._data
self._headers = list(table_headers.keys()) self._study = self._opt_data
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)
def data(self, index, role): def data(self, index, role):
if role != Qt.ItemDataRole.DisplayRole: if role != Qt.ItemDataRole.DisplayRole:
...@@ -98,11 +82,11 @@ class TableModel(QAbstractTableModel): ...@@ -98,11 +82,11 @@ class TableModel(QAbstractTableModel):
column = index.column() column = index.column()
if self._headers[column] == "name": if self._headers[column] == "name":
return self._reach.profile(row).name return self._data.profile(row).name
if self._headers[column] == "kp": if self._headers[column] == "kp":
return self._reach.profile(row).kp return self._data.profile(row).kp
if self._headers[column] == "sl": if self._headers[column] == "sl":
value = self._reach.profile(row).sl value = self._data.profile(row).sl
if value == None: if value == None:
text = _translate("SedimentLayers", "Not defined") text = _translate("SedimentLayers", "Not defined")
return text return text
...@@ -110,12 +94,6 @@ class TableModel(QAbstractTableModel): ...@@ -110,12 +94,6 @@ class TableModel(QAbstractTableModel):
return QVariant() 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): def setData(self, index, value, role=Qt.EditRole):
if not index.isValid() or role != Qt.EditRole: if not index.isValid() or role != Qt.EditRole:
return False return False
...@@ -135,7 +113,7 @@ class TableModel(QAbstractTableModel): ...@@ -135,7 +113,7 @@ class TableModel(QAbstractTableModel):
self._undo.push( self._undo.push(
SetSLCommand( SetSLCommand(
self._reach, row, new self._data, row, new
) )
) )
...@@ -145,7 +123,7 @@ class TableModel(QAbstractTableModel): ...@@ -145,7 +123,7 @@ class TableModel(QAbstractTableModel):
def apply_sl_each_profile(self, sl): def apply_sl_each_profile(self, sl):
self._undo.push( self._undo.push(
ApplySLCommand( ApplySLCommand(
self._reach, sl self._data, sl
) )
) )
self.layoutChanged.emit() self.layoutChanged.emit()
......
...@@ -28,10 +28,10 @@ from View.SedimentLayers.Reach.Table import * ...@@ -28,10 +28,10 @@ from View.SedimentLayers.Reach.Table import *
from View.SedimentLayers.Reach.Plot import Plot from View.SedimentLayers.Reach.Plot import Plot
from View.SedimentLayers.Reach.SLDialog import SLDialog from View.SedimentLayers.Reach.SLDialog import SLDialog
from View.Plot.MplCanvas import MplCanvas from View.Tools.Plot.PamhyrCanvas import MplCanvas
from View.Plot.PamhyrToolbar import PamhyrPlotToolbar 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.Window import SedimentLayersWindow
from View.SedimentLayers.Reach.Profile.Window import ProfileSedimentLayersWindow from View.SedimentLayers.Reach.Profile.Window import ProfileSedimentLayersWindow
...@@ -57,39 +57,40 @@ class ReachSedimentLayersWindow(PamhyrWindow): ...@@ -57,39 +57,40 @@ class ReachSedimentLayersWindow(PamhyrWindow):
title = name, title = name,
study = study, study = study,
config = config, config = config,
trad = SedimentReachTranslate(),
parent = parent parent = parent
) )
self.setup_table() self.setup_table()
self.setup_graph() self.setup_plot()
self.setup_connections() self.setup_connections()
def setup_table(self): def setup_table(self):
retranslate() table_headers = self._trad.get_dict("table_headers")
table = self.find(QTableView, f"tableView") self._delegate_sl = ComboBoxDelegate(
self._table = TableModel(
study = self._study,
reach = self._reach,
undo = self._undo_stack,
)
table.setModel(self._table)
self._delegate_stricklers = ComboBoxDelegate(
study = self._study, study = self._study,
trad = self._trad,
parent=self parent=self
) )
table.setItemDelegateForColumn( table = self.find(QTableView, f"tableView")
list(table_headers).index("sl"), self._table = TableModel(
self._delegate_stricklers 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.setSelectionBehavior(QAbstractItemView.SelectRows)
table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
table.setAlternatingRowColors(True) table.setAlternatingRowColors(True)
def setup_graph(self): def setup_plot(self):
self.canvas = MplCanvas(width=5, height=4, dpi=100) self.canvas = MplCanvas(width=5, height=4, dpi=100)
self.canvas.setObjectName("canvas") self.canvas.setObjectName("canvas")
self.toolbar = PamhyrPlotToolbar( self.toolbar = PamhyrPlotToolbar(
...@@ -106,6 +107,7 @@ class ReachSedimentLayersWindow(PamhyrWindow): ...@@ -106,6 +107,7 @@ class ReachSedimentLayersWindow(PamhyrWindow):
canvas = self.canvas, canvas = self.canvas,
data = self._reach, data = self._reach,
toolbar = self.toolbar, toolbar = self.toolbar,
trad = self._trad,
display_current = False display_current = False
) )
self.plot.draw() self.plot.draw()
......
...@@ -2,15 +2,20 @@ ...@@ -2,15 +2,20 @@
from PyQt5.QtCore import QCoreApplication from PyQt5.QtCore import QCoreApplication
from View.SedimentLayers.translate import SedimentTranslate
_translate = QCoreApplication.translate _translate = QCoreApplication.translate
table_headers = { class SedimentReachTranslate(SedimentTranslate):
"name": _translate("SedimentLayers", "Name"), def __init__(self):
"kp": _translate("SedimentLayers", "KP (m)"), super(SedimentReachTranslate, self).__init__()
"sl": _translate("SedimentLayers", "Sediment layers"),
} self._dict["nd"] = _translate("SedimentLayers", "Not defined")
self._dict["kp"] = _translate("SedimentLayers", "Kp (m)")
self._dict["height"] = _translate("SedimentLayers", "Height (m)")
def retranslate(): self._sub_dict["table_headers"] = {
table_headers["name"] = _translate("SedimentLayers", "Name") "name": _translate("SedimentLayers", "Name"),
table_headers["kp"] = _translate("SedimentLayers", "KP (m)") "kp": _translate("SedimentLayers", "KP (m)"),
table_headers["sl"] = _translate("SedimentLayers", "Sediment layers") "sl": _translate("SedimentLayers", "Sediment layers"),
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment