diff --git a/src/View/MainWindow.py b/src/View/MainWindow.py index d36f5e59c7cf50f161d4d8fd50cbb2344d1a093c..aeaac94c7a40c386450637e3996ab522fb21d334 100644 --- a/src/View/MainWindow.py +++ b/src/View/MainWindow.py @@ -71,6 +71,7 @@ from View.AdditionalFiles.Window import AddFileListWindow from View.REPLines.Window import REPLineListWindow from View.SolverParameters.Window import SolverParametersWindow from View.RunSolver.Window import SelectSolverWindow, SolverLogWindow +from View.RunSolver.WindowAdisTS import SelectSolverWindowAdisTS from View.CheckList.Window import CheckListWindow from View.Results.Window import ResultsWindow from View.Results.ReadingResultsDialog import ReadingResultsDialog @@ -1261,10 +1262,18 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): if self._study is None: return - solver = next(filter(lambda x: x._type == "adistslc", self.conf.solvers)) + #solver = next(filter(lambda x: x._type == "adistslc", self.conf.solvers)) #solver = next(filter(lambda x: x.name == "AdisTS-LC", self.conf.solvers)) - print(solver._type) - self.run_solver(solver) + #print(solver._type) + #self.run_solver(solver) + + run = SelectSolverWindowAdisTS( + study=self._study, + config=self.conf, + parent=self + ) + if run.exec(): + self.run_solver(run.solver) def run_solver(self, solver): if self._study is None: diff --git a/src/View/RunSolver/WindowAdisTS.py b/src/View/RunSolver/WindowAdisTS.py new file mode 100644 index 0000000000000000000000000000000000000000..fd10c6d482e4d67328423e1e8af77fd0d87ab740 --- /dev/null +++ b/src/View/RunSolver/WindowAdisTS.py @@ -0,0 +1,137 @@ +# WindowAdisTS.py -- Pamhyr +# Copyright (C) 2023-2024 INRAE +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +# -*- coding: utf-8 -*- + +import os +import logging +import tempfile + +from queue import Queue +from tools import trace, timer, logger_exception + +from View.Tools.PamhyrWindow import PamhyrDialog, PamhyrWindow + +from PyQt5.QtGui import ( + QKeySequence, +) + +from PyQt5.QtCore import ( + Qt, QVariant, QAbstractTableModel, + QCoreApplication, QModelIndex, pyqtSlot, + QRect, QTimer, QProcess, +) + +from PyQt5.QtWidgets import ( + QDialogButtonBox, QPushButton, QLineEdit, + QFileDialog, QTableView, QAbstractItemView, + QUndoStack, QShortcut, QAction, QItemDelegate, + QComboBox, QVBoxLayout, QHeaderView, QTabWidget, + QTextEdit, +) + +from View.RunSolver.Log.Window import SolverLogFileWindow +from View.Results.ReadingResultsDialog import ReadingResultsDialog + +try: + from signal import SIGTERM, SIGSTOP, SIGCONT + _signal = True +except Exception: + _signal = False + +_translate = QCoreApplication.translate + +logger = logging.getLogger() + + +class SelectSolverWindowAdisTS(PamhyrDialog): + _pamhyr_ui = "SelectSolver" + _pamhyr_name = "Select solver" + + def __init__(self, study=None, config=None, + parent=None): + self._solver = None + + name = _translate("Solver", "Select solver") + super(SelectSolverWindowAdisTS, self).__init__( + title=name, + study=study, + config=config, + options=[], + parent=parent + ) + + self.setup_combobox() + self.setup_connections() + self.select_last_solver() + + def setup_combobox(self): + #solvers = self._config.solvers + #solvers mage + solvers = list(filter(lambda x: "mage" not in x._type, self._config.solvers)) + solvers_name = list( + map( + self._format_solver_name, + solvers + ) + ) + + self.combobox_add_items("comboBox", solvers_name) + + def setup_connections(self): + self.find(QPushButton, "pushButton_run").clicked.connect(self.accept) + self.find(QPushButton, "pushButton_cancel")\ + .clicked.connect(self.reject) + + def select_last_solver(self): + solvers = self._config.solvers + last = self._config.last_solver_name + + solver = list( + filter( + lambda s: s.name == last, + solvers + ) + ) + + if len(solver) != 0: + self.set_combobox_text( + "comboBox", + self._format_solver_name(solver[0]) + ) + + def _format_solver_name(self, solver): + return f"{solver.name} - ({solver._type})" + + @property + def solver(self): + return self._solver + + def accept(self): + solver_name = self.get_combobox_text("comboBox") + solver_name = solver_name.rsplit(" - ", 1)[0] + + self._config.update_last_solver_used(solver_name) + + self._solver = next( + filter( + lambda s: s.name == solver_name, + self._config.solvers + ) + ) + + super(SelectSolverWindowAdisTS, self).accept() +