From 9eb499924690ab1b6a94fdfe2133066afe9afc87 Mon Sep 17 00:00:00 2001 From: jupfi Date: Mon, 10 Jul 2023 09:10:13 +0200 Subject: [PATCH] Added automatic loading of pulse programmer. --- src/nqrduck_spectrometer/base_spectrometer.py | 2 +- src/nqrduck_spectrometer/view.py | 75 +++++++++++++++---- 2 files changed, 60 insertions(+), 17 deletions(-) diff --git a/src/nqrduck_spectrometer/base_spectrometer.py b/src/nqrduck_spectrometer/base_spectrometer.py index 08a9a05..494e336 100644 --- a/src/nqrduck_spectrometer/base_spectrometer.py +++ b/src/nqrduck_spectrometer/base_spectrometer.py @@ -8,7 +8,7 @@ class BaseSpectrometer(Module): def __init__(self, model, view, controller): super().__init__(model, None, controller) # This stops the view from being added to the main window. - self._view = None + self.view = None self.settings_view = view(self) def set_active(self): diff --git a/src/nqrduck_spectrometer/view.py b/src/nqrduck_spectrometer/view.py index 38a592e..4714cfa 100644 --- a/src/nqrduck_spectrometer/view.py +++ b/src/nqrduck_spectrometer/view.py @@ -7,8 +7,8 @@ from .widget import Ui_Form logger = logging.getLogger(__name__) + class SpectrometerView(ModuleView): - def __init__(self, module): """This class is the view for the spectrometer module. It contains the menu buttons for the different spectrometers. It also contains the stacked widget that shows the different spectrometer views. @@ -22,6 +22,8 @@ class SpectrometerView(ModuleView): self._ui_form.setupUi(self) self._actions = dict() + self.blank = QWidget() + def on_active_spectrometer_changed(self, module): """This method is called when the active spectrometer is changed. It changes the active view in the stacked widget to the one that was just activated. @@ -29,38 +31,78 @@ class SpectrometerView(ModuleView): """ self._ui_form.stackedWidgetSettings.setCurrentWidget(module.settings_view) - def on_spectrometer_widget_changed(self, widget): + try: + self._ui_form.stackedWidgetPulseProgrammer.setCurrentWidget( + module.model.pulse_programmer.pulse_programmer_view + ) + except AttributeError: + logger.debug( + "No pulse programmer widget to change to for spectrometer %s", + module.model.name, + ) + self._ui_form.stackedWidgetPulseProgrammer.setCurrentWidget(self.blank) + + def on_spectrometer_widget_changed(self, module): """This method is called when a new spectrometer widget is added to the module. It adds the widget to the stacked widget and sets it as the current widget. :param widget: The widget that was added to the module. """ - logger.debug("Adding module widget to stacked widget: %s", widget) - self._ui_form.stackedWidgetSettings.addWidget(widget) - self._ui_form.stackedWidgetSettings.setCurrentWidget(widget) + logger.debug( + "Adding settings widget to stacked widget: %s", module.settings_view + ) + self._ui_form.stackedWidgetSettings.addWidget(module.settings_view) + self._ui_form.stackedWidgetSettings.setCurrentWidget(module.settings_view) + try: + logger.debug( + "Adding pulse programmer widget to stacked widget: %s", + module.model.pulse_programmer.pulse_programmer_view, + ) + self._ui_form.stackedWidgetPulseProgrammer.addWidget( + module.model.pulse_programmer.pulse_programmer_view + ) + self._ui_form.stackedWidgetPulseProgrammer.setCurrentWidget( + module.model.pulse_programmer.pulse_programmer_view + ) + except AttributeError as e: + logger.debug( + "No pulse programmer widget to add for spectrometer %s", + module.model.name, + ) + # Sets the pulse programmer widget to a blank widget if there is no pulse programmer widget. + self._ui_form.stackedWidgetPulseProgrammer.addWidget(self.blank) + self._ui_form.stackedWidgetPulseProgrammer.setCurrentWidget(self.blank) def on_spectrometer_added(self, module): """This method changes the active spectrometer to the one that was just added. :param module: The BaseSpectrometer module that was just added. """ module.change_spectrometer.connect(self.on_menu_button_clicked) - self.on_spectrometer_widget_changed(module.settings_view) + self.on_spectrometer_widget_changed(module) def create_menu_entry(self): - """This method creates the menu entry for the spectrometer module. It creates a menu item for each spectrometer that is available. - """ + """This method creates the menu entry for the spectrometer module. It creates a menu item for each spectrometer that is available.""" logger.debug("Creating menu entry for spectrometer module") menu_item = QMenu("Hardware") - logger.debug("Available spectrometer models: %s", self._module.model._available_spectrometers) + logger.debug( + "Available spectrometer models: %s", + self._module.model._available_spectrometers, + ) - - for spectrometer_name, spectrometer_module in self._module.model._available_spectrometers.items(): + for ( + spectrometer_name, + spectrometer_module, + ) in self._module.model._available_spectrometers.items(): logger.debug("Adding module to menu: %s", spectrometer_name) - self._actions[spectrometer_name] = QAction(spectrometer_module.model.toolbar_name, menu_item) - self._actions[spectrometer_name].triggered.connect(spectrometer_module.set_active) + self._actions[spectrometer_name] = QAction( + spectrometer_module.model.toolbar_name, menu_item + ) + self._actions[spectrometer_name].triggered.connect( + spectrometer_module.set_active + ) # Make it checkable self._actions[spectrometer_name].setCheckable(True) - + # Get last added action and check it last_added_action = self._actions[list(self._actions.keys())[-1]] last_added_action.setChecked(True) @@ -77,5 +119,6 @@ class SpectrometerView(ModuleView): for action in self._actions.values(): action.setChecked(False) self._actions[spectrometer_name].setChecked(True) - self._module.model.active_spectrometer = self._module.model.available_spectrometers[spectrometer_name] - + self._module.model.active_spectrometer = ( + self._module.model.available_spectrometers[spectrometer_name] + )