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):
|
def __init__(self):
|
||||||
self._name = ""
|
self._name = ""
|
||||||
self._description = ""
|
self._description = ""
|
||||||
|
self._solver = "study"
|
||||||
self._modules = Modules.NONE
|
self._modules = Modules.NONE
|
||||||
|
|
||||||
self._status = STATUS.UNKNOWN
|
self._status = STATUS.UNKNOWN
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,8 @@ from tools import flatten, timer
|
||||||
|
|
||||||
from PyQt5.QtCore import QCoreApplication
|
from PyQt5.QtCore import QCoreApplication
|
||||||
|
|
||||||
|
from Modules import Modules
|
||||||
|
|
||||||
from Checker.Checker import AbstractModelChecker, STATUS
|
from Checker.Checker import AbstractModelChecker, STATUS
|
||||||
from Checker.Study import StudyGeometryChecker
|
from Checker.Study import StudyGeometryChecker
|
||||||
|
|
||||||
|
|
@ -30,7 +32,7 @@ _translate = QCoreApplication.translate
|
||||||
|
|
||||||
|
|
||||||
class MageNetworkGraphChecker(AbstractModelChecker):
|
class MageNetworkGraphChecker(AbstractModelChecker):
|
||||||
def __init__(self, connectivity=True):
|
def __init__(self, connectivity=True, version="mage8"):
|
||||||
super(MageNetworkGraphChecker, self).__init__()
|
super(MageNetworkGraphChecker, self).__init__()
|
||||||
|
|
||||||
self._mode_conn = connectivity
|
self._mode_conn = connectivity
|
||||||
|
|
@ -44,6 +46,7 @@ class MageNetworkGraphChecker(AbstractModelChecker):
|
||||||
"Checker", f"Mage network graph {mode} checker")
|
"Checker", f"Mage network graph {mode} checker")
|
||||||
self._description = _translate(
|
self._description = _translate(
|
||||||
"Checker", "Check if the network graph is valid")
|
"Checker", "Check if the network graph is valid")
|
||||||
|
self._solver = version
|
||||||
self._modules = Modules.NETWORK
|
self._modules = Modules.NETWORK
|
||||||
|
|
||||||
@timer
|
@timer
|
||||||
|
|
@ -200,7 +203,7 @@ class MageNetworkGraphChecker(AbstractModelChecker):
|
||||||
|
|
||||||
|
|
||||||
class MageGeometryGuideLineChecker(StudyGeometryChecker):
|
class MageGeometryGuideLineChecker(StudyGeometryChecker):
|
||||||
def __init__(self):
|
def __init__(self, version="mage8"):
|
||||||
super(MageGeometryGuideLineChecker, self).__init__()
|
super(MageGeometryGuideLineChecker, self).__init__()
|
||||||
|
|
||||||
self._name = _translate("Checker", "Mage geometry guide line checker")
|
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 \
|
"Check if exists geometry guide line is correctly defined \
|
||||||
for each reaches of the study"
|
for each reaches of the study"
|
||||||
)
|
)
|
||||||
|
self._solver = version
|
||||||
self._modules = Modules.GEOMETRY
|
self._modules = Modules.GEOMETRY
|
||||||
|
|
||||||
self._reachs = []
|
self._reachs = []
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ import time
|
||||||
|
|
||||||
from PyQt5.QtCore import QCoreApplication
|
from PyQt5.QtCore import QCoreApplication
|
||||||
|
|
||||||
|
from Modules import Modules
|
||||||
from Checker.Checker import AbstractModelChecker, STATUS
|
from Checker.Checker import AbstractModelChecker, STATUS
|
||||||
|
|
||||||
_translate = QCoreApplication.translate
|
_translate = QCoreApplication.translate
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,9 @@ class Modules(Flag):
|
||||||
HYDRAULIC_STRUCTURES = auto()
|
HYDRAULIC_STRUCTURES = auto()
|
||||||
RESERVOIR = auto()
|
RESERVOIR = auto()
|
||||||
SEDIMENT_LAYER = auto()
|
SEDIMENT_LAYER = auto()
|
||||||
RESULT = auto()
|
|
||||||
|
# Results
|
||||||
|
RESULTS = auto()
|
||||||
|
|
||||||
# Display
|
# Display
|
||||||
WINDOW_LIST = auto()
|
WINDOW_LIST = auto()
|
||||||
|
|
@ -44,3 +46,31 @@ class Modules(Flag):
|
||||||
@classmethod
|
@classmethod
|
||||||
def all(cls):
|
def all(cls):
|
||||||
return ~cls.NONE
|
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 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from functools import reduce
|
||||||
from tools import trace, timer
|
from tools import trace, timer
|
||||||
|
|
||||||
from PyQt5.QtCore import (
|
from PyQt5.QtCore import (
|
||||||
|
|
@ -35,9 +38,11 @@ from PyQt5.QtWidgets import (
|
||||||
QComboBox,
|
QComboBox,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
from Modules import Modules
|
||||||
|
from Checker.Checker import STATUS
|
||||||
from View.Tools.PamhyrTable import PamhyrTableModel
|
from View.Tools.PamhyrTable import PamhyrTableModel
|
||||||
|
|
||||||
_translate = QCoreApplication.translate
|
logger = logging.getLogger()
|
||||||
|
|
||||||
|
|
||||||
class TableModel(PamhyrTableModel):
|
class TableModel(PamhyrTableModel):
|
||||||
|
|
@ -68,3 +73,68 @@ class TableModel(PamhyrTableModel):
|
||||||
return self._data[row].summary
|
return self._data[row].summary
|
||||||
|
|
||||||
return QVariant()
|
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")
|
tab_widget = self.findChild(QTabWidget, "tabWidget")
|
||||||
|
|
||||||
self._tab_widget_checker = WidgetChecker(
|
self._tab_widget_checker = WidgetChecker(
|
||||||
study=self._study, parent=self
|
study=self._study, config=self.conf, parent=self
|
||||||
)
|
)
|
||||||
|
|
||||||
tab_widget.addTab(
|
tab_widget.addTab(
|
||||||
|
|
|
||||||
|
|
@ -18,9 +18,18 @@
|
||||||
|
|
||||||
import logging
|
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.Tools.PamhyrWidget import PamhyrWidget
|
||||||
|
from View.CheckList.Table import TabTableModel
|
||||||
|
|
||||||
logger = logging.getLogger()
|
logger = logging.getLogger()
|
||||||
|
|
||||||
|
|
@ -28,20 +37,45 @@ logger = logging.getLogger()
|
||||||
class WidgetChecker(PamhyrWidget):
|
class WidgetChecker(PamhyrWidget):
|
||||||
_pamhyr_ui = "MainWindowTabCheckers"
|
_pamhyr_ui = "MainWindowTabCheckers"
|
||||||
|
|
||||||
def __init__(self, study=None, parent=None):
|
def __init__(self, study=None, config=None, parent=None):
|
||||||
self._study = study
|
self._study = study
|
||||||
|
self._config = config
|
||||||
|
|
||||||
super(WidgetChecker, self).__init__(
|
super(WidgetChecker, self).__init__(
|
||||||
parent=parent
|
parent=parent
|
||||||
)
|
)
|
||||||
|
|
||||||
self._checkers = set()
|
self.setup_solver_list()
|
||||||
|
self.setup_checker_list()
|
||||||
self.setup_table()
|
self.setup_table()
|
||||||
self.setup_list()
|
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):
|
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):
|
def setup_list(self):
|
||||||
return
|
return
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue