from PyQt6.QtWidgets import QBoxLayout, QVBoxLayout, QGroupBox, QPushButton from callbacks import CallbackDispatcher, CallbackType from detektor_region import DetektorRegionState, DetektorRegion from channel_calibration_dialog import ChannelCalibrationDialog from change_start_dialog import ChangeStartDialog from detektor_data import DetektorContainer from moving_average_dialog import MovingAverageDialog class DataMenu: layout: QBoxLayout = None region: DetektorRegion = None def __init__(self, layout: QBoxLayout, region: DetektorRegion): self.layout = layout self.region = region CallbackDispatcher().register(CallbackType.REGION_STATE, self.update_enabled) CallbackDispatcher().register(CallbackType.DATA_PARSED, self.update_enabled) CallbackDispatcher().register(CallbackType.DATA_NOT_PARSED, self.update_enabled) data_menu_layout = QVBoxLayout() chart_options_group = QGroupBox("Data") chart_options_group.setLayout(data_menu_layout) self.layout.addWidget(chart_options_group) self.add_selection_button = QPushButton(f"Přidat výběr") self.add_selection_button.clicked.connect(self.region.set) data_menu_layout.addWidget(self.add_selection_button) self.cancel_selection_button = QPushButton(f"Zrušit výběr") self.cancel_selection_button.clicked.connect(self.region.unset) data_menu_layout.addWidget(self.cancel_selection_button) self.delete_selection_button = QPushButton(f"Smazat výběr") self.delete_selection_button.clicked.connect(self.region.delete) data_menu_layout.addWidget(self.delete_selection_button) self.copy_selection_button = QPushButton(f"Kopírovat") self.copy_selection_button.clicked.connect(self.region.copy) data_menu_layout.addWidget(self.copy_selection_button) self.cut_selection_button = QPushButton(f"Vyjmout") self.cut_selection_button.clicked.connect(self.region.cut) data_menu_layout.addWidget(self.cut_selection_button) self.paste_selection_after_button = QPushButton(f"Vložit data za výběr") self.paste_selection_after_button.clicked.connect(self.region.paste_after) data_menu_layout.addWidget(self.paste_selection_after_button) self.paste_selection_end_button = QPushButton(f"Vložit data na konec") self.paste_selection_end_button.clicked.connect(self.region.paste_end) data_menu_layout.addWidget(self.paste_selection_end_button) self.change_start_button = QPushButton(f"Změnit datum a čas") self.change_start_button.clicked.connect(self.open_change_start_dialog) data_menu_layout.addWidget(self.change_start_button) self.calibration_button = QPushButton(f"Kalibrovat data") self.calibration_button.clicked.connect(self.open_calibration_dialog) data_menu_layout.addWidget(self.calibration_button) self.moving_average_button = QPushButton(f"Klouzavý průměr") self.moving_average_button.clicked.connect(self.open_moving_average_dialog) data_menu_layout.addWidget(self.moving_average_button) self.update_enabled() def open_change_start_dialog(self): ChangeStartDialog() def open_calibration_dialog(self): ChannelCalibrationDialog(self.region) def open_moving_average_dialog(self): MovingAverageDialog() def update_enabled(self): if self.region.state == DetektorRegionState.UNSET: self.add_selection_button.setEnabled(True) self.cancel_selection_button.setEnabled(False) self.delete_selection_button.setEnabled(False) self.copy_selection_button.setEnabled(False) self.cut_selection_button.setEnabled(False) self.paste_selection_after_button.setEnabled(False) self.paste_selection_end_button.setEnabled(False) elif self.region.state == DetektorRegionState.SET: self.add_selection_button.setEnabled(False) self.cancel_selection_button.setEnabled(True) self.delete_selection_button.setEnabled(True) self.copy_selection_button.setEnabled(True) self.cut_selection_button.setEnabled(True) self.paste_selection_after_button.setEnabled(False) self.paste_selection_end_button.setEnabled(False) elif self.region.state == DetektorRegionState.COPIED: self.add_selection_button.setEnabled(False) self.cancel_selection_button.setEnabled(True) self.delete_selection_button.setEnabled(True) self.copy_selection_button.setEnabled(True) self.cut_selection_button.setEnabled(True) self.paste_selection_after_button.setEnabled(True) self.paste_selection_end_button.setEnabled(True) if DetektorContainer().get().file_path is None: self.calibration_button.setEnabled(False) self.moving_average_button.setEnabled(False) self.change_start_button.setEnabled(False) else: self.calibration_button.setEnabled(True) self.moving_average_button.setEnabled(True) self.change_start_button.setEnabled(True)