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.Section.SectionList import SectionList
|
||||||
from Model.SolverParameters.SolverParametersList import SolverParametersList
|
from Model.SolverParameters.SolverParametersList import SolverParametersList
|
||||||
|
|
||||||
|
from Solver.Solvers import solver_type_list
|
||||||
|
|
||||||
class RiverNode(Node):
|
class RiverNode(Node):
|
||||||
def __init__(self, id:str, name:str,
|
def __init__(self, id:str, name:str,
|
||||||
x:float, y:float,
|
x:float, y:float,
|
||||||
|
|
@ -110,7 +112,10 @@ class River(Graph):
|
||||||
if solver in self._parameters:
|
if solver in self._parameters:
|
||||||
return self._parameters[solver]
|
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._parameters[solver] = new
|
||||||
self._status.modified()
|
self._status.modified()
|
||||||
return self._parameters[solver]
|
return self._parameters[solver]
|
||||||
|
|
|
||||||
|
|
@ -34,13 +34,25 @@ class Parameter(object):
|
||||||
|
|
||||||
self._status.modified()
|
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):
|
class SolverParametersList(object):
|
||||||
def __init__(self, status = None):
|
def __init__(self, solver_type = None, status = None):
|
||||||
super(SolverParametersList, self).__init__()
|
super(SolverParametersList, self).__init__()
|
||||||
|
|
||||||
self._status = status
|
self._status = status
|
||||||
self._parameters = []
|
self._parameters = list(
|
||||||
|
map(
|
||||||
|
lambda t: Parameter.from_tuple(t, self._status),
|
||||||
|
solver_type.default_parameters()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
def __len__(self):
|
def __len__(self):
|
||||||
return len(self._parameters)
|
return len(self._parameters)
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,6 @@ class GenericSolver(AbstractSolver):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def default_parameters(cls):
|
def default_parameters(cls):
|
||||||
lst = super(Mage, cls).default_parameters()
|
lst = super(GenericSolver, cls).default_parameters()
|
||||||
|
|
||||||
return lst
|
return lst
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ class Mage(GenericSolver):
|
||||||
lst = super(Mage, cls).default_parameters()
|
lst = super(Mage, cls).default_parameters()
|
||||||
|
|
||||||
lst += [
|
lst += [
|
||||||
("time_step", "300"),
|
("mage_time_step", "300"),
|
||||||
]
|
]
|
||||||
|
|
||||||
return lst
|
return lst
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,8 @@ from PyQt5.QtWidgets import (
|
||||||
from View.SolverParameters.UndoCommand import *
|
from View.SolverParameters.UndoCommand import *
|
||||||
from View.SolverParameters.translate import *
|
from View.SolverParameters.translate import *
|
||||||
|
|
||||||
|
from Solver.Solvers import solver_long_name, solver_type_list
|
||||||
|
|
||||||
_translate = QCoreApplication.translate
|
_translate = QCoreApplication.translate
|
||||||
|
|
||||||
class TableModel(QAbstractTableModel):
|
class TableModel(QAbstractTableModel):
|
||||||
|
|
@ -32,7 +34,9 @@ class TableModel(QAbstractTableModel):
|
||||||
def flags(self, index):
|
def flags(self, index):
|
||||||
options = Qt.ItemIsEnabled | Qt.ItemIsSelectable
|
options = Qt.ItemIsEnabled | Qt.ItemIsSelectable
|
||||||
|
|
||||||
if self._headers[self._column] == "value":
|
column = index.column()
|
||||||
|
|
||||||
|
if self._headers[column] == "value":
|
||||||
options |= Qt.ItemIsEditable
|
options |= Qt.ItemIsEditable
|
||||||
|
|
||||||
return options
|
return options
|
||||||
|
|
@ -49,9 +53,15 @@ class TableModel(QAbstractTableModel):
|
||||||
|
|
||||||
row = index.row()
|
row = index.row()
|
||||||
column = index.column()
|
column = index.column()
|
||||||
|
cname = self._headers[column]
|
||||||
|
|
||||||
if 0 <= column < len(self._headers):
|
if cname == "name":
|
||||||
return self._params.get(row)[self._headers[column]]
|
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()
|
return QVariant()
|
||||||
|
|
||||||
|
|
@ -71,7 +81,8 @@ class TableModel(QAbstractTableModel):
|
||||||
if self._headers[column] == "value":
|
if self._headers[column] == "value":
|
||||||
self._undo.push(
|
self._undo.push(
|
||||||
SetCommand(
|
SetCommand(
|
||||||
self._params, row, "value", value
|
self._params, row,
|
||||||
|
"value", value
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ class SetCommand(QUndoCommand):
|
||||||
self._new = new_value
|
self._new = new_value
|
||||||
|
|
||||||
def undo(self):
|
def undo(self):
|
||||||
self._data.get(self._index)[column] = self._old
|
self._data.get(self._index)[self._column] = self._old
|
||||||
|
|
||||||
def redo(self):
|
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,
|
QFileDialog, QTableView, QAbstractItemView,
|
||||||
QUndoStack, QShortcut, QAction, QItemDelegate,
|
QUndoStack, QShortcut, QAction, QItemDelegate,
|
||||||
QComboBox, QVBoxLayout, QHeaderView, QTabWidget,
|
QComboBox, QVBoxLayout, QHeaderView, QTabWidget,
|
||||||
|
QWidget, QGridLayout,
|
||||||
)
|
)
|
||||||
|
|
||||||
from View.SolverParameters.UndoCommand import *
|
from View.SolverParameters.UndoCommand import *
|
||||||
from View.SolverParameters.Table import TableModel
|
from View.SolverParameters.Table import TableModel
|
||||||
from View.SolverParameters.translate import *
|
from View.SolverParameters.translate import *
|
||||||
|
|
||||||
|
from Solver.Solvers import solver_long_name, solver_type_list
|
||||||
|
|
||||||
_translate = QCoreApplication.translate
|
_translate = QCoreApplication.translate
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -47,7 +50,10 @@ class SolverParametersWindow(ASubMainWindow, ListedSubWindow):
|
||||||
self.ui.setWindowTitle(title)
|
self.ui.setWindowTitle(title)
|
||||||
|
|
||||||
def setup_sc(self):
|
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.undo_sc = QShortcut(QKeySequence.Undo, self)
|
||||||
self.redo_sc = QShortcut(QKeySequence.Redo, self)
|
self.redo_sc = QShortcut(QKeySequence.Redo, self)
|
||||||
|
|
@ -56,20 +62,38 @@ class SolverParametersWindow(ASubMainWindow, ListedSubWindow):
|
||||||
|
|
||||||
def setup_table(self):
|
def setup_table(self):
|
||||||
self._table = {}
|
self._table = {}
|
||||||
|
self._tab_widget = self.find(QTabWidget, f"tabWidget")
|
||||||
|
|
||||||
for t in ["mage"]:
|
for st in solver_type_list:
|
||||||
table = self.find(QTableView, f"tableView_{t}")
|
# Create table
|
||||||
self._table[t] = TableModel(
|
widget = QWidget()
|
||||||
|
widget.setObjectName(f"tab_{st}")
|
||||||
|
|
||||||
|
grid = QGridLayout()
|
||||||
|
|
||||||
|
table = QTableView()
|
||||||
|
table.setObjectName(f"tableView_{st}")
|
||||||
|
|
||||||
|
self._table[st] = TableModel(
|
||||||
data = self._study.river,
|
data = self._study.river,
|
||||||
undo = self._undo_stack,
|
undo = self._undo_stack[st],
|
||||||
tab = t,
|
tab = st,
|
||||||
)
|
)
|
||||||
table.setModel(self._table[t])
|
|
||||||
|
|
||||||
|
table.setModel(self._table[st])
|
||||||
table.setSelectionBehavior(QAbstractItemView.SelectRows)
|
table.setSelectionBehavior(QAbstractItemView.SelectRows)
|
||||||
table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
|
table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
|
||||||
table.setAlternatingRowColors(True)
|
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):
|
def setup_connections(self):
|
||||||
self.undo_sc.activated.connect(self.undo)
|
self.undo_sc.activated.connect(self.undo)
|
||||||
self.redo_sc.activated.connect(self.redo)
|
self.redo_sc.activated.connect(self.redo)
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,6 @@ yes_no = {
|
||||||
_translate("SolverParameters", "No"): "No",
|
_translate("SolverParameters", "No"): "No",
|
||||||
_translate("SolverParameters", "Y"): "y",
|
_translate("SolverParameters", "Y"): "y",
|
||||||
_translate("SolverParameters", "N"): "n",
|
_translate("SolverParameters", "N"): "n",
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
names = {
|
names = {
|
||||||
|
|
|
||||||
|
|
@ -21,32 +21,8 @@
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QTabWidget" name="tabWidget">
|
<widget class="QTabWidget" name="tabWidget">
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>0</number>
|
<number>-1</number>
|
||||||
</property>
|
</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>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue