from datetime import datetime as dt from typing import Optional from PyQt5 import QtWidgets from PyQt5.QtCore import Qt from utils.base.base import BaseMainWindow, BaseController from gui.settings_window import settingsWindow from gui.reportGui import ReportSettings class MainWindow(BaseMainWindow): def __init__(self, controller: Optional[BaseController] = None): super().__init__() self._controller = controller self.initUI() self.set_style(self) self.settings_button.clicked.connect(self._show_settings) self.select_dir_button.clicked.connect(self._select_dir) self.report_button.clicked.connect(self._report_window) self.operSettings = settingsWindow("params/operator_params.json", 'Operator', self._updater_trigger) self.sysSettings = settingsWindow("params/system_params.json", 'System', self._updater_trigger) self.repSettings = ReportSettings() def initUI(self) -> None: self.tabWidget = QtWidgets.QTabWidget() self.tabWidget.setTabsClosable(True) self.tabWidget.tabCloseRequested.connect(self._close_tab) layout = QtWidgets.QVBoxLayout() layout.addWidget(self.tabWidget) self.settings_button = QtWidgets.QPushButton("Show settings") self.settings_button.setFixedWidth(160) self.select_dir_button = QtWidgets.QPushButton("Open directory") self.select_dir_button.setFixedWidth(175) self.report_button = QtWidgets.QPushButton("Generate report") self.report_button.setFixedWidth(175) button_layout = QtWidgets.QHBoxLayout() button_layout.setSpacing(2) button_layout.addWidget(self.settings_button) button_layout.addWidget(self.select_dir_button) button_layout.addWidget(self.report_button) layout.addLayout(button_layout) self.setLayout(layout) def show_plot_tabs(self, plot_widgets: list[QtWidgets.QWidget]) -> None: for plot_widget in plot_widgets: widget, reg_items, curve_items = plot_widget tab = QtWidgets.QWidget() tab.setProperty("reg_items", reg_items) tab.setProperty("curve_items", curve_items) grid = QtWidgets.QGridLayout() grid.addWidget(widget) tab.setLayout(grid) self.tabWidget.addTab(tab, "SF_trace_" + dt.now().strftime('%Y_%m_%d-%H_%M_%S')) self.tabWidget.setCurrentWidget(tab) tab_count = self.tabWidget.count() if tab_count > 10: for i in range(0, tab_count-2): self._close_tab(i) def keyPressEvent(self, a0): if a0.key() == Qt.Key_F5: pass def _show_settings(self): self.operSettings.show() self.sysSettings.show() def push_settings(self) -> None: self._updater_trigger() def _updater_trigger(self) -> None: self.tabWidget.clear() operator_params = self.operSettings.getParams() system_params = self.sysSettings.getParams() self._controller.push_settings([operator_params, system_params]) def _close_tab(self, index:int) -> None: self.tabWidget.removeTab(index) def _select_dir(self): folder_path = QtWidgets.QFileDialog.getExistingDirectory(self, 'Select directory', "") if folder_path: self._controller.open_custom_file(folder_path) def _report_window(self): tab = self.tabWidget.currentWidget() reg_items = tab.property("reg_items") curve_items = tab.property("curve_items") self.repSettings.build(reg_items, curve_items)