diff --git a/qt/scientific_interfaces/Indirect/ConvFitAddWorkspaceDialog.cpp b/qt/scientific_interfaces/Indirect/ConvFitAddWorkspaceDialog.cpp index 2a4471f7079f66be0a746ecb06c183281afcad9c..6bd71d1e13dec43f2bbcc17f8fc3caa251b613ea 100644 --- a/qt/scientific_interfaces/Indirect/ConvFitAddWorkspaceDialog.cpp +++ b/qt/scientific_interfaces/Indirect/ConvFitAddWorkspaceDialog.cpp @@ -8,6 +8,7 @@ #include "MantidAPI/AnalysisDataService.h" #include "MantidAPI/MatrixWorkspace.h" +#include "MantidQtWidgets/Common/SignalBlocker.h" #include <boost/optional.hpp> @@ -18,6 +19,14 @@ MatrixWorkspace_sptr getWorkspace(const std::string &name) { return AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(name); } +bool doesExistInADS(std::string const &workspaceName) { + return AnalysisDataService::Instance().doesExist(workspaceName); +} + +bool validWorkspace(std::string const &name) { + return !name.empty() && doesExistInADS(name); +} + boost::optional<std::size_t> maximumIndex(MatrixWorkspace_sptr workspace) { if (workspace) { const auto numberOfHistograms = workspace->getNumberHistograms(); @@ -115,8 +124,9 @@ void ConvFitAddWorkspaceDialog::setResolutionFBSuffices( } void ConvFitAddWorkspaceDialog::selectAllSpectra(int state) { - if (state == Qt::Checked) { - m_uiForm.leWorkspaceIndices->setText(getIndexString(workspaceName())); + auto const name = workspaceName(); + if (validWorkspace(name) && state == Qt::Checked) { + m_uiForm.leWorkspaceIndices->setText(getIndexString(name)); m_uiForm.leWorkspaceIndices->setEnabled(false); } else m_uiForm.leWorkspaceIndices->setEnabled(true); @@ -133,8 +143,10 @@ void ConvFitAddWorkspaceDialog::workspaceChanged(const QString &workspaceName) { void ConvFitAddWorkspaceDialog::setWorkspace(const std::string &workspace) { setAllSpectraSelectionEnabled(true); - if (m_uiForm.ckAllSpectra->isChecked()) + if (m_uiForm.ckAllSpectra->isChecked()) { m_uiForm.leWorkspaceIndices->setText(getIndexString(workspace)); + m_uiForm.leWorkspaceIndices->setEnabled(false); + } } void ConvFitAddWorkspaceDialog::setAllSpectraSelectionEnabled(bool doEnable) { diff --git a/qt/scientific_interfaces/Indirect/ConvFitModel.cpp b/qt/scientific_interfaces/Indirect/ConvFitModel.cpp index 932e2a5c8fb6c61cc4e94d8a0aa58dffef736f66..633914846d1aaf846a62841d816fec86f1ab7631 100644 --- a/qt/scientific_interfaces/Indirect/ConvFitModel.cpp +++ b/qt/scientific_interfaces/Indirect/ConvFitModel.cpp @@ -24,6 +24,10 @@ MatrixWorkspace_sptr getADSMatrixWorkspace(std::string const &workspaceName) { workspaceName); } +bool doesExistInADS(std::string const &workspaceName) { + return AnalysisDataService::Instance().doesExist(workspaceName); +} + boost::optional<std::size_t> getFirstInCategory(CompositeFunction_const_sptr composite, const std::string &category) { @@ -553,7 +557,10 @@ void ConvFitModel::removeWorkspace(std::size_t index) { } void ConvFitModel::setResolution(const std::string &name, std::size_t index) { - setResolution(getADSMatrixWorkspace(name), index); + if (!name.empty() && doesExistInADS(name)) + setResolution(getADSMatrixWorkspace(name), index); + else + throw std::runtime_error("A valid resolution file needs to be selected."); } void ConvFitModel::setResolution(MatrixWorkspace_sptr resolution, diff --git a/qt/scientific_interfaces/Indirect/IndirectAddWorkspaceDialog.cpp b/qt/scientific_interfaces/Indirect/IndirectAddWorkspaceDialog.cpp index 2d3c8128512318adaa83a814d6c7aea951ae2778..edcb81288fcf603dc4249308e3840dd27ef8c58d 100644 --- a/qt/scientific_interfaces/Indirect/IndirectAddWorkspaceDialog.cpp +++ b/qt/scientific_interfaces/Indirect/IndirectAddWorkspaceDialog.cpp @@ -18,6 +18,14 @@ MatrixWorkspace_sptr getWorkspace(const std::string &name) { return AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(name); } +bool doesExistInADS(std::string const &workspaceName) { + return AnalysisDataService::Instance().doesExist(workspaceName); +} + +bool validWorkspace(std::string const &name) { + return !name.empty() && doesExistInADS(name); +} + boost::optional<std::size_t> maximumIndex(MatrixWorkspace_sptr workspace) { if (workspace) { const auto numberOfHistograms = workspace->getNumberHistograms(); @@ -102,8 +110,9 @@ void AddWorkspaceDialog::setFBSuffices(const QStringList &suffices) { } void AddWorkspaceDialog::selectAllSpectra(int state) { - if (state == Qt::Checked) { - m_uiForm.leWorkspaceIndices->setText(getIndexString(workspaceName())); + auto const name = workspaceName(); + if (validWorkspace(name) && state == Qt::Checked) { + m_uiForm.leWorkspaceIndices->setText(getIndexString(name)); m_uiForm.leWorkspaceIndices->setEnabled(false); } else m_uiForm.leWorkspaceIndices->setEnabled(true); @@ -120,8 +129,10 @@ void AddWorkspaceDialog::workspaceChanged(const QString &workspaceName) { void AddWorkspaceDialog::setWorkspace(const std::string &workspace) { setAllSpectraSelectionEnabled(true); - if (m_uiForm.ckAllSpectra->isChecked()) + if (m_uiForm.ckAllSpectra->isChecked()) { m_uiForm.leWorkspaceIndices->setText(getIndexString(workspace)); + m_uiForm.leWorkspaceIndices->setEnabled(false); + } } void AddWorkspaceDialog::setAllSpectraSelectionEnabled(bool doEnable) { diff --git a/qt/scientific_interfaces/Indirect/IndirectFittingModel.cpp b/qt/scientific_interfaces/Indirect/IndirectFittingModel.cpp index f31e89d8de8d419e6d2b8c3dd00e299ec902d3df..f7bad0ef0bb860da7cde8cc0d1ba9f1a03d3101e 100644 --- a/qt/scientific_interfaces/Indirect/IndirectFittingModel.cpp +++ b/qt/scientific_interfaces/Indirect/IndirectFittingModel.cpp @@ -25,6 +25,10 @@ using namespace Mantid::API; namespace { using namespace MantidQt::CustomInterfaces::IDA; +bool doesExistInADS(std::string const &workspaceName) { + return AnalysisDataService::Instance().doesExist(workspaceName); +} + bool equivalentWorkspaces(MatrixWorkspace_const_sptr lhs, MatrixWorkspace_const_sptr rhs) { if (!lhs || !rhs) @@ -497,6 +501,9 @@ void IndirectFittingModel::addWorkspace(const std::string &workspaceName, if (spectra.empty()) throw std::runtime_error( "Fitting Data must consist of one or more spectra."); + if (workspaceName.empty() || !doesExistInADS(workspaceName)) + throw std::runtime_error("A valid sample file needs to be selected."); + addWorkspace(workspaceName, DiscontinuousSpectra<std::size_t>(spectra)); }