SolverParameters: It's works ! (I thinks...)

mesh
Pierre-Antoine Rouby 2023-06-13 10:28:18 +02:00
parent 81d4b1e657
commit 7aab4da816
9 changed files with 71 additions and 44 deletions

View File

@ -14,6 +14,8 @@ from Model.Stricklers.StricklersList import StricklersList
from Model.Section.SectionList import SectionList
from Model.SolverParameters.SolverParametersList import SolverParametersList
from Solver.Solvers import solver_type_list
class RiverNode(Node):
def __init__(self, id:str, name:str,
x:float, y:float,
@ -110,7 +112,10 @@ class River(Graph):
if solver in self._parameters:
return self._parameters[solver]
new = SolverParametersList(status = self._status)
new = SolverParametersList(
solver_type = solver_type_list[solver],
status = self._status
)
self._parameters[solver] = new
self._status.modified()
return self._parameters[solver]

View File

@ -34,13 +34,25 @@ class Parameter(object):
self._status.modified()
@classmethod
def from_tuple(cls, data, status):
new = cls(status = status)
new["name"] = data[0]
new["value"] = data[1]
return new
class SolverParametersList(object):
def __init__(self, status = None):
def __init__(self, solver_type = None, status = None):
super(SolverParametersList, self).__init__()
self._status = status
self._parameters = []
self._parameters = list(
map(
lambda t: Parameter.from_tuple(t, self._status),
solver_type.default_parameters()
)
)
def __len__(self):
return len(self._parameters)

View File

@ -12,6 +12,6 @@ class GenericSolver(AbstractSolver):
@classmethod
def default_parameters(cls):
lst = super(Mage, cls).default_parameters()
lst = super(GenericSolver, cls).default_parameters()
return lst

View File

@ -17,7 +17,7 @@ class Mage(GenericSolver):
lst = super(Mage, cls).default_parameters()
lst += [
("time_step", "300"),
("mage_time_step", "300"),
]
return lst

View File

@ -18,6 +18,8 @@ from PyQt5.QtWidgets import (
from View.SolverParameters.UndoCommand import *
from View.SolverParameters.translate import *
from Solver.Solvers import solver_long_name, solver_type_list
_translate = QCoreApplication.translate
class TableModel(QAbstractTableModel):
@ -32,7 +34,9 @@ class TableModel(QAbstractTableModel):
def flags(self, index):
options = Qt.ItemIsEnabled | Qt.ItemIsSelectable
if self._headers[self._column] == "value":
column = index.column()
if self._headers[column] == "value":
options |= Qt.ItemIsEditable
return options
@ -49,9 +53,15 @@ class TableModel(QAbstractTableModel):
row = index.row()
column = index.column()
cname = self._headers[column]
if 0 <= column < len(self._headers):
return self._params.get(row)[self._headers[column]]
if cname == "name":
value = self._params.get(row)[cname]
if value in names:
value = names[value]
return value
elif cname == "value":
return self._params.get(row)[cname]
return QVariant()
@ -71,7 +81,8 @@ class TableModel(QAbstractTableModel):
if self._headers[column] == "value":
self._undo.push(
SetCommand(
self._params, row, "value", value
self._params, row,
"value", value
)
)

View File

@ -20,7 +20,7 @@ class SetCommand(QUndoCommand):
self._new = new_value
def undo(self):
self._data.get(self._index)[column] = self._old
self._data.get(self._index)[self._column] = self._old
def redo(self):
self._data.get(self._index)[column] = self._new
self._data.get(self._index)[self._column] = self._new

View File

@ -20,12 +20,15 @@ from PyQt5.QtWidgets import (
QFileDialog, QTableView, QAbstractItemView,
QUndoStack, QShortcut, QAction, QItemDelegate,
QComboBox, QVBoxLayout, QHeaderView, QTabWidget,
QWidget, QGridLayout,
)
from View.SolverParameters.UndoCommand import *
from View.SolverParameters.Table import TableModel
from View.SolverParameters.translate import *
from Solver.Solvers import solver_long_name, solver_type_list
_translate = QCoreApplication.translate
@ -47,7 +50,10 @@ class SolverParametersWindow(ASubMainWindow, ListedSubWindow):
self.ui.setWindowTitle(title)
def setup_sc(self):
self._undo_stack = QUndoStack()
self._undo_stack = {}
for st in solver_type_list:
self._undo_stack[st] = QUndoStack()
self.undo_sc = QShortcut(QKeySequence.Undo, self)
self.redo_sc = QShortcut(QKeySequence.Redo, self)
@ -56,20 +62,38 @@ class SolverParametersWindow(ASubMainWindow, ListedSubWindow):
def setup_table(self):
self._table = {}
self._tab_widget = self.find(QTabWidget, f"tabWidget")
for t in ["mage"]:
table = self.find(QTableView, f"tableView_{t}")
self._table[t] = TableModel(
for st in solver_type_list:
# Create table
widget = QWidget()
widget.setObjectName(f"tab_{st}")
grid = QGridLayout()
table = QTableView()
table.setObjectName(f"tableView_{st}")
self._table[st] = TableModel(
data = self._study.river,
undo = self._undo_stack,
tab = t,
undo = self._undo_stack[st],
tab = st,
)
table.setModel(self._table[t])
table.setModel(self._table[st])
table.setSelectionBehavior(QAbstractItemView.SelectRows)
table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
table.setAlternatingRowColors(True)
# Add table to tab
grid.addWidget(table, 0, 0)
widget.setLayout(grid)
table.setParent(widget)
# Create tab
self._tab_widget.addTab(widget, f"{solver_long_name[st]}")
def setup_connections(self):
self.undo_sc.activated.connect(self.undo)
self.redo_sc.activated.connect(self.redo)

View File

@ -20,7 +20,6 @@ yes_no = {
_translate("SolverParameters", "No"): "No",
_translate("SolverParameters", "Y"): "y",
_translate("SolverParameters", "N"): "n",
}
names = {

View File

@ -21,32 +21,8 @@
<item row="0" column="0">
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
<number>-1</number>
</property>
<widget class="QWidget" name="tab_mage">
<attribute name="title">
<string>Mage</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QTableView" name="tableView_mage"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_rubarbe">
<attribute name="title">
<string>Rubarbe</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Not implemented yet !</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>