Source code for rk_comparison.interface.ui.inputwindow

from PyQt6 import QtWidgets
from rk_comparison.interface.design.ui_inputwindow import Ui_InputWindow
from rk_comparison.interface.ui.errorwindow import ErrorWindow
from rk_comparison.core.exceptions.checks import Checks


[docs] class InputWindow(QtWidgets.QDialog, Ui_InputWindow): """Class for setting up the input window.""" def __init__(self, parent=None): """Constructor sets up the required data and connects buttons with methods.""" super(InputWindow, self).__init__(parent=parent) self.setupUi(self) self.controller = None self.popup = None self.popup_ui = None self.apply.clicked.connect(self.apply_clicked) self.cancel.clicked.connect(self.cancel_clicked) self.checks = Checks() self.t_min = 0.0 self.dt = 0.0 self.t_max = 0.0 self.nuclei = 0.0 self.tau = 0.0 self.truth_table = [] self.data_names = [ "Time min", "Delta", "Time max", "Nuclei", "Tau" ] self.data_placeholders = [ self.t_min, self.dt, self.t_max, self.nuclei, self.tau ] self.data_ui = [ self.line_t_min, self.line_delta, self.line_t_max, self.line_nuclei, self.line_tau ] self.truth = [ self.rk1, self.rk2, self.rk3, self.rk4, self.rk5, self.rk6, self.frk5, self.frk6, self.frk7, self.frk8 ]
[docs] def initialize_data(self, controller): """Method reads current data through controller and displays it to user.""" self.controller = controller self.line_t_min.setText(str(controller.id.get_t_min())) self.line_delta.setText(str(controller.id.get_dt())) self.line_t_max.setText(str(controller.id.get_t_max())) self.line_tau.setText(str(controller.nd.get_tau())) self.line_nuclei.setText(str(controller.nd.get_nuclei())) self.get_truth_table_values()
[docs] def apply_clicked(self): """Method does a series of checks on a data provided by user. Any fail results in error message. If all checks are passed, the method saves data through controller and closes the window. """ if self.change_type(): check = self.checks.min_max_check(self.data_placeholders[0], self.data_placeholders[2]) if check is None: check = self.checks.check_delta(self.data_placeholders[0], self.data_placeholders[1], self.data_placeholders[2]) if check is None: self.build_truth_table() check = self.checks.check_truth_table(self.truth_table) if check is None: self.controller.initialize( self.data_placeholders[0], self.data_placeholders[1], self.data_placeholders[2], self.data_placeholders[3], self.data_placeholders[4], self.truth_table ) self.close() else: self.raise_error(check) else: self.raise_error(check) else: self.raise_error(check)
[docs] def cancel_clicked(self): """Method closes the input window without data changes.""" self.close()
[docs] def change_type(self): """Method to change type of input variables from string to float. Returns True if successful or False if unsuccessful. Before returning False, it also calls the raise_error() method with message as argument. Message is being build if str_to_float() fails and returns string with error message instead of number. """ message = "" for i in range(len(self.data_names)): element = self.checks.str_to_float(self.data_names[i], self.data_ui[i].text()) if type(element) is str: message = message + element + "\n" else: self.data_placeholders[i] = element if len(message) > 0: self.raise_error(message) return False return True
[docs] def get_truth_table_values(self): """Method gets the values of truth table from data through controller.""" for i in range(len(self.truth)): if self.controller.id.get_truth_table()[i]: self.truth[i].setChecked(True)
[docs] def build_truth_table(self): """Method sets up the truth table based on UI elements.""" self.truth_table = [ self.rk1.isChecked(), self.rk2.isChecked(), self.rk3.isChecked(), self.rk4.isChecked(), self.rk5.isChecked(), self.rk6.isChecked(), self.frk5.isChecked(), self.frk6.isChecked(), self.frk7.isChecked(), self.frk8.isChecked() ]
[docs] def raise_error(self, message): """Method shows the widget with error message.""" self.popup = QtWidgets.QDialog() self.popup_ui = ErrorWindow() self.popup_ui.set_message(message) self.popup_ui.exec()