Skip to content
Snippets Groups Projects
Commit 03812a0b authored by Conor Finn's avatar Conor Finn
Browse files

RE #27012 Implement observer pattern for calibration

The calibration tab is now able to notify any tabs that subscribe to it what the current calibration is.
For now, this allows the focusing tab to perform it's algorithm based on the most recently loaded calibration.
parent 33e31c8b
No related branches found
No related tags found
No related merge requests found
......@@ -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)
......
......@@ -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)
......@@ -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)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment