Files
detektor/src/menubar.py
2025-03-10 17:10:04 +01:00

191 lines
7.8 KiB
Python

from PyQt6.QtGui import QAction
from PyQt6.QtWidgets import QMainWindow, QMenuBar
from callbacks import CallbackDispatcher
from callbacks import CallbackType
from channel_calibration_dialog import ChannelCalibrationDialog
from detektor_data import DetektorContainer
from detektor_region import DetektorRegionState, DetektorRegion
from open_file import OpenFileDialog
from save_as_dialog import SaveAsFileDialog
from change_start_dialog import ChangeStartDialog
from parsers import export_to_xlsx
class Menubar(QMenuBar):
region: DetektorRegion = None
def __init__(self, main_window: QMainWindow, region: DetektorRegion):
super().__init__(main_window)
self.main_window = main_window
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)
CallbackDispatcher().register(CallbackType.DATA_TAINTED, self.update_enabled)
##################################################
### File
##################################################
file_menu = self.addMenu('Soubor')
self.open_action = QAction('Otevřít', self)
self.open_action.setShortcut('Ctrl+O')
self.open_action.triggered.connect(self.open_file_dialog)
file_menu.addAction(self.open_action)
self.save_action = QAction('Uložit', self)
self.save_action.setShortcut('Ctrl+S')
self.save_action.triggered.connect(self.save)
file_menu.addAction(self.save_action)
self.save_as_action = QAction('Uložit jako...', self)
self.save_as_action.triggered.connect(self.save_as_dialog)
file_menu.addAction(self.save_as_action)
self.exit_action = QAction('Ukončit', self)
self.exit_action.triggered.connect(self.quit) # Close the application
self.exit_action.setShortcut('Ctrl+W')
file_menu.addAction(self.exit_action)
##################################################
### Data
##################################################
data_menu = self.addMenu('Data')
# Create actions for the Edit menu
self.revert_change_action = QAction('Zpět', self)
self.revert_change_action.setShortcut('Ctrl+Z')
self.revert_change_action.triggered.connect(self.revert_change)
data_menu.addAction(self.revert_change_action)
data_menu.addSeparator()
self.add_selection_action = QAction('Přidat výběr', self)
self.add_selection_action.setShortcut('Ctrl+A')
self.add_selection_action.triggered.connect(self.region.set)
data_menu.addAction(self.add_selection_action)
self.cancel_selection_action = QAction('Zrušit výběr', self)
self.cancel_selection_action.setShortcut('Esc')
self.cancel_selection_action.triggered.connect(self.region.unset)
data_menu.addAction(self.cancel_selection_action)
self.delete_selection_action = QAction('Smazat výběr', self)
self.delete_selection_action.setShortcut('Delete')
self.delete_selection_action.triggered.connect(self.region.delete)
data_menu.addAction(self.delete_selection_action)
self.copy_action = QAction('Kopírovat', self)
self.copy_action.setShortcut('Ctrl+C')
self.copy_action.triggered.connect(self.region.copy)
data_menu.addAction(self.copy_action)
self.cut_action = QAction('Vyjmout', self)
self.cut_action.setShortcut('Ctrl+X')
self.cut_action.triggered.connect(self.region.cut)
data_menu.addAction(self.cut_action)
self.paste_action = QAction('Vložit na kurzor', self)
self.paste_action.setShortcut('Ctrl+V')
self.paste_action.triggered.connect(self.region.paste_at)
data_menu.addAction(self.paste_action)
self.paste_after_action = QAction('Vložit za výběr', self)
self.paste_after_action.setShortcut('Ctrl+B')
self.paste_after_action.triggered.connect(self.region.paste_after)
data_menu.addAction(self.paste_after_action)
self.paste_at_end_action = QAction('Vložit na konec', self)
self.paste_at_end_action.setShortcut('Ctrl+K')
self.paste_at_end_action.triggered.connect(self.region.paste_end)
data_menu.addAction(self.paste_at_end_action)
data_menu.addSeparator()
self.change_start_action = QAction('Změnit datum a čas', self)
self.change_start_action.setShortcut('Ctrl+M')
self.change_start_action.triggered.connect(self.open_change_start_dialog)
data_menu.addAction(self.change_start_action)
self.calibrate_channel_action = QAction('Kalibrovat data kanálu', self)
self.calibrate_channel_action.setShortcut('Ctrl+K')
self.calibrate_channel_action.triggered.connect(self.open_calibrate_channel_dialog)
data_menu.addAction(self.calibrate_channel_action)
self.update_enabled()
def update_enabled(self):
if self.region.state == DetektorRegionState.UNSET:
self.add_selection_action.setEnabled(True)
self.cancel_selection_action.setEnabled(False)
self.delete_selection_action.setEnabled(False)
self.cut_action.setEnabled(False)
self.copy_action.setEnabled(False)
self.paste_action.setEnabled(False)
self.paste_after_action.setEnabled(False)
self.paste_at_end_action.setEnabled(False)
elif self.region.state == DetektorRegionState.SET:
self.add_selection_action.setEnabled(False)
self.cancel_selection_action.setEnabled(True)
self.delete_selection_action.setEnabled(True)
self.cut_action.setEnabled(True)
self.copy_action.setEnabled(True)
self.paste_action.setEnabled(False)
self.paste_after_action.setEnabled(False)
self.paste_at_end_action.setEnabled(False)
elif self.region.state == DetektorRegionState.COPIED:
self.add_selection_action.setEnabled(False)
self.cancel_selection_action.setEnabled(True)
self.delete_selection_action.setEnabled(True)
self.cut_action.setEnabled(True)
self.copy_action.setEnabled(True)
self.paste_action.setEnabled(True)
self.paste_after_action.setEnabled(True)
self.paste_at_end_action.setEnabled(True)
if DetektorContainer().get().file_path is None:
# no file path - no save
self.save_action.setEnabled(False)
self.calibrate_channel_action.setEnabled(False)
self.change_start_action.setEnabled(False)
else:
if DetektorContainer().get().file_path.endswith('.xlsx'):
# loaded XLSX -> we can save it
self.save_action.setEnabled(True)
else:
# Loaded DBF -> no save
self.save_action.setEnabled(False)
self.calibrate_channel_action.setEnabled(True)
self.change_start_action.setEnabled(True)
if DetektorContainer().has_history():
self.revert_change_action.setEnabled(True)
else:
self.revert_change_action.setEnabled(False)
def open_change_start_dialog(self):
diag = ChangeStartDialog()
def open_calibrate_channel_dialog(self):
diag = ChannelCalibrationDialog(self.region)
def open_file_dialog(self):
diag = OpenFileDialog(DetektorContainer().get())
def save_as_dialog(self):
diag = SaveAsFileDialog()
def save(self):
export_to_xlsx(DetektorContainer().get().file_path)
def revert_change(self):
DetektorContainer().revert()
def quit(self):
""" Decides what to do with the saving or quitting """
self.main_window.close()