mirror of https://gitlab.com/pamhyr/pamhyr2
SolverParameters: It's works ! (I thinks...)
parent
81d4b1e657
commit
7aab4da816
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ class Mage(GenericSolver):
|
|||
lst = super(Mage, cls).default_parameters()
|
||||
|
||||
lst += [
|
||||
("time_step", "300"),
|
||||
("mage_time_step", "300"),
|
||||
]
|
||||
|
||||
return lst
|
||||
|
|
|
|||
|
|
@ -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
|
||||
)
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@ yes_no = {
|
|||
_translate("SolverParameters", "No"): "No",
|
||||
_translate("SolverParameters", "Y"): "y",
|
||||
_translate("SolverParameters", "N"): "n",
|
||||
|
||||
}
|
||||
|
||||
names = {
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Reference in New Issue