mirror of
https://github.com/nqrduck/nqrduck-spectrometer.git
synced 2024-11-09 20:40:02 +00:00
Implemented change of spectrometer.
This commit is contained in:
parent
a4431a087e
commit
35e1fd0e6c
4 changed files with 71 additions and 14 deletions
|
@ -7,7 +7,7 @@ class BaseSpectrometer(Module):
|
||||||
super().__init__(model, None, controller)
|
super().__init__(model, None, controller)
|
||||||
# This stops the view from being added to the main window.
|
# This stops the view from being added to the main window.
|
||||||
self._view = None
|
self._view = None
|
||||||
self._inner_view = view
|
self._inner_view = view(self)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def pulse_program(self):
|
def pulse_program(self):
|
||||||
|
|
|
@ -1,9 +1,34 @@
|
||||||
|
import logging
|
||||||
from nqrduck.module.module_controller import ModuleController
|
from nqrduck.module.module_controller import ModuleController
|
||||||
|
from nqrduck.core.main_controller import MainController
|
||||||
|
from nqrduck_spectrometer.base_spectrometer import BaseSpectrometer
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
class SpectrometerController(ModuleController):
|
class SpectrometerController(ModuleController):
|
||||||
def __init__(self, module):
|
def __init__(self, module):
|
||||||
super().__init__(module)
|
super().__init__(module)
|
||||||
|
|
||||||
def _load_spectrometer_modules(self):
|
def _load_spectrometer_modules(self):
|
||||||
pass
|
# Get the modules with entry points in the nqrduck group
|
||||||
|
modules = MainController._get_modules()
|
||||||
|
logger.debug("Found modules: %s", modules)
|
||||||
|
|
||||||
|
for module_name, module in modules.items():
|
||||||
|
# Check if the module instance is a spectrometer by checking if it inherits from BaseSpectrometer
|
||||||
|
if not issubclass(type(module), BaseSpectrometer):
|
||||||
|
logger.debug("Module is not a spectrometer: %s ... skipping", module_name)
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Import the module
|
||||||
|
logger.debug("Loading spectromter module: %s", module_name)
|
||||||
|
module.model.widget_changed.connect(self._module.view.on_spectrometer_widget_changed)
|
||||||
|
logger.debug("Adding spectrometer to spectrometer model: %s", module_name)
|
||||||
|
self._module.model.add_spectrometers(module_name, module)
|
||||||
|
|
||||||
|
self._module.view.create_menu_entry()
|
||||||
|
|
||||||
|
def on_loading(self):
|
||||||
|
self._module.model.spectrometer_added.connect(self._module.view.on_spectrometer_added)
|
||||||
|
self._module.model.active_spectrometer_changed.connect(self._module.view.on_active_spectrometer_changed)
|
||||||
|
self._load_spectrometer_modules()
|
|
@ -1,17 +1,18 @@
|
||||||
import logging
|
import logging
|
||||||
from PyQt5.QtCore import pyqtSignal
|
from PyQt5.QtCore import pyqtSignal
|
||||||
from nqrduck.module.module_model import ModuleModel
|
from nqrduck.module.module_model import ModuleModel
|
||||||
|
from .base_spectrometer import BaseSpectrometer
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
class SpectrometerModel(ModuleModel):
|
class SpectrometerModel(ModuleModel):
|
||||||
spectrometer_changed = pyqtSignal()
|
spectrometer_added = pyqtSignal(BaseSpectrometer)
|
||||||
|
active_spectrometer_changed = pyqtSignal(BaseSpectrometer)
|
||||||
|
|
||||||
def __init__(self, module) -> None:
|
def __init__(self, module) -> None:
|
||||||
super().__init__(module)
|
super().__init__(module)
|
||||||
self._active_spectrometer = None
|
self._active_spectrometer = None
|
||||||
self._available_spectrometers = []
|
self._available_spectrometers = dict()
|
||||||
self._load_available_spectrometers()
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def active_spectrometer(self):
|
def active_spectrometer(self):
|
||||||
|
@ -20,17 +21,15 @@ class SpectrometerModel(ModuleModel):
|
||||||
@active_spectrometer.setter
|
@active_spectrometer.setter
|
||||||
def active_spectrometer(self, value):
|
def active_spectrometer(self, value):
|
||||||
self._active_spectrometer = value
|
self._active_spectrometer = value
|
||||||
self.spectrometer_changed.emit()
|
self.active_spectrometer_changed.emit(value)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def available_spectrometers(self):
|
def available_spectrometers(self):
|
||||||
return self._available_spectrometers
|
return self._available_spectrometers
|
||||||
|
|
||||||
def _load_available_spectrometers(self):
|
def add_spectrometers(self, spectrometer_module_name, module):
|
||||||
pass
|
self._available_spectrometers [spectrometer_module_name] = module
|
||||||
|
logger.debug("Added module: %s", spectrometer_module_name)
|
||||||
|
self.spectrometer_added.emit(module)
|
||||||
def _load_spectrometer(self, spectrometer_module_name):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
from PyQt5.QtWidgets import QWidget
|
import logging
|
||||||
|
from PyQt5.QtWidgets import QWidget, QToolButton, QToolBar, QAction, QMenu
|
||||||
from nqrduck.module.module_view import ModuleView
|
from nqrduck.module.module_view import ModuleView
|
||||||
from .widget import Ui_Form
|
from .widget import Ui_Form
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
class SpectrometerView(ModuleView):
|
class SpectrometerView(ModuleView):
|
||||||
def __init__(self, module):
|
def __init__(self, module):
|
||||||
|
@ -9,5 +11,36 @@ class SpectrometerView(ModuleView):
|
||||||
|
|
||||||
widget = QWidget()
|
widget = QWidget()
|
||||||
self._ui_form = Ui_Form()
|
self._ui_form = Ui_Form()
|
||||||
self._ui_form.setupUi(self)
|
|
||||||
self.widget = widget
|
self.widget = widget
|
||||||
|
self._ui_form.setupUi(self)
|
||||||
|
|
||||||
|
def on_active_spectrometer_changed(self, module):
|
||||||
|
self._ui_form.stackedWidget.setCurrentWidget(module._inner_view)
|
||||||
|
|
||||||
|
def on_spectrometer_widget_changed(self, widget):
|
||||||
|
logger.debug("Adding module widget to stacked widget: %s", widget)
|
||||||
|
self._ui_form.stackedWidget.addWidget(widget)
|
||||||
|
self._ui_form.stackedWidget.setCurrentWidget(widget)
|
||||||
|
|
||||||
|
|
||||||
|
def on_spectrometer_added(self, module):
|
||||||
|
"""This method changes the active spectrometer to the one that was just added."""
|
||||||
|
self.on_spectrometer_widget_changed(module._inner_view)
|
||||||
|
|
||||||
|
def create_menu_entry(self):
|
||||||
|
logger.debug("Creating menu entry for spectrometer module")
|
||||||
|
menu_item = QMenu("Hardware")
|
||||||
|
logger.debug("Available spectrometer models: %s", self._module.model._available_spectrometers)
|
||||||
|
|
||||||
|
actions = []
|
||||||
|
for spectrometer_name, spectrometer_module in self._module.model._available_spectrometers.items():
|
||||||
|
logger.debug("Adding module to menu: %s", spectrometer_name)
|
||||||
|
select_action = QAction(spectrometer_module.model.toolbar_name, menu_item)
|
||||||
|
select_action.triggered.connect(lambda: self.on_menu_button_clicked(spectrometer_name))
|
||||||
|
actions.append(select_action)
|
||||||
|
|
||||||
|
self.add_menubar_item.emit("Hardware", actions)
|
||||||
|
|
||||||
|
def on_menu_button_clicked(self, spectrometer_name):
|
||||||
|
logger.debug("Active module changed to: %s", spectrometer_name)
|
||||||
|
self._module.model.active_spectrometer = self._module.model.available_spectrometers[spectrometer_name]
|
||||||
|
|
Loading…
Reference in a new issue