Newer
Older
# Mantid Repository : https://github.com/mantidproject/mantid
#
# Copyright © 2019 ISIS Rutherford Appleton Laboratory UKRI,
# NScD Oak Ridge National Laboratory, European Spallation Source,
# Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
# SPDX - License - Identifier: GPL - 3.0 +
# pylint: disable=invalid-name
from qtpy import QtCore, QtWidgets
from .tabs.calibration.model import CalibrationModel
from .tabs.calibration.view import CalibrationView
from .tabs.calibration.presenter import CalibrationPresenter
from .tabs.common import CalibrationObserver
from .tabs.common.path_handling import get_run_number_from_path
from .tabs.focus.model import FocusModel
from .tabs.focus.view import FocusView
from .tabs.focus.presenter import FocusPresenter
from .tabs.fitting.view import FittingView
from .tabs.fitting.presenter import FittingPresenter
from .settings.settings_model import SettingsModel
from .settings.settings_view import SettingsView
from .settings.settings_presenter import SettingsPresenter
from mantidqt.icons import get_icon
from mantidqt.interfacemanager import InterfaceManager
from mantidqt.utils.qt import load_ui
Ui_main_window, _ = load_ui(__file__, "main_window.ui")
class EngineeringDiffractionGui(QtWidgets.QMainWindow, Ui_main_window):
"""
The engineering diffraction interface
"""
def __init__(self, parent=None):
super(EngineeringDiffractionGui, self).__init__(parent)
# Main Window
self.setupUi(self)
self.doc = "Engineering Diffraction"
self.tabs = self.tab_main
self.setFocusPolicy(QtCore.Qt.StrongFocus)
self.calibration_presenter = None
self.calibration_observer = CalibrationObserver(self)
self.set_on_help_clicked(self.open_help_window)
self.set_on_settings_clicked(self.open_settings)
self.btn_settings.setIcon(get_icon("mdi.settings", "black", 1.2))
# Setup status bar
self.status_label = QtWidgets.QLabel()
self.setup_statusbar()
# Setup Elements
self.setup_settings()
# Setup notifiers
self.setup_calibration_notifier()
# Usage Reporting
try:
import mantid
# register startup
mantid.UsageService.registerFeatureUsage(mantid.kernel.FeatureType.Interface,
"Engineering Diffraction", False)
except ImportError:
pass
def setup_settings(self):
model = SettingsModel()
view = SettingsView(self)
self.settings_presenter = SettingsPresenter(model, view)
self.settings_presenter.load_settings_from_file_or_default()
def setup_calibration(self):
cal_model = CalibrationModel()
cal_view = CalibrationView(parent=self.tabs)
self.calibration_presenter = CalibrationPresenter(cal_model, cal_view)
self.set_on_instrument_changed(self.calibration_presenter.set_instrument_override)
self.set_on_rb_num_changed(self.calibration_presenter.set_rb_num)
self.tabs.addTab(cal_view, "Calibration")
def setup_focus(self):
focus_model = FocusModel()
focus_view = FocusView()
self.focus_presenter = FocusPresenter(focus_model, focus_view)
self.set_on_instrument_changed(self.focus_presenter.set_instrument_override)
self.set_on_rb_num_changed(self.focus_presenter.set_rb_num)
self.tabs.addTab(focus_view, "Focus")
def setup_fitting(self):
fitting_view = FittingView()
self.fitting_presenter = FittingPresenter(fitting_view)
self.tabs.addTab(fitting_view, "Fitting")
def setup_calibration_notifier(self):
self.calibration_presenter.calibration_notifier.add_subscriber(
self.focus_presenter.calibration_observer)
self.calibration_presenter.calibration_notifier.add_subscriber(self.calibration_observer)
def setup_statusbar(self):
self.statusbar.addWidget(self.status_label)
self.set_statusbar_text("No Calibration Loaded.")
def set_on_help_clicked(self, slot):
self.pushButton_help.clicked.connect(slot)
def set_on_settings_clicked(self, slot):
self.btn_settings.clicked.connect(slot)
def set_on_rb_num_changed(self, slot):
self.lineEdit_RBNumber.textChanged.connect(slot)
def set_on_instrument_changed(self, slot):
self.comboBox_instrument.currentIndexChanged.connect(slot)
def open_help_window(self):
InterfaceManager().showCustomInterfaceHelp(self.doc)
self.settings_presenter.load_existing_settings()
self.settings_presenter.show()
def get_rb_no(self):
return self.lineEdit_RBNumber.text()
def update_calibration(self, calibration):
instrument = calibration.get_instrument()
van_no = get_run_number_from_path(calibration.get_vanadium(), instrument)
sample_no = get_run_number_from_path(calibration.get_sample(), instrument)
self.set_statusbar_text(f"V: {van_no}, CeO2: {sample_no}, Instrument: {instrument}")
def set_statusbar_text(self, text):
self.status_label.setText(text)