Source code for quicknxs.interfaces.reduction_dialog

"""Modal dialog for reduction options.

Dialog to select reduction options to choose which outputs are needed
and in which formats to write them.
"""
# pylint: disable=bare-except

import os

from qtpy import QtCore, QtWidgets

from quicknxs.interfaces import load_ui


[docs] class ReductionDialog(QtWidgets.QDialog): """Reduction dialog.""" default_template = "{instrument}_{numbers}_{peak}_{item}_{state}.{type}" def __init__(self, parent): super(ReductionDialog, self).__init__(parent) self.ui = load_ui("ui_reduce_dialog.ui", base_instance=self) self.settings = QtCore.QSettings(".quicknxs") self.ui.directoryEntry.setText(self.settings.value("output_directory", os.path.expanduser("~"))) self.ui.fileNameEntry.setText(self.settings.value("output_file_template", ReductionDialog.default_template)) # Outputs self.ui.exportSpecular.setChecked(self._verify_true("export_specular", True)) self.ui.export_SA.setChecked(self._verify_true("export_asym", True)) self.ui.exportGISANS.setChecked(self._verify_true("export_gisans", False)) self.ui.exportOffSpecular.setChecked(self._verify_true("export_offspec", False)) self.ui.exportOffSpecularSmoothed.setChecked(self._verify_true("export_offspec_smooth", False)) # Formats self.ui.matlab.setChecked(self._verify_true("format_matlab", False)) self.ui.numpy.setChecked(self._verify_true("format_numpy", False)) self.ui.mantid_script_checkbox.setChecked(self._verify_true("format_mantid", False)) self.ui.five_cols_checkbox.setChecked(self._verify_true("format_5cols", True)) # Emails self.ui.emailSend.setChecked(self._verify_true("email_send", False)) self.ui.emailZIPData.setChecked(self._verify_true("email_zip_data", True)) self.ui.emailSendPlots.setChecked(self._verify_true("email_send_plots", False)) self.ui.emailSendData.setChecked(self._verify_true("email_send_data", True)) self.ui.emailTo.setText(self.settings.value("email_to", "")) self.ui.emailCc.setText(self.settings.value("email_cc", "")) self.ui.emailSubject.setText(self.settings.value("email_subject", "")) self.is_accepted = False def _verify_true(self, parameter, default): """Utility function to read a bool.""" _value = self.settings.value(parameter, str(default)) return str(_value).lower() == "true"
[docs] def accept(self): """Save the current options and close dialog.""" self.save_settings() self.is_accepted = True self.close()
[docs] def get_options(self): """Return the reduction options as a dict.""" if self.is_accepted is False: return None return dict( export_specular=self.ui.exportSpecular.isChecked(), export_asym=self.ui.export_SA.isChecked(), export_gisans=self.ui.exportGISANS.isChecked(), export_offspec=self.ui.exportOffSpecular.isChecked(), export_offspec_smooth=self.ui.exportOffSpecularSmoothed.isChecked(), format_matlab=self.ui.matlab.isChecked(), format_mantid=self.ui.mantid_script_checkbox.isChecked(), format_numpy=self.ui.numpy.isChecked(), format_5cols=self.ui.five_cols_checkbox.isChecked(), output_directory=self.ui.directoryEntry.text(), output_file_template=self.ui.fileNameEntry.text(), email_send=self.ui.emailSend.isChecked(), email_zip_data=self.ui.emailZIPData.isChecked(), email_send_plots=self.ui.emailSendPlots.isChecked() or self.ui.emailSendAll.isChecked(), email_send_data=self.ui.emailSendData.isChecked() or self.ui.emailSendAll.isChecked(), email_to=self.ui.emailTo.text(), email_cc=self.ui.emailCc.text(), email_subject=self.ui.emailSubject.text(), email_text=self.ui.emailText.toPlainText(), )
[docs] def change_directory(self): """Change the output directory.""" old_d = self.ui.directoryEntry.text() new_d = QtWidgets.QFileDialog.getExistingDirectory(parent=self, caption="Select new directory", directory=old_d) if new_d is not None: self.ui.directoryEntry.setText(new_d)
[docs] def reset_filename_template(self): """Reset the filename template to the default.""" self.ui.fileNameEntry.setText(ReductionDialog.default_template)
[docs] def save_settings(self) -> None: """Save reduction options in QSettings.""" self.settings.setValue("output_directory", self.ui.directoryEntry.text())