diff --git a/buildconfig/CMake/CppCheck_Suppressions.txt.in b/buildconfig/CMake/CppCheck_Suppressions.txt.in index 73d2de9ca0a4..9aa119388776 100644 --- a/buildconfig/CMake/CppCheck_Suppressions.txt.in +++ b/buildconfig/CMake/CppCheck_Suppressions.txt.in @@ -1425,13 +1425,13 @@ unreadVariable:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/ISISReflectometry/GU passedByValue:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Indirect/Reduction/ISISEnergyTransferValidator.cpp:100 useStlAlgorithm:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Indirect/Reduction/ISISEnergyTransferModelUtils.h:99 useStlAlgorithm:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/FqFitDataPresenter.cpp:23 -virtualCallInConstructor:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataView.h:41 +virtualCallInConstructor:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataView.h:42 returnTempReference:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitData.cpp:127 knownConditionTrueFalse:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitData.cpp:93 useStlAlgorithm:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/IqtFitModel.cpp:47 constVariableReference:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataModel.cpp:92 constVariableReference:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataModel.cpp:112 -useStlAlgorithm:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataModel.cpp:201 +useStlAlgorithm:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataModel.cpp:193 constVariablePointer:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitOutput.cpp:59 accessMoved:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/IndirectFittingModel.cpp:278 postfixOperator:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/IndirectFittingModel.cpp:123 diff --git a/docs/source/interfaces/general/Fit Script Generator.rst b/docs/source/interfaces/general/Fit Script Generator.rst index 17b825b821cd..c56fb2346969 100644 --- a/docs/source/interfaces/general/Fit Script Generator.rst +++ b/docs/source/interfaces/general/Fit Script Generator.rst @@ -129,7 +129,7 @@ Usage Example for Sequential Fitting 4. In the ``Workspace Indices`` field enter '0-3'. -5. Untick ``Keep Open`` and click ``Ok``. +5. Click ``Add`` and the ``Close``. 6. Right click on the ``Function Browser`` and add a ``Lorentzian`` function. @@ -173,7 +173,7 @@ Usage Example for Simultaneous Fitting 3. In the ``Workspace Indices`` field enter '0-3'. -4. Untick ``Keep Open`` and click ``Ok``. +4. Click ``Add`` and the ``Close``. 5. Change the ``Fitting Mode`` to Simultaneous. diff --git a/qt/scientific_interfaces/Inelastic/Analysis/ConvFitAddWorkspaceDialog.cpp b/qt/scientific_interfaces/Inelastic/Analysis/ConvFitAddWorkspaceDialog.cpp index deb653aec4b8..1312f5c8b338 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/ConvFitAddWorkspaceDialog.cpp +++ b/qt/scientific_interfaces/Inelastic/Analysis/ConvFitAddWorkspaceDialog.cpp @@ -66,14 +66,14 @@ const QString SPECTRA_LIST = "(" + NATURAL_OR_RANGE + "(" + COMMA + NATURAL_OR_R namespace MantidQt::CustomInterfaces::IDA { -ConvFitAddWorkspaceDialog::ConvFitAddWorkspaceDialog(QWidget *parent) : IAddWorkspaceDialog(parent) { +ConvFitAddWorkspaceDialog::ConvFitAddWorkspaceDialog(QWidget *parent) : QDialog(parent) { m_uiForm.setupUi(this); m_uiForm.leWorkspaceIndices->setValidator(createValidator(Regexes::SPECTRA_LIST, this).release()); setAllSpectraSelectionEnabled(false); connect(m_uiForm.dsWorkspace, SIGNAL(dataReady(const QString &)), this, SLOT(workspaceChanged(const QString &))); connect(m_uiForm.ckAllSpectra, SIGNAL(stateChanged(int)), this, SLOT(selectAllSpectra(int))); - connect(m_uiForm.pbAdd, SIGNAL(clicked()), this, SIGNAL(addData())); + connect(m_uiForm.pbAdd, SIGNAL(clicked()), this, SLOT(emitAddData())); connect(m_uiForm.pbClose, SIGNAL(clicked()), this, SLOT(close())); } @@ -85,8 +85,8 @@ std::string ConvFitAddWorkspaceDialog::resolutionName() const { return m_uiForm.dsResolution->getCurrentDataName().toStdString(); } -std::string ConvFitAddWorkspaceDialog::workspaceIndices() const { - return m_uiForm.leWorkspaceIndices->text().toStdString(); +MantidWidgets::FunctionModelSpectra ConvFitAddWorkspaceDialog::workspaceIndices() const { + return MantidWidgets::FunctionModelSpectra(m_uiForm.leWorkspaceIndices->text().toStdString()); } void ConvFitAddWorkspaceDialog::setWSSuffices(const QStringList &suffices) { @@ -128,6 +128,8 @@ void ConvFitAddWorkspaceDialog::workspaceChanged(const QString &workspaceName) { setAllSpectraSelectionEnabled(false); } +void ConvFitAddWorkspaceDialog::emitAddData() { emit addData(this); } + void ConvFitAddWorkspaceDialog::setWorkspace(const std::string &workspace) { setAllSpectraSelectionEnabled(true); if (m_uiForm.ckAllSpectra->isChecked()) { diff --git a/qt/scientific_interfaces/Inelastic/Analysis/ConvFitAddWorkspaceDialog.h b/qt/scientific_interfaces/Inelastic/Analysis/ConvFitAddWorkspaceDialog.h index 89856b1a72a4..0ae8959113ba 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/ConvFitAddWorkspaceDialog.h +++ b/qt/scientific_interfaces/Inelastic/Analysis/ConvFitAddWorkspaceDialog.h @@ -5,22 +5,25 @@ // Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS // SPDX - License - Identifier: GPL - 3.0 + #pragma once -#include "Common/IAddWorkspaceDialog.h" #include "DllConfig.h" +#include "MantidQtWidgets/Common/FunctionModelSpectra.h" +#include "MantidQtWidgets/Common/IAddWorkspaceDialog.h" #include "ui_ConvFitAddWorkspaceDialog.h" +#include + namespace MantidQt { namespace CustomInterfaces { namespace IDA { -class MANTIDQT_INELASTIC_DLL ConvFitAddWorkspaceDialog : public IAddWorkspaceDialog { +class MANTIDQT_INELASTIC_DLL ConvFitAddWorkspaceDialog : public QDialog, public MantidWidgets::IAddWorkspaceDialog { Q_OBJECT public: explicit ConvFitAddWorkspaceDialog(QWidget *parent); std::string workspaceName() const override; std::string resolutionName() const; - std::string workspaceIndices() const; + MantidWidgets::FunctionModelSpectra workspaceIndices() const; void setWSSuffices(const QStringList &suffices) override; void setFBSuffices(const QStringList &suffices) override; @@ -29,9 +32,13 @@ class MANTIDQT_INELASTIC_DLL ConvFitAddWorkspaceDialog : public IAddWorkspaceDia void updateSelectedSpectra() override; +signals: + void addData(MantidWidgets::IAddWorkspaceDialog *dialog); + private slots: void selectAllSpectra(int state); void workspaceChanged(const QString &workspaceName); + void emitAddData(); private: void setWorkspace(const std::string &workspace); diff --git a/qt/scientific_interfaces/Inelastic/Analysis/ConvFitAddWorkspaceDialog.ui b/qt/scientific_interfaces/Inelastic/Analysis/ConvFitAddWorkspaceDialog.ui index 602567fff903..dbefb38a842a 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/ConvFitAddWorkspaceDialog.ui +++ b/qt/scientific_interfaces/Inelastic/Analysis/ConvFitAddWorkspaceDialog.ui @@ -11,7 +11,7 @@ - Indirect Data Selection + Data Selection @@ -146,6 +146,5 @@ addData() - closeDialog() diff --git a/qt/scientific_interfaces/Inelastic/Analysis/ConvFitDataView.cpp b/qt/scientific_interfaces/Inelastic/Analysis/ConvFitDataView.cpp index c19e60967426..75a2747cbb9a 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/ConvFitDataView.cpp +++ b/qt/scientific_interfaces/Inelastic/Analysis/ConvFitDataView.cpp @@ -33,15 +33,18 @@ ConvFitDataView::ConvFitDataView(const QStringList &headers, QWidget *parent) : header->setSectionResizeMode(1, QHeaderView::Stretch); } -IAddWorkspaceDialog *ConvFitDataView::getAddWorkspaceDialog() { - m_addWorkspaceDialog = new ConvFitAddWorkspaceDialog(parentWidget()); - if (auto dialog = dynamic_cast(m_addWorkspaceDialog)) { - dialog->setResolutionWSSuffices(m_wsResolutionSuffixes); - dialog->setResolutionFBSuffices(m_fbResolutionSuffixes); - } - connect(m_addWorkspaceDialog, SIGNAL(addData()), this, SLOT(notifyAddData())); - - return m_addWorkspaceDialog; +void ConvFitDataView::showAddWorkspaceDialog() { + auto dialog = new ConvFitAddWorkspaceDialog(parentWidget()); + connect(dialog, SIGNAL(addData(MantidWidgets::IAddWorkspaceDialog *)), this, + SLOT(notifyAddData(MantidWidgets::IAddWorkspaceDialog *))); + + dialog->setAttribute(Qt::WA_DeleteOnClose); + dialog->setWSSuffices(m_wsSampleSuffixes); + dialog->setFBSuffices(m_fbSampleSuffixes); + dialog->setResolutionWSSuffices(m_wsResolutionSuffixes); + dialog->setResolutionFBSuffices(m_fbResolutionSuffixes); + dialog->updateSelectedSpectra(); + dialog->show(); } void ConvFitDataView::addTableEntry(size_t row, FitDataRow newRow) { diff --git a/qt/scientific_interfaces/Inelastic/Analysis/ConvFitDataView.h b/qt/scientific_interfaces/Inelastic/Analysis/ConvFitDataView.h index 0981f3dea91d..ff4bc403ae3a 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/ConvFitDataView.h +++ b/qt/scientific_interfaces/Inelastic/Analysis/ConvFitDataView.h @@ -16,9 +16,6 @@ namespace MantidQt { namespace CustomInterfaces { namespace IDA { -class IAddWorkspaceDialog; -class ConvFitAddWorkspaceDialog; - /** Presenter for a table of convolution fitting data. */ @@ -30,7 +27,9 @@ class MANTIDQT_INELASTIC_DLL ConvFitDataView : public IndirectFitDataView { protected: ConvFitDataView(const QStringList &headers, QWidget *parent = nullptr); - IAddWorkspaceDialog *getAddWorkspaceDialog() override; + +protected slots: + void showAddWorkspaceDialog() override; }; } // namespace IDA diff --git a/qt/scientific_interfaces/Inelastic/Analysis/FqFitAddWorkspaceDialog.cpp b/qt/scientific_interfaces/Inelastic/Analysis/FqFitAddWorkspaceDialog.cpp index 4f5812ee5983..d1388ba6a24c 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/FqFitAddWorkspaceDialog.cpp +++ b/qt/scientific_interfaces/Inelastic/Analysis/FqFitAddWorkspaceDialog.cpp @@ -12,13 +12,13 @@ namespace MantidQt::CustomInterfaces::IDA { -FqFitAddWorkspaceDialog::FqFitAddWorkspaceDialog(QWidget *parent) : IAddWorkspaceDialog(parent) { +FqFitAddWorkspaceDialog::FqFitAddWorkspaceDialog(QWidget *parent) : QDialog(parent) { m_uiForm.setupUi(this); connect(m_uiForm.dsWorkspace, SIGNAL(dataReady(const QString &)), this, SLOT(emitWorkspaceChanged(const QString &))); connect(m_uiForm.cbParameterType, SIGNAL(currentIndexChanged(const QString &)), this, SLOT(emitParameterTypeChanged(const QString &))); - connect(m_uiForm.pbAdd, SIGNAL(clicked()), this, SIGNAL(addData())); + connect(m_uiForm.pbAdd, SIGNAL(clicked()), this, SLOT(emitAddData())); connect(m_uiForm.pbClose, SIGNAL(clicked()), this, SLOT(close())); } @@ -71,4 +71,6 @@ void FqFitAddWorkspaceDialog::emitParameterTypeChanged(const QString &type) { emit parameterTypeChanged(this, type.toStdString()); } +void FqFitAddWorkspaceDialog::emitAddData() { emit addData(this); } + } // namespace MantidQt::CustomInterfaces::IDA diff --git a/qt/scientific_interfaces/Inelastic/Analysis/FqFitAddWorkspaceDialog.h b/qt/scientific_interfaces/Inelastic/Analysis/FqFitAddWorkspaceDialog.h index 7f70b5b074c9..70213354f179 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/FqFitAddWorkspaceDialog.h +++ b/qt/scientific_interfaces/Inelastic/Analysis/FqFitAddWorkspaceDialog.h @@ -6,15 +6,17 @@ // SPDX - License - Identifier: GPL - 3.0 + #pragma once -#include "Common/IAddWorkspaceDialog.h" #include "DllConfig.h" +#include "MantidQtWidgets/Common/IAddWorkspaceDialog.h" #include "ui_FqFitAddWorkspaceDialog.h" +#include + namespace MantidQt { namespace CustomInterfaces { namespace IDA { -class MANTIDQT_INELASTIC_DLL FqFitAddWorkspaceDialog : public IAddWorkspaceDialog { +class MANTIDQT_INELASTIC_DLL FqFitAddWorkspaceDialog : public QDialog, public MantidWidgets::IAddWorkspaceDialog { Q_OBJECT public: explicit FqFitAddWorkspaceDialog(QWidget *parent); @@ -33,14 +35,16 @@ class MANTIDQT_INELASTIC_DLL FqFitAddWorkspaceDialog : public IAddWorkspaceDialo void updateSelectedSpectra() override{}; -public slots: - void emitWorkspaceChanged(const QString &name); - void emitParameterTypeChanged(const QString &index); - signals: + void addData(MantidWidgets::IAddWorkspaceDialog *dialog); void workspaceChanged(FqFitAddWorkspaceDialog *dialog, const std::string &workspace); void parameterTypeChanged(FqFitAddWorkspaceDialog *dialog, const std::string &type); +private slots: + void emitWorkspaceChanged(const QString &name); + void emitParameterTypeChanged(const QString &index); + void emitAddData(); + private: Ui::FqFitAddWorkspaceDialog m_uiForm; }; diff --git a/qt/scientific_interfaces/Inelastic/Analysis/FqFitAddWorkspaceDialog.ui b/qt/scientific_interfaces/Inelastic/Analysis/FqFitAddWorkspaceDialog.ui index de8c2689d33b..898361f63b68 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/FqFitAddWorkspaceDialog.ui +++ b/qt/scientific_interfaces/Inelastic/Analysis/FqFitAddWorkspaceDialog.ui @@ -11,7 +11,7 @@ - F(Q) Fit Data Selection + Data Selection @@ -149,6 +149,5 @@ addData() - closeDialog() diff --git a/qt/scientific_interfaces/Inelastic/Analysis/FqFitDataPresenter.cpp b/qt/scientific_interfaces/Inelastic/Analysis/FqFitDataPresenter.cpp index 95405aa7ab59..cf882a5fd6ab 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/FqFitDataPresenter.cpp +++ b/qt/scientific_interfaces/Inelastic/Analysis/FqFitDataPresenter.cpp @@ -207,7 +207,7 @@ void FqFitDataPresenter::subscribeFitPropertyBrowser(IIndirectFitPropertyBrowser m_fitPropertyBrowser = browser; } -bool FqFitDataPresenter::addWorkspaceFromDialog(IAddWorkspaceDialog const *dialog) { +bool FqFitDataPresenter::addWorkspaceFromDialog(MantidWidgets::IAddWorkspaceDialog const *dialog) { if (const auto fqFitDialog = dynamic_cast(dialog)) { addWorkspace(fqFitDialog->workspaceName(), fqFitDialog->parameterType(), fqFitDialog->parameterNameIndex()); setActiveWorkspaceIDToCurrentWorkspace(fqFitDialog); @@ -321,7 +321,7 @@ std::vector FqFitDataPresenter::getParameterTypes(FqFitParameters & return types; } -void FqFitDataPresenter::setActiveWorkspaceIDToCurrentWorkspace(IAddWorkspaceDialog const *dialog) { +void FqFitDataPresenter::setActiveWorkspaceIDToCurrentWorkspace(MantidWidgets::IAddWorkspaceDialog const *dialog) { // update active data index with correct index based on the workspace name // and the vector in m_fitDataModel which is in the base class // indirectFittingModel get table workspace index diff --git a/qt/scientific_interfaces/Inelastic/Analysis/FqFitDataPresenter.h b/qt/scientific_interfaces/Inelastic/Analysis/FqFitDataPresenter.h index 9d0cf23f05c6..77a32fc70441 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/FqFitDataPresenter.h +++ b/qt/scientific_interfaces/Inelastic/Analysis/FqFitDataPresenter.h @@ -36,7 +36,7 @@ class MANTIDQT_INELASTIC_DLL FqFitDataPresenter : public IndirectFitDataPresente public: FqFitDataPresenter(IIndirectDataAnalysisTab *tab, IIndirectFitDataModel *model, IIndirectFitDataView *view); - bool addWorkspaceFromDialog(IAddWorkspaceDialog const *dialog) override; + bool addWorkspaceFromDialog(MantidWidgets::IAddWorkspaceDialog const *dialog) override; void addWorkspace(const std::string &workspaceName, const std::string ¶mType, const int &spectrum_index) override; void setActiveWidth(std::size_t widthIndex, WorkspaceID dataIndex, bool single = true) override; void setActiveEISF(std::size_t eisfIndex, WorkspaceID dataIndex, bool single = true) override; @@ -56,7 +56,7 @@ class MANTIDQT_INELASTIC_DLL FqFitDataPresenter : public IndirectFitDataPresente void updateParameterTypes(FqFitAddWorkspaceDialog *dialog, FqFitParameters ¶meters); std::vector getParameterTypes(FqFitParameters ¶meters) const; std::map chooseFqFitFunctions(bool paramWidth) const; - void setActiveWorkspaceIDToCurrentWorkspace(IAddWorkspaceDialog const *dialog); + void setActiveWorkspaceIDToCurrentWorkspace(MantidWidgets::IAddWorkspaceDialog const *dialog); std::string m_activeParameterType; WorkspaceID m_activeWorkspaceID; diff --git a/qt/scientific_interfaces/Inelastic/Analysis/FqFitDataView.cpp b/qt/scientific_interfaces/Inelastic/Analysis/FqFitDataView.cpp index 22dd08b93f63..c1c22c45d2d8 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/FqFitDataView.cpp +++ b/qt/scientific_interfaces/Inelastic/Analysis/FqFitDataView.cpp @@ -36,16 +36,20 @@ FqFitDataView::FqFitDataView(const QStringList &headers, QWidget *parent) : Indi header->setSectionResizeMode(1, QHeaderView::Stretch); } -IAddWorkspaceDialog *FqFitDataView::getAddWorkspaceDialog() { - m_addWorkspaceDialog = new FqFitAddWorkspaceDialog(parentWidget()); - - connect(m_addWorkspaceDialog, SIGNAL(addData()), this, SLOT(notifyAddData())); - connect(m_addWorkspaceDialog, SIGNAL(workspaceChanged(FqFitAddWorkspaceDialog *, const std::string &)), this, +void FqFitDataView::showAddWorkspaceDialog() { + auto dialog = new FqFitAddWorkspaceDialog(parentWidget()); + connect(dialog, SIGNAL(addData(MantidWidgets::IAddWorkspaceDialog *)), this, + SLOT(notifyAddData(MantidWidgets::IAddWorkspaceDialog *))); + connect(dialog, SIGNAL(workspaceChanged(FqFitAddWorkspaceDialog *, const std::string &)), this, SLOT(notifyWorkspaceChanged(FqFitAddWorkspaceDialog *, const std::string &))); - connect(m_addWorkspaceDialog, SIGNAL(parameterTypeChanged(FqFitAddWorkspaceDialog *, const std::string &)), this, + connect(dialog, SIGNAL(parameterTypeChanged(FqFitAddWorkspaceDialog *, const std::string &)), this, SLOT(notifyParameterTypeChanged(FqFitAddWorkspaceDialog *, const std::string &))); - return m_addWorkspaceDialog; + dialog->setAttribute(Qt::WA_DeleteOnClose); + dialog->setWSSuffices(m_wsSampleSuffixes); + dialog->setFBSuffices(m_fbSampleSuffixes); + dialog->updateSelectedSpectra(); + dialog->show(); } void FqFitDataView::notifyAddClicked() { diff --git a/qt/scientific_interfaces/Inelastic/Analysis/FqFitDataView.h b/qt/scientific_interfaces/Inelastic/Analysis/FqFitDataView.h index 65494c40db60..7990580c257b 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/FqFitDataView.h +++ b/qt/scientific_interfaces/Inelastic/Analysis/FqFitDataView.h @@ -15,7 +15,6 @@ namespace MantidQt { namespace CustomInterfaces { namespace IDA { -class IAddWorkspaceDialog; class FqFitAddWorkspaceDialog; /** @@ -29,7 +28,9 @@ class MANTIDQT_INELASTIC_DLL FqFitDataView : public IndirectFitDataView { protected: FqFitDataView(const QStringList &headers, QWidget *parent = nullptr); - IAddWorkspaceDialog *getAddWorkspaceDialog() override; + +protected slots: + void showAddWorkspaceDialog() override; private slots: void notifyAddClicked(); diff --git a/qt/scientific_interfaces/Inelastic/Analysis/IIndirectFitDataModel.h b/qt/scientific_interfaces/Inelastic/Analysis/IIndirectFitDataModel.h index cf27c2de282e..38ff04db5eee 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/IIndirectFitDataModel.h +++ b/qt/scientific_interfaces/Inelastic/Analysis/IIndirectFitDataModel.h @@ -45,7 +45,6 @@ class MANTIDQT_INELASTIC_DLL IIndirectFitDataModel { virtual void setSpectra(const std::string &spectra, WorkspaceID workspaceID) = 0; virtual void setSpectra(FunctionModelSpectra &&spectra, WorkspaceID workspaceID) = 0; virtual void setSpectra(const FunctionModelSpectra &spectra, WorkspaceID workspaceID) = 0; - virtual void addWorkspace(const std::string &workspaceName, const std::string &spectra) = 0; virtual void addWorkspace(const std::string &workspaceName, const FunctionModelSpectra &spectra) = 0; virtual void addWorkspace(Mantid::API::MatrixWorkspace_sptr workspace, const FunctionModelSpectra &spectra) = 0; virtual void removeWorkspace(WorkspaceID workspaceID) = 0; diff --git a/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataModel.cpp b/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataModel.cpp index 11bcfbdd8c6c..a1a3e58150b7 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataModel.cpp +++ b/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataModel.cpp @@ -176,20 +176,12 @@ std::vector IndirectFitDataModel::getWorkspaceNames() const { return names; } -void IndirectFitDataModel::addWorkspace(const std::string &workspaceName, const std::string &spectra) { - if (spectra.empty()) - throw std::runtime_error("Fitting Data must consist of one or more spectra."); +void IndirectFitDataModel::addWorkspace(const std::string &workspaceName, const FunctionModelSpectra &spectra) { if (workspaceName.empty() || !m_adsInstance.doesExist(workspaceName)) throw std::runtime_error("A valid sample file needs to be selected."); + if (spectra.empty()) + throw std::runtime_error("Fitting Data must consist of one or more spectra."); - try { - addWorkspace(workspaceName, FunctionModelSpectra(spectra)); - } catch (std::logic_error &e) { - throw std::runtime_error(e.what()); - } -} - -void IndirectFitDataModel::addWorkspace(const std::string &workspaceName, const FunctionModelSpectra &spectra) { auto ws = m_adsInstance.retrieveWS(workspaceName); addWorkspace(ws, spectra); } diff --git a/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataModel.h b/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataModel.h index 7ad093ba99f8..b6c07ba51c85 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataModel.h +++ b/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataModel.h @@ -29,7 +29,6 @@ class MANTIDQT_INELASTIC_DLL IndirectFitDataModel : public IIndirectFitDataModel virtual ~IndirectFitDataModel() = default; std::vector *getFittingData() override; - void addWorkspace(const std::string &workspaceName, const std::string &spectra) override; void addWorkspace(const std::string &workspaceName, const FunctionModelSpectra &spectra) override; void addWorkspace(Mantid::API::MatrixWorkspace_sptr workspace, const FunctionModelSpectra &spectra) override; Mantid::API::MatrixWorkspace_sptr getWorkspace(WorkspaceID workspaceID) const override; diff --git a/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataPresenter.cpp b/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataPresenter.cpp index 8ad68b067002..99ea31006b31 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataPresenter.cpp +++ b/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataPresenter.cpp @@ -10,7 +10,7 @@ #include #include -#include "Common/IndirectAddWorkspaceDialog.h" +#include "MantidQtWidgets/Common/AddWorkspaceDialog.h" namespace MantidQt::CustomInterfaces::IDA { @@ -27,16 +27,17 @@ std::vector *IndirectFitDataPresenter::getFittingData() { retur IIndirectFitDataView const *IndirectFitDataPresenter::getView() const { return m_view; } -bool IndirectFitDataPresenter::addWorkspaceFromDialog(IAddWorkspaceDialog const *dialog) { - if (const auto indirectDialog = dynamic_cast(dialog)) { +bool IndirectFitDataPresenter::addWorkspaceFromDialog(MantidWidgets::IAddWorkspaceDialog const *dialog) { + if (const auto indirectDialog = dynamic_cast(dialog)) { addWorkspace(indirectDialog->workspaceName(), indirectDialog->workspaceIndices()); return true; } return false; } -void IndirectFitDataPresenter::addWorkspace(const std::string &workspaceName, const std::string &spectra) { - m_model->addWorkspace(workspaceName, spectra); +void IndirectFitDataPresenter::addWorkspace(const std::string &workspaceName, + const FunctionModelSpectra &workspaceIndices) { + m_model->addWorkspace(workspaceName, workspaceIndices); } void IndirectFitDataPresenter::setResolution(const std::string &name) { @@ -94,13 +95,15 @@ UserInputValidator &IndirectFitDataPresenter::validate(UserInputValidator &valid return m_view->validate(validator); } -void IndirectFitDataPresenter::handleAddData(IAddWorkspaceDialog const *dialog) { +void IndirectFitDataPresenter::handleAddData(MantidWidgets::IAddWorkspaceDialog const *dialog) { try { m_tab->handleDataAdded(dialog); updateTableFromModel(); m_tab->handleDataChanged(); } catch (const std::runtime_error &ex) { displayWarning(ex.what()); + } catch (const std::invalid_argument &ex) { + displayWarning(ex.what()); } } diff --git a/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataPresenter.h b/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataPresenter.h index 75e72558e618..df61ce6c2ba3 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataPresenter.h +++ b/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataPresenter.h @@ -6,9 +6,9 @@ // SPDX - License - Identifier: GPL - 3.0 + #pragma once -#include "Common/IAddWorkspaceDialog.h" #include "IndirectFitDataModel.h" #include "IndirectFitDataView.h" +#include "MantidQtWidgets/Common/IAddWorkspaceDialog.h" #include "ParameterEstimation.h" #include "DllConfig.h" @@ -20,13 +20,11 @@ namespace MantidQt { namespace CustomInterfaces { namespace IDA { -using namespace MantidWidgets; - class IIndirectDataAnalysisTab; class MANTIDQT_INELASTIC_DLL IIndirectFitDataPresenter { public: - virtual void handleAddData(IAddWorkspaceDialog const *dialog) = 0; + virtual void handleAddData(MantidWidgets::IAddWorkspaceDialog const *dialog) = 0; virtual void handleRemoveClicked() = 0; virtual void handleUnifyClicked() = 0; virtual void handleCellChanged(int row, int column) = 0; @@ -38,8 +36,8 @@ class MANTIDQT_INELASTIC_DLL IndirectFitDataPresenter : public IIndirectFitDataP IndirectFitDataPresenter(IIndirectDataAnalysisTab *tab, IIndirectFitDataModel *model, IIndirectFitDataView *view); ~IndirectFitDataPresenter(); std::vector *getFittingData(); - virtual bool addWorkspaceFromDialog(IAddWorkspaceDialog const *dialog); - void addWorkspace(const std::string &workspaceName, const std::string &spectra); + virtual bool addWorkspaceFromDialog(MantidWidgets::IAddWorkspaceDialog const *dialog); + void addWorkspace(const std::string &workspaceName, const FunctionModelSpectra &workspaceIndices); void setResolution(const std::string &name); void setSampleWSSuffices(const QStringList &suffices); void setSampleFBSuffices(const QStringList &suffices); @@ -80,7 +78,7 @@ class MANTIDQT_INELASTIC_DLL IndirectFitDataPresenter : public IIndirectFitDataP virtual void subscribeFitPropertyBrowser(IIndirectFitPropertyBrowser *browser) { UNUSED_ARG(browser); }; - void handleAddData(IAddWorkspaceDialog const *dialog) override; + void handleAddData(MantidWidgets::IAddWorkspaceDialog const *dialog) override; void handleRemoveClicked() override; void handleUnifyClicked() override; void handleCellChanged(int row, int column) override; diff --git a/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataView.cpp b/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataView.cpp index 7f1390baf1cc..fc2999616cef 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataView.cpp +++ b/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataView.cpp @@ -7,7 +7,7 @@ #include "IndirectFitDataView.h" #include "IndirectFitDataPresenter.h" -#include "Common/IndirectAddWorkspaceDialog.h" +#include "MantidQtWidgets/Common/AddWorkspaceDialog.h" #include "MantidQtWidgets/Common/IndexTypes.h" #include #include @@ -103,7 +103,6 @@ IndirectFitDataView::IndirectFitDataView(const QStringList &headers, QWidget *pa setHorizontalHeaders(headers); connect(m_uiForm->pbAdd, SIGNAL(clicked()), this, SLOT(showAddWorkspaceDialog())); - connect(m_uiForm->pbAdd, SIGNAL(clicked()), this, SIGNAL(addClicked())); connect(m_uiForm->pbRemove, SIGNAL(clicked()), this, SLOT(notifyRemoveClicked())); connect(m_uiForm->pbUnify, SIGNAL(clicked()), this, SLOT(notifyUnifyClicked())); connect(m_uiForm->tbFitData, SIGNAL(cellChanged(int, int)), this, SLOT(notifyCellChanged(int, int))); @@ -200,7 +199,10 @@ void IndirectFitDataView::setResolutionWSSuffices(const QStringList &suffixes) { void IndirectFitDataView::setResolutionFBSuffices(const QStringList &suffixes) { m_fbResolutionSuffixes = suffixes; } void IndirectFitDataView::showAddWorkspaceDialog() { - auto dialog = getAddWorkspaceDialog(); + auto dialog = new MantidWidgets::AddWorkspaceDialog(parentWidget()); + connect(dialog, SIGNAL(addData(MantidWidgets::IAddWorkspaceDialog *)), this, + SLOT(notifyAddData(MantidWidgets::IAddWorkspaceDialog *))); + dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->setWSSuffices(m_wsSampleSuffixes); dialog->setFBSuffices(m_fbSampleSuffixes); @@ -208,16 +210,10 @@ void IndirectFitDataView::showAddWorkspaceDialog() { dialog->show(); } -IAddWorkspaceDialog *IndirectFitDataView::getAddWorkspaceDialog() { - m_addWorkspaceDialog = new IndirectAddWorkspaceDialog(parentWidget()); - - connect(m_addWorkspaceDialog, SIGNAL(addData()), this, SLOT(notifyAddData())); - - return m_addWorkspaceDialog; +void IndirectFitDataView::notifyAddData(MantidWidgets::IAddWorkspaceDialog *dialog) { + m_presenter->handleAddData(dialog); } -void IndirectFitDataView::notifyAddData() { m_presenter->handleAddData(m_addWorkspaceDialog); } - void IndirectFitDataView::notifyRemoveClicked() { m_presenter->handleRemoveClicked(); } void IndirectFitDataView::notifyUnifyClicked() { m_presenter->handleUnifyClicked(); } diff --git a/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataView.h b/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataView.h index 2fc661d64973..4a475ec31229 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataView.h +++ b/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataView.h @@ -17,11 +17,12 @@ #include namespace MantidQt { +namespace MantidWidgets { +class IAddWorkspaceDialog; +} namespace CustomInterfaces { namespace IDA { -class IAddWorkspaceDialog; -class IndirectAddWorkspaceDialog; class IIndirectFitDataPresenter; class MANTIDQT_INELASTIC_DLL IndirectFitDataView : public QTabWidget, public IIndirectFitDataView { @@ -52,11 +53,10 @@ class MANTIDQT_INELASTIC_DLL IndirectFitDataView : public QTabWidget, public IIn void displayWarning(const std::string &warning) override; protected slots: - void notifyAddData(); + void notifyAddData(MantidWidgets::IAddWorkspaceDialog *dialog); protected: IndirectFitDataView(const QStringList &headers, QWidget *parent); - virtual IAddWorkspaceDialog *getAddWorkspaceDialog(); std::unique_ptr m_uiForm; void setCell(std::unique_ptr cell, size_t row, size_t column); @@ -66,11 +66,12 @@ protected slots: QStringList m_wsResolutionSuffixes; QStringList m_fbResolutionSuffixes; - IAddWorkspaceDialog *m_addWorkspaceDialog; IIndirectFitDataPresenter *m_presenter; +protected slots: + virtual void showAddWorkspaceDialog(); + private slots: - void showAddWorkspaceDialog(); void notifyRemoveClicked(); void notifyUnifyClicked(); void notifyCellChanged(int row, int column); diff --git a/qt/scientific_interfaces/Inelastic/CMakeLists.txt b/qt/scientific_interfaces/Inelastic/CMakeLists.txt index fd4006df1773..5e1d65fee82d 100644 --- a/qt/scientific_interfaces/Inelastic/CMakeLists.txt +++ b/qt/scientific_interfaces/Inelastic/CMakeLists.txt @@ -47,7 +47,6 @@ set(SRC_FILES BayesFitting/Quasi.cpp BayesFitting/ResNorm.cpp BayesFitting/Stretch.cpp - Common/IndirectAddWorkspaceDialog.cpp Common/IndirectDataValidationHelper.cpp Common/IndirectInterface.cpp Common/OutputPlotOptionsModel.cpp @@ -93,7 +92,6 @@ set(MOC_FILES Analysis/FqFitDataView.h Analysis/FitStatusWidget.h Analysis/FunctionTemplateBrowser.h - Analysis/IIndirectFitOutputOptionsView.h Analysis/IndirectDockWidgetArea.h Analysis/IndirectEditResultsDialog.h Analysis/IndirectFitDataView.h @@ -111,9 +109,6 @@ set(MOC_FILES BayesFitting/Quasi.h BayesFitting/ResNorm.h BayesFitting/Stretch.h - Common/IAddWorkspaceDialog.h - Common/ISettingsView.h - Common/IndirectAddWorkspaceDialog.h Common/IndirectInterface.h Common/OutputPlotOptionsView.h Common/Settings.h @@ -150,6 +145,7 @@ set(INC_FILES Analysis/IIndirectFitDataView.h Analysis/IIndirectFitOutput.h Analysis/IIndirectFitOutputOptionsModel.h + Analysis/IIndirectFitOutputOptionsView.h Analysis/IIndirectFitPlotView.h Analysis/IIndirectFittingModel.h Analysis/IndirectFitData.h @@ -166,6 +162,7 @@ set(INC_FILES Analysis/FunctionBrowser/FqFunctionModel.h Analysis/FunctionBrowser/MSDFunctionModel.h Common/IndirectDataValidationHelper.h + Common/ISettingsView.h Common/OutputPlotOptionsModel.h Common/OutputPlotOptionsPresenter.h Common/SettingsHelper.h @@ -201,7 +198,6 @@ set(UI_FILES BayesFitting/Quasi.ui BayesFitting/ResNorm.ui BayesFitting/Stretch.ui - Common/IndirectAddWorkspaceDialog.ui Common/InterfaceSettings.ui Common/OutputPlotOptions.ui Corrections/AbsorptionCorrections.ui diff --git a/qt/scientific_interfaces/Inelastic/Common/IndirectAddWorkspaceDialog.cpp b/qt/scientific_interfaces/Inelastic/Common/IndirectAddWorkspaceDialog.cpp deleted file mode 100644 index 73122b522d01..000000000000 --- a/qt/scientific_interfaces/Inelastic/Common/IndirectAddWorkspaceDialog.cpp +++ /dev/null @@ -1,136 +0,0 @@ -// Mantid Repository : https://github.com/mantidproject/mantid -// -// Copyright © 2018 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 + -#include "IndirectAddWorkspaceDialog.h" - -#include "MantidAPI/AnalysisDataService.h" -#include "MantidAPI/MatrixWorkspace.h" - -#include -#include - -namespace { -using namespace Mantid::API; - -MatrixWorkspace_sptr getWorkspace(const std::string &name) { - return AnalysisDataService::Instance().retrieveWS(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 maximumIndex(const MatrixWorkspace_sptr &workspace) { - if (workspace) { - const auto numberOfHistograms = workspace->getNumberHistograms(); - if (numberOfHistograms > 0) - return numberOfHistograms - 1; - } - return boost::none; -} - -QString getIndexString(const MatrixWorkspace_sptr &workspace) { - const auto maximum = maximumIndex(workspace); - if (maximum) { - if (*maximum > 0) - return QString("0-%1").arg(*maximum); - return "0"; - } - return ""; -} - -QString getIndexString(const std::string &workspaceName) { return getIndexString(getWorkspace(workspaceName)); } - -std::unique_ptr createValidator(const QString ®ex, QObject *parent) { - return std::make_unique(QRegExp(regex), parent); -} - -QString OR(const QString &lhs, const QString &rhs) { return "(" + lhs + "|" + rhs + ")"; } - -QString NATURAL_NUMBER(std::size_t digits) { return OR("0", "[1-9][0-9]{," + QString::number(digits - 1) + "}"); } - -const QString EMPTY = "^$"; -const QString SPACE = "(\\s)*"; -const QString COMMA = SPACE + "," + SPACE; -const QString MINUS = "\\-"; - -const QString NUMBER = NATURAL_NUMBER(4); -const QString NATURAL_RANGE = "(" + NUMBER + MINUS + NUMBER + ")"; -const QString NATURAL_OR_RANGE = OR(NATURAL_RANGE, NUMBER); -const QString SPECTRA_LIST = "(" + NATURAL_OR_RANGE + "(" + COMMA + NATURAL_OR_RANGE + ")*)"; -} // namespace - -namespace MantidQt::CustomInterfaces::IDA { - -IndirectAddWorkspaceDialog::IndirectAddWorkspaceDialog(QWidget *parent) : IAddWorkspaceDialog(parent) { - m_uiForm.setupUi(this); - m_uiForm.leWorkspaceIndices->setValidator(createValidator(SPECTRA_LIST, this).release()); - setAllSpectraSelectionEnabled(false); - - connect(m_uiForm.dsWorkspace, SIGNAL(dataReady(const QString &)), this, SLOT(workspaceChanged(const QString &))); - connect(m_uiForm.ckAllSpectra, SIGNAL(stateChanged(int)), this, SLOT(selectAllSpectra(int))); - connect(m_uiForm.pbAdd, SIGNAL(clicked()), this, SIGNAL(addData())); - connect(m_uiForm.pbClose, SIGNAL(clicked()), this, SLOT(close())); -} - -std::string IndirectAddWorkspaceDialog::workspaceName() const { - return m_uiForm.dsWorkspace->getCurrentDataName().toStdString(); -} - -std::string IndirectAddWorkspaceDialog::workspaceIndices() const { - return m_uiForm.leWorkspaceIndices->text().toStdString(); -} - -void IndirectAddWorkspaceDialog::setWSSuffices(const QStringList &suffices) { - m_uiForm.dsWorkspace->setWSSuffixes(suffices); -} - -void IndirectAddWorkspaceDialog::setFBSuffices(const QStringList &suffices) { - m_uiForm.dsWorkspace->setFBSuffixes(suffices); -} - -void IndirectAddWorkspaceDialog::updateSelectedSpectra() { - auto const state = m_uiForm.ckAllSpectra->isChecked() ? Qt::Checked : Qt::Unchecked; - selectAllSpectra(state); -} - -void IndirectAddWorkspaceDialog::selectAllSpectra(int state) { - 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); -} - -void IndirectAddWorkspaceDialog::workspaceChanged(const QString &workspaceName) { - const auto name = workspaceName.toStdString(); - const auto workspace = getWorkspace(name); - if (workspace) - setWorkspace(name); - else - setAllSpectraSelectionEnabled(false); -} - -void IndirectAddWorkspaceDialog::setWorkspace(const std::string &workspace) { - setAllSpectraSelectionEnabled(true); - if (m_uiForm.ckAllSpectra->isChecked()) { - m_uiForm.leWorkspaceIndices->setText(getIndexString(workspace)); - m_uiForm.leWorkspaceIndices->setEnabled(false); - } -} - -void IndirectAddWorkspaceDialog::setAllSpectraSelectionEnabled(bool doEnable) { - m_uiForm.ckAllSpectra->setEnabled(doEnable); -} - -std::string IndirectAddWorkspaceDialog::getFileName() const { - return m_uiForm.dsWorkspace->getFullFilePath().toStdString(); -} - -} // namespace MantidQt::CustomInterfaces::IDA diff --git a/qt/scientific_interfaces/Inelastic/Common/IndirectAddWorkspaceDialog.h b/qt/scientific_interfaces/Inelastic/Common/IndirectAddWorkspaceDialog.h deleted file mode 100644 index e425fc3f9bbb..000000000000 --- a/qt/scientific_interfaces/Inelastic/Common/IndirectAddWorkspaceDialog.h +++ /dev/null @@ -1,45 +0,0 @@ -// Mantid Repository : https://github.com/mantidproject/mantid -// -// Copyright © 2018 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 + -#pragma once - -#include "DllConfig.h" -#include "IAddWorkspaceDialog.h" -#include "ui_IndirectAddWorkspaceDialog.h" - -namespace MantidQt { -namespace CustomInterfaces { -namespace IDA { - -class MANTIDQT_INELASTIC_DLL IndirectAddWorkspaceDialog : public IAddWorkspaceDialog { - Q_OBJECT -public: - explicit IndirectAddWorkspaceDialog(QWidget *parent); - - std::string workspaceName() const override; - std::string workspaceIndices() const; - - void setWSSuffices(const QStringList &suffices) override; - void setFBSuffices(const QStringList &suffices) override; - - void updateSelectedSpectra() override; - - std::string getFileName() const; - -private slots: - void selectAllSpectra(int state); - void workspaceChanged(const QString &workspaceName); - -private: - void setWorkspace(const std::string &workspace); - void setAllSpectraSelectionEnabled(bool doEnable); - - Ui::IndirectAddWorkspaceDialog m_uiForm; -}; - -} // namespace IDA -} // namespace CustomInterfaces -} // namespace MantidQt diff --git a/qt/scientific_interfaces/Inelastic/Common/IndirectAddWorkspaceDialog.ui b/qt/scientific_interfaces/Inelastic/Common/IndirectAddWorkspaceDialog.ui deleted file mode 100644 index 9299bee69d5c..000000000000 --- a/qt/scientific_interfaces/Inelastic/Common/IndirectAddWorkspaceDialog.ui +++ /dev/null @@ -1,140 +0,0 @@ - - - IndirectAddWorkspaceDialog - - - - 0 - 0 - 393 - 181 - - - - Indirect Data Selection - - - - - - Select data - - - - - - - - false - - - false - - - true - - - - - - - Workspace Indices - - - - - - - Workspace - - - - - - - - - - All Spectra - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Add - - - - - - - Close - - - - - - - - - - - MantidQt::MantidWidgets::DataSelector - QWidget -
MantidQtWidgets/Common/DataSelector.h
-
-
- - - - addData() - closeDialog() - -
diff --git a/qt/scientific_interfaces/Inelastic/Manipulation/IElwinView.h b/qt/scientific_interfaces/Inelastic/Manipulation/IElwinView.h index c813a30d866d..eb0fe0fe5eae 100644 --- a/qt/scientific_interfaces/Inelastic/Manipulation/IElwinView.h +++ b/qt/scientific_interfaces/Inelastic/Manipulation/IElwinView.h @@ -6,10 +6,10 @@ // SPDX - License - Identifier: GPL - 3.0 + #pragma once -#include "Common/IAddWorkspaceDialog.h" #include "DllConfig.h" #include "MantidAPI/MatrixWorkspace_fwd.h" #include "MantidQtWidgets/Common/FileFinderWidget.h" +#include "MantidQtWidgets/Common/IAddWorkspaceDialog.h" #include #include diff --git a/qt/scientific_interfaces/Inelastic/Manipulation/InelasticDataManipulationElwinTab.cpp b/qt/scientific_interfaces/Inelastic/Manipulation/InelasticDataManipulationElwinTab.cpp index aa89776188f3..334fd8c2b930 100644 --- a/qt/scientific_interfaces/Inelastic/Manipulation/InelasticDataManipulationElwinTab.cpp +++ b/qt/scientific_interfaces/Inelastic/Manipulation/InelasticDataManipulationElwinTab.cpp @@ -16,7 +16,7 @@ #include -#include "Common/IndirectAddWorkspaceDialog.h" +#include "MantidQtWidgets/Common/AddWorkspaceDialog.h" using namespace Mantid::API; using namespace MantidQt::API; @@ -288,7 +288,7 @@ void InelasticDataManipulationElwinTab::newInputFiles() { * * Updates preview selection combo box. */ -void InelasticDataManipulationElwinTab::newInputFilesFromDialog(IAddWorkspaceDialog const *dialog) { +void InelasticDataManipulationElwinTab::newInputFilesFromDialog(MantidWidgets::IAddWorkspaceDialog const *dialog) { // Clear the existing list of files if (m_dataModel->getNumberOfWorkspaces().value < 2) m_view->clearPreviewFile(); @@ -402,7 +402,7 @@ std::string InelasticDataManipulationElwinTab::getOutputBasename() { return getWorkspaceBasename(QString::fromStdString(m_pythonExportWsName)).toStdString(); } -void InelasticDataManipulationElwinTab::handleAddData(IAddWorkspaceDialog const *dialog) { +void InelasticDataManipulationElwinTab::handleAddData(MantidWidgets::IAddWorkspaceDialog const *dialog) { try { addDataToModel(dialog); updateTableFromModel(); @@ -414,10 +414,10 @@ void InelasticDataManipulationElwinTab::handleAddData(IAddWorkspaceDialog const } } -void InelasticDataManipulationElwinTab::handleAddDataFromFile(IAddWorkspaceDialog const *dialog) { +void InelasticDataManipulationElwinTab::handleAddDataFromFile(MantidWidgets::IAddWorkspaceDialog const *dialog) { try { UserInputValidator uiv; - const auto indirectDialog = dynamic_cast(dialog); + const auto indirectDialog = dynamic_cast(dialog); QList allFiles; allFiles.append(QString::fromStdString(indirectDialog->getFileName())); auto const suffixes = getFilteredSuffixes(allFiles); @@ -437,8 +437,8 @@ void InelasticDataManipulationElwinTab::handleAddDataFromFile(IAddWorkspaceDialo } } -void InelasticDataManipulationElwinTab::addDataToModel(IAddWorkspaceDialog const *dialog) { - if (const auto indirectDialog = dynamic_cast(dialog)) +void InelasticDataManipulationElwinTab::addDataToModel(MantidWidgets::IAddWorkspaceDialog const *dialog) { + if (const auto indirectDialog = dynamic_cast(dialog)) m_dataModel->addWorkspace(indirectDialog->workspaceName(), indirectDialog->workspaceIndices()); } diff --git a/qt/scientific_interfaces/Inelastic/Manipulation/InelasticDataManipulationElwinTab.h b/qt/scientific_interfaces/Inelastic/Manipulation/InelasticDataManipulationElwinTab.h index e60daa87dd8f..d2a62e73fbb4 100644 --- a/qt/scientific_interfaces/Inelastic/Manipulation/InelasticDataManipulationElwinTab.h +++ b/qt/scientific_interfaces/Inelastic/Manipulation/InelasticDataManipulationElwinTab.h @@ -7,7 +7,6 @@ #pragma once #include "Analysis/IndirectFitDataModel.h" -#include "Common/IAddWorkspaceDialog.h" #include "InelasticDataManipulation.h" #include "InelasticDataManipulationElwinTabModel.h" #include "InelasticDataManipulationElwinTabView.h" @@ -15,6 +14,7 @@ #include "MantidAPI/MatrixWorkspace.h" #include "MantidAPI/MatrixWorkspace_fwd.h" #include "MantidQtWidgets/Common/FunctionModelSpectra.h" +#include "MantidQtWidgets/Common/IAddWorkspaceDialog.h" #include "ui_InelasticDataManipulationElwinTab.h" namespace MantidQt { @@ -34,8 +34,8 @@ class IElwinPresenter { virtual void handleFilesFound() = 0; virtual void handlePreviewSpectrumChanged(int spectrum) = 0; virtual void handlePreviewIndexChanged(int index) = 0; - virtual void handleAddData(IAddWorkspaceDialog const *dialog) = 0; - virtual void handleAddDataFromFile(IAddWorkspaceDialog const *dialog) = 0; + virtual void handleAddData(MantidWidgets::IAddWorkspaceDialog const *dialog) = 0; + virtual void handleAddDataFromFile(MantidWidgets::IAddWorkspaceDialog const *dialog) = 0; virtual void handleRemoveSelectedData() = 0; virtual void updateAvailableSpectra() = 0; }; @@ -60,15 +60,15 @@ class MANTIDQT_INELASTIC_DLL InelasticDataManipulationElwinTab : public Inelasti void handleFilesFound() override; void handlePreviewSpectrumChanged(int spectrum) override; void handlePreviewIndexChanged(int index) override; - void handleAddData(IAddWorkspaceDialog const *dialog) override; - void handleAddDataFromFile(IAddWorkspaceDialog const *dialog) override; + void handleAddData(MantidWidgets::IAddWorkspaceDialog const *dialog) override; + void handleAddDataFromFile(MantidWidgets::IAddWorkspaceDialog const *dialog) override; void handleRemoveSelectedData() override; void updateAvailableSpectra() override; protected: void runComplete(bool error) override; - void newInputFilesFromDialog(IAddWorkspaceDialog const *dialog); - virtual void addDataToModel(IAddWorkspaceDialog const *dialog); + void newInputFilesFromDialog(MantidWidgets::IAddWorkspaceDialog const *dialog); + virtual void addDataToModel(MantidWidgets::IAddWorkspaceDialog const *dialog); private: void runFileInput(); diff --git a/qt/scientific_interfaces/Inelastic/Manipulation/InelasticDataManipulationElwinTabView.cpp b/qt/scientific_interfaces/Inelastic/Manipulation/InelasticDataManipulationElwinTabView.cpp index 8154d853aa18..18ba14d66396 100644 --- a/qt/scientific_interfaces/Inelastic/Manipulation/InelasticDataManipulationElwinTabView.cpp +++ b/qt/scientific_interfaces/Inelastic/Manipulation/InelasticDataManipulationElwinTabView.cpp @@ -15,7 +15,7 @@ #include -#include "Common/IndirectAddWorkspaceDialog.h" +#include "MantidQtWidgets/Common/AddWorkspaceDialog.h" using namespace Mantid::API; using namespace MantidQt::API; @@ -83,7 +83,7 @@ class ExcludeRegionDelegate : public QItemDelegate { namespace MantidQt::CustomInterfaces { using namespace IDA; InelasticDataManipulationElwinTabView::InelasticDataManipulationElwinTabView(QWidget *parent) - : m_presenter(), m_elwTree(nullptr), m_addWorkspaceDialog(nullptr) { + : m_presenter(), m_elwTree(nullptr) { // Create Editor Factories m_dblEdFac = new DoubleEditorFactory(this); @@ -203,39 +203,29 @@ void InelasticDataManipulationElwinTabView::notifyRemoveDataClicked() { m_presen void InelasticDataManipulationElwinTabView::notifyAddWorkspaceDialog() { showAddWorkspaceDialog(); } -std::unique_ptr -InelasticDataManipulationElwinTabView::getAddWorkspaceDialog(QWidget *parent) const { - return std::make_unique(parent); -} - void InelasticDataManipulationElwinTabView::showAddWorkspaceDialog() { - if (!m_addWorkspaceDialog) - m_addWorkspaceDialog = getAddWorkspaceDialog(this->parentWidget()); - m_addWorkspaceDialog->setWSSuffices(getSampleWSSuffices()); - m_addWorkspaceDialog->setFBSuffices(getSampleFBSuffices()); - m_addWorkspaceDialog->updateSelectedSpectra(); - m_addWorkspaceDialog->setAttribute(Qt::WA_DeleteOnClose); - m_addWorkspaceDialog->show(); - connect(m_addWorkspaceDialog.get(), SIGNAL(addData()), this, SLOT(notifyAddData())); - connect(m_addWorkspaceDialog.get(), SIGNAL(closeDialog()), this, SLOT(notifyCloseDialog())); -} + auto dialog = new MantidWidgets::AddWorkspaceDialog(parentWidget()); + connect(dialog, SIGNAL(addData(MantidWidgets::IAddWorkspaceDialog *)), this, + SLOT(notifyAddData(MantidWidgets::IAddWorkspaceDialog *))); -void InelasticDataManipulationElwinTabView::notifyCloseDialog() { - disconnect(m_addWorkspaceDialog.get(), SIGNAL(addData()), this, SLOT(notifyAddData())); - disconnect(m_addWorkspaceDialog.get(), SIGNAL(closeDialog()), this, SLOT(notifyCloseDialog())); - m_addWorkspaceDialog->close(); - m_addWorkspaceDialog = nullptr; + dialog->setAttribute(Qt::WA_DeleteOnClose); + dialog->setWSSuffices(getSampleWSSuffices()); + dialog->setFBSuffices(getSampleFBSuffices()); + dialog->updateSelectedSpectra(); + dialog->show(); } -void InelasticDataManipulationElwinTabView::notifyAddData() { addDataWksOrFile(m_addWorkspaceDialog.get()); } +void InelasticDataManipulationElwinTabView::notifyAddData(MantidWidgets::IAddWorkspaceDialog *dialog) { + addDataWksOrFile(dialog); +} /** This method checks whether a Workspace or a File is being uploaded through the AddWorkspaceDialog * A File requires additional checks to ensure a file of the correct type is being loaded. The Workspace list is * already filtered. */ -void InelasticDataManipulationElwinTabView::addDataWksOrFile(IAddWorkspaceDialog const *dialog) { +void InelasticDataManipulationElwinTabView::addDataWksOrFile(MantidWidgets::IAddWorkspaceDialog const *dialog) { try { - const auto indirectDialog = dynamic_cast(dialog); + const auto indirectDialog = dynamic_cast(dialog); if (indirectDialog) { // getFileName will be empty if the addWorkspaceDialog is set to Workspace instead of File. if (indirectDialog->getFileName().empty()) { @@ -243,7 +233,7 @@ void InelasticDataManipulationElwinTabView::addDataWksOrFile(IAddWorkspaceDialog } else m_presenter->handleAddDataFromFile(dialog); } else - (throw std::invalid_argument("Unable to access IndirectAddWorkspaceDialog")); + (throw std::invalid_argument("Unable to access AddWorkspaceDialog")); } catch (const std::runtime_error &ex) { QMessageBox::warning(this->parentWidget(), "Warning! ", ex.what()); @@ -344,11 +334,11 @@ void InelasticDataManipulationElwinTabView::newInputFiles() { * * Updates preview selection combo box. */ -void InelasticDataManipulationElwinTabView::newInputFilesFromDialog(IAddWorkspaceDialog const *dialog) { +void InelasticDataManipulationElwinTabView::newInputFilesFromDialog(MantidWidgets::IAddWorkspaceDialog const *dialog) { // Populate the combo box with the filenames QString workspaceNames; QString filename; - if (const auto indirectDialog = dynamic_cast(dialog)) { + if (const auto indirectDialog = dynamic_cast(dialog)) { workspaceNames = QString::fromStdString(indirectDialog->workspaceName()); filename = QString::fromStdString(indirectDialog->getFileName()); } diff --git a/qt/scientific_interfaces/Inelastic/Manipulation/InelasticDataManipulationElwinTabView.h b/qt/scientific_interfaces/Inelastic/Manipulation/InelasticDataManipulationElwinTabView.h index cd2590c68a9a..aca7595ba313 100644 --- a/qt/scientific_interfaces/Inelastic/Manipulation/InelasticDataManipulationElwinTabView.h +++ b/qt/scientific_interfaces/Inelastic/Manipulation/InelasticDataManipulationElwinTabView.h @@ -8,7 +8,6 @@ #include "Analysis/IndirectFitDataModel.h" -#include "Common/IAddWorkspaceDialog.h" #include "IElwinView.h" #include "InelasticDataManipulationElwinTab.h" #include "InelasticDataManipulationTab.h" @@ -16,6 +15,7 @@ #include "MantidAPI/MatrixWorkspace_fwd.h" #include "MantidQtWidgets/Common/FileFinderWidget.h" #include "MantidQtWidgets/Common/FunctionModelSpectra.h" +#include "MantidQtWidgets/Common/IAddWorkspaceDialog.h" #include "ui_InelasticDataManipulationElwinTab.h" namespace MantidQt { @@ -46,7 +46,7 @@ class MANTIDQT_INELASTIC_DLL InelasticDataManipulationElwinTabView : public QWid void plotInput(MatrixWorkspace_sptr inputWS, int spectrum) override; void newInputFiles() override; - void newInputFilesFromDialog(IAddWorkspaceDialog const *dialog) override; + void newInputFilesFromDialog(MantidWidgets::IAddWorkspaceDialog const *dialog) override; void clearPreviewFile() override; void clearInputFiles() override; void setRunIsRunning(const bool running) override; @@ -95,9 +95,8 @@ private slots: void notifySelectedSpectrumChanged(int); void notifyPreviewIndexChanged(int); void notifyAddWorkspaceDialog(); - void notifyAddData(); + void notifyAddData(MantidWidgets::IAddWorkspaceDialog *dialog); void notifyRemoveDataClicked(); - void notifyCloseDialog(); private: void setHorizontalHeaders(); @@ -118,13 +117,10 @@ private slots: void setButtonsEnabled(const bool enabled); void setRunEnabled(const bool enabled); void setCell(std::unique_ptr cell, int row, int column); - void addDataWksOrFile(IAddWorkspaceDialog const *dialog); - - virtual std::unique_ptr getAddWorkspaceDialog(QWidget *parent) const; + void addDataWksOrFile(MantidWidgets::IAddWorkspaceDialog const *dialog); IElwinPresenter *m_presenter; QtTreePropertyBrowser *m_elwTree; - std::unique_ptr m_addWorkspaceDialog; Ui::InelasticDataManipulationElwinTab m_uiForm; QtDoublePropertyManager *m_dblManager; diff --git a/qt/scientific_interfaces/Inelastic/Manipulation/InelasticDataManipulationIqtTabView.cpp b/qt/scientific_interfaces/Inelastic/Manipulation/InelasticDataManipulationIqtTabView.cpp index 4b30c2b89b20..6b0c537e20ad 100644 --- a/qt/scientific_interfaces/Inelastic/Manipulation/InelasticDataManipulationIqtTabView.cpp +++ b/qt/scientific_interfaces/Inelastic/Manipulation/InelasticDataManipulationIqtTabView.cpp @@ -21,7 +21,7 @@ #include -#include "Common/IndirectAddWorkspaceDialog.h" +#include "MantidQtWidgets/Common/AddWorkspaceDialog.h" using namespace Mantid::API; using namespace MantidQt::API; diff --git a/qt/scientific_interfaces/Inelastic/test/Analysis/ConvFitDataPresenterTest.h b/qt/scientific_interfaces/Inelastic/test/Analysis/ConvFitDataPresenterTest.h index bef9c6bb4bb2..7c045f64220b 100644 --- a/qt/scientific_interfaces/Inelastic/test/Analysis/ConvFitDataPresenterTest.h +++ b/qt/scientific_interfaces/Inelastic/test/Analysis/ConvFitDataPresenterTest.h @@ -13,8 +13,8 @@ #include "Analysis/ConvFitDataPresenter.h" #include "Analysis/ConvFitModel.h" #include "Analysis/IIndirectFitDataView.h" -#include "Common/IndirectAddWorkspaceDialog.h" #include "MantidFrameworkTestHelpers/IndirectFitDataCreationHelper.h" +#include "MantidQtWidgets/Common/AddWorkspaceDialog.h" #include "MockObjects.h" using namespace Mantid::API; @@ -51,7 +51,7 @@ class ConvFitDataPresenterTest : public CxxTest::TestSuite { m_workspace = createWorkspace(6); m_ads = std::make_unique("WorkspaceName", m_workspace); - m_model->addWorkspace("WorkspaceName", "0-5"); + m_model->addWorkspace("WorkspaceName", FunctionModelSpectra("0-5")); } void tearDown() override { @@ -82,7 +82,7 @@ class ConvFitDataPresenterTest : public CxxTest::TestSuite { } void test_addWorkspaceFromDialog_returns_false_if_the_dialog_is_not_convfit() { - auto dialog = new IndirectAddWorkspaceDialog(nullptr); + auto dialog = new MantidQt::MantidWidgets::AddWorkspaceDialog(nullptr); TS_ASSERT(!m_presenter->addWorkspaceFromDialog(dialog)); } diff --git a/qt/scientific_interfaces/Inelastic/test/Analysis/FqFitDataPresenterTest.h b/qt/scientific_interfaces/Inelastic/test/Analysis/FqFitDataPresenterTest.h index 676c35d671e1..8abb0d25cfdf 100644 --- a/qt/scientific_interfaces/Inelastic/test/Analysis/FqFitDataPresenterTest.h +++ b/qt/scientific_interfaces/Inelastic/test/Analysis/FqFitDataPresenterTest.h @@ -16,8 +16,8 @@ #include "Analysis/FunctionBrowser/SingleFunctionTemplateBrowser.h" #include "Analysis/IndirectFitDataView.h" #include "Analysis/IndirectFitPropertyBrowser.h" -#include "Common/IndirectAddWorkspaceDialog.h" #include "MantidFrameworkTestHelpers/IndirectFitDataCreationHelper.h" +#include "MantidQtWidgets/Common/AddWorkspaceDialog.h" #include "MockObjects.h" using namespace Mantid::API; @@ -93,7 +93,7 @@ class FqFitDataPresenterTest : public CxxTest::TestSuite { } void test_addWorkspaceFromDialog_returns_false_if_the_dialog_is_not_fqfit() { - auto dialog = new IndirectAddWorkspaceDialog(nullptr); + auto dialog = new MantidQt::MantidWidgets::AddWorkspaceDialog(nullptr); TS_ASSERT(!m_presenter->addWorkspaceFromDialog(dialog)); } diff --git a/qt/scientific_interfaces/Inelastic/test/Analysis/IndirectFitDataModelTest.h b/qt/scientific_interfaces/Inelastic/test/Analysis/IndirectFitDataModelTest.h index 53fa0dc0e500..5e34fe3aef25 100644 --- a/qt/scientific_interfaces/Inelastic/test/Analysis/IndirectFitDataModelTest.h +++ b/qt/scientific_interfaces/Inelastic/test/Analysis/IndirectFitDataModelTest.h @@ -41,8 +41,8 @@ class IndirectFitDataModelTest : public CxxTest::TestSuite { ads_instance.addOrReplace("resolution workspace", std::move(resolutionWorkspace)); ads_instance.addOrReplace("data workspace 1", std::move(dataWorkspace1)); ads_instance.addOrReplace("data workspace 2", std::move(dataWorkspace2)); - m_fitData->addWorkspace("data workspace 1", "0-3"); - m_fitData->addWorkspace("data workspace 2", "0-3"); + m_fitData->addWorkspace("data workspace 1", FunctionModelSpectra("0-3")); + m_fitData->addWorkspace("data workspace 2", FunctionModelSpectra("0-3")); m_fitData->setResolution("resolution workspace", WorkspaceID{0}); } @@ -90,7 +90,7 @@ class IndirectFitDataModelTest : public CxxTest::TestSuite { TS_ASSERT_EQUALS(m_fitData->getNumberOfWorkspaces(), 2); auto dataWorkspace = Mantid::IndirectFitDataCreationHelper::createWorkspace(4, 5); ads_instance.addOrReplace("data workspace 3", std::move(dataWorkspace)); - m_fitData->addWorkspace("data workspace 3", "0"); + m_fitData->addWorkspace("data workspace 3", FunctionModelSpectra("0")); TS_ASSERT_EQUALS(m_fitData->getNumberOfWorkspaces(), 3); } @@ -98,7 +98,7 @@ class IndirectFitDataModelTest : public CxxTest::TestSuite { TS_ASSERT_EQUALS(m_fitData->getNumberOfSpectra(WorkspaceID{0}), 4); auto dataWorkspace = Mantid::IndirectFitDataCreationHelper::createWorkspace(5, 5); ads_instance.addOrReplace("data workspace 3", std::move(dataWorkspace)); - m_fitData->addWorkspace("data workspace 3", "0-4"); + m_fitData->addWorkspace("data workspace 3", FunctionModelSpectra("0-4")); TS_ASSERT_EQUALS(m_fitData->getNumberOfSpectra(WorkspaceID{2}), 5); } @@ -122,7 +122,7 @@ class IndirectFitDataModelTest : public CxxTest::TestSuite { void test_getQValuesForData_returns_correct_value() { auto dataWorkspace = Mantid::IndirectFitDataCreationHelper::createWorkspaceWithInelasticInstrument(4); ads_instance.addOrReplace("data workspace Inelastic", dataWorkspace); - m_fitData->addWorkspace("data workspace Inelastic", "0"); + m_fitData->addWorkspace("data workspace Inelastic", FunctionModelSpectra("0")); auto spectrumInfo = dataWorkspace->spectrumInfo(); auto detID = spectrumInfo.detector(0).getID(); double efixed = dataWorkspace->getEFixed(detID); diff --git a/qt/scientific_interfaces/Inelastic/test/Analysis/IndirectFitDataPresenterTest.h b/qt/scientific_interfaces/Inelastic/test/Analysis/IndirectFitDataPresenterTest.h index dac51b5ad79a..485be115d8eb 100644 --- a/qt/scientific_interfaces/Inelastic/test/Analysis/IndirectFitDataPresenterTest.h +++ b/qt/scientific_interfaces/Inelastic/test/Analysis/IndirectFitDataPresenterTest.h @@ -15,7 +15,7 @@ #include "Analysis/IndirectFitDataView.h" #include "Analysis/IndirectFittingModel.h" #include "Analysis/ParameterEstimation.h" -#include "Common/IndirectAddWorkspaceDialog.h" +#include "MantidQtWidgets/Common/AddWorkspaceDialog.h" #include "MockObjects.h" #include "MantidFrameworkTestHelpers/IndirectFitDataCreationHelper.h" @@ -52,10 +52,9 @@ struct TableItem { double m_dbl; }; -class FakeDialog : public IAddWorkspaceDialog { +class MockDialog : public IAddWorkspaceDialog { public: - FakeDialog() : IAddWorkspaceDialog(nullptr) {} virtual std::string workspaceName() const override { return "Name"; } virtual void setWSSuffices(const QStringList &suffices) override { (void)suffices; } virtual void setFBSuffices(const QStringList &suffices) override { (void)suffices; } @@ -129,18 +128,19 @@ class IndirectFitDataPresenterTest : public CxxTest::TestSuite { ///---------------------------------------------------------------------- void test_addWorkspaceFromDialog_returns_false_if_the_dialog_is_not_indirect() { - auto dialog = new FakeDialog(); + auto dialog = new MockDialog(); TS_ASSERT(!m_presenter->addWorkspaceFromDialog(dialog)); } void test_addWorkspaceFromDialog_returns_true_for_a_valid_dialog() { - auto dialog = new IndirectAddWorkspaceDialog(nullptr); + auto dialog = new MantidQt::MantidWidgets::AddWorkspaceDialog(nullptr); TS_ASSERT(m_presenter->addWorkspaceFromDialog(dialog)); } void test_addWorkspace_with_spectra_calls_to_model() { - EXPECT_CALL(*m_model, addWorkspace("WorkspaceName", "0-3")).Times(Exactly(1)); - m_presenter->addWorkspace("WorkspaceName", "0-3"); + auto workpaceIndices = FunctionModelSpectra("0-3"); + EXPECT_CALL(*m_model, addWorkspace("WorkspaceName", workpaceIndices)).Times(Exactly(1)); + m_presenter->addWorkspace("WorkspaceName", workpaceIndices); } void test_setResolution_calls_to_model() { diff --git a/qt/scientific_interfaces/Inelastic/test/Analysis/IndirectFittingModelTest.h b/qt/scientific_interfaces/Inelastic/test/Analysis/IndirectFittingModelTest.h index 9cd5e2f5765b..113abed2b340 100644 --- a/qt/scientific_interfaces/Inelastic/test/Analysis/IndirectFittingModelTest.h +++ b/qt/scientific_interfaces/Inelastic/test/Analysis/IndirectFittingModelTest.h @@ -435,15 +435,15 @@ class IndirectFittingModelTest : public CxxTest::TestSuite { } private: - void addWorkspaceToModel(std::string workspaceName, int numberOfSpectra, std::string spectra) { + void addWorkspaceToModel(std::string workspaceName, int numberOfSpectra, std::string const &spectra) { SetUpADSWithWorkspace ads(workspaceName, createWorkspace(numberOfSpectra)); - m_model->getFitDataModel()->addWorkspace(workspaceName, spectra); + m_model->getFitDataModel()->addWorkspace(workspaceName, FunctionModelSpectra(spectra)); m_model->addDefaultParameters(); } - void addInstrumentWorkspaceToModel(std::string workspaceName, int xLength, int yLength, std::string spectra) { + void addInstrumentWorkspaceToModel(std::string workspaceName, int xLength, int yLength, std::string const &spectra) { SetUpADSWithWorkspace ads(workspaceName, createWorkspaceWithInstrument(xLength, yLength)); - m_model->getFitDataModel()->addWorkspace(workspaceName, spectra); + m_model->getFitDataModel()->addWorkspace(workspaceName, FunctionModelSpectra(spectra)); m_model->addDefaultParameters(); } diff --git a/qt/scientific_interfaces/Inelastic/test/Analysis/MockObjects.h b/qt/scientific_interfaces/Inelastic/test/Analysis/MockObjects.h index 21b21f00383a..d2b3f428a389 100644 --- a/qt/scientific_interfaces/Inelastic/test/Analysis/MockObjects.h +++ b/qt/scientific_interfaces/Inelastic/test/Analysis/MockObjects.h @@ -18,7 +18,7 @@ #include "Analysis/IIndirectFitPlotView.h" #include "Analysis/IndirectDataAnalysisTab.h" #include "Analysis/IndirectFitPropertyBrowser.h" -#include "Common/IAddWorkspaceDialog.h" +#include "MantidQtWidgets/Common/IAddWorkspaceDialog.h" #include #include @@ -32,7 +32,7 @@ class MockIndirectDataAnalysisTab : public IIndirectDataAnalysisTab { public: virtual ~MockIndirectDataAnalysisTab() = default; - MOCK_METHOD1(handleDataAdded, void(MantidQt::CustomInterfaces::IDA::IAddWorkspaceDialog const *dialog)); + MOCK_METHOD1(handleDataAdded, void(MantidQt::MantidWidgets::IAddWorkspaceDialog const *dialog)); MOCK_METHOD0(handleDataChanged, void()); MOCK_METHOD0(handleDataRemoved, void()); MOCK_METHOD3(handleTableStartXChanged, void(double startX, WorkspaceID workspaceID, WorkspaceIndex workspaceIndex)); @@ -183,7 +183,6 @@ class MockIndirectFitDataModel : public IIndirectFitDataModel { virtual ~MockIndirectFitDataModel() = default; MOCK_METHOD0(getFittingData, std::vector *()); - MOCK_METHOD2(addWorkspace, void(const std::string &workspaceName, const std::string &spectra)); MOCK_METHOD2(addWorkspace, void(const std::string &workspaceName, const FunctionModelSpectra &spectra)); MOCK_METHOD2(addWorkspace, void(MatrixWorkspace_sptr workspace, const FunctionModelSpectra &spectra)); MOCK_CONST_METHOD1(getWorkspace, MatrixWorkspace_sptr(WorkspaceID workspaceID)); diff --git a/qt/widgets/common/CMakeLists.txt b/qt/widgets/common/CMakeLists.txt index 9832dcbfaffb..327e53da472f 100644 --- a/qt/widgets/common/CMakeLists.txt +++ b/qt/widgets/common/CMakeLists.txt @@ -278,6 +278,7 @@ set(QT5_INC_FILES inc/MantidQtWidgets/Common/FunctionMultiDomainPresenter.h inc/MantidQtWidgets/Common/HelpWindow.h inc/MantidQtWidgets/Common/Hint.h + inc/MantidQtWidgets/Common/IAddWorkspaceDialog.h inc/MantidQtWidgets/Common/IConfiguredAlgorithm.h inc/MantidQtWidgets/Common/IFitScriptGeneratorModel.h inc/MantidQtWidgets/Common/IFitScriptGeneratorPresenter.h @@ -357,7 +358,6 @@ set(QT5_UI_FILES ) set(MOC_FILES - inc/MantidQtWidgets/Common/AddWorkspaceDialog.h inc/MantidQtWidgets/Common/AlgorithmDialog.h inc/MantidQtWidgets/Common/AlgorithmHistoryWindow.h inc/MantidQtWidgets/Common/AlgorithmRunner.h @@ -720,7 +720,6 @@ set(TEST_FILES set(CXXTEST_EXTRA_HEADER_INCLUDE ${CMAKE_CURRENT_LIST_DIR}/test/WidgetsCommonTestInitialization.h) set(QT5_TEST_FILES - test/AddWorkspaceDialogTest.h test/BatchAlgorithmRunnerTest.h test/FileDialogHandlerTest.h test/FindFilesThreadPoolManagerTest.h diff --git a/qt/widgets/common/inc/MantidQtWidgets/Common/AddWorkspaceDialog.h b/qt/widgets/common/inc/MantidQtWidgets/Common/AddWorkspaceDialog.h index 0d54dfd14f3b..f7e93e08da4c 100644 --- a/qt/widgets/common/inc/MantidQtWidgets/Common/AddWorkspaceDialog.h +++ b/qt/widgets/common/inc/MantidQtWidgets/Common/AddWorkspaceDialog.h @@ -7,61 +7,44 @@ #pragma once #include "DllOption.h" -#include "MantidAPI/MatrixWorkspace_fwd.h" -#include "MantidAPI/WorkspaceGroup_fwd.h" +#include "MantidQtWidgets/Common/FunctionModelSpectra.h" +#include "MantidQtWidgets/Common/IAddWorkspaceDialog.h" #include "ui_AddWorkspaceDialog.h" #include -#include #include -#include namespace MantidQt { namespace MantidWidgets { -/** - * A dialog for selecting a workspace from the ADS. - */ -class EXPORT_OPT_MANTIDQT_COMMON AddWorkspaceDialog : public QDialog { +class EXPORT_OPT_MANTIDQT_COMMON AddWorkspaceDialog : public QDialog, public IAddWorkspaceDialog { Q_OBJECT - public: - explicit AddWorkspaceDialog(QWidget *parent = nullptr); - QString workspaceName() const { return m_workspaceName; } - std::vector workspaceIndices() const { return m_wsIndices; } + explicit AddWorkspaceDialog(QWidget *parent); - std::vector getWorkspaces() const; + std::string workspaceName() const override; + FunctionModelSpectra workspaceIndices() const; -public: - /// Testing accessors - QComboBox *workspaceNameComboBox() const { return m_uiForm.cbWorkspaceName; } - QLineEdit *workspaceIndiceLineEdit() const { return m_uiForm.leWSIndices; } + void setWSSuffices(const QStringList &suffices) override; + void setFBSuffices(const QStringList &suffices) override; -signals: - void closeDialog(); - void okClicked(bool close); + void updateSelectedSpectra() override; -public slots: - void handleCancelClicked(); - void handleOKClicked(); + std::string getFileName() const; + +signals: + void addData(MantidWidgets::IAddWorkspaceDialog *dialog); private slots: - void workspaceNameChanged(const QString & /*wsName*/); void selectAllSpectra(int state); + void workspaceChanged(const QString &workspaceName); + void emitAddData(); private: - void addWorkspacesFromGroup(std::vector &workspaces, - Mantid::API::WorkspaceGroup_const_sptr const &group) const; + void setWorkspace(const std::string &workspace); + void setAllSpectraSelectionEnabled(bool doEnable); - QStringList availableWorkspaces() const; - void findCommonMaxIndex(const QString &wsName); - /// Name of the selected workspace - QString m_workspaceName; - /// Selected workspace index - std::vector m_wsIndices; - /// Maximum index in the selected workspace - int m_maxIndex; Ui::AddWorkspaceDialog m_uiForm; }; diff --git a/qt/widgets/common/inc/MantidQtWidgets/Common/AddWorkspaceDialog.ui b/qt/widgets/common/inc/MantidQtWidgets/Common/AddWorkspaceDialog.ui index a3cceba760d3..f52214fc563b 100644 --- a/qt/widgets/common/inc/MantidQtWidgets/Common/AddWorkspaceDialog.ui +++ b/qt/widgets/common/inc/MantidQtWidgets/Common/AddWorkspaceDialog.ui @@ -6,61 +6,54 @@ 0 0 - 349 - 171 + 393 + 181 - Add Workspace + Data Selection - + - + Select data - + - + - - - Select a workspace for fitting + + + false - - true + + false - - QComboBox::NoInsert + + true - + Workspace Indices - - - - List of workspace indices. For example, 1,3,5,10-20 - - - - + Workspace + + + - - - Check to select all spectra in the workspace - + All Spectra @@ -69,14 +62,14 @@ - + Qt::Vertical 20 - 11 + 40 @@ -88,7 +81,7 @@ - 10 + 0 0 @@ -113,26 +106,16 @@ - - - Keep Open - - - true - - - - - + - OK + Add - + - Cancel + Close @@ -141,6 +124,16 @@ + + + MantidQt::MantidWidgets::DataSelector + QWidget +
MantidQtWidgets/Common/DataSelector.h
+
+
+ + addData() + diff --git a/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorMockObjects.h b/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorMockObjects.h index e37b24583f82..f0d6a7fa8a67 100644 --- a/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorMockObjects.h +++ b/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorMockObjects.h @@ -47,6 +47,8 @@ class MockFitScriptGeneratorPresenter : public IFitScriptGeneratorPresenter { MOCK_METHOD3(notifyPresenterImpl, void(ViewEvent const &ev, std::string const &arg1, std::string const &arg2)); MOCK_METHOD2(notifyPresenter, void(ViewEvent const &ev, std::vector const &vec)); MOCK_METHOD2(notifyPresenter, void(ViewEvent const &ev, FittingMode fittingMode)); + MOCK_METHOD2(handleAddDomainAccepted, void(std::vector const &workspaces, + FunctionModelSpectra const &workspaceIndices)); MOCK_METHOD0(openFitScriptGenerator, void()); @@ -84,8 +86,8 @@ class MockFitScriptGeneratorView : public IFitScriptGeneratorView { void(std::string const &workspaceName, WorkspaceIndex workspaceIndex, double startX, double endX)); MOCK_METHOD0(openAddWorkspaceDialog, void()); - MOCK_METHOD0(getDialogWorkspaces, std::vector()); - MOCK_CONST_METHOD0(getDialogWorkspaceIndices, std::vector()); + MOCK_METHOD1(getDialogWorkspaces, std::vector( + MantidQt::MantidWidgets::IAddWorkspaceDialog *dialog)); MOCK_METHOD7(openEditLocalParameterDialog, void(std::string const ¶meter, std::vector const &workspaceNames, diff --git a/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorPresenter.h b/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorPresenter.h index c71f4281448d..7765362826a2 100644 --- a/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorPresenter.h +++ b/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorPresenter.h @@ -38,6 +38,8 @@ class EXPORT_OPT_MANTIDQT_COMMON FitScriptGeneratorPresenter : public IFitScript [[maybe_unused]] std::string const &arg2 = "") override; void notifyPresenter(ViewEvent const &event, std::vector const &vec) override; void notifyPresenter(ViewEvent const &event, FittingMode fittingMode) override; + void handleAddDomainAccepted(std::vector const &workspaces, + FunctionModelSpectra const &workspaceIndices) override; void openFitScriptGenerator() override; @@ -50,7 +52,6 @@ class EXPORT_OPT_MANTIDQT_COMMON FitScriptGeneratorPresenter : public IFitScript void handleADSRenameEvent(std::string const &workspaceName, std::string const &newName); void handleRemoveDomainClicked(); void handleAddDomainClicked(); - void handleAddDomainAccepted(); void handleSelectionChanged(); void handleStartXChanged(); void handleEndXChanged(); @@ -72,7 +73,7 @@ class EXPORT_OPT_MANTIDQT_COMMON FitScriptGeneratorPresenter : public IFitScript void setWorkspaces(QStringList const &workspaceNames, double startX, double endX); void addWorkspaces(std::vector const &workspaces, - std::vector const &workspaceIndices); + FunctionModelSpectra const &workspaceIndices); void addWorkspace(std::string const &workspaceName, double startX, double endX); void addWorkspace(Mantid::API::MatrixWorkspace_const_sptr const &workspace, double startX, double endX); void addWorkspace(Mantid::API::MatrixWorkspace_const_sptr const &workspace, WorkspaceIndex workspaceIndex, diff --git a/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorView.h b/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorView.h index 29b18840b3d6..75cbd73f8470 100644 --- a/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorView.h +++ b/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorView.h @@ -15,6 +15,7 @@ #include "MantidQtWidgets/Common/AddWorkspaceDialog.h" #include "MantidQtWidgets/Common/FitScriptOptionsBrowser.h" #include "MantidQtWidgets/Common/FittingMode.h" +#include "MantidQtWidgets/Common/FunctionModelSpectra.h" #include "MantidQtWidgets/Common/FunctionTreeView.h" #include "MantidQtWidgets/Common/IFitScriptGeneratorView.h" #include "MantidQtWidgets/Common/IndexTypes.h" @@ -75,8 +76,8 @@ class EXPORT_OPT_MANTIDQT_COMMON FitScriptGeneratorView : public IFitScriptGener double endX) override; void openAddWorkspaceDialog() override; - [[nodiscard]] std::vector getDialogWorkspaces() override; - [[nodiscard]] std::vector getDialogWorkspaceIndices() const override; + [[nodiscard]] std::vector + getDialogWorkspaces(MantidWidgets::IAddWorkspaceDialog *dialog) override; void openEditLocalParameterDialog(std::string const ¶meter, std::vector const &workspaceNames, std::vector const &domainNames, std::vector const &values, @@ -111,20 +112,15 @@ class EXPORT_OPT_MANTIDQT_COMMON FitScriptGeneratorView : public IFitScriptGener FitScriptGeneratorDataTable *tableWidget() const override { return m_dataTable.get(); } QPushButton *removeButton() const override { return m_ui.pbRemoveDomain; } QPushButton *addWorkspaceButton() const override { return m_ui.pbAddDomain; } - AddWorkspaceDialog *addWorkspaceDialog() const override { return m_addWorkspaceDialog.get(); } QPushButton *generateScriptToFileButton() const override { return m_ui.pbGenerateScriptToFile; } QPushButton *generateScriptToClipboardButton() const override { return m_ui.pbGenerateScriptToClipboard; } -public slots: - void closeEvent(QCloseEvent *event) override; - private slots: void notifyADSDeleteEvent(std::string const &workspaceName); void notifyADSClearEvent(); void notifyADSRenameEvent(std::string const &workspaceName, std::string const &newName); - void closeAddWorkspaceDialog(); - void addWorkspaceDialogAccepted(bool close); + void addWorkspaceDialogAccepted(MantidWidgets::IAddWorkspaceDialog *dialog); void onRemoveDomainClicked(); void onAddDomainClicked(); @@ -156,7 +152,6 @@ private slots: void setFittingMode(FittingMode fittingMode); IFitScriptGeneratorPresenter *m_presenter; - std::unique_ptr m_addWorkspaceDialog; std::unique_ptr m_dataTable; std::unique_ptr m_functionTreeView; std::unique_ptr m_fitOptionsBrowser; diff --git a/qt/scientific_interfaces/Inelastic/Common/IAddWorkspaceDialog.h b/qt/widgets/common/inc/MantidQtWidgets/Common/IAddWorkspaceDialog.h similarity index 60% rename from qt/scientific_interfaces/Inelastic/Common/IAddWorkspaceDialog.h rename to qt/widgets/common/inc/MantidQtWidgets/Common/IAddWorkspaceDialog.h index 5829208fe047..4c3091d5c26e 100644 --- a/qt/scientific_interfaces/Inelastic/Common/IAddWorkspaceDialog.h +++ b/qt/widgets/common/inc/MantidQtWidgets/Common/IAddWorkspaceDialog.h @@ -6,31 +6,23 @@ // SPDX - License - Identifier: GPL - 3.0 + #pragma once -#include "DllConfig.h" -#include -#include +#include "DllOption.h" + +#include + +#include namespace MantidQt { -namespace CustomInterfaces { -namespace IDA { +namespace MantidWidgets { -class MANTIDQT_INELASTIC_DLL IAddWorkspaceDialog : public QDialog { - Q_OBJECT +class EXPORT_OPT_MANTIDQT_COMMON IAddWorkspaceDialog { public: - IAddWorkspaceDialog(QWidget *parent) : QDialog(parent) {} virtual std::string workspaceName() const = 0; virtual void setWSSuffices(const QStringList &suffices) = 0; virtual void setFBSuffices(const QStringList &suffices) = 0; virtual void updateSelectedSpectra() = 0; - - void closeEvent(QCloseEvent *) override { emit closeDialog(); } - -signals: - void addData(); - void closeDialog(); }; -} // namespace IDA -} // namespace CustomInterfaces +} // namespace MantidWidgets } // namespace MantidQt diff --git a/qt/widgets/common/inc/MantidQtWidgets/Common/IFitScriptGeneratorPresenter.h b/qt/widgets/common/inc/MantidQtWidgets/Common/IFitScriptGeneratorPresenter.h index efe892eb6a7d..11af7f790159 100644 --- a/qt/widgets/common/inc/MantidQtWidgets/Common/IFitScriptGeneratorPresenter.h +++ b/qt/widgets/common/inc/MantidQtWidgets/Common/IFitScriptGeneratorPresenter.h @@ -8,8 +8,10 @@ #include "DllOption.h" #include "IFitScriptGeneratorView.h" +#include "MantidAPI/MatrixWorkspace_fwd.h" #include "MantidQtWidgets/Common/FittingGlobals.h" #include "MantidQtWidgets/Common/FittingMode.h" +#include "MantidQtWidgets/Common/FunctionModelSpectra.h" #include #include @@ -27,6 +29,8 @@ class EXPORT_OPT_MANTIDQT_COMMON IFitScriptGeneratorPresenter { [[maybe_unused]] std::string const &arg2 = "") = 0; virtual void notifyPresenter(ViewEvent const &event, std::vector const &vec) = 0; virtual void notifyPresenter(ViewEvent const &event, FittingMode fittingMode) = 0; + virtual void handleAddDomainAccepted(std::vector const &workspaces, + FunctionModelSpectra const &workspaceIndices) = 0; virtual void openFitScriptGenerator() = 0; diff --git a/qt/widgets/common/inc/MantidQtWidgets/Common/IFitScriptGeneratorView.h b/qt/widgets/common/inc/MantidQtWidgets/Common/IFitScriptGeneratorView.h index 73bbf5a98f4f..e49ec5673688 100644 --- a/qt/widgets/common/inc/MantidQtWidgets/Common/IFitScriptGeneratorView.h +++ b/qt/widgets/common/inc/MantidQtWidgets/Common/IFitScriptGeneratorView.h @@ -11,6 +11,7 @@ #include "MantidAPI/IFunction.h" #include "MantidAPI/MatrixWorkspace_fwd.h" #include "MantidQtWidgets/Common/FittingMode.h" +#include "MantidQtWidgets/Common/FunctionModelSpectra.h" #include "MantidQtWidgets/Common/IndexTypes.h" #include "MantidQtWidgets/Common/MantidWidget.h" @@ -27,6 +28,7 @@ namespace MantidWidgets { class AddWorkspaceDialog; class FitScriptGeneratorDataTable; +class IAddWorkspaceDialog; class IFitScriptGeneratorPresenter; struct GlobalParameter; struct GlobalTie; @@ -41,7 +43,6 @@ class EXPORT_OPT_MANTIDQT_COMMON IFitScriptGeneratorView : public API::MantidWid ADSRenameEvent, RemoveDomainClicked, AddDomainClicked, - AddDomainAccepted, StartXChanged, EndXChanged, SelectionChanged, @@ -88,8 +89,8 @@ class EXPORT_OPT_MANTIDQT_COMMON IFitScriptGeneratorView : public API::MantidWid double endX) = 0; virtual void openAddWorkspaceDialog() = 0; - [[nodiscard]] virtual std::vector getDialogWorkspaces() = 0; - [[nodiscard]] virtual std::vector getDialogWorkspaceIndices() const = 0; + [[nodiscard]] virtual std::vector + getDialogWorkspaces(MantidWidgets::IAddWorkspaceDialog *dialog) = 0; virtual void openEditLocalParameterDialog(std::string const ¶meter, std::vector const &workspaceNames, @@ -127,7 +128,6 @@ class EXPORT_OPT_MANTIDQT_COMMON IFitScriptGeneratorView : public API::MantidWid virtual FitScriptGeneratorDataTable *tableWidget() const = 0; virtual QPushButton *removeButton() const = 0; virtual QPushButton *addWorkspaceButton() const = 0; - virtual AddWorkspaceDialog *addWorkspaceDialog() const = 0; virtual QPushButton *generateScriptToFileButton() const = 0; virtual QPushButton *generateScriptToClipboardButton() const = 0; }; diff --git a/qt/widgets/common/src/AddWorkspaceDialog.cpp b/qt/widgets/common/src/AddWorkspaceDialog.cpp index 22662b0e923b..5a90674aeab2 100644 --- a/qt/widgets/common/src/AddWorkspaceDialog.cpp +++ b/qt/widgets/common/src/AddWorkspaceDialog.cpp @@ -8,165 +8,123 @@ #include "MantidAPI/AnalysisDataService.h" #include "MantidAPI/MatrixWorkspace.h" -#include "MantidAPI/WorkspaceGroup.h" -#include "MantidKernel/ArrayBoundedValidator.h" -#include "MantidKernel/ArrayProperty.h" -#include -#include - -namespace MantidQt::MantidWidgets { +#include +#include +namespace { using namespace Mantid::API; -namespace { -MatrixWorkspace_sptr getMatrixWorkspace(const QString &name) { - return AnalysisDataService::Instance().retrieveWS(name.toStdString()); -} -WorkspaceGroup_sptr getWorkspaceGroup(const QString &name) { - return AnalysisDataService::Instance().retrieveWS(name.toStdString()); +MatrixWorkspace_sptr getWorkspace(const std::string &name) { + return AnalysisDataService::Instance().retrieveWS(name); } -} // namespace -/// Constructor. -/// @param parent :: A parent widget. -AddWorkspaceDialog::AddWorkspaceDialog(QWidget *parent) : QDialog(parent), m_maxIndex(0) { - m_uiForm.setupUi(this); - // populate the combo box with names of eligible workspaces - QStringList workspaceNames = availableWorkspaces(); - connect(m_uiForm.cbWorkspaceName, SIGNAL(currentIndexChanged(const QString &)), this, - SLOT(workspaceNameChanged(const QString &))); - m_uiForm.cbWorkspaceName->addItems(workspaceNames); - - connect(m_uiForm.cbAllSpectra, SIGNAL(stateChanged(int)), this, SLOT(selectAllSpectra(int))); - connect(m_uiForm.pbCancel, SIGNAL(clicked()), this, SLOT(handleCancelClicked())); - connect(m_uiForm.pbOK, SIGNAL(clicked()), this, SLOT(handleOKClicked())); +bool doesExistInADS(std::string const &workspaceName) { + return AnalysisDataService::Instance().doesExist(workspaceName); } -std::vector AddWorkspaceDialog::getWorkspaces() const { - auto const wsName = this->workspaceName().trimmed().toStdString(); - std::vector workspaces; +bool validWorkspace(std::string const &name) { return !name.empty() && doesExistInADS(name); } - auto &ads = AnalysisDataService::Instance(); - if (ads.doesExist(wsName)) { - if (auto const workspace = ads.retrieveWS(wsName)) - workspaces.emplace_back(workspace); - else if (auto const group = ads.retrieveWS(wsName)) - addWorkspacesFromGroup(workspaces, group); +boost::optional maximumIndex(const MatrixWorkspace_sptr &workspace) { + if (workspace) { + const auto numberOfHistograms = workspace->getNumberHistograms(); + if (numberOfHistograms > 0) + return numberOfHistograms - 1; } - return workspaces; + return boost::none; } -void AddWorkspaceDialog::addWorkspacesFromGroup(std::vector &workspaces, - WorkspaceGroup_const_sptr const &group) const { - auto const groupSize = static_cast(group->getNumberOfEntries()); - for (auto i = 0u; i < groupSize; ++i) { - if (auto const workspace = std::dynamic_pointer_cast(group->getItem(i))) { - workspaces.emplace_back(workspace); - } +QString getIndexString(const MatrixWorkspace_sptr &workspace) { + const auto maximum = maximumIndex(workspace); + if (maximum) { + if (*maximum > 0) + return QString("0-%1").arg(*maximum); + return "0"; } + return ""; } -/// Slot. Reacts on change of workspace name in the selection combo box. -/// @param wsName :: Name of newly selected workspace. -void AddWorkspaceDialog::workspaceNameChanged(const QString &wsName) { - findCommonMaxIndex(wsName); - auto text = m_maxIndex > 0 ? QString("0-%1").arg(m_maxIndex) : "0"; - if (m_uiForm.cbAllSpectra->isChecked() || m_maxIndex == 0) { - m_uiForm.leWSIndices->setText(text); - } else { - m_uiForm.leWSIndices->clear(); - m_uiForm.leWSIndices->setPlaceholderText(text); - } +QString getIndexString(const std::string &workspaceName) { return getIndexString(getWorkspace(workspaceName)); } + +std::unique_ptr createValidator(const QString ®ex, QObject *parent) { + return std::make_unique(QRegExp(regex), parent); } -/// Slot. Called when "All Spectra" check box changes its state -/// @param state :: The state of the check box (Qt::Checked or not). -void AddWorkspaceDialog::selectAllSpectra(int state) { - if (state == Qt::Checked) { - m_uiForm.leWSIndices->setText(QString("0-%1").arg(m_maxIndex)); - m_uiForm.leWSIndices->setEnabled(false); - } else { - m_uiForm.leWSIndices->setEnabled(true); - } +QString OR(const QString &lhs, const QString &rhs) { return "(" + lhs + "|" + rhs + ")"; } + +QString NATURAL_NUMBER(std::size_t digits) { return OR("0", "[1-9][0-9]{," + QString::number(digits - 1) + "}"); } + +const QString EMPTY = "^$"; +const QString SPACE = "(\\s)*"; +const QString COMMA = SPACE + "," + SPACE; +const QString MINUS = "\\-"; + +const QString NUMBER = NATURAL_NUMBER(4); +const QString NATURAL_RANGE = "(" + NUMBER + MINUS + NUMBER + ")"; +const QString NATURAL_OR_RANGE = OR(NATURAL_RANGE, NUMBER); +const QString SPECTRA_LIST = "(" + NATURAL_OR_RANGE + "(" + COMMA + NATURAL_OR_RANGE + ")*)"; +} // namespace + +namespace MantidQt::MantidWidgets { + +AddWorkspaceDialog::AddWorkspaceDialog(QWidget *parent) : QDialog(parent) { + m_uiForm.setupUi(this); + m_uiForm.leWorkspaceIndices->setValidator(createValidator(SPECTRA_LIST, this).release()); + setAllSpectraSelectionEnabled(false); + + connect(m_uiForm.dsWorkspace, SIGNAL(dataReady(const QString &)), this, SLOT(workspaceChanged(const QString &))); + connect(m_uiForm.ckAllSpectra, SIGNAL(stateChanged(int)), this, SLOT(selectAllSpectra(int))); + connect(m_uiForm.pbAdd, SIGNAL(clicked()), this, SLOT(emitAddData())); + connect(m_uiForm.pbClose, SIGNAL(clicked()), this, SLOT(close())); } -QStringList AddWorkspaceDialog::availableWorkspaces() const { - auto &ADS = Mantid::API::AnalysisDataService::Instance(); - QStringList workspaceNames; - auto wsNames = ADS.getObjectNames(Mantid::Kernel::DataServiceSort::Sorted); - for (auto &wsName : wsNames) { - if (ADS.retrieveWS(wsName)) { - workspaceNames << QString::fromStdString(wsName); - continue; - } - auto grp = ADS.retrieveWS(wsName); - if (grp) { - bool hasMatrixWorkspace = false; - for (auto ws : grp->getAllItems()) { - if (dynamic_cast(ws.get())) { - hasMatrixWorkspace = true; - break; - } - } - if (hasMatrixWorkspace) { - workspaceNames << QString::fromStdString(wsName); - } - } - } - return workspaceNames; +std::string AddWorkspaceDialog::workspaceName() const { + return m_uiForm.dsWorkspace->getCurrentDataName().toStdString(); } -void AddWorkspaceDialog::findCommonMaxIndex(const QString &wsName) { - m_maxIndex = 0; - auto mws = getMatrixWorkspace(wsName); - if (mws) { - m_maxIndex = static_cast(mws->getNumberHistograms()) - 1; - } else { - auto grp = getWorkspaceGroup(wsName); - if (grp) { - int maxIndex = std::numeric_limits::max(); - for (auto ws : grp->getAllItems()) { - mws = std::dynamic_pointer_cast(ws); - if (mws) { - maxIndex = std::min(maxIndex, static_cast(mws->getNumberHistograms()) - 1); - } - } - m_maxIndex = maxIndex < std::numeric_limits::max() ? maxIndex : 0; - } - } - if (m_maxIndex < 0) { - m_maxIndex = 0; - } +FunctionModelSpectra AddWorkspaceDialog::workspaceIndices() const { + return FunctionModelSpectra(m_uiForm.leWorkspaceIndices->text().toStdString()); } -void AddWorkspaceDialog::handleCancelClicked() { - m_workspaceName.clear(); - m_wsIndices.clear(); - emit closeDialog(); +void AddWorkspaceDialog::setWSSuffices(const QStringList &suffices) { m_uiForm.dsWorkspace->setWSSuffixes(suffices); } + +void AddWorkspaceDialog::setFBSuffices(const QStringList &suffices) { m_uiForm.dsWorkspace->setFBSuffixes(suffices); } + +void AddWorkspaceDialog::updateSelectedSpectra() { + auto const state = m_uiForm.ckAllSpectra->isChecked() ? Qt::Checked : Qt::Unchecked; + selectAllSpectra(state); } -void AddWorkspaceDialog::handleOKClicked() { - m_workspaceName = m_uiForm.cbWorkspaceName->currentText(); - m_wsIndices.clear(); - QString indexInput = m_uiForm.leWSIndices->text(); - if (!m_workspaceName.isEmpty() && !indexInput.isEmpty()) { - auto validator = std::make_shared>(0, m_maxIndex); - Mantid::Kernel::ArrayProperty prop("Indices", validator); - std::string err = prop.setValue(indexInput.toStdString()); - if (err.empty()) { - m_wsIndices = prop; - } else { - QMessageBox::warning(this, "Mantid - Error", - QString("Some of the indices are outside the allowed range [0,%1]").arg(m_maxIndex)); - } - } - if (m_wsIndices.empty()) { - QMessageBox::warning(this, "Mantid - Warning", QString("No indices have been selected.")); - return; - } +void AddWorkspaceDialog::selectAllSpectra(int state) { + 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); +} + +void AddWorkspaceDialog::workspaceChanged(const QString &workspaceName) { + const auto name = workspaceName.toStdString(); + const auto workspace = getWorkspace(name); + if (workspace) + setWorkspace(name); + else + setAllSpectraSelectionEnabled(false); +} - emit okClicked(!m_uiForm.ckKeepOpen->isChecked()); +void AddWorkspaceDialog::emitAddData() { emit addData(this); } + +void AddWorkspaceDialog::setWorkspace(const std::string &workspace) { + setAllSpectraSelectionEnabled(true); + if (m_uiForm.ckAllSpectra->isChecked()) { + m_uiForm.leWorkspaceIndices->setText(getIndexString(workspace)); + m_uiForm.leWorkspaceIndices->setEnabled(false); + } } +void AddWorkspaceDialog::setAllSpectraSelectionEnabled(bool doEnable) { m_uiForm.ckAllSpectra->setEnabled(doEnable); } + +std::string AddWorkspaceDialog::getFileName() const { return m_uiForm.dsWorkspace->getFullFilePath().toStdString(); } + } // namespace MantidQt::MantidWidgets diff --git a/qt/widgets/common/src/FitScriptGeneratorPresenter.cpp b/qt/widgets/common/src/FitScriptGeneratorPresenter.cpp index 15802ebdb7d3..de541231de6c 100644 --- a/qt/widgets/common/src/FitScriptGeneratorPresenter.cpp +++ b/qt/widgets/common/src/FitScriptGeneratorPresenter.cpp @@ -50,9 +50,6 @@ void FitScriptGeneratorPresenter::notifyPresenter(ViewEvent const &event, [[mayb case ViewEvent::AddDomainClicked: handleAddDomainClicked(); return; - case ViewEvent::AddDomainAccepted: - handleAddDomainAccepted(); - return; case ViewEvent::StartXChanged: handleStartXChanged(); return; @@ -148,10 +145,8 @@ void FitScriptGeneratorPresenter::handleRemoveDomainClicked() { removeDomains(m_ void FitScriptGeneratorPresenter::handleAddDomainClicked() { m_view->openAddWorkspaceDialog(); } -void FitScriptGeneratorPresenter::handleAddDomainAccepted() { - auto const workspaces = m_view->getDialogWorkspaces(); - auto const workspaceIndices = m_view->getDialogWorkspaceIndices(); - +void FitScriptGeneratorPresenter::handleAddDomainAccepted(std::vector const &workspaces, + FunctionModelSpectra const &workspaceIndices) { if (!workspaces.empty() && !workspaceIndices.empty()) addWorkspaces(workspaces, workspaceIndices); } @@ -278,11 +273,14 @@ void FitScriptGeneratorPresenter::setWorkspaces(QStringList const &workspaceName } void FitScriptGeneratorPresenter::addWorkspaces(std::vector const &workspaces, - std::vector const &workspaceIndices) { + FunctionModelSpectra const &workspaceIndices) { for (auto const &workspace : workspaces) { + auto const maxIndex = workspace->getNumberHistograms() - 1u; for (auto const &workspaceIndex : workspaceIndices) { - auto const xData = workspace->x(workspaceIndex.value); - addWorkspace(workspace, workspaceIndex, xData.front(), xData.back()); + if (workspaceIndex.value <= maxIndex) { + auto const xData = workspace->x(workspaceIndex.value); + addWorkspace(workspace, workspaceIndex, xData.front(), xData.back()); + } } } checkForWarningMessages(); diff --git a/qt/widgets/common/src/FitScriptGeneratorView.cpp b/qt/widgets/common/src/FitScriptGeneratorView.cpp index c52797a5364b..4058a1bd435b 100644 --- a/qt/widgets/common/src/FitScriptGeneratorView.cpp +++ b/qt/widgets/common/src/FitScriptGeneratorView.cpp @@ -34,14 +34,6 @@ using namespace MantidQt::API; namespace { using MantidQt::MantidWidgets::WorkspaceIndex; -std::vector convertToWorkspaceIndex(std::vector const &indices) { - std::vector workspaceIndices; - workspaceIndices.reserve(indices.size()); - std::transform(indices.cbegin(), indices.cend(), std::back_inserter(workspaceIndices), - [](int index) { return WorkspaceIndex(index); }); - return workspaceIndices; -} - template std::vector convertQListToStdVector(QList const &qList) { std::vector vec; vec.reserve(static_cast(qList.size())); @@ -96,9 +88,6 @@ FitScriptGeneratorView::~FitScriptGeneratorView() { observeClear(false); observeRename(false); - if (m_addWorkspaceDialog) - closeAddWorkspaceDialog(); - m_dataTable.reset(); m_functionTreeView.reset(); m_fitOptionsBrowser.reset(); @@ -336,43 +325,34 @@ void FitScriptGeneratorView::addWorkspaceDomain(std::string const &workspaceName } void FitScriptGeneratorView::openAddWorkspaceDialog() { - m_addWorkspaceDialog = std::make_unique(this); - m_addWorkspaceDialog->show(); - connect(m_addWorkspaceDialog.get(), SIGNAL(closeDialog()), this, SLOT(closeAddWorkspaceDialog())); - connect(m_addWorkspaceDialog.get(), SIGNAL(okClicked(bool)), this, SLOT(addWorkspaceDialogAccepted(bool))); -} - -void FitScriptGeneratorView::closeAddWorkspaceDialog() { - disconnect(m_addWorkspaceDialog.get(), SIGNAL(closeDialog()), this, SLOT(closeAddWorkspaceDialog())); - disconnect(m_addWorkspaceDialog.get(), SIGNAL(okClicked(bool)), this, SLOT(addWorkspaceDialogAccepted(bool))); - m_addWorkspaceDialog->close(); - m_addWorkspaceDialog.reset(); + auto dialog = new AddWorkspaceDialog(this); + dialog->setAttribute(Qt::WA_DeleteOnClose); + dialog->show(); + connect(dialog, SIGNAL(addData(MantidWidgets::IAddWorkspaceDialog *)), this, + SLOT(addWorkspaceDialogAccepted(MantidWidgets::IAddWorkspaceDialog *))); } -void FitScriptGeneratorView::addWorkspaceDialogAccepted(bool close) { - m_presenter->notifyPresenter(ViewEvent::AddDomainAccepted); - if (close) - closeAddWorkspaceDialog(); +void FitScriptGeneratorView::addWorkspaceDialogAccepted(MantidWidgets::IAddWorkspaceDialog *dialog) { + if (auto addWorkspaceDialog = dynamic_cast(dialog)) { + m_presenter->handleAddDomainAccepted(getDialogWorkspaces(dialog), addWorkspaceDialog->workspaceIndices()); + } } -std::vector FitScriptGeneratorView::getDialogWorkspaces() { +std::vector +FitScriptGeneratorView::getDialogWorkspaces(MantidWidgets::IAddWorkspaceDialog *dialog) { std::vector workspaces; - if (m_addWorkspaceDialog) { - workspaces = m_addWorkspaceDialog->getWorkspaces(); - if (workspaces.empty()) - displayWarning("Failed to add workspace: '" + m_addWorkspaceDialog->workspaceName().toStdString() + - "' doesn't exist."); + if (dialog) { + auto const wsName = dialog->workspaceName(); + auto &ads = AnalysisDataService::Instance(); + if (ads.doesExist(wsName)) { + workspaces.emplace_back(ads.retrieveWS(wsName)); + } else { + displayWarning("Failed to add workspace: '" + wsName + "' doesn't exist."); + } } return workspaces; } -std::vector FitScriptGeneratorView::getDialogWorkspaceIndices() const { - std::vector workspaceIndices; - if (m_addWorkspaceDialog) - workspaceIndices = convertToWorkspaceIndex(m_addWorkspaceDialog->workspaceIndices()); - return workspaceIndices; -} - void FitScriptGeneratorView::openEditLocalParameterDialog( std::string const ¶meter, std::vector const &workspaceNames, std::vector const &domainNames, std::vector const &values, std::vector const &fixes, @@ -464,10 +444,4 @@ void FitScriptGeneratorView::displayWarning(std::string const &message) { QMessageBox::warning(this, "Warning!", QString::fromStdString(message)); } -void FitScriptGeneratorView::closeEvent(QCloseEvent *event) { - if (m_addWorkspaceDialog) - closeAddWorkspaceDialog(); - QWidget::closeEvent(event); -} - } // namespace MantidQt::MantidWidgets diff --git a/qt/widgets/common/test/AddWorkspaceDialogTest.h b/qt/widgets/common/test/AddWorkspaceDialogTest.h deleted file mode 100644 index 8225f478b44c..000000000000 --- a/qt/widgets/common/test/AddWorkspaceDialogTest.h +++ /dev/null @@ -1,130 +0,0 @@ -// Mantid Repository : https://github.com/mantidproject/mantid -// -// Copyright © 2020 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 + -#pragma once - -#include "MantidAPI/AnalysisDataService.h" -#include "MantidAPI/MatrixWorkspace.h" -#include "MantidAPI/WorkspaceGroup.h" -#include "MantidFrameworkTestHelpers/WorkspaceCreationHelper.h" -#include "MantidQtWidgets/Common/AddWorkspaceDialog.h" - -#include - -#include - -#include - -using namespace Mantid::API; -using namespace MantidQt::MantidWidgets; -using namespace WorkspaceCreationHelper; - -class AddWorkspaceDialogTest : public CxxTest::TestSuite { - -public: - static AddWorkspaceDialogTest *createSuite() { return new AddWorkspaceDialogTest; } - static void destroySuite(AddWorkspaceDialogTest *suite) { delete suite; } - - void setUp() override { - assertNoTopLevelWidgets(); - - m_wsName = "Name"; - m_workspace = create2DWorkspace(3, 3); - m_workspaceGroup = createWorkspaceGroup(3, 3, 3, "GroupName"); - - AnalysisDataService::Instance().addOrReplace(m_wsName, m_workspace); - - m_dialog = std::make_unique(); - } - - void tearDown() override { - AnalysisDataService::Instance().clear(); - - TS_ASSERT(m_dialog->close()); - - m_dialog.reset(); - } - - void test_opening_the_dialog_will_create_a_top_level_widget() { - m_dialog->show(); - assertWidgetCreated(); - } - - void test_that_getWorkspaces_returns_an_empty_vector_when_the_workspaces_do_not_exist_anymore() { - m_dialog->show(); - - auto combobox = m_dialog->workspaceNameComboBox(); - auto lineedit = m_dialog->workspaceIndiceLineEdit(); - - combobox->setCurrentIndex(4); - lineedit->setText("0-2"); - m_dialog->handleOKClicked(); - - AnalysisDataService::Instance().clear(); - - auto const workspaces = m_dialog->getWorkspaces(); - TS_ASSERT(workspaces.empty()); - } - - void test_that_getWorkspaces_returns_the_expected_workspace_selected_in_the_AddWorkspaceDialog() { - m_dialog->show(); - - auto combobox = m_dialog->workspaceNameComboBox(); - auto lineedit = m_dialog->workspaceIndiceLineEdit(); - - combobox->setCurrentIndex(4); - lineedit->setText("0-2"); - m_dialog->handleOKClicked(); - - auto const workspaces = m_dialog->getWorkspaces(); - TS_ASSERT_EQUALS(workspaces.size(), 1); - TS_ASSERT_EQUALS(workspaces[0]->getNumberHistograms(), 3); - TS_ASSERT_EQUALS(workspaces[0]->getName(), m_wsName); - } - - void - test_that_getWorkspaces_returns_the_expected_workspaces_when_a_workspace_group_is_selected_in_the_AddWorkspaceDialog() { - m_dialog->show(); - - auto combobox = m_dialog->workspaceNameComboBox(); - auto lineedit = m_dialog->workspaceIndiceLineEdit(); - - combobox->setCurrentIndex(0); - lineedit->setText("0-2"); - m_dialog->handleOKClicked(); - - auto const workspaces = m_dialog->getWorkspaces(); - TS_ASSERT_EQUALS(workspaces.size(), 3); - for (auto i = 0u; i < workspaces.size(); ++i) { - TS_ASSERT_EQUALS(workspaces[i]->getNumberHistograms(), 3); - TS_ASSERT_EQUALS(workspaces[i]->getName(), "GroupName_" + std::to_string(i)); - } - } - - void test_that_workspaceIndices_returns_the_expected_workspaces_indices_from_the_AddWorkspaceDialog() { - m_dialog->show(); - - auto combobox = m_dialog->workspaceNameComboBox(); - auto lineedit = m_dialog->workspaceIndiceLineEdit(); - - combobox->setCurrentIndex(0); - lineedit->setText("0-2"); - m_dialog->handleOKClicked(); - - auto const expectedIndices = std::vector{0, 1, 2}; - TS_ASSERT_EQUALS(m_dialog->workspaceIndices(), expectedIndices); - } - -private: - void assertWidgetCreated() { TS_ASSERT_LESS_THAN(0, QApplication::topLevelWidgets().size()); } - - void assertNoTopLevelWidgets() { TS_ASSERT_EQUALS(0, QApplication::topLevelWidgets().size()); } - - std::string m_wsName; - Mantid::API::MatrixWorkspace_sptr m_workspace; - Mantid::API::WorkspaceGroup_sptr m_workspaceGroup; - std::unique_ptr m_dialog; -}; diff --git a/qt/widgets/common/test/FitScriptGeneratorPresenterTest.h b/qt/widgets/common/test/FitScriptGeneratorPresenterTest.h index 378b0933b142..c09b11269b00 100644 --- a/qt/widgets/common/test/FitScriptGeneratorPresenterTest.h +++ b/qt/widgets/common/test/FitScriptGeneratorPresenterTest.h @@ -185,18 +185,12 @@ class FitScriptGeneratorPresenterTest : public CxxTest::TestSuite { void test_that_a_add_domain_accepted_event_will_attempt_to_add_a_domain_in_the_view_and_model() { auto const workspaces = std::vector{m_workspace}; - auto const workspaceIndices = std::vector{m_wsIndex}; - - ON_CALL(*m_view, getDialogWorkspaces()).WillByDefault(Return(workspaces)); - ON_CALL(*m_view, getDialogWorkspaceIndices()).WillByDefault(Return(workspaceIndices)); - - EXPECT_CALL(*m_view, getDialogWorkspaces()).Times(1).WillOnce(Return(workspaces)); - EXPECT_CALL(*m_view, getDialogWorkspaceIndices()).Times(1).WillOnce(Return(workspaceIndices)); + auto const workspaceIndices = FunctionModelSpectra(std::to_string(m_wsIndex.value)); EXPECT_CALL(*m_view, addWorkspaceDomain(m_wsName, m_wsIndex, m_startX, m_endX)).Times(1); EXPECT_CALL(*m_model, addWorkspaceDomain(m_wsName, m_wsIndex, m_startX, m_endX)).Times(1); - m_presenter->notifyPresenter(ViewEvent::AddDomainAccepted); + m_presenter->handleAddDomainAccepted(workspaces, workspaceIndices); } void test_that_changing_a_start_x_will_update_its_value_in_the_model_when_the_x_value_is_valid() { diff --git a/qt/widgets/common/test/FitScriptGeneratorViewTest.h b/qt/widgets/common/test/FitScriptGeneratorViewTest.h index d810f62f3fa7..39194a449a7c 100644 --- a/qt/widgets/common/test/FitScriptGeneratorViewTest.h +++ b/qt/widgets/common/test/FitScriptGeneratorViewTest.h @@ -243,81 +243,6 @@ class FitScriptGeneratorViewTest : public CxxTest::TestSuite { TS_ASSERT(!m_view->attributeValue("NumDeriv").asBool()); } - void test_that_getDialogWorkspaces_returns_the_expected_workspace_selected_in_the_AddWorkspaceDialog() { - openFitScriptGeneratorWidget(); - - m_view->openAddWorkspaceDialog(); - auto dialog = m_view->addWorkspaceDialog(); - auto combobox = dialog->workspaceNameComboBox(); - auto lineedit = dialog->workspaceIndiceLineEdit(); - - combobox->setCurrentIndex(4); - lineedit->setText("0-2"); - dialog->handleOKClicked(); - - auto const workspaces = m_view->getDialogWorkspaces(); - TS_ASSERT_EQUALS(workspaces.size(), 1); - TS_ASSERT_EQUALS(workspaces[0]->getNumberHistograms(), 3); - TS_ASSERT_EQUALS(workspaces[0]->getName(), m_wsName); - } - - void - test_that_getDialogWorkspaces_returns_the_expected_workspaces_when_a_workspace_group_is_selected_in_the_AddWorkspaceDialog() { - openFitScriptGeneratorWidget(); - - m_view->openAddWorkspaceDialog(); - auto dialog = m_view->addWorkspaceDialog(); - auto combobox = dialog->workspaceNameComboBox(); - auto lineedit = dialog->workspaceIndiceLineEdit(); - - combobox->setCurrentIndex(0); - lineedit->setText("0-2"); - dialog->handleOKClicked(); - - auto const workspaces = m_view->getDialogWorkspaces(); - TS_ASSERT_EQUALS(workspaces.size(), 3); - for (auto i = 0u; i < workspaces.size(); ++i) { - TS_ASSERT_EQUALS(workspaces[i]->getNumberHistograms(), 3); - TS_ASSERT_EQUALS(workspaces[i]->getName(), "GroupName_" + std::to_string(i)); - } - } - - void test_that_getDialogWorkspaceIndices_returns_the_expected_workspace_index_selected_in_the_AddWorkspaceDialog() { - openFitScriptGeneratorWidget(); - - m_view->openAddWorkspaceDialog(); - auto dialog = m_view->addWorkspaceDialog(); - auto combobox = dialog->workspaceNameComboBox(); - auto lineedit = dialog->workspaceIndiceLineEdit(); - - combobox->setCurrentIndex(0); - lineedit->setText("1"); - dialog->handleOKClicked(); - - auto const workspaceIndices = m_view->getDialogWorkspaceIndices(); - TS_ASSERT_EQUALS(workspaceIndices.size(), 1); - TS_ASSERT_EQUALS(workspaceIndices[0], WorkspaceIndex(1)); - } - - void - test_that_getDialogWorkspaceIndices_returns_the_expected_range_of_workspace_indices_selected_in_the_AddWorkspaceDialog() { - openFitScriptGeneratorWidget(); - - m_view->openAddWorkspaceDialog(); - auto dialog = m_view->addWorkspaceDialog(); - auto combobox = dialog->workspaceNameComboBox(); - auto lineedit = dialog->workspaceIndiceLineEdit(); - - combobox->setCurrentIndex(0); - lineedit->setText("0-2"); - dialog->handleOKClicked(); - - auto const workspaceIndices = m_view->getDialogWorkspaceIndices(); - TS_ASSERT_EQUALS(workspaceIndices.size(), 3); - for (auto i = 0u; i < workspaceIndices.size(); ++i) - TS_ASSERT_EQUALS(workspaceIndices[i], WorkspaceIndex(i)); - } - void test_that_resetSelection_will_reset_the_selected_rows_value_to_its_previous_value() { int rowIndex(1); openFitScriptGeneratorWidget();