diff --git a/src/channel_calibration_dialog.py b/src/channel_calibration_dialog.py index 50da021..c45fd85 100644 --- a/src/channel_calibration_dialog.py +++ b/src/channel_calibration_dialog.py @@ -71,8 +71,9 @@ class ChannelCalibrationDialog(QDialog): channel_layout.addWidget(RoundedColorRectangleWidget(ch.color)) + from PyQt6.QtCore import QLocale float_validator = CustomDoubleValidator() - # float_validator.setLocale("C") + float_validator.setLocale(QLocale(QLocale.Language.C)) # Přičíst input add_layout = QVBoxLayout() @@ -138,8 +139,15 @@ class ChannelCalibrationDialog(QDialog): # get the current channel object of the current (duplicated dataset) channel = DetektorContainer().get().get_channel_by_uuid(channel_id) - offset = float(self.add_input.text()) - multiple = float(self.multiply_input.text()) + try: + # validate inputs + offset = float(self.add_input.text().replace(',', '.')) + multiple = float(self.multiply_input.text().replace(',', '.')) + except ValueError: + WrongDataDialog() + return + + logging.debug(f'Calibrating channel {channel.name} +{offset} x{multiple}') if self._only_region: @@ -178,12 +186,37 @@ class MissingChannelDialog(QDialog): self.setWindowTitle("Vyberte kanál") self.setModal(True) # Set the dialog as modal (blocks main window) - self.resize(300, 150) + self.resize(400, 75) # Main layout main_layout = QVBoxLayout() self.setLayout(main_layout) - main_layout.addWidget(QLabel("Vyberte kanál, na kterém chcete provést kalibraci")) + label = QLabel("Vyberte kanál, na kterém chcete provést kalibraci") + label.setAlignment(Qt.AlignmentFlag.AlignCenter) + main_layout.addWidget(label) + + cancel_button = QPushButton("OK") + cancel_button.clicked.connect(self.close) + main_layout.addWidget(cancel_button) + + # Show the dialog + self.exec() + + +class WrongDataDialog(QDialog): + def __init__(self): + super().__init__() + + self.setWindowTitle("Špatná data") + self.setModal(True) # Set the dialog as modal (blocks main window) + self.resize(400, 75) + + # Main layout + main_layout = QVBoxLayout() + self.setLayout(main_layout) + label = QLabel("Zadaná data nejsou platná čísla.") + label.setAlignment(Qt.AlignmentFlag.AlignCenter) + main_layout.addWidget(label) cancel_button = QPushButton("OK") cancel_button.clicked.connect(self.close) @@ -193,6 +226,18 @@ class MissingChannelDialog(QDialog): self.exec() class CustomDoubleValidator(QDoubleValidator): + def validate(self, input_str, pos): - input_str = input_str.replace(',', '.') # Replace ',' with '.' - return super().validate(input_str, pos) \ No newline at end of file + # Accept both comma and dot as decimal separator for validation + if ',' in input_str: + # Allow comma as intermediate state so user can type it + test_str = input_str.replace(',', '.') + state, _, _ = super().validate(test_str, pos) + if state == QDoubleValidator.State.Acceptable: + return (QDoubleValidator.State.Intermediate, input_str, pos) + return (QDoubleValidator.State.Intermediate, input_str, pos) + return super().validate(input_str, pos) + + def fixup(self, input_str): + # Actually replace comma with dot in the QLineEdit + return input_str.replace(',', '.') \ No newline at end of file