refactoring: refacto IC.

setup.py
Pierre-Antoine Rouby 2023-10-04 13:51:01 +02:00
parent 500885ec4d
commit b430cbb62b
9 changed files with 70 additions and 106 deletions

View File

@ -37,7 +37,7 @@ class DischargeDialog(PamhyrDialog):
def __init__(self, title="Discharge", parent=None):
super(DischargeDialog, self).__init__(
title = _pamhyr_name,
title = self._pamhyr_name,
options = [],
parent = parent
)

View File

@ -37,7 +37,7 @@ class HeightDialog(PamhyrDialog):
def __init__(self, parent=None):
super(HeightDialog, self).__init__(
title = name,
title = self._pamhyr_name,
options = [],
parent = parent
)

View File

@ -17,7 +17,7 @@
# -*- coding: utf-8 -*-
from tools import timer
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 PlotDKP(APlot):
def __init__(self, canvas=None, data=None, toolbar=None):
super(PlotDKP, self).__init__(
canvas=canvas,
data=data,
toolbar=toolbar
)
class PlotDKP(PamhyrPlot):
@timer
def draw(self, highlight=None):
self.canvas.axes.cla()
@ -42,11 +35,11 @@ class PlotDKP(APlot):
return
self.canvas.axes.set_ylabel(
_translate("MainWindow_reach", "Elevation (m)"),
self._trad["elevation"],
color='green', fontsize=11
)
self.canvas.axes.set_xlabel(
_translate("MainWindow_reach", "KP (m)"),
self._trad["kp"],
color='green', fontsize=11
)

View File

@ -17,22 +17,9 @@
# -*- coding: utf-8 -*-
from tools import timer
from View.Plot.APlot import APlot
from PyQt5.QtCore import (
QCoreApplication
)
_translate = QCoreApplication.translate
class PlotDischarge(APlot):
def __init__(self, canvas=None, data=None, toolbar=None):
super(PlotDischarge, self).__init__(
canvas=canvas,
data=data,
toolbar=toolbar
)
from View.Tools.PamhyrPlot import PamhyrPlot
class PlotDischarge(PamhyrPlot):
@timer
def draw(self, highlight=None):
self.canvas.axes.cla()
@ -42,11 +29,11 @@ class PlotDischarge(APlot):
return
self.canvas.axes.set_ylabel(
_translate("MainWindow_reach", "Discharge (m^3/s)"),
self._trad["discharge"],
color='green', fontsize=11
)
self.canvas.axes.set_xlabel(
_translate("MainWindow_reach", "KP (m)"),
self._trad["kp"],
color='green', fontsize=11
)

View File

@ -33,14 +33,14 @@ from PyQt5.QtWidgets import (
QComboBox,
)
from View.Tools.PamhyrTable import PamhyrTableModel
from View.InitialConditions.UndoCommand import (
SetCommand, AddCommand, DelCommand,
SortCommand, MoveCommand, PasteCommand,
DuplicateCommand, GenerateCommand,
)
from View.InitialConditions.translate import *
logger = logging.getLogger()
_translate = QCoreApplication.translate
@ -87,29 +87,13 @@ class ComboBoxDelegate(QItemDelegate):
self.commitData.emit(self.sender())
class TableModel(QAbstractTableModel):
def __init__(self, river=None, reach=None, undo=None):
super(QAbstractTableModel, self).__init__()
self._headers = list(table_headers.keys())
self._river = river
class InitialConditionTableModel(PamhyrTableModel):
def __init__(self, reach=None, **kwargs):
self._reach = reach
self._undo = undo
self._ics = self._river.initial_conditions.get(reach)
super(InitialConditionTableModel, self).__init__(**kwargs)
def flags(self, index):
column = index.column()
options = Qt.ItemIsSelectable
if self._headers[column] != "speed":
options |= Qt.ItemIsEnabled | Qt.ItemIsEditable
return options
def rowCount(self, parent):
return len(self._ics)
def columnCount(self, parent):
return len(self._headers)
def _setup_lst(self):
self._lst = self._data.river.initial_conditions.get(self._reach)
def data(self, index, role):
if role != Qt.ItemDataRole.DisplayRole:
@ -119,16 +103,10 @@ class TableModel(QAbstractTableModel):
column = index.column()
if self._headers[column] not in ["name", "comment"]:
v = self._ics.get(row)[self._headers[column]]
v = self._lst.get(row)[self._headers[column]]
return f"{v:.4f}"
else:
return self._ics.get(row)[self._headers[column]]
return QVariant()
def headerData(self, section, orientation, role):
if role == Qt.ItemDataRole.DisplayRole and orientation == Qt.Orientation.Horizontal:
return table_headers[self._headers[section]]
return self._lst.get(row)[self._headers[column]]
return QVariant()
@ -143,7 +121,7 @@ class TableModel(QAbstractTableModel):
if self._headers[column] is not None:
self._undo.push(
SetCommand(
self._ics, row, self._headers[column], value
self._lst, row, self._headers[column], value
)
)
except Exception as e:
@ -158,7 +136,7 @@ class TableModel(QAbstractTableModel):
self._undo.push(
AddCommand(
self._ics, row
self._lst, row
)
)
@ -170,7 +148,7 @@ class TableModel(QAbstractTableModel):
self._undo.push(
DelCommand(
self._ics, rows
self._lst, rows
)
)
@ -182,7 +160,7 @@ class TableModel(QAbstractTableModel):
self._undo.push(
SortCommand(
self._ics, False
self._lst, False
)
)
@ -199,7 +177,7 @@ class TableModel(QAbstractTableModel):
self._undo.push(
MoveCommand(
self._ics, "up", row
self._lst, "up", row
)
)
@ -207,7 +185,7 @@ class TableModel(QAbstractTableModel):
self.layoutChanged.emit()
def move_down(self, index, parent=QModelIndex()):
if row > len(self._ics):
if row > len(self._lst):
return
target = row
@ -216,7 +194,7 @@ class TableModel(QAbstractTableModel):
self._undo.push(
MoveCommand(
self._ics, "down", row
self._lst, "down", row
)
)
@ -234,7 +212,7 @@ class TableModel(QAbstractTableModel):
def generate(self, generator, param):
self._undo.push(
GenerateCommand(
self._ics, generator, param
self._lst, generator, param
)
)
self.layoutChanged.emit()

View File

@ -45,14 +45,14 @@ from View.InitialConditions.UndoCommand import (
DuplicateCommand,
)
from View.InitialConditions.Table import TableModel, ComboBoxDelegate
from View.InitialConditions.Table import InitialConditionTableModel, ComboBoxDelegate
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.InitialConditions.PlotDKP import PlotDKP
from View.InitialConditions.PlotDischarge import PlotDischarge
from View.InitialConditions.translate import table_headers, retranslate
from View.InitialConditions.translate import ICTranslate
from View.InitialConditions.DialogHeight import HeightDialog
from View.InitialConditions.DialogDischarge import DischargeDialog
@ -80,43 +80,42 @@ class InitialConditionsWindow(PamhyrWindow):
title = name,
study = study,
config = config,
trad = ICTranslate(),
parent = parent
)
self._ics = study.river.initial_conditions.get(self._reach)
self.setup_table()
self.setup_graph()
self.setup_plot()
self.setup_connections()
self.ui.setWindowTitle(self._title)
def setup_table(self):
retranslate()
table = self.find(QTableView, f"tableView")
self._table = TableModel(
river = self._study.river,
reach = self._reach,
undo = self._undo_stack,
)
table.setModel(self._table)
self._delegate_kp = ComboBoxDelegate(
reach = self._reach,
parent=self
parent = self
)
table.setItemDelegateForColumn(
list(table_headers).index("kp"),
self._delegate_kp
self._table = InitialConditionTableModel(
reach = self._reach,
table_view = table,
table_headers = self._trad.get_dict("table_headers"),
editable_headers = ["kp", "discharge", "elevation", "height"],
delegates = {"kp": self._delegate_kp},
data = self._study,
undo = self._undo_stack,
trad = self._trad
)
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_1 = MplCanvas(width=5, height=4, dpi=100)
self.canvas_1.setObjectName("canvas_1")
self.toolbar_1 = PamhyrPlotToolbar(
@ -129,7 +128,9 @@ class InitialConditionsWindow(PamhyrWindow):
self.plot_1 = PlotDKP(
canvas = self.canvas_1,
data = self._ics,
trad = self._trad,
toolbar = self.toolbar_1,
parent = self
)
self.plot_1.draw()
@ -145,7 +146,9 @@ class InitialConditionsWindow(PamhyrWindow):
self.plot_2 = PlotDischarge(
canvas = self.canvas_2,
data = self._ics,
trad = self._trad,
toolbar = self.toolbar_2,
parent = self
)
self.plot_2.draw()

View File

@ -18,23 +18,24 @@
from PyQt5.QtCore import QCoreApplication
from View.Tools.PamhyrTranslate import PamhyrTranslate
_translate = QCoreApplication.translate
table_headers = {
# "name": _translate("LateralContribution", "Name"),
"kp": _translate("LateralContribution", "KP (m)"),
# "speed": _translate("LateralContribution", "Speed (m/s)"),
"discharge": _translate("LateralContribution", "Discharge (m³/s)"),
"elevation": _translate("LateralContribution", "Elevation (m)"),
"height": _translate("LateralContribution", "Height (m)"),
# "comment": _translate("LateralContribution", "Comment"),
}
class ICTranslate(PamhyrTranslate):
def __init__(self):
super(ICTranslate, self).__init__()
def retranslate():
# table_headers["name"] = _translate("LateralContribution", "Name")
table_headers["kp"] = _translate("LateralContribution", "KP (m)")
# table_headers["speed"] = _translate("LateralContribution", "Speed (m/s)")
table_headers["discharge"] = _translate("LateralContribution", "Discharge (m³/s)")
table_headers["elevation"] = _translate("LateralContribution", "Elevation (m)")
table_headers["height"] = _translate("LateralContribution", "Height (m)")
# table_headers["comment"] = _translate("LateralContribution", "Comment")
self._dict["elevation"] = _translate("InitialCondition", "Elevation (m)")
self._dict["discharge"] = _translate("InitialCondition", "Discharge (m³/s)")
self._dict["kp"] = _translate("InitialCondition", "KP (m)")
self._sub_dict["table_headers"] = {
# "name": _translate("InitialCondition", "Name"),
"kp": _translate("InitialCondition", "KP (m)"),
# "speed": _translate("InitialCondition", "Speed (m/s)"),
"discharge": _translate("InitialCondition", "Discharge (m³/s)"),
"elevation": _translate("InitialCondition", "Elevation (m)"),
"height": _translate("InitialCondition", "Height (m)"),
# "comment": _translate("InitialCondition", "Comment"),
}

View File

@ -47,7 +47,7 @@ from View.Network.Window import NetworkWindow
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.InitialConditions.Window import InitialConditionsWindow
# from View.Stricklers.Window import StricklersWindow
# from View.Frictions.Window import FrictionsWindow
# from View.SedimentLayers.Window import SedimentLayersWindow

View File

@ -28,6 +28,8 @@ class PamhyrTranslate(object):
# Module sub dictionnary
self._sub_dict = {}
self._dict["pamhyr"] = _translate("Pamhyr", "Pamhyr2")
def __getitem__(self, index):
if index not in self._dict:
return None