diff --git a/scripts/Engineering/gui/engineering_diffraction/engineering_diffraction.py b/scripts/Engineering/gui/engineering_diffraction/engineering_diffraction.py index a7601f3f2e9e1193e79457d54bbaa3b8ef29cd42..bfb03af5406423359bacc1aed41705c377a401fe 100644 --- a/scripts/Engineering/gui/engineering_diffraction/engineering_diffraction.py +++ b/scripts/Engineering/gui/engineering_diffraction/engineering_diffraction.py @@ -41,6 +41,9 @@ class EngineeringDiffractionGui(QtWidgets.QMainWindow, Ui_main_window): self.setup_calibration() self.setup_focus() + # Setup notifiers + self.setup_calibration_notifier() + def setup_calibration(self): cal_model = CalibrationModel() cal_view = CalibrationView(parent=self.tabs) @@ -57,6 +60,9 @@ class EngineeringDiffractionGui(QtWidgets.QMainWindow, Ui_main_window): self.set_on_rb_num_changed(self.focus_presenter.set_rb_number) self.tabs.addTab(focus_view, "Focus") + def setup_calibration_notifier(self): + self.calibration_presenter.calibration_notifier.add_subscriber(self.focus_presenter.calibration_observer) + def set_on_help_clicked(self, slot): self.pushButton_help.clicked.connect(slot) diff --git a/scripts/Engineering/gui/engineering_diffraction/tabs/calibration/presenter.py b/scripts/Engineering/gui/engineering_diffraction/tabs/calibration/presenter.py index a646505f5cbf9d18b96fe7fff6cd859aca19a66c..79c5f9e50085d10d40c3a9bb444ed31d397b6c0f 100644 --- a/scripts/Engineering/gui/engineering_diffraction/tabs/calibration/presenter.py +++ b/scripts/Engineering/gui/engineering_diffraction/tabs/calibration/presenter.py @@ -9,6 +9,7 @@ from __future__ import (absolute_import, division, print_function) from mantidqt.utils.asynchronous import AsyncTask from mantid.simpleapi import logger +from mantidqt.utils.observer_pattern import Observable class CalibrationPresenter(object): @@ -16,6 +17,7 @@ class CalibrationPresenter(object): self.model = model self.view = view self.worker = None + self.calibration_notifier = self.CalibrationNotifier(self) self.current_calibration = {"vanadium_path": None, "ceria_path": None} self.pending_calibration = {"vanadium_path": None, "ceria_path": None} @@ -62,6 +64,7 @@ class CalibrationPresenter(object): def set_current_calibration(self, success_info): logger.information("Thread executed in " + str(success_info.elapsed_time) + " seconds.") self.current_calibration = self.pending_calibration + self.calibration_notifier.notify_subscribers(self.current_calibration) self.pending_calibration = {"vanadium_path": None, "ceria_path": None} self.enable_calibrate_buttons() @@ -95,3 +98,14 @@ class CalibrationPresenter(object): def _on_error(self, failure_info): logger.warning(str(failure_info)) self.enable_calibrate_buttons() + + # ----------------------- + # Observers / Observables + # ----------------------- + class CalibrationNotifier(Observable): + def __init__(self, outer): + Observable.__init__(self) + self.outer = outer + + def notify_subscribers(self, *args, **kwargs): + Observable.notify_subscribers(self, *args) diff --git a/scripts/Engineering/gui/engineering_diffraction/tabs/focus/presenter.py b/scripts/Engineering/gui/engineering_diffraction/tabs/focus/presenter.py index 8492ab6632533b43ef3992d8e9425ffa27924c95..59989643cb0a0ba398938ad3203787a2f479c266 100644 --- a/scripts/Engineering/gui/engineering_diffraction/tabs/focus/presenter.py +++ b/scripts/Engineering/gui/engineering_diffraction/tabs/focus/presenter.py @@ -10,6 +10,7 @@ from __future__ import (absolute_import, division, print_function) from qtpy.QtWidgets import QMessageBox from mantidqt.utils.asynchronous import AsyncTask +from mantidqt.utils.observer_pattern import Observer from mantid.simpleapi import logger @@ -18,12 +19,13 @@ class FocusPresenter(object): self.model = model self.view = view self.worker = None + self.calibration_observer = self.CalibrationObserver(self) # Connect view signals to local methods. self.view.set_on_focus_clicked(self.on_focus_clicked) # Variables from other GUI tabs. - self.current_calibration = {"vanadium_path": "307521", "ceria_path": None} # TODO: USE OBSERVER PATTERN + self.current_calibration = {"vanadium_path": None, "ceria_path": None} self.instrument = "ENGINX" self.rb_num = None @@ -90,3 +92,17 @@ class FocusPresenter(object): if self.view.get_south_bank(): banks.append("South") return banks + + def update_calibration(self, calibration): + self.current_calibration = calibration + + # ----------------------- + # Observers / Observables + # ----------------------- + class CalibrationObserver(Observer): + def __init__(self, outer): + Observer.__init__(self) + self.outer = outer + + def update(self, observable, calibration): + self.outer.update_calibration(calibration)