refactoring: refacto frictions & stricklers.

setup.py
Pierre-Antoine Rouby 2023-10-04 14:34:07 +02:00
parent b430cbb62b
commit 4ce597a2a0
7 changed files with 72 additions and 104 deletions

View File

@ -17,7 +17,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from tools import timer, flatten from tools import timer, flatten
from View.Plot.APlot import APlot from View.Tools.PamhyrPlot import PamhyrPlot
from PyQt5.QtCore import ( from PyQt5.QtCore import (
QCoreApplication QCoreApplication
@ -25,14 +25,7 @@ from PyQt5.QtCore import (
_translate = QCoreApplication.translate _translate = QCoreApplication.translate
class PlotStricklers(APlot): class PlotStricklers(PamhyrPlot):
def __init__(self, canvas=None, data=None, toolbar=None):
super(PlotStricklers, self).__init__(
canvas=canvas,
data=data,
toolbar=toolbar
)
def draw_frictions(self, frictions, color="r"): def draw_frictions(self, frictions, color="r"):
lst = frictions lst = frictions
lst.sort(key = lambda s: s.begin_kp) lst.sort(key = lambda s: s.begin_kp)

View File

@ -41,6 +41,8 @@ from View.Frictions.UndoCommand import (
MoveCommand, PasteCommand, DuplicateCommand, MoveCommand, PasteCommand, DuplicateCommand,
) )
from View.Tools.PamhyrTable import PamhyrTableModel
from View.Frictions.translate import * from View.Frictions.translate import *
logger = logging.getLogger() logger = logging.getLogger()
@ -93,26 +95,10 @@ class ComboBoxDelegate(QItemDelegate):
self.commitData.emit(self.sender()) self.commitData.emit(self.sender())
class TableModel(QAbstractTableModel): class TableModel(PamhyrTableModel):
def __init__(self, data=None, study=None, undo=None): def _setup_lst(self):
super(QAbstractTableModel, self).__init__() self._lst = self._data.frictions
self._headers = list(table_headers.keys()) self._study = self._opt_data
self._data = data
self._study = study
self._undo = undo
self._frictions = self._data.frictions
def flags(self, index):
options = Qt.ItemIsEnabled | Qt.ItemIsSelectable
options |= Qt.ItemIsEditable
return options
def rowCount(self, parent):
return len(self._frictions)
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:
@ -122,30 +108,24 @@ class TableModel(QAbstractTableModel):
column = index.column() column = index.column()
if self._headers[column] == "name": if self._headers[column] == "name":
return self._frictions.get(row).name return self._lst.get(row).name
elif self._headers[column] == "begin_kp": elif self._headers[column] == "begin_kp":
return self._frictions.get(row).begin_kp return self._lst.get(row).begin_kp
elif self._headers[column] == "end_kp": elif self._headers[column] == "end_kp":
return self._frictions.get(row).end_kp return self._lst.get(row).end_kp
elif self._headers[column] == "begin_strickler": elif self._headers[column] == "begin_strickler":
value = self._frictions.get(row).begin_strickler value = self._lst.get(row).begin_strickler
if value == None: if value == None:
return _translate("Frictions", "Not defined") return _translate("Frictions", "Not defined")
return str(value) return str(value)
elif self._headers[column] == "end_strickler": elif self._headers[column] == "end_strickler":
value = self._frictions.get(row).end_strickler value = self._lst.get(row).end_strickler
if value == None: if value == None:
return _translate("Frictions", "Not defined") return _translate("Frictions", "Not defined")
return str(value) return str(value)
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
@ -157,31 +137,31 @@ class TableModel(QAbstractTableModel):
if self._headers[column] == "name": if self._headers[column] == "name":
self._undo.push( self._undo.push(
SetNameCommand( SetNameCommand(
self._frictions, row, value self._lst, row, value
) )
) )
elif self._headers[column] == "begin_kp": elif self._headers[column] == "begin_kp":
self._undo.push( self._undo.push(
SetBeginCommand( SetBeginCommand(
self._frictions, row, value self._lst, row, value
) )
) )
elif self._headers[column] == "end_kp": elif self._headers[column] == "end_kp":
self._undo.push( self._undo.push(
SetEndCommand( SetEndCommand(
self._frictions, row, value self._lst, row, value
) )
) )
elif self._headers[column] == "begin_strickler": elif self._headers[column] == "begin_strickler":
self._undo.push( self._undo.push(
SetBeginStricklerCommand( SetBeginStricklerCommand(
self._frictions, row, self._study.river.strickler(value) self._lst, row, self._study.river.strickler(value)
) )
) )
elif self._headers[column] == "end_strickler": elif self._headers[column] == "end_strickler":
self._undo.push( self._undo.push(
SetEndStricklerCommand( SetEndStricklerCommand(
self._frictions, row, self._study.river.strickler(value) self._lst, row, self._study.river.strickler(value)
) )
) )
except Exception as e: except Exception as e:
@ -196,7 +176,7 @@ class TableModel(QAbstractTableModel):
self._undo.push( self._undo.push(
AddCommand( AddCommand(
self._frictions, row, self._data self._lst, row, self._data
) )
) )
@ -208,7 +188,7 @@ class TableModel(QAbstractTableModel):
self._undo.push( self._undo.push(
DelCommand( DelCommand(
self._frictions, rows self._lst, rows
) )
) )
@ -220,7 +200,7 @@ class TableModel(QAbstractTableModel):
self._undo.push( self._undo.push(
SortCommand( SortCommand(
self._frictions, False self._lst, False
) )
) )
@ -237,7 +217,7 @@ class TableModel(QAbstractTableModel):
self._undo_stack.push( self._undo_stack.push(
MoveCommand( MoveCommand(
self._frictions, "up", row self._lst, "up", row
) )
) )
@ -245,7 +225,7 @@ class TableModel(QAbstractTableModel):
self.layoutChanged.emit() self.layoutChanged.emit()
def move_down(self, index, parent=QModelIndex()): def move_down(self, index, parent=QModelIndex()):
if row > len(self._frictions): if row > len(self._lst):
return return
target = row target = row
@ -254,7 +234,7 @@ class TableModel(QAbstractTableModel):
self._undo_stack.push( self._undo_stack.push(
MoveCommand( MoveCommand(
self._frictions, "down", row self._lst, "down", row
) )
) )

View File

@ -47,15 +47,13 @@ from View.Frictions.Table import (
TableModel, ComboBoxDelegate TableModel, ComboBoxDelegate
) )
from View.Plot.MplCanvas import MplCanvas from View.Tools.Plot.PamhyrCanvas import MplCanvas
from View.Geometry.PlotKPZ import PlotKPZ from View.Geometry.PlotKPZ import PlotKPZ
from View.Frictions.PlotStricklers import PlotStricklers from View.Frictions.PlotStricklers import PlotStricklers
from View.Frictions.translate import table_headers, retranslate from View.Frictions.translate import FrictionsTranslate
from View.Stricklers.Window import StricklersWindow from View.Stricklers.Window import StricklersWindow
_translate = QCoreApplication.translate
logger = logging.getLogger() logger = logging.getLogger()
class FrictionsWindow(PamhyrWindow): class FrictionsWindow(PamhyrWindow):
@ -80,6 +78,7 @@ class FrictionsWindow(PamhyrWindow):
title = name, title = name,
study = study, study = study,
config = config, config = config,
trad = FrictionsTranslate(),
parent = parent parent = parent
) )
@ -89,17 +88,8 @@ class FrictionsWindow(PamhyrWindow):
def setup_table(self): def setup_table(self):
retranslate()
self._table = {} self._table = {}
table = self.find(QTableView, f"tableView")
self._table = TableModel(
data = self._reach,
study = self._study,
undo = self._undo_stack,
)
table.setModel(self._table)
self._delegate_stricklers = ComboBoxDelegate( self._delegate_stricklers = ComboBoxDelegate(
data = self._reach, data = self._reach,
study = self._study, study = self._study,
@ -107,13 +97,23 @@ class FrictionsWindow(PamhyrWindow):
parent=self parent=self
) )
table.setItemDelegateForColumn( table = self.find(QTableView, f"tableView")
3, self._delegate_stricklers self._table = TableModel(
table_view = table,
table_headers = self._trad.get_dict("table_headers"),
editable_headers = [
"name", "begin_kp", "end_kp",
"begin_strickler", "end_strickler"
],
delegates = {
"begin_strickler": self._delegate_stricklers,
"end_strickler": self._delegate_stricklers,
},
data = self._reach,
undo = self._undo_stack,
opt_data = self._study
) )
table.setItemDelegateForColumn( table.setModel(self._table)
4, self._delegate_stricklers
)
table.setSelectionBehavior(QAbstractItemView.SelectRows) table.setSelectionBehavior(QAbstractItemView.SelectRows)
table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
table.setAlternatingRowColors(True) table.setAlternatingRowColors(True)

View File

@ -18,21 +18,19 @@
from PyQt5.QtCore import QCoreApplication from PyQt5.QtCore import QCoreApplication
from View.Tools.PamhyrTranslate import PamhyrTranslate
_translate = QCoreApplication.translate _translate = QCoreApplication.translate
table_headers = { class FrictionsTranslate(PamhyrTranslate):
"name": _translate("Frictions", "Name"), def __init__(self):
# "edge": _translate("Frictions", "Reach"), super(FrictionsTranslate, self).__init__()
"begin_kp": _translate("Frictions", "Begin kp (m)"),
"end_kp": _translate("Frictions", "End kp (m)"),
"begin_strickler": _translate("Frictions", "Begin strickler"),
"end_strickler": _translate("Frictions", "End strickler"),
}
def retranslate(): self._sub_dict["table_headers"] = {
table_headers["name"] = _translate("Frictions", "Name") "name": _translate("Frictions", "Name"),
# table_headers["edge"] = _translate("Frictions", "Reach") # "edge": _translate("Frictions", "Reach"),
table_headers["begin_kp"] = _translate("Frictions", "Begin kp (m)") "begin_kp": _translate("Frictions", "Begin kp (m)"),
table_headers["end_kp"] = _translate("Frictions", "End kp (m)") "end_kp": _translate("Frictions", "End kp (m)"),
table_headers["begin_strickler"] = _translate("Frictions", "Begin strickler") "begin_strickler": _translate("Frictions", "Begin strickler"),
table_headers["end_strickler"] = _translate("Frictions", "End strickler") "end_strickler": _translate("Frictions", "End strickler"),
}

View File

@ -48,8 +48,8 @@ from View.Geometry.Window import GeometryWindow
from View.BoundaryCondition.Window import BoundaryConditionWindow from View.BoundaryCondition.Window import BoundaryConditionWindow
from View.LateralContribution.Window import LateralContributionWindow 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.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

View File

@ -43,7 +43,7 @@ from Model.Stricklers.Stricklers import Stricklers
from View.Stricklers.UndoCommand import PasteCommand from View.Stricklers.UndoCommand import PasteCommand
from View.Stricklers.Table import TableModel from View.Stricklers.Table import TableModel
from View.Stricklers.translate import table_headers, retranslate from View.Stricklers.translate import StricklersTranslate
_translate = QCoreApplication.translate _translate = QCoreApplication.translate
@ -60,6 +60,7 @@ class StricklersWindow(PamhyrWindow):
title = name, title = name,
study = study, study = study,
config = config, config = config,
trad = StricklersTranslate(),
parent = parent parent = parent
) )
@ -67,7 +68,6 @@ class StricklersWindow(PamhyrWindow):
self.setup_connections() self.setup_connections()
def setup_table(self): def setup_table(self):
retranslate()
self._table = {} self._table = {}
for t in ["app", "study"]: for t in ["app", "study"]:
@ -79,7 +79,7 @@ class StricklersWindow(PamhyrWindow):
self._table[t] = TableModel( self._table[t] = TableModel(
table_view = table, table_view = table,
table_headers = table_headers, table_headers = self._trad.get_dict("table_headers"),
editable_headers = ["name", "comment", "minor", "medium"], editable_headers = ["name", "comment", "minor", "medium"],
data = data, data = data,
undo = self._undo_stack, undo = self._undo_stack,

View File

@ -18,21 +18,18 @@
from PyQt5.QtCore import QCoreApplication from PyQt5.QtCore import QCoreApplication
from Model.LateralContribution.LateralContributionTypes import ( from View.Tools.PamhyrTranslate import PamhyrTranslate
NotDefined, LateralContrib, Rain, Evaporation,
)
_translate = QCoreApplication.translate _translate = QCoreApplication.translate
table_headers = {
"name": _translate("LateralContribution", "Name"),
"minor": _translate("LateralContribution", "Minor bed"),
"medium": _translate("LateralContribution", "Medium bed"),
"comment": _translate("LateralContribution", "Comment"),
}
def retranslate(): class StricklersTranslate(PamhyrTranslate):
table_headers["name"] = _translate("LateralContribution", "Name") def __init__(self):
table_headers["minor"] = _translate("LateralContribution", "Minor bed") super(StricklersTranslate, self).__init__()
table_headers["medium"] = _translate("LateralContribution", "Medium bed")
table_headers["comment"] = _translate("LateralContribution", "Comment") self._sub_dict["table_headers"] = {
"name": _translate("LateralContribution", "Name"),
"minor": _translate("LateralContribution", "Minor bed"),
"medium": _translate("LateralContribution", "Medium bed"),
"comment": _translate("LateralContribution", "Comment"),
}