mirror of https://gitlab.com/pamhyr/pamhyr2
MainWindow: Checker: Add worker.
parent
30170df1b1
commit
a23692a29c
|
|
@ -40,7 +40,7 @@ class STATUS(Enum):
|
||||||
|
|
||||||
def __or__(self, y):
|
def __or__(self, y):
|
||||||
v = [self, y]
|
v = [self, y]
|
||||||
res = self.OK
|
r = self.OK
|
||||||
|
|
||||||
if self.UNKNOWN in v:
|
if self.UNKNOWN in v:
|
||||||
r = self.UNKNOWN
|
r = self.UNKNOWN
|
||||||
|
|
@ -60,6 +60,9 @@ class AbstractModelChecker(object):
|
||||||
self._solver = "study"
|
self._solver = "study"
|
||||||
self._modules = Modules.NONE
|
self._modules = Modules.NONE
|
||||||
|
|
||||||
|
self.reset()
|
||||||
|
|
||||||
|
def reset(self):
|
||||||
self._status = STATUS.UNKNOWN
|
self._status = STATUS.UNKNOWN
|
||||||
self._summary = "Unknown"
|
self._summary = "Unknown"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -111,7 +111,7 @@ class Reach(SQLSubModel):
|
||||||
def _get_profiles_list(self):
|
def _get_profiles_list(self):
|
||||||
# Profiles list generator is type (int, Point) with the first
|
# Profiles list generator is type (int, Point) with the first
|
||||||
# element the index of the Point in list
|
# element the index of the Point in list
|
||||||
logger.info(f"Load profiles from reach {self.name}")
|
logger.debug(f"Load profiles from reach {self.name}")
|
||||||
return list(
|
return list(
|
||||||
map(
|
map(
|
||||||
lambda p: p[1],
|
lambda p: p[1],
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,9 @@ logger = logging.getLogger()
|
||||||
class Modules(Flag):
|
class Modules(Flag):
|
||||||
NONE = 0
|
NONE = 0
|
||||||
|
|
||||||
|
# General
|
||||||
|
STUDY = auto()
|
||||||
|
|
||||||
# Modelling
|
# Modelling
|
||||||
NETWORK = auto()
|
NETWORK = auto()
|
||||||
GEOMETRY = auto()
|
GEOMETRY = auto()
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,9 @@ class TableModel(PamhyrTableModel):
|
||||||
return QVariant()
|
return QVariant()
|
||||||
|
|
||||||
class TabTableModel(PamhyrTableModel):
|
class TabTableModel(PamhyrTableModel):
|
||||||
|
def _setup_lst(self):
|
||||||
|
self._lst = self._opt_data
|
||||||
|
|
||||||
def compute_status(self, row, column):
|
def compute_status(self, row, column):
|
||||||
module = self._opt_data[row]
|
module = self._opt_data[row]
|
||||||
solver = self._headers[column]
|
solver = self._headers[column]
|
||||||
|
|
|
||||||
|
|
@ -17,11 +17,14 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import time
|
import time
|
||||||
|
import logging
|
||||||
|
|
||||||
from PyQt5.QtCore import (
|
from PyQt5.QtCore import (
|
||||||
Qt, QObject, pyqtSlot, pyqtSignal
|
Qt, QObject, pyqtSlot, pyqtSignal
|
||||||
)
|
)
|
||||||
|
|
||||||
|
logger = logging.getLogger()
|
||||||
|
|
||||||
|
|
||||||
class Worker(QObject):
|
class Worker(QObject):
|
||||||
signalStatus = pyqtSignal(str)
|
signalStatus = pyqtSignal(str)
|
||||||
|
|
@ -46,3 +49,35 @@ class Worker(QObject):
|
||||||
checker._run(self._study)
|
checker._run(self._study)
|
||||||
|
|
||||||
self.signalStatus.emit("progress")
|
self.signalStatus.emit("progress")
|
||||||
|
|
||||||
|
class TabWorker(QObject):
|
||||||
|
signalStatus = pyqtSignal(str)
|
||||||
|
|
||||||
|
def __init__(self, study, checker_q, parent=None):
|
||||||
|
super(self.__class__, self).__init__(parent)
|
||||||
|
|
||||||
|
self._study = study
|
||||||
|
self._checker_q = checker_q
|
||||||
|
|
||||||
|
@property
|
||||||
|
def study(self):
|
||||||
|
return self._study
|
||||||
|
|
||||||
|
|
||||||
|
@study.setter
|
||||||
|
def study(self, study):
|
||||||
|
self._study = study
|
||||||
|
|
||||||
|
def process(self):
|
||||||
|
self._compute()
|
||||||
|
|
||||||
|
def _compute(self):
|
||||||
|
while True:
|
||||||
|
checker = self._checker_q.get()
|
||||||
|
|
||||||
|
if self._study == None:
|
||||||
|
self._checker_q.put(checker)
|
||||||
|
time.sleep(5)
|
||||||
|
else:
|
||||||
|
checker._run(self._study)
|
||||||
|
self.signalStatus.emit("progress")
|
||||||
|
|
|
||||||
|
|
@ -394,11 +394,18 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
|
||||||
for _, window in self.sub_win_list:
|
for _, window in self.sub_win_list:
|
||||||
window._propagated_update(key=keys)
|
window._propagated_update(key=keys)
|
||||||
|
|
||||||
|
self._tab_widget_checker.update(modules=keys)
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
self.set_title()
|
self.set_title()
|
||||||
|
|
||||||
self._tab_widget_info.study = self._study
|
if self._tab_widget_info.study != self._study:
|
||||||
self._tab_widget_info.update()
|
self._tab_widget_info.study = self._study
|
||||||
|
self._tab_widget_info.update()
|
||||||
|
|
||||||
|
if self._tab_widget_checker.study != self._study:
|
||||||
|
self._tab_widget_checker.study = self._study
|
||||||
|
self._tab_widget_checker.update(modules = Modules.STUDY)
|
||||||
|
|
||||||
#########
|
#########
|
||||||
# MODEL #
|
# MODEL #
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,13 @@
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
from queue import Queue
|
||||||
from tools import timer, trace, flatten
|
from tools import timer, trace, flatten
|
||||||
|
|
||||||
|
from PyQt5.QtCore import (
|
||||||
|
QThread,
|
||||||
|
)
|
||||||
|
|
||||||
from PyQt5.QtWidgets import (
|
from PyQt5.QtWidgets import (
|
||||||
QTableView,
|
QTableView,
|
||||||
)
|
)
|
||||||
|
|
@ -30,6 +35,7 @@ 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
|
from View.CheckList.Table import TabTableModel
|
||||||
|
from View.CheckList.Worker import TabWorker
|
||||||
|
|
||||||
logger = logging.getLogger()
|
logger = logging.getLogger()
|
||||||
|
|
||||||
|
|
@ -45,11 +51,24 @@ class WidgetChecker(PamhyrWidget):
|
||||||
parent=parent
|
parent=parent
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.setup_worker()
|
||||||
self.setup_solver_list()
|
self.setup_solver_list()
|
||||||
self.setup_checker_list()
|
self.setup_checker_list()
|
||||||
self.setup_table()
|
self.setup_table()
|
||||||
self.setup_list()
|
self.setup_list()
|
||||||
|
|
||||||
|
def setup_worker(self):
|
||||||
|
self._worker_q = Queue()
|
||||||
|
|
||||||
|
self._worker = TabWorker(self._study, self._worker_q)
|
||||||
|
self._worker_thread = QThread()
|
||||||
|
self._worker.moveToThread(self._worker_thread)
|
||||||
|
|
||||||
|
self._worker.signalStatus.connect(self.update_thread)
|
||||||
|
self._worker_thread.started.connect(self._worker.process)
|
||||||
|
|
||||||
|
self._worker_thread.start()
|
||||||
|
|
||||||
def setup_solver_list(self):
|
def setup_solver_list(self):
|
||||||
self._solvers = list(
|
self._solvers = list(
|
||||||
map(
|
map(
|
||||||
|
|
@ -67,7 +86,10 @@ class WidgetChecker(PamhyrWidget):
|
||||||
)
|
)
|
||||||
|
|
||||||
def setup_table(self):
|
def setup_table(self):
|
||||||
header = {'type': "Type", **solver_long_name}
|
header = {
|
||||||
|
'type': "Type", "study": "Study",
|
||||||
|
**solver_long_name
|
||||||
|
}
|
||||||
|
|
||||||
table = self.find(QTableView, f"tableView_checker")
|
table = self.find(QTableView, f"tableView_checker")
|
||||||
self._table = TabTableModel(
|
self._table = TabTableModel(
|
||||||
|
|
@ -88,6 +110,30 @@ class WidgetChecker(PamhyrWidget):
|
||||||
def study(self, study):
|
def study(self, study):
|
||||||
self._study = study
|
self._study = study
|
||||||
|
|
||||||
def update(self):
|
def _checkers_filtered(self, modules):
|
||||||
if self._study is None:
|
return filter(
|
||||||
|
lambda c: c._modules in modules,
|
||||||
|
self._checkers
|
||||||
|
)
|
||||||
|
|
||||||
|
def update_thread(self, key):
|
||||||
|
if key == "progress":
|
||||||
|
self._table.update()
|
||||||
|
|
||||||
|
def update(self, modules=Modules.NONE):
|
||||||
|
if modules is Modules.NONE:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if Modules.STUDY in modules:
|
||||||
|
self._worker.study = self._study
|
||||||
|
|
||||||
|
for checker in self._checkers:
|
||||||
|
if self._study == None:
|
||||||
|
checker.reset()
|
||||||
|
self._worker_q.put(checker)
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
for checker in self._checkers_filtered(modules):
|
||||||
|
checker.reset()
|
||||||
|
self._worker_q.put(checker)
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@ from PyQt5.QtWidgets import (
|
||||||
QUndoStack, QShortcut,
|
QUndoStack, QShortcut,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
from Modules import Modules
|
||||||
from Model.River import RiverNode, RiverReach, River
|
from Model.River import RiverNode, RiverReach, River
|
||||||
|
|
||||||
from View.Tools.PamhyrWindow import PamhyrWindow
|
from View.Tools.PamhyrWindow import PamhyrWindow
|
||||||
|
|
@ -130,13 +131,13 @@ class NetworkWindow(PamhyrWindow):
|
||||||
self._graph_layout.addWidget(self._graph_widget)
|
self._graph_layout.addWidget(self._graph_widget)
|
||||||
|
|
||||||
def setup_connections(self):
|
def setup_connections(self):
|
||||||
self._nodes_model.dataChanged.connect(self._reachs_model.update)
|
self._nodes_model.dataChanged.connect(self.update)
|
||||||
self._nodes_model.dataChanged.connect(self._graph_widget.rename_nodes)
|
self._nodes_model.dataChanged.connect(self._graph_widget.rename_nodes)
|
||||||
self._reachs_model.dataChanged.connect(
|
self._reachs_model.dataChanged.connect(
|
||||||
self._graph_widget.display_update)
|
self._graph_widget.display_update)
|
||||||
self._reachs_model.dataChanged.connect(self._nodes_model.update)
|
self._reachs_model.dataChanged.connect(self.update)
|
||||||
self._graph_widget.changeEdge.connect(self._reachs_model.update)
|
self._graph_widget.changeEdge.connect(self.update)
|
||||||
self._graph_widget.changeNode.connect(self._nodes_model.update)
|
self._graph_widget.changeNode.connect(self.update)
|
||||||
|
|
||||||
self.find(QAction, "action_toolBar_add").setCheckable(True)
|
self.find(QAction, "action_toolBar_add").setCheckable(True)
|
||||||
self.find(QAction, "action_toolBar_add").triggered.connect(
|
self.find(QAction, "action_toolBar_add").triggered.connect(
|
||||||
|
|
@ -204,12 +205,15 @@ class NetworkWindow(PamhyrWindow):
|
||||||
|
|
||||||
def _undo(self):
|
def _undo(self):
|
||||||
self._undo_stack.undo()
|
self._undo_stack.undo()
|
||||||
|
self.update()
|
||||||
|
|
||||||
|
def _redo(self):
|
||||||
|
self._undo_stack.redo()
|
||||||
|
self.update()
|
||||||
|
|
||||||
|
def update(self):
|
||||||
self._reachs_model.update()
|
self._reachs_model.update()
|
||||||
self._nodes_model.update()
|
self._nodes_model.update()
|
||||||
self._graph_widget.display_update()
|
self._graph_widget.display_update()
|
||||||
|
|
||||||
def _redo(self):
|
self._propagate_update(key=Modules.NETWORK)
|
||||||
self._undo_stack.redo()
|
|
||||||
self._reachs_model.update()
|
|
||||||
self._nodes_model.update()
|
|
||||||
self._graph_widget.display_update()
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue