mirror of https://gitlab.com/pamhyr/pamhyr2
Mainwindow: Checker: Add table.
parent
3be4e6c112
commit
30170df1b1
|
|
@ -57,6 +57,7 @@ class AbstractModelChecker(object):
|
|||
def __init__(self):
|
||||
self._name = ""
|
||||
self._description = ""
|
||||
self._solver = "study"
|
||||
self._modules = Modules.NONE
|
||||
|
||||
self._status = STATUS.UNKNOWN
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@ from tools import flatten, timer
|
|||
|
||||
from PyQt5.QtCore import QCoreApplication
|
||||
|
||||
from Modules import Modules
|
||||
|
||||
from Checker.Checker import AbstractModelChecker, STATUS
|
||||
from Checker.Study import StudyGeometryChecker
|
||||
|
||||
|
|
@ -30,7 +32,7 @@ _translate = QCoreApplication.translate
|
|||
|
||||
|
||||
class MageNetworkGraphChecker(AbstractModelChecker):
|
||||
def __init__(self, connectivity=True):
|
||||
def __init__(self, connectivity=True, version="mage8"):
|
||||
super(MageNetworkGraphChecker, self).__init__()
|
||||
|
||||
self._mode_conn = connectivity
|
||||
|
|
@ -44,6 +46,7 @@ class MageNetworkGraphChecker(AbstractModelChecker):
|
|||
"Checker", f"Mage network graph {mode} checker")
|
||||
self._description = _translate(
|
||||
"Checker", "Check if the network graph is valid")
|
||||
self._solver = version
|
||||
self._modules = Modules.NETWORK
|
||||
|
||||
@timer
|
||||
|
|
@ -200,7 +203,7 @@ class MageNetworkGraphChecker(AbstractModelChecker):
|
|||
|
||||
|
||||
class MageGeometryGuideLineChecker(StudyGeometryChecker):
|
||||
def __init__(self):
|
||||
def __init__(self, version="mage8"):
|
||||
super(MageGeometryGuideLineChecker, self).__init__()
|
||||
|
||||
self._name = _translate("Checker", "Mage geometry guide line checker")
|
||||
|
|
@ -209,6 +212,7 @@ class MageGeometryGuideLineChecker(StudyGeometryChecker):
|
|||
"Check if exists geometry guide line is correctly defined \
|
||||
for each reaches of the study"
|
||||
)
|
||||
self._solver = version
|
||||
self._modules = Modules.GEOMETRY
|
||||
|
||||
self._reachs = []
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import time
|
|||
|
||||
from PyQt5.QtCore import QCoreApplication
|
||||
|
||||
from Modules import Modules
|
||||
from Checker.Checker import AbstractModelChecker, STATUS
|
||||
|
||||
_translate = QCoreApplication.translate
|
||||
|
|
|
|||
|
|
@ -36,7 +36,9 @@ class Modules(Flag):
|
|||
HYDRAULIC_STRUCTURES = auto()
|
||||
RESERVOIR = auto()
|
||||
SEDIMENT_LAYER = auto()
|
||||
RESULT = auto()
|
||||
|
||||
# Results
|
||||
RESULTS = auto()
|
||||
|
||||
# Display
|
||||
WINDOW_LIST = auto()
|
||||
|
|
@ -44,3 +46,31 @@ class Modules(Flag):
|
|||
@classmethod
|
||||
def all(cls):
|
||||
return ~cls.NONE
|
||||
|
||||
@classmethod
|
||||
def modelling(cls):
|
||||
return (
|
||||
cls.NETWORK
|
||||
| cls.GEOMETRY
|
||||
| cls.BOUNDARY_CONDITION
|
||||
| cls.LATERAL_CONTRIBUTION
|
||||
| cls.FRICTION
|
||||
| cls.INITIAL_CONDITION
|
||||
| cls.HYDRAULIC_STRUCTURES
|
||||
| cls.RESERVOIR
|
||||
| cls.SEDIMENT_LAYER
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def modelling_list(cls):
|
||||
return [
|
||||
cls.NETWORK,
|
||||
cls.GEOMETRY,
|
||||
cls.BOUNDARY_CONDITION,
|
||||
cls.LATERAL_CONTRIBUTION,
|
||||
cls.FRICTION,
|
||||
cls.INITIAL_CONDITION,
|
||||
cls.HYDRAULIC_STRUCTURES,
|
||||
cls.RESERVOIR,
|
||||
cls.SEDIMENT_LAYER,
|
||||
]
|
||||
|
|
|
|||
|
|
@ -16,6 +16,9 @@
|
|||
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import logging
|
||||
|
||||
from functools import reduce
|
||||
from tools import trace, timer
|
||||
|
||||
from PyQt5.QtCore import (
|
||||
|
|
@ -35,9 +38,11 @@ from PyQt5.QtWidgets import (
|
|||
QComboBox,
|
||||
)
|
||||
|
||||
from Modules import Modules
|
||||
from Checker.Checker import STATUS
|
||||
from View.Tools.PamhyrTable import PamhyrTableModel
|
||||
|
||||
_translate = QCoreApplication.translate
|
||||
logger = logging.getLogger()
|
||||
|
||||
|
||||
class TableModel(PamhyrTableModel):
|
||||
|
|
@ -68,3 +73,68 @@ class TableModel(PamhyrTableModel):
|
|||
return self._data[row].summary
|
||||
|
||||
return QVariant()
|
||||
|
||||
class TabTableModel(PamhyrTableModel):
|
||||
def compute_status(self, row, column):
|
||||
module = self._opt_data[row]
|
||||
solver = self._headers[column]
|
||||
|
||||
checkers = filter(
|
||||
lambda checker: checker._modules is module,
|
||||
filter(
|
||||
lambda checker: checker._solver is solver,
|
||||
self._data
|
||||
)
|
||||
)
|
||||
checkers_status = list(
|
||||
map(
|
||||
lambda c: c._status,
|
||||
checkers
|
||||
)
|
||||
)
|
||||
|
||||
status = STATUS.UNKNOWN
|
||||
if len(checkers_status) > 0:
|
||||
status = reduce(lambda acc, c: acc | c, checkers_status)
|
||||
|
||||
logger.debug(f"Checkers: {row}, {column}: {checkers_status} {status}")
|
||||
|
||||
return status, checkers_status
|
||||
|
||||
def data(self, index, role):
|
||||
row = index.row()
|
||||
column = index.column()
|
||||
|
||||
if role == Qt.ForegroundRole:
|
||||
if self._headers[column] == "type":
|
||||
return QVariant()
|
||||
|
||||
color = Qt.gray
|
||||
status, _ = self.compute_status(row, column)
|
||||
|
||||
if status is STATUS.OK:
|
||||
color = Qt.green
|
||||
elif status is STATUS.WARNING:
|
||||
color = Qt.yellow
|
||||
elif status is STATUS.ERROR:
|
||||
color = Qt.red
|
||||
|
||||
return QBrush(color)
|
||||
|
||||
if role == Qt.ItemDataRole.DisplayRole:
|
||||
if self._headers[column] == "type":
|
||||
return str(self._opt_data[row])
|
||||
|
||||
value = "UNKNOWN"
|
||||
status, _ = self.compute_status(row, column)
|
||||
|
||||
if status is STATUS.OK:
|
||||
value = "OK"
|
||||
elif status is STATUS.WARNING:
|
||||
value = "WARNING"
|
||||
elif status is STATUS.ERROR:
|
||||
value = "ERROR"
|
||||
|
||||
return value
|
||||
|
||||
return QVariant()
|
||||
|
|
|
|||
|
|
@ -193,7 +193,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
|
|||
tab_widget = self.findChild(QTabWidget, "tabWidget")
|
||||
|
||||
self._tab_widget_checker = WidgetChecker(
|
||||
study=self._study, parent=self
|
||||
study=self._study, config=self.conf, parent=self
|
||||
)
|
||||
|
||||
tab_widget.addTab(
|
||||
|
|
|
|||
|
|
@ -18,9 +18,18 @@
|
|||
|
||||
import logging
|
||||
|
||||
from tools import timer, trace
|
||||
from tools import timer, trace, flatten
|
||||
|
||||
from PyQt5.QtWidgets import (
|
||||
QTableView,
|
||||
)
|
||||
|
||||
from Modules import Modules
|
||||
from Model.Study import Study
|
||||
from Solver.Solvers import solver_type_list, solver_long_name
|
||||
|
||||
from View.Tools.PamhyrWidget import PamhyrWidget
|
||||
from View.CheckList.Table import TabTableModel
|
||||
|
||||
logger = logging.getLogger()
|
||||
|
||||
|
|
@ -28,20 +37,45 @@ logger = logging.getLogger()
|
|||
class WidgetChecker(PamhyrWidget):
|
||||
_pamhyr_ui = "MainWindowTabCheckers"
|
||||
|
||||
def __init__(self, study=None, parent=None):
|
||||
def __init__(self, study=None, config=None, parent=None):
|
||||
self._study = study
|
||||
self._config = config
|
||||
|
||||
super(WidgetChecker, self).__init__(
|
||||
parent=parent
|
||||
)
|
||||
|
||||
self._checkers = set()
|
||||
|
||||
self.setup_solver_list()
|
||||
self.setup_checker_list()
|
||||
self.setup_table()
|
||||
self.setup_list()
|
||||
|
||||
def setup_solver_list(self):
|
||||
self._solvers = list(
|
||||
map(
|
||||
lambda solver: solver_type_list[solver],
|
||||
solver_type_list
|
||||
)
|
||||
)
|
||||
|
||||
def setup_checker_list(self):
|
||||
self._checkers = flatten(
|
||||
map(
|
||||
lambda solver: solver.checkers(),
|
||||
self._solvers + [Study]
|
||||
)
|
||||
)
|
||||
|
||||
def setup_table(self):
|
||||
return
|
||||
header = {'type': "Type", **solver_long_name}
|
||||
|
||||
table = self.find(QTableView, f"tableView_checker")
|
||||
self._table = TabTableModel(
|
||||
table_view=table,
|
||||
table_headers=header,
|
||||
data=self._checkers,
|
||||
opt_data=Modules.modelling_list()
|
||||
)
|
||||
|
||||
def setup_list(self):
|
||||
return
|
||||
|
|
|
|||
Loading…
Reference in New Issue