191 lines
7.8 KiB
Python
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()
|
|
|