Source code for mantidimaging.gui.windows.main.nexus_save_dialog
# Copyright (C) 2024 ISIS Rutherford Appleton Laboratory UKRI
# SPDX - License - Identifier: GPL-3.0-or-later
from __future__ import annotations
import os
import uuid
from typing import Optional, List
from PyQt5.QtWidgets import QDialogButtonBox, QFileDialog, QRadioButton
from mantidimaging.core.data.dataset import StrictDataset
from mantidimaging.gui.mvp_base import BaseDialogView
NXS_EXT = ".nxs"
[docs]
class NexusSaveDialog(BaseDialogView):
selected_dataset: Optional[uuid.UUID]
floatRadioButton: QRadioButton
intRadioButton: QRadioButton
def __init__(self, parent, dataset_list: List[StrictDataset]):
super().__init__(parent, 'gui/ui/nexus_save_dialog.ui')
self.browseButton.clicked.connect(self._set_save_path)
self.buttonBox.button(QDialogButtonBox.StandardButton.Save).setEnabled(False)
self.savePath.textChanged.connect(self.enable_save)
self.savePath.editingFinished.connect(self._check_extension)
self.sampleNameLineEdit.textChanged.connect(self.enable_save)
self.dataset_uuids: List[uuid.UUID] = []
self._create_dataset_lists(dataset_list)
self.selected_dataset = None
def _create_dataset_lists(self, dataset_list):
if dataset_list:
self.dataset_uuids, dataset_names = zip(*dataset_list, strict=True)
self.datasetNames.addItems(dataset_names)
[docs]
def accept(self) -> None:
self.selected_dataset = self.dataset_uuids[self.datasetNames.currentIndex()]
self.parent().execute_nexus_save()
self.close()
[docs]
def save_path(self) -> str:
"""
:return: The directory of the path as a Python string
"""
return str(self.savePath.text())
[docs]
def sample_name(self) -> str:
return str(self.sampleNameLineEdit.text())
[docs]
def enable_save(self):
self.buttonBox.button(QDialogButtonBox.StandardButton.Save).setEnabled(self.save_path().strip() != ""
and self.sample_name().strip() != "")
def _set_save_path(self):
path = QFileDialog.getSaveFileName(self, "Save NeXus file", "", f"NeXus (*{NXS_EXT})")[0]
self.savePath.setText(path)
self._check_extension()
def _check_extension(self):
path = self.save_path()
if os.path.splitext(path)[1] != NXS_EXT:
self.savePath.setText(path + NXS_EXT)
@property
def save_as_float(self) -> bool:
return self.floatRadioButton.isChecked()