Verze po zapracovani prvni vlny pozadavku
This commit is contained in:
190
src/menubar.py
Normal file
190
src/menubar.py
Normal file
@@ -0,0 +1,190 @@
|
||||
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()
|
||||
|
||||
Reference in New Issue
Block a user