diff --git a/src/Solver/ASolver.py b/src/Solver/ASolver.py
index c4fa286a..5ff5f6dc 100644
--- a/src/Solver/ASolver.py
+++ b/src/Solver/ASolver.py
@@ -121,6 +121,9 @@ class AbstractSolver(object):
def is_stoped(self):
return self._status == STATUS.STOPED
+ def has_results_loaded(self):
+ self._status = STATUS.NOT_LAUNCHED
+
@name.setter
def name(self, name):
self._name = name
diff --git a/src/View/RunSolver/Window.py b/src/View/RunSolver/Window.py
index 96ada16e..3cf453c2 100644
--- a/src/View/RunSolver/Window.py
+++ b/src/View/RunSolver/Window.py
@@ -124,40 +124,11 @@ class SolverLogWindow(PamhyrWindow):
self.setup_action()
self.setup_alarm()
self.setup_connections()
+ self.setup_workdir()
+ self.setup_process()
- self._workdir = ""
- if self._study.filename == "":
- self._workdir = tempfile.TemporaryDirectory()
- else:
- self._workdir = os.path.join(
- os.path.dirname(self._study.filename),
- "_PAMHYR_",
- self._study.name.replace(" ", "_"),
- self._solver.name.replace(" ", "_"),
- )
- os.makedirs(self._workdir, exist_ok=True)
-
- self._alarm.start(500)
- self._output = Queue()
- self._process = self.new_process(parent)
-
- self._log(f" *** Export study {self._solver.name}", color="blue")
- self._solver.export(self._study, self._workdir, qlog=self._output)
-
- self.update()
-
- self._log(f" *** Run solver {self._solver.name}", color="blue")
- self._solver.run(
- study,
- process=self._process,
- output_queue=self._output
- )
-
- def new_process(self, parent):
- new = QProcess(parent)
- new.setWorkingDirectory(self._workdir)
- new.setProcessChannelMode(QProcess.MergedChannels)
- return new
+ self.export()
+ self.run()
def setup_action(self):
self.find(QAction, "action_start").setEnabled(False)
@@ -182,30 +153,74 @@ class SolverLogWindow(PamhyrWindow):
self._alarm.timeout.connect(self.update)
+ def setup_workdir(self):
+ self._workdir = ""
+ if self._study.filename == "":
+ self._workdir = tempfile.TemporaryDirectory()
+ else:
+ self._workdir = os.path.join(
+ os.path.dirname(self._study.filename),
+ "_PAMHYR_",
+ self._study.name.replace(" ", "_"),
+ self._solver.name.replace(" ", "_"),
+ )
+ os.makedirs(self._workdir, exist_ok=True)
+
+ def setup_process(self):
+ self._alarm.start(500)
+ self._output = Queue()
+ self._process = self.new_process(self._parent)
+
+ def new_process(self, parent):
+ new = QProcess(parent)
+ new.setWorkingDirectory(self._workdir)
+ new.setProcessChannelMode(QProcess.MergedChannels)
+ return new
+
+ def export(self):
+ self._log(f" *** Export study {self._solver.name}", color="blue")
+ self._solver.export(self._study, self._workdir, qlog=self._output)
+ self.update()
+
+ #######
+ # LOG #
+ #######
+
def _log(self, msg, color=None):
if type(msg) is str:
- logger.info(f"solver: {msg}")
-
- msg = msg.rsplit('\n')[0]
-
- if color is not None:
- msg = f"" + msg + ""
-
- self.find(QTextEdit, "textEdit").append(msg)
+ self._log_str(msg, color)
elif type(msg) is int:
- logger.info(f"solver: Returns {msg}")
+ self._log_int(msg, color)
- color = "blue" if msg == 0 else "red"
- self.find(QTextEdit, "textEdit")\
- .append(f"" +
- f" *** Finished with code {msg}" +
- "")
+ def _log_str(self, msg, color=None):
+ logger.info(f"solver: {msg}")
+ msg = msg.rsplit('\n')[0]
- self.statusbar.showMessage(
- "Done" if msg == 0 else "Failed",
- 3000
+ if color is not None:
+ msg = f"" + msg + ""
+
+ self.find(QTextEdit, "textEdit").append(msg)
+
+ def _log_int(self, int_code, color=None):
+ logger.info(f"solver: Returns {int_code}")
+ color = "blue" if int_code == 0 else "red"
+
+ self.find(QTextEdit, "textEdit")\
+ .append(
+ f"" +
+ f" *** Finished with code {int_code}" +
+ ""
)
+ self.statusbar.showMessage(
+ "Done" if int_code == 0 else "Failed",
+ 3000
+ )
+
+ ##########
+ # UPDATE #
+ ##########
+
def update(self):
if self._solver.is_stoped():
self.find(QAction, "action_start").setEnabled(True)
@@ -235,6 +250,18 @@ class SolverLogWindow(PamhyrWindow):
else:
self._log(s)
+ ####################
+ # Process controle #
+ ####################
+
+ def run(self):
+ self._log(f" *** Run solver {self._solver.name}", color="blue")
+ self._solver.run(
+ self._study,
+ process=self._process,
+ output_queue=self._output
+ )
+
def start(self):
if self._solver.is_stoped():
self._log(f" *** Export study {self._solver.name}", color="blue")
@@ -276,6 +303,10 @@ class SolverLogWindow(PamhyrWindow):
if self._solver.log_file() != "":
self.find(QAction, "action_log_file").setEnabled(True)
+ ###########
+ # Results #
+ ###########
+
def results(self):
if self._results is None:
self._results = self._solver.results(
@@ -284,6 +315,8 @@ class SolverLogWindow(PamhyrWindow):
self._parent.set_results(self._solver, self._results)
self._parent.open_solver_results(self._solver, self._results)
+ self._solver.has_results_loaded()
+
def log_file(self):
file_name = os.path.join(self._workdir, self._solver.log_file())
log = SolverLogFileWindow(