DIF Complete

adists_num
Youcef AOUAD 2024-06-24 15:55:42 +02:00
parent de72e2e96b
commit 1e4761609d
10 changed files with 216 additions and 81 deletions

View File

@ -245,7 +245,7 @@ class D90AdisTSWindow(PamhyrWindow):
return return
logger.debug( logger.debug(
"IC: Paste: " + "D90: Paste: " +
f"header = {header}, " + f"header = {header}, " +
f"data = {data}" f"data = {data}"
) )

View File

@ -35,7 +35,7 @@ from PyQt5.QtWidgets import (
from View.Tools.PamhyrTable import PamhyrTableModel from View.Tools.PamhyrTable import PamhyrTableModel
from View.D90AdisTS.UndoCommand import ( from View.DIFAdisTS.UndoCommand import (
SetCommand, AddCommand, SetCommandSpec, SetCommand, AddCommand, SetCommandSpec,
DelCommand, DelCommand,
) )
@ -69,6 +69,8 @@ class ComboBoxDelegate(QItemDelegate):
lambda kp: str(kp), reach.reach.get_kp() lambda kp: str(kp), reach.reach.get_kp()
) )
) )
elif self._mode == "method":
val = self._data.dif_adists.lst[0].types
else: else:
val = list( val = list(
map( map(
@ -106,11 +108,11 @@ class ComboBoxDelegate(QItemDelegate):
self.commitData.emit(self.sender()) self.commitData.emit(self.sender())
class D90TableModel(PamhyrTableModel): class DIFTableModel(PamhyrTableModel):
def __init__(self, river=None, data=None, **kwargs): def __init__(self, river=None, data=None, **kwargs):
self._river = river self._river = river
super(D90TableModel, self).__init__(data=data, **kwargs) super(DIFTableModel, self).__init__(data=data, **kwargs)
self._data = data self._data = data
@ -127,8 +129,8 @@ class D90TableModel(PamhyrTableModel):
row = index.row() row = index.row()
column = index.column() column = index.column()
if self._headers[column] is "name": if self._headers[column] is "method":
n = self._lst[row].name n = self._lst[row].method
if n is None or n == "": if n is None or n == "":
return self._trad['not_associated'] return self._trad['not_associated']
return n return n
@ -147,8 +149,18 @@ class D90TableModel(PamhyrTableModel):
if n is None: if n is None:
return self._trad['not_associated'] return self._trad['not_associated']
return n return n
elif self._headers[column] is "d90": elif self._headers[column] is "dif":
n = self._lst[row].d90 n = self._lst[row].dif
if n is None:
return self._trad['not_associated']
return n
elif self._headers[column] is "b":
n = self._lst[row].b
if n is None:
return self._trad['not_associated']
return n
elif self._headers[column] is "c":
n = self._lst[row].c
if n is None: if n is None:
return self._trad['not_associated'] return self._trad['not_associated']
return n return n

View File

@ -35,7 +35,7 @@ from PyQt5.QtWidgets import (
from View.Tools.PamhyrTable import PamhyrTableModel from View.Tools.PamhyrTable import PamhyrTableModel
from View.D90AdisTS.UndoCommand import ( from View.DIFAdisTS.UndoCommand import (
SetCommand, SetCommand,
) )
@ -43,9 +43,9 @@ logger = logging.getLogger()
_translate = QCoreApplication.translate _translate = QCoreApplication.translate
class D90TableDefaultModel(PamhyrTableModel): class DIFTableDefaultModel(PamhyrTableModel):
def __init__(self, **kwargs): def __init__(self, **kwargs):
super(D90TableDefaultModel, self).__init__(**kwargs) super(DIFTableDefaultModel, self).__init__(**kwargs)
def data(self, index, role): def data(self, index, role):
if role != Qt.ItemDataRole.DisplayRole: if role != Qt.ItemDataRole.DisplayRole:
@ -54,10 +54,23 @@ class D90TableDefaultModel(PamhyrTableModel):
row = index.row() row = index.row()
column = index.column() column = index.column()
if self._headers[column] is "name": if self._headers[column] is "method":
return self._data[row].name n = self._data[row].method
elif self._headers[column] is "d90": if n is None:
n = self._data[row].d90 return self._trad['not_associated']
return n
elif self._headers[column] is "dif":
n = self._data[row].dif
if n is None:
return self._trad['not_associated']
return n
elif self._headers[column] is "b":
n = self._data[row].b
if n is None:
return self._trad['not_associated']
return n
elif self._headers[column] is "c":
n = self._data[row].c
if n is None: if n is None:
return self._trad['not_associated'] return self._trad['not_associated']
return n return n

View File

@ -23,8 +23,8 @@ from PyQt5.QtWidgets import (
QMessageBox, QUndoCommand, QUndoStack, QMessageBox, QUndoCommand, QUndoStack,
) )
from Model.D90AdisTS.D90AdisTS import D90AdisTS from Model.DIFAdisTS.DIFAdisTS import DIFAdisTS
from Model.D90AdisTS.D90AdisTSList import D90AdisTSList from Model.DIFAdisTS.DIFAdisTSList import DIFAdisTSList
class SetCommand(QUndoCommand): class SetCommand(QUndoCommand):
@ -35,28 +35,40 @@ class SetCommand(QUndoCommand):
self._row = row self._row = row
self._column = column self._column = column
if self._column == "name": if self._column == "method":
self._old = self._data[self._row].name self._old = self._data[self._row].method
elif self._column == "d90": elif self._column == "dif":
self._old = self._data[self._row].d90 self._old = self._data[self._row].dif
elif self._column == "b":
self._old = self._data[self._row].b
elif self._column == "c":
self._old = self._data[self._row].c
_type = float _type = float
if column == "name": if column == "method":
_type = str _type = str
self._new = _type(new_value) self._new = _type(new_value)
def undo(self): def undo(self):
if self._column == "name": if self._column == "method":
self._data[self._row].name = self._old self._data[self._row].method = self._old
elif self._column == "d90": elif self._column == "dif":
self._data[self._row].d90 = self._old self._data[self._row].dif = self._old
elif self._column == "b":
self._data[self._row].b = self._old
elif self._column == "c":
self._data[self._row].c = self._old
def redo(self): def redo(self):
if self._column == "name": if self._column == "method":
self._data[self._row].name = self._new self._data[self._row].method = self._new
elif self._column == "d90": elif self._column == "dif":
self._data[self._row].d90 = self._new self._data[self._row].dif = self._new
elif self._column == "b":
self._data[self._row].b = self._new
elif self._column == "c":
self._data[self._row].c = self._new
class SetCommandSpec(QUndoCommand): class SetCommandSpec(QUndoCommand):
def __init__(self, data, row, column, new_value): def __init__(self, data, row, column, new_value):
@ -66,19 +78,23 @@ class SetCommandSpec(QUndoCommand):
self._row = row self._row = row
self._column = column self._column = column
if self._column == "name": if self._column == "method":
self._old = self._data[self._row].name self._old = self._data[self._row].method
elif self._column == "reach": elif self._column == "reach":
self._old = self._data[self._row].reach self._old = self._data[self._row].reach
elif self._column == "start_kp": elif self._column == "start_kp":
self._old = self._data[self._row].start_kp self._old = self._data[self._row].start_kp
elif self._column == "end_kp": elif self._column == "end_kp":
self._old = self._data[self._row].end_kp self._old = self._data[self._row].end_kp
elif self._column == "d90": elif self._column == "dif":
self._old = self._data[self._row].d90 self._old = self._data[self._row].dif
elif self._column == "b":
self._old = self._data[self._row].b
elif self._column == "c":
self._old = self._data[self._row].c
_type = float _type = float
if column == "name": if column == "method":
_type = str _type = str
elif column == "reach": elif column == "reach":
_type = int _type = int
@ -86,28 +102,36 @@ class SetCommandSpec(QUndoCommand):
self._new = _type(new_value) self._new = _type(new_value)
def undo(self): def undo(self):
if self._column == "name": if self._column == "method":
self._data[self._row].name = self._old self._data[self._row].method = self._old
elif self._column == "reach": elif self._column == "reach":
self._data[self._row].reach = self._old self._data[self._row].reach = self._old
elif self._column == "start_kp": elif self._column == "start_kp":
self._data[self._row].start_kp = self._old self._data[self._row].start_kp = self._old
elif self._column == "end_kp": elif self._column == "end_kp":
self._data[self._row].end_kp = self._old self._data[self._row].end_kp = self._old
elif self._column == "d90": elif self._column == "dif":
self._data[self._row].d90 = self._old self._data[self._row].dif = self._old
elif self._column == "b":
self._data[self._row].b = self._old
elif self._column == "c":
self._data[self._row].c = self._old
def redo(self): def redo(self):
if self._column == "name": if self._column == "method":
self._data[self._row].name = self._new self._data[self._row].method = self._new
elif self._column == "reach": elif self._column == "reach":
self._data[self._row].reach = self._new self._data[self._row].reach = self._new
elif self._column == "start_kp": elif self._column == "start_kp":
self._data[self._row].start_kp = self._new self._data[self._row].start_kp = self._new
elif self._column == "end_kp": elif self._column == "end_kp":
self._data[self._row].end_kp = self._new self._data[self._row].end_kp = self._new
elif self._column == "d90": elif self._column == "dif":
self._data[self._row].d90 = self._new self._data[self._row].dif = self._new
elif self._column == "b":
self._data[self._row].b = self._new
elif self._column == "c":
self._data[self._row].c = self._new
class AddCommand(QUndoCommand): class AddCommand(QUndoCommand):
def __init__(self, data, ics_spec, index): def __init__(self, data, ics_spec, index):

View File

@ -43,19 +43,15 @@ from PyQt5.QtWidgets import (
from Modules import Modules from Modules import Modules
from View.InitialConditionsAdisTS.UndoCommand import ( from View.DIFAdisTS.TableDefault import (
SetCommand, DIFTableDefaultModel,
) )
from View.D90AdisTS.TableDefault import ( from View.DIFAdisTS.Table import (
D90TableDefaultModel, DIFTableModel, ComboBoxDelegate,
) )
from View.D90AdisTS.Table import ( from View.DIFAdisTS.translate import DIFAdisTSTranslate
D90TableModel, ComboBoxDelegate,
)
from View.D90AdisTS.translate import D90AdisTSTranslate
from Solver.Mage import Mage8 from Solver.Mage import Mage8
@ -64,14 +60,14 @@ _translate = QCoreApplication.translate
logger = logging.getLogger() logger = logging.getLogger()
class D90AdisTSWindow(PamhyrWindow): class DIFAdisTSWindow(PamhyrWindow):
_pamhyr_ui = "D90AdisTS" _pamhyr_ui = "DIFAdisTS"
_pamhyr_name = "D90 AdisTS" _pamhyr_name = "DIF AdisTS"
def __init__(self, data=None, study=None, config=None, parent=None): def __init__(self, data=None, study=None, config=None, parent=None):
self._data = [] self._data = []
self._data.append(data) self._data.append(data)
trad = D90AdisTSTranslate() trad = DIFAdisTSTranslate()
name = ( name = (
trad[self._pamhyr_name] + trad[self._pamhyr_name] +
@ -79,7 +75,7 @@ class D90AdisTSWindow(PamhyrWindow):
" - " + self._data[0].name " - " + self._data[0].name
) )
super(D90AdisTSWindow, self).__init__( super(DIFAdisTSWindow, self).__init__(
title=name, title=name,
study=study, study=study,
config=config, config=config,
@ -89,7 +85,7 @@ class D90AdisTSWindow(PamhyrWindow):
self._hash_data.append(data) self._hash_data.append(data)
self._d90_adists_lst = study.river.d90_adists self._dif_adists_lst = study.river.dif_adists
self.setup_table() self.setup_table()
@ -101,11 +97,21 @@ class D90AdisTSWindow(PamhyrWindow):
table_default = self.find(QTableView, f"tableView") table_default = self.find(QTableView, f"tableView")
self._table = D90TableDefaultModel( self._delegate_method = ComboBoxDelegate(
trad=self._trad,
data=self._study.river,
ic_spec_lst=self._data[0]._data,
parent=self,
mode="method"
)
self._table = DIFTableDefaultModel(
table_view=table_default, table_view=table_default,
table_headers=self._trad.get_dict("table_headers"), table_headers=self._trad.get_dict("table_headers"),
editable_headers=["name", "d90"], editable_headers=["method", "dif", "b", "c"],
delegates={}, delegates={
"method": self._delegate_method
},
data=self._data, data=self._data,
undo=self._undo_stack, undo=self._undo_stack,
trad=self._trad trad=self._trad
@ -148,11 +154,12 @@ class D90AdisTSWindow(PamhyrWindow):
mode="kp" mode="kp"
) )
self._table_spec = D90TableModel( self._table_spec = DIFTableModel(
table_view=self.table_spec, table_view=self.table_spec,
table_headers=self._trad.get_dict("table_headers_spec"), table_headers=self._trad.get_dict("table_headers_spec"),
editable_headers=["name", "reach", "start_kp", "end_kp", "d90"], editable_headers=["method", "reach", "start_kp", "end_kp", "dif", "b", "c"],
delegates={ delegates={
"method": self._delegate_method,
"reach": self._delegate_reach, "reach": self._delegate_reach,
"start_kp": self._delegate_kp, "start_kp": self._delegate_kp,
"end_kp": self._delegate_kp "end_kp": self._delegate_kp
@ -245,7 +252,7 @@ class D90AdisTSWindow(PamhyrWindow):
return return
logger.debug( logger.debug(
"IC: Paste: " + "DIF: Paste: " +
f"header = {header}, " + f"header = {header}, " +
f"data = {data}" f"data = {data}"
) )

View File

@ -23,24 +23,28 @@ from View.Translate import MainTranslate
_translate = QCoreApplication.translate _translate = QCoreApplication.translate
class D90AdisTSTranslate(MainTranslate): class DIFAdisTSTranslate(MainTranslate):
def __init__(self): def __init__(self):
super(D90AdisTSTranslate, self).__init__() super(DIFAdisTSTranslate, self).__init__()
self._dict["D90 AdisTS"] = _translate( self._dict["DIF AdisTS"] = _translate(
"D90AdisTS", "D90 AdisTS") "DIFAdisTS", "DIF AdisTS")
self._dict["kp"] = self._dict["unit_kp"] self._dict["kp"] = self._dict["unit_kp"]
self._sub_dict["table_headers"] = { self._sub_dict["table_headers"] = {
"name": self._dict["name"], "method": self._dict["method"],
"d90": _translate("Unit", "D90"), "dif": _translate("Unit", "DIF"),
"b": _translate("Unit", "Coeff b"),
"c": _translate("Unit", "Coeff c"),
} }
self._sub_dict["table_headers_spec"] = { self._sub_dict["table_headers_spec"] = {
"name": self._dict["name"], "method": self._dict["method"],
"reach": self._dict["reach"], "reach": self._dict["reach"],
"start_kp": _translate("Unit", "Start_KP (m)"), "start_kp": _translate("Unit", "Start_KP (m)"),
"end_kp": _translate("Unit", "End_KP (m)"), "end_kp": _translate("Unit", "End_KP (m)"),
"d90": _translate("Unit", "D90"), "dif": _translate("Unit", "DIF"),
"b": _translate("Unit", "Coeff b"),
"c": _translate("Unit", "Coeff c"),
} }

View File

@ -78,7 +78,7 @@ from View.Debug.Window import ReplWindow
from View.OutputKpAdisTS.Window import OutputKpAdisTSWindow from View.OutputKpAdisTS.Window import OutputKpAdisTSWindow
from View.Pollutants.Window import PollutantsWindow from View.Pollutants.Window import PollutantsWindow
from View.D90AdisTS.Window import D90AdisTSWindow from View.D90AdisTS.Window import D90AdisTSWindow
from View.DIFAdisTS.Window import D90AdisTSWindow from View.DIFAdisTS.Window import DIFAdisTSWindow
# Optional internal display of documentation for make the application # Optional internal display of documentation for make the application
# package lighter... # package lighter...
@ -891,23 +891,23 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
D90AdisTS.show() D90AdisTS.show()
def open_dif(self): def open_dif(self):
if len(self._study.river.d90_adists.lst) != 0: if len(self._study.river.dif_adists.lst) != 0:
d90_default = self._study.river.d90_adists.lst[0] dif_default = self._study.river.dif_adists.lst[0]
else: else:
d90_default = self._study.river.d90_adists.new(0) dif_default = self._study.river.dif_adists.new(0)
if self.sub_window_exists( if self.sub_window_exists(
D90AdisTSWindow, DIFAdisTSWindow,
data=[self._study, None, d90_default] data=[self._study, None, dif_default]
): ):
return return
D90AdisTS = D90AdisTSWindow( DIFAdisTS = DIFAdisTSWindow(
study=self._study, study=self._study,
parent=self, parent=self,
data=d90_default data=dif_default
) )
D90AdisTS.show() DIFAdisTS.show()
def open_pollutants(self): def open_pollutants(self):
if self.sub_window_exists( if self.sub_window_exists(

View File

@ -48,6 +48,8 @@ class CommonWordTranslate(PamhyrTranslate):
"CommonWord", "Not associated" "CommonWord", "Not associated"
) )
self._dict["method"] = _translate("CommonWord", "Method")
class UnitTranslate(CommonWordTranslate): class UnitTranslate(CommonWordTranslate):
def __init__(self): def __init__(self):

73
src/View/ui/DIFAdisTS.ui Normal file
View File

@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1024</width>
<height>576</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QSplitter" name="splitter_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<widget class="QWidget" name="layoutWidget">
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<layout class="QHBoxLayout" name="horizontalLayout"/>
</item>
<item>
<widget class="QTableView" name="tableView"/>
</item>
</layout>
</widget>
<widget class="QSplitter" name="splitter">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<widget class="QWidget" name="verticalLayoutWidget">
<layout class="QVBoxLayout" name="verticalLayout_1"/>
</widget>
<widget class="QWidget" name="verticalLayoutWidget_2">
<layout class="QVBoxLayout" name="verticalLayout_2"/>
</widget>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1024</width>
<height>22</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
<widget class="QToolBar" name="toolBar">
<property name="windowTitle">
<string>toolBar</string>
</property>
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
</widget>
<resources/>
<connections/>
</ui>