Forked from HYCAR-Hydro / airGR
Source project has a limited visibility.
ConfigureAddSolverWindow.py 3.12 KiB
# -*- coding: utf-8 -*-

from solver.Solvers import solver_type_list

from view.ASubWindow import ASubWindow
from solver.GenericSolver import GenericSolver

from PyQt5.QtWidgets import (
    QPushButton,
)

class ConfigureAddSolverWindow(ASubWindow):
    def __init__(self, data=None, title="Configuration : Add Solver", parent=None):
        super(ConfigureAddSolverWindow, self).__init__(
            name=title, ui="ConfigureAddSolverDialog", parent=parent
        )
        self.ui.setWindowTitle(title)

        # Combo box item
        for solver in solver_type_list:
            self.combobox_add_item("comboBox_solver", solver)

        # Data to return
        self.data = data
        if not self.data is None:
            self.copy_data()

        self.connect()

    def copy_data(self):
        self.set_combobox_text("comboBox_solver", self.data.get_type())
        self.set_line_edit_text("lineEdit_name", self.data.name)
        self.set_line_edit_text("lineEdit_description", self.data.description)
        self.set_line_edit_text("lineEdit_input", self.data.path_input)
        self.set_line_edit_text("lineEdit_input_cmd", self.data.cmd_input)
        self.set_line_edit_text("lineEdit_solver", self.data.path_solver)
        self.set_line_edit_text("lineEdit_solver_cmd", self.data.cmd_solver)
        self.set_line_edit_text("lineEdit_output", self.data.path_output)
        self.set_line_edit_text("lineEdit_output_cmd", self.data.cmd_output)

    def connect(self):
        # File button
        buttons = {
            "pushButton_input": (lambda: self.file_dialog(
                select_file = True,
                callback = lambda f: self.set_line_edit_text("lineEdit_input", f[0])
            )),
            "pushButton_solver": (lambda: self.file_dialog(
                select_file = True,
                callback = lambda f: self.set_line_edit_text("lineEdit_solver", f[0])
            )),
            "pushButton_output": (lambda: self.file_dialog(
                select_file = True,
                callback = lambda f: self.set_line_edit_text("lineEdit_output", f[0])
            )),
        }

        for button in buttons:
            self.find(QPushButton, button).clicked.connect(buttons[button])

    def accept(self):
        if self.get_line_edit_text("lineEdit_name") == "":
            self.message_box(
                "Add solver", "A solver need a name",
                "Please give a name to your solver"
            )
        else:
            self.data = GenericSolver(self.get_line_edit_text("lineEdit_name"))
            self.data.set_description(self.get_line_edit_text("lineEdit_description"))
            self.data.set_input(
                self.get_line_edit_text("lineEdit_input"),
                self.get_line_edit_text("lineEdit_input_cmd")
            )
            self.data.set_solver(
                self.get_line_edit_text("lineEdit_solver"),
                self.get_line_edit_text("lineEdit_solver_cmd")
            )
            self.data.set_output(
                self.get_line_edit_text("lineEdit_output"),
                self.get_line_edit_text("lineEdit_output_cmd")
            )

            self.done(True)