From e3936b8dd0b95b4206e9ef9ad26cb64f882172c7 Mon Sep 17 00:00:00 2001 From: Matthew Andrew <matthew.andrew@tessella.com> Date: Thu, 26 Sep 2019 17:59:59 +0100 Subject: [PATCH] Updated IndirectFitDataView Re #22055 --- .../Indirect/CMakeLists.txt | 8 +- qt/scientific_interfaces/Indirect/ConvFit.ui | 6 +- .../Indirect/ConvFitDataPresenter.cpp | 2 +- .../Indirect/ConvFitDataPresenter.h | 2 +- .../Indirect/IIndirectFitDataView.h | 6 + .../Indirect/IIndirectFitDataViewLegacy.h | 69 +++++++ .../Indirect/IndirectFitDataPresenter.cpp | 6 +- .../Indirect/IndirectFitDataPresenter.h | 10 +- .../Indirect/IndirectFitDataView.cpp | 24 +++ .../Indirect/IndirectFitDataView.h | 4 + .../Indirect/IndirectFitDataView.ui | 63 +++++++ .../Indirect/IndirectFitDataViewLegacy.cpp | 175 ++++++++++++++++++ .../Indirect/IndirectFitDataViewLegacy.h | 73 ++++++++ .../Indirect/IndirectFitDataViewLegacy.ui | 129 +++++++++++++ qt/scientific_interfaces/Indirect/IqtFit.ui | 6 +- qt/scientific_interfaces/Indirect/JumpFit.ui | 6 +- .../Indirect/JumpFitDataPresenter.cpp | 2 +- .../Indirect/JumpFitDataPresenter.h | 2 +- qt/scientific_interfaces/Indirect/MSDFit.ui | 6 +- .../Indirect/test/ConvFitDataPresenterTest.h | 4 +- .../test/IndirectFitDataPresenterTest.h | 4 +- .../Indirect/test/JumpFitDataPresenterTest.h | 4 +- 22 files changed, 577 insertions(+), 34 deletions(-) create mode 100644 qt/scientific_interfaces/Indirect/IIndirectFitDataViewLegacy.h create mode 100644 qt/scientific_interfaces/Indirect/IndirectFitDataViewLegacy.cpp create mode 100644 qt/scientific_interfaces/Indirect/IndirectFitDataViewLegacy.h create mode 100644 qt/scientific_interfaces/Indirect/IndirectFitDataViewLegacy.ui diff --git a/qt/scientific_interfaces/Indirect/CMakeLists.txt b/qt/scientific_interfaces/Indirect/CMakeLists.txt index 62dadf8d9fa..ba746e532d5 100644 --- a/qt/scientific_interfaces/Indirect/CMakeLists.txt +++ b/qt/scientific_interfaces/Indirect/CMakeLists.txt @@ -34,7 +34,7 @@ set( IndirectFitAnalysisTab.cpp IndirectFitData.cpp IndirectFitDataPresenter.cpp - IndirectFitDataView.cpp + IndirectFitDataViewLegacy.cpp IndirectFitOutput.cpp IndirectFitOutputOptionsModel.cpp IndirectFitOutputOptionsPresenter.cpp @@ -124,7 +124,7 @@ set( Elwin.h FunctionTemplateBrowser.h IAddWorkspaceDialog.h - IIndirectFitDataView.h + IIndirectFitDataViewLegacy.h IIndirectFitOutputOptionsView.h IIndirectFitPlotView.h IIndirectSettingsView.h @@ -142,7 +142,7 @@ set( IndirectEditResultsDialog.h IndirectFitAnalysisTab.h IndirectFitDataPresenter.h - IndirectFitDataView.h + IndirectFitDataViewLegacy.h IndirectFitOutputOptionsPresenter.h IndirectFitOutputOptionsView.h IndirectFitPlotPresenter.h @@ -204,7 +204,7 @@ set( IndirectDataReduction.ui IndirectDiffractionReduction.ui IndirectEditResultsDialog.ui - IndirectFitDataView.ui + IndirectFitDataViewLegacy.ui IndirectFitOutputOptions.ui IndirectFitPreviewPlot.ui IndirectInterfaceSettings.ui diff --git a/qt/scientific_interfaces/Indirect/ConvFit.ui b/qt/scientific_interfaces/Indirect/ConvFit.ui index 77296309eb6..b8cfd5756f8 100644 --- a/qt/scientific_interfaces/Indirect/ConvFit.ui +++ b/qt/scientific_interfaces/Indirect/ConvFit.ui @@ -22,7 +22,7 @@ <property name="childrenCollapsible"> <bool>false</bool> </property> - <widget class="MantidQt::CustomInterfaces::IDA::IndirectFitDataView" name="fitDataView" native="true"> + <widget class="MantidQt::CustomInterfaces::IDA::IndirectFitDataViewLegacy" name="fitDataView" native="true"> <property name="minimumSize"> <size> <width>0</width> @@ -168,9 +168,9 @@ <container>1</container> </customwidget> <customwidget> - <class>MantidQt::CustomInterfaces::IDA::IndirectFitDataView</class> + <class>MantidQt::CustomInterfaces::IDA::IndirectFitDataViewLegacy</class> <extends>QWidget</extends> - <header>IndirectFitDataView.h</header> + <header>IndirectFitDataViewLegacy.h</header> <container>1</container> </customwidget> <customwidget> diff --git a/qt/scientific_interfaces/Indirect/ConvFitDataPresenter.cpp b/qt/scientific_interfaces/Indirect/ConvFitDataPresenter.cpp index 44f2a41be91..16780556b75 100644 --- a/qt/scientific_interfaces/Indirect/ConvFitDataPresenter.cpp +++ b/qt/scientific_interfaces/Indirect/ConvFitDataPresenter.cpp @@ -24,7 +24,7 @@ namespace CustomInterfaces { namespace IDA { ConvFitDataPresenter::ConvFitDataPresenter(ConvFitModel *model, - IIndirectFitDataView *view) + IIndirectFitDataViewLegacy *view) : IndirectFitDataPresenter(model, view, std::make_unique<ConvFitDataTablePresenter>( model, view->getDataTable())), diff --git a/qt/scientific_interfaces/Indirect/ConvFitDataPresenter.h b/qt/scientific_interfaces/Indirect/ConvFitDataPresenter.h index 9fa0fdc83f4..88a01babd34 100644 --- a/qt/scientific_interfaces/Indirect/ConvFitDataPresenter.h +++ b/qt/scientific_interfaces/Indirect/ConvFitDataPresenter.h @@ -20,7 +20,7 @@ class MANTIDQT_INDIRECT_DLL ConvFitDataPresenter : public IndirectFitDataPresenter { Q_OBJECT public: - ConvFitDataPresenter(ConvFitModel *model, IIndirectFitDataView *view); + ConvFitDataPresenter(ConvFitModel *model, IIndirectFitDataViewLegacy *view); private slots: void setModelResolution(const QString &name); diff --git a/qt/scientific_interfaces/Indirect/IIndirectFitDataView.h b/qt/scientific_interfaces/Indirect/IIndirectFitDataView.h index 37227ced7e5..3f760c4570a 100644 --- a/qt/scientific_interfaces/Indirect/IIndirectFitDataView.h +++ b/qt/scientific_interfaces/Indirect/IIndirectFitDataView.h @@ -51,8 +51,12 @@ public: virtual void readSettings(QSettings const &settings) = 0; virtual UserInputValidator &validate(UserInputValidator &validator) = 0; + virtual void setXRange(std::pair<double, double> const &range) = 0; + public slots: virtual void displayWarning(std::string const &warning) = 0; + virtual void setStartX(double) = 0; + virtual void setEndX(double) = 0; signals: void sampleLoaded(QString const & /*_t1*/); @@ -61,6 +65,8 @@ signals: void removeClicked(); void multipleDataViewSelected(); void singleDataViewSelected(); + void startXChanged(double); + void endXChanged(double); }; } // namespace IDA } // namespace CustomInterfaces diff --git a/qt/scientific_interfaces/Indirect/IIndirectFitDataViewLegacy.h b/qt/scientific_interfaces/Indirect/IIndirectFitDataViewLegacy.h new file mode 100644 index 00000000000..72a976d39de --- /dev/null +++ b/qt/scientific_interfaces/Indirect/IIndirectFitDataViewLegacy.h @@ -0,0 +1,69 @@ +// 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 +// SPDX - License - Identifier: GPL - 3.0 + +#ifndef MANTIDQTCUSTOMINTERFACESIDA_IIndirectFitDataViewLegacy_H_ +#define MANTIDQTCUSTOMINTERFACESIDA_IIndirectFitDataViewLegacy_H_ + +#include "DllConfig.h" +#include "MantidQtWidgets/Common/UserInputValidator.h" + +#include <QObject> +#include <QTabWidget> +#include <QTableWidget> + +namespace MantidQt { +namespace CustomInterfaces { +namespace IDA { + +class MANTIDQT_INDIRECT_DLL IIndirectFitDataViewLegacy : public QTabWidget { + Q_OBJECT + +public: + IIndirectFitDataViewLegacy(QWidget *parent = nullptr) : QTabWidget(parent){}; + virtual ~IIndirectFitDataViewLegacy(){}; + + virtual QTableWidget *getDataTable() const = 0; + virtual bool isMultipleDataTabSelected() const = 0; + virtual bool isResolutionHidden() const = 0; + virtual void setResolutionHidden(bool hide) = 0; + virtual void disableMultipleDataTab() = 0; + + virtual std::string getSelectedSample() const = 0; + virtual std::string getSelectedResolution() const = 0; + + virtual QStringList getSampleWSSuffices() const = 0; + virtual QStringList getSampleFBSuffices() const = 0; + virtual QStringList getResolutionWSSuffices() const = 0; + virtual QStringList getResolutionFBSuffices() const = 0; + + virtual void setSampleWSSuffices(QStringList const &suffices) = 0; + virtual void setSampleFBSuffices(QStringList const &suffices) = 0; + virtual void setResolutionWSSuffices(QStringList const &suffices) = 0; + virtual void setResolutionFBSuffices(QStringList const &suffices) = 0; + + virtual bool isSampleWorkspaceSelectorVisible() const = 0; + virtual void + setSampleWorkspaceSelectorIndex(QString const &workspaceName) = 0; + + virtual void readSettings(QSettings const &settings) = 0; + virtual UserInputValidator &validate(UserInputValidator &validator) = 0; + +public slots: + virtual void displayWarning(std::string const &warning) = 0; + +signals: + void sampleLoaded(QString const & /*_t1*/); + void resolutionLoaded(QString const & /*_t1*/); + void addClicked(); + void removeClicked(); + void multipleDataViewSelected(); + void singleDataViewSelected(); +}; +} // namespace IDA +} // namespace CustomInterfaces +} // namespace MantidQt + +#endif diff --git a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp index b07ecbab714..0c97cbc3d94 100644 --- a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp +++ b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp @@ -12,13 +12,13 @@ namespace CustomInterfaces { namespace IDA { IndirectFitDataPresenter::IndirectFitDataPresenter(IndirectFittingModel *model, - IIndirectFitDataView *view) + IIndirectFitDataViewLegacy *view) : IndirectFitDataPresenter(model, view, std::make_unique<IndirectDataTablePresenter>( model, view->getDataTable())) {} IndirectFitDataPresenter::IndirectFitDataPresenter( - IndirectFittingModel *model, IIndirectFitDataView *view, + IndirectFittingModel *model, IIndirectFitDataViewLegacy *view, std::unique_ptr<IndirectDataTablePresenter> tablePresenter) : m_model(model), m_view(view), m_tablePresenter(std::move(tablePresenter)) { @@ -64,7 +64,7 @@ IndirectFitDataPresenter::IndirectFitDataPresenter( IndirectFitDataPresenter::~IndirectFitDataPresenter() { observeReplace(false); } -IIndirectFitDataView const *IndirectFitDataPresenter::getView() const { +IIndirectFitDataViewLegacy const *IndirectFitDataPresenter::getView() const { return m_view; } diff --git a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h index 712d7f48207..67537d6379a 100644 --- a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h +++ b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h @@ -8,7 +8,7 @@ #define MANTIDQTCUSTOMINTERFACESIDA_INDIRECTFITDATAPRESENTER_H_ #include "IAddWorkspaceDialog.h" -#include "IIndirectFitDataView.h" +#include "IIndirectFitDataViewLegacy.h" #include "IndirectDataTablePresenter.h" #include "IndirectFittingModel.h" @@ -28,9 +28,9 @@ class MANTIDQT_INDIRECT_DLL IndirectFitDataPresenter Q_OBJECT public: IndirectFitDataPresenter(IndirectFittingModel *model, - IIndirectFitDataView *view); + IIndirectFitDataViewLegacy *view); IndirectFitDataPresenter( - IndirectFittingModel *model, IIndirectFitDataView *view, + IndirectFittingModel *model, IIndirectFitDataViewLegacy *view, std::unique_ptr<IndirectDataTablePresenter> tablePresenter); ~IndirectFitDataPresenter(); @@ -80,7 +80,7 @@ signals: void updateAvailableFitTypes(); protected: - IIndirectFitDataView const *getView() const; + IIndirectFitDataViewLegacy const *getView() const; void addData(IAddWorkspaceDialog const *dialog); virtual void addDataToModel(IAddWorkspaceDialog const *dialog); void setSingleModelData(const std::string &name); @@ -105,7 +105,7 @@ private: IndirectFittingModel *m_model; PrivateFittingData m_singleData; PrivateFittingData m_multipleData; - IIndirectFitDataView *m_view; + IIndirectFitDataViewLegacy *m_view; std::unique_ptr<IndirectDataTablePresenter> m_tablePresenter; }; diff --git a/qt/scientific_interfaces/Indirect/IndirectFitDataView.cpp b/qt/scientific_interfaces/Indirect/IndirectFitDataView.cpp index f601c73b0ff..0554304bb07 100644 --- a/qt/scientific_interfaces/Indirect/IndirectFitDataView.cpp +++ b/qt/scientific_interfaces/Indirect/IndirectFitDataView.cpp @@ -25,6 +25,8 @@ IndirectFitDataView::IndirectFitDataView(QWidget *parent) m_dataForm->setupUi(this); m_dataForm->dsResolution->hide(); m_dataForm->lbResolution->hide(); + m_dataForm->dsbStartX->setRange(-1e100, 1e100); + m_dataForm->dsbEndX->setRange(-1e100, 1e100); connect(m_dataForm->dsSample, SIGNAL(dataReady(const QString &)), this, SIGNAL(sampleLoaded(const QString &))); @@ -33,6 +35,10 @@ IndirectFitDataView::IndirectFitDataView(QWidget *parent) connect(m_dataForm->pbAdd, SIGNAL(clicked()), this, SIGNAL(addClicked())); connect(m_dataForm->pbRemove, SIGNAL(clicked()), this, SIGNAL(removeClicked())); + connect(m_dataForm->dsbStartX, SIGNAL(valueChanged(double)), this, + SIGNAL(startXChanged(double))); + connect(m_dataForm->dsbEndX, SIGNAL(valueChanged(double)), this, + SIGNAL(endXChanged(double))); connect(this, SIGNAL(currentChanged(int)), this, SLOT(emitViewSelected(int))); @@ -110,6 +116,24 @@ void IndirectFitDataView::setSampleWorkspaceSelectorIndex( m_dataForm->dsSample->setSelectorIndex(1); } +void IndirectFitDataView::setXRange(std::pair<double, double> const &range) { + m_dataForm->dsbStartX->setRange(range.first, range.second); + m_dataForm->dsbEndX->setRange(range.first, range.second); + auto const dx = fabs(range.second - range.first) / 10.0; + m_dataForm->dsbStartX->setSingleStep(dx); + m_dataForm->dsbEndX->setSingleStep(dx); + m_dataForm->dsbStartX->setValue(range.first); + m_dataForm->dsbEndX->setValue(range.second); +} + +void IndirectFitDataView::setStartX(double value) { + m_dataForm->dsbStartX->setValue(value); +} + +void IndirectFitDataView::setEndX(double value) { + m_dataForm->dsbEndX->setValue(value); +} + UserInputValidator & IndirectFitDataView::validate(UserInputValidator &validator) { if (currentIndex() == 0) diff --git a/qt/scientific_interfaces/Indirect/IndirectFitDataView.h b/qt/scientific_interfaces/Indirect/IndirectFitDataView.h index 9b1bf89884a..22f297fed90 100644 --- a/qt/scientific_interfaces/Indirect/IndirectFitDataView.h +++ b/qt/scientific_interfaces/Indirect/IndirectFitDataView.h @@ -51,11 +51,15 @@ public: void readSettings(const QSettings &settings) override; UserInputValidator &validate(UserInputValidator &validator) override; + void setXRange(std::pair<double, double> const &range) override; + public slots: void displayWarning(const std::string &warning) override; protected slots: void emitViewSelected(int index); + void setStartX(double) override; + void setEndX(double) override; private: UserInputValidator &validateMultipleData(UserInputValidator &validator); diff --git a/qt/scientific_interfaces/Indirect/IndirectFitDataView.ui b/qt/scientific_interfaces/Indirect/IndirectFitDataView.ui index 882a1463e4d..cf4166c465f 100644 --- a/qt/scientific_interfaces/Indirect/IndirectFitDataView.ui +++ b/qt/scientific_interfaces/Indirect/IndirectFitDataView.ui @@ -74,6 +74,69 @@ <property name="showLoad" stdset="0"> <bool>false</bool> </property> + </widget> + </item> + <item row="2" column="1"> + <layout class="QHBoxLayout" name="horizontalLayout_2" stretch="0,0,0,0"> + <item> + <widget class="QDoubleSpinBox" name="dsbStartX"> + <property name="minimumSize"> + <size> + <width>100</width> + <height>0</height> + </size> + </property> + <property name="decimals"> + <number>6</number> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>End X</string> + </property> + </widget> + </item> + <item> + <widget class="QDoubleSpinBox" name="dsbEndX"> + <property name="minimumSize"> + <size> + <width>100</width> + <height>0</height> + </size> + </property> + <property name="decimals"> + <number>6</number> + </property> + <property name="minimum"> + <double>-1000000000.000000000000000</double> + </property> + <property name="maximum"> + <double>1000000000.000000000000000</double> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Start X</string> + </property> </widget> </item> </layout> diff --git a/qt/scientific_interfaces/Indirect/IndirectFitDataViewLegacy.cpp b/qt/scientific_interfaces/Indirect/IndirectFitDataViewLegacy.cpp new file mode 100644 index 00000000000..8f801ad3c36 --- /dev/null +++ b/qt/scientific_interfaces/Indirect/IndirectFitDataViewLegacy.cpp @@ -0,0 +1,175 @@ +// 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 +// SPDX - License - Identifier: GPL - 3.0 + +#include "IndirectFitDataViewLegacy.h" + +using namespace Mantid::API; + +namespace { + +bool isWorkspaceLoaded(std::string const &workspaceName) { + return AnalysisDataService::Instance().doesExist(workspaceName); +} + +} // namespace + +namespace MantidQt { +namespace CustomInterfaces { +namespace IDA { + +IndirectFitDataViewLegacy::IndirectFitDataViewLegacy(QWidget *parent) + : IIndirectFitDataViewLegacy(parent), m_dataForm(new Ui::IndirectFitDataForm) { + m_dataForm->setupUi(this); + m_dataForm->dsResolution->hide(); + m_dataForm->lbResolution->hide(); + + connect(m_dataForm->dsSample, SIGNAL(dataReady(const QString &)), this, + SIGNAL(sampleLoaded(const QString &))); + connect(m_dataForm->dsResolution, SIGNAL(dataReady(const QString &)), this, + SIGNAL(resolutionLoaded(const QString &))); + connect(m_dataForm->pbAdd, SIGNAL(clicked()), this, SIGNAL(addClicked())); + connect(m_dataForm->pbRemove, SIGNAL(clicked()), this, + SIGNAL(removeClicked())); + + connect(this, SIGNAL(currentChanged(int)), this, SLOT(emitViewSelected(int))); + + m_dataForm->dsSample->isOptional(true); + m_dataForm->dsResolution->isOptional(true); +} + +QTableWidget *IndirectFitDataViewLegacy::getDataTable() const { + return m_dataForm->tbFitData; +} + +bool IndirectFitDataViewLegacy::isMultipleDataTabSelected() const { + return currentIndex() == 1; +} + +bool IndirectFitDataViewLegacy::isResolutionHidden() const { + return m_dataForm->dsResolution->isHidden(); +} + +std::string IndirectFitDataViewLegacy::getSelectedSample() const { + return m_dataForm->dsSample->getCurrentDataName().toStdString(); +} + +std::string IndirectFitDataViewLegacy::getSelectedResolution() const { + return m_dataForm->dsResolution->getCurrentDataName().toStdString(); +} + +void IndirectFitDataViewLegacy::readSettings(const QSettings &settings) { + const auto group = settings.group(); + m_dataForm->dsSample->readSettings(group); + m_dataForm->dsResolution->readSettings(group); +} + +void IndirectFitDataViewLegacy::disableMultipleDataTab() { setTabEnabled(1, false); } + +QStringList IndirectFitDataViewLegacy::getSampleWSSuffices() const { + return m_dataForm->dsSample->getWSSuffixes(); +} + +QStringList IndirectFitDataViewLegacy::getSampleFBSuffices() const { + return m_dataForm->dsSample->getFBSuffixes(); +} + +QStringList IndirectFitDataViewLegacy::getResolutionWSSuffices() const { + return m_dataForm->dsResolution->getWSSuffixes(); +} + +QStringList IndirectFitDataViewLegacy::getResolutionFBSuffices() const { + return m_dataForm->dsResolution->getFBSuffixes(); +} + +void IndirectFitDataViewLegacy::setSampleWSSuffices(const QStringList &suffices) { + m_dataForm->dsSample->setWSSuffixes(suffices); +} + +void IndirectFitDataViewLegacy::setSampleFBSuffices(const QStringList &suffices) { + m_dataForm->dsSample->setFBSuffixes(suffices); +} + +void IndirectFitDataViewLegacy::setResolutionWSSuffices(const QStringList &suffices) { + m_dataForm->dsResolution->setWSSuffixes(suffices); +} + +void IndirectFitDataViewLegacy::setResolutionFBSuffices(const QStringList &suffices) { + m_dataForm->dsResolution->setFBSuffixes(suffices); +} + +bool IndirectFitDataViewLegacy::isSampleWorkspaceSelectorVisible() const { + return m_dataForm->dsSample->isWorkspaceSelectorVisible(); +} + +void IndirectFitDataViewLegacy::setSampleWorkspaceSelectorIndex( + const QString &workspaceName) { + m_dataForm->dsSample->setWorkspaceSelectorIndex(workspaceName); + m_dataForm->dsSample->setSelectorIndex(1); +} + +UserInputValidator & +IndirectFitDataViewLegacy::validate(UserInputValidator &validator) { + if (currentIndex() == 0) + return validateSingleData(validator); + return validateMultipleData(validator); +} + +UserInputValidator & +IndirectFitDataViewLegacy::validateMultipleData(UserInputValidator &validator) { + if (m_dataForm->tbFitData->rowCount() == 0) + validator.addErrorMessage("No input data has been provided."); + return validator; +} + +UserInputValidator & +IndirectFitDataViewLegacy::validateSingleData(UserInputValidator &validator) { + validator = validateSample(validator); + if (!isResolutionHidden()) + validator = validateResolution(validator); + return validator; +} + +UserInputValidator & +IndirectFitDataViewLegacy::validateSample(UserInputValidator &validator) { + const auto sampleIsLoaded = isWorkspaceLoaded(getSelectedSample()); + validator.checkDataSelectorIsValid("Sample Input", m_dataForm->dsSample); + + if (!sampleIsLoaded) + emit sampleLoaded(QString::fromStdString(getSelectedSample())); + return validator; +} + +UserInputValidator & +IndirectFitDataViewLegacy::validateResolution(UserInputValidator &validator) { + const auto resolutionIsLoaded = isWorkspaceLoaded(getSelectedResolution()); + validator.checkDataSelectorIsValid("Resolution Input", + m_dataForm->dsResolution); + + if (!resolutionIsLoaded) + emit resolutionLoaded(QString::fromStdString(getSelectedResolution())); + return validator; +} + +void IndirectFitDataViewLegacy::displayWarning(const std::string &warning) { + QMessageBox::warning(parentWidget(), "MantidPlot - Warning", + QString::fromStdString(warning)); +} + +void IndirectFitDataViewLegacy::setResolutionHidden(bool hide) { + m_dataForm->lbResolution->setHidden(hide); + m_dataForm->dsResolution->setHidden(hide); +} + +void IndirectFitDataViewLegacy::emitViewSelected(int index) { + if (index == 0) + emit singleDataViewSelected(); + else + emit multipleDataViewSelected(); +} + +} // namespace IDA +} // namespace CustomInterfaces +} // namespace MantidQt diff --git a/qt/scientific_interfaces/Indirect/IndirectFitDataViewLegacy.h b/qt/scientific_interfaces/Indirect/IndirectFitDataViewLegacy.h new file mode 100644 index 00000000000..0906007c4ad --- /dev/null +++ b/qt/scientific_interfaces/Indirect/IndirectFitDataViewLegacy.h @@ -0,0 +1,73 @@ +// Mantid Repository : https://github.com/mantidproject/mantid +// +// Copyright © 2015 ISIS Rutherford Appleton Laboratory UKRI, +// NScD Oak Ridge National Laboratory, European Spallation Source +// & Institut Laue - Langevin +// SPDX - License - Identifier: GPL - 3.0 + +#ifndef MANTIDQTCUSTOMINTERFACES_INDIRECTFITDATAVIEW_H_ +#define MANTIDQTCUSTOMINTERFACES_INDIRECTFITDATAVIEW_H_ + +#include "ui_IndirectFitDataView.h" + +#include "IIndirectFitDataViewLegacy.h" + +#include "DllConfig.h" +#include "MantidQtWidgets/Common/UserInputValidator.h" + +#include <QTabWidget> + +namespace MantidQt { +namespace CustomInterfaces { +namespace IDA { + +class MANTIDQT_INDIRECT_DLL IndirectFitDataViewLegacy : public IIndirectFitDataViewLegacy { + Q_OBJECT +public: + IndirectFitDataViewLegacy(QWidget *parent = nullptr); + ~IndirectFitDataViewLegacy() override = default; + + QTableWidget *getDataTable() const override; + virtual bool isMultipleDataTabSelected() const override; + bool isResolutionHidden() const override; + void setResolutionHidden(bool hide) override; + void disableMultipleDataTab() override; + + virtual std::string getSelectedSample() const override; + std::string getSelectedResolution() const override; + + virtual QStringList getSampleWSSuffices() const override; + virtual QStringList getSampleFBSuffices() const override; + QStringList getResolutionWSSuffices() const override; + QStringList getResolutionFBSuffices() const override; + + virtual void setSampleWSSuffices(const QStringList &suffices) override; + virtual void setSampleFBSuffices(const QStringList &suffices) override; + virtual void setResolutionWSSuffices(const QStringList &suffices) override; + virtual void setResolutionFBSuffices(const QStringList &suffices) override; + + bool isSampleWorkspaceSelectorVisible() const override; + void setSampleWorkspaceSelectorIndex(const QString &workspaceName) override; + + void readSettings(const QSettings &settings) override; + UserInputValidator &validate(UserInputValidator &validator) override; + +public slots: + void displayWarning(const std::string &warning) override; + +protected slots: + void emitViewSelected(int index); + +private: + UserInputValidator &validateMultipleData(UserInputValidator &validator); + UserInputValidator &validateSingleData(UserInputValidator &validator); + UserInputValidator &validateSample(UserInputValidator &validator); + UserInputValidator &validateResolution(UserInputValidator &validator); + + std::unique_ptr<Ui::IndirectFitDataForm> m_dataForm; +}; + +} // namespace IDA +} // namespace CustomInterfaces +} // namespace MantidQt + +#endif /* MANTIDQTCUSTOMINTERFACES_INDIRECTFITDATAVIEW_H_ */ diff --git a/qt/scientific_interfaces/Indirect/IndirectFitDataViewLegacy.ui b/qt/scientific_interfaces/Indirect/IndirectFitDataViewLegacy.ui new file mode 100644 index 00000000000..882a1463e4d --- /dev/null +++ b/qt/scientific_interfaces/Indirect/IndirectFitDataViewLegacy.ui @@ -0,0 +1,129 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>IndirectFitDataForm</class> + <widget class="QTabWidget" name="IndirectFitDataForm"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>654</width> + <height>222</height> + </rect> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>1</verstretch> + </sizepolicy> + </property> + <property name="windowTitle"> + <string>TabWidget</string> + </property> + <property name="tabPosition"> + <enum>QTabWidget::North</enum> + </property> + <property name="tabShape"> + <enum>QTabWidget::Rounded</enum> + </property> + <property name="currentIndex"> + <number>0</number> + </property> + <property name="elideMode"> + <enum>Qt::ElideLeft</enum> + </property> + <widget class="QWidget" name="loSingleInput"> + <attribute name="title"> + <string>Single Input</string> + </attribute> + <layout class="QGridLayout" name="gridLayout" columnstretch="0,1"> + <item row="0" column="0"> + <widget class="QLabel" name="lbSample"> + <property name="text"> + <string>Sample</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="lbResolution"> + <property name="text"> + <string>Resolution</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="MantidQt::MantidWidgets::DataSelector" name="dsSample" native="true"> + <property name="autoLoad" stdset="0"> + <bool>true</bool> + </property> + <property name="ShowGroups" stdset="0"> + <bool>false</bool> + </property> + <property name="showLoad" stdset="0"> + <bool>false</bool> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="MantidQt::MantidWidgets::DataSelector" name="dsResolution" native="true"> + <property name="autoLoad" stdset="0"> + <bool>true</bool> + </property> + <property name="ShowGroups" stdset="0"> + <bool>false</bool> + </property> + <property name="showLoad" stdset="0"> + <bool>false</bool> + </property> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="tab"> + <attribute name="title"> + <string>Multiple Input</string> + </attribute> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QTableWidget" name="tbFitData"> + <property name="minimumSize"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </widget> + </item> + <item> + <layout class="QVBoxLayout" name="loDataControl"> + <property name="rightMargin"> + <number>0</number> + </property> + <item> + <widget class="QPushButton" name="pbAdd"> + <property name="text"> + <string>Add Workspace</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="pbRemove"> + <property name="text"> + <string>Remove</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + </widget> + <customwidgets> + <customwidget> + <class>MantidQt::MantidWidgets::DataSelector</class> + <extends>QWidget</extends> + <header>MantidQtWidgets/Common/DataSelector.h</header> + </customwidget> + </customwidgets> + <resources/> + <connections/> +</ui> diff --git a/qt/scientific_interfaces/Indirect/IqtFit.ui b/qt/scientific_interfaces/Indirect/IqtFit.ui index 5308e89f9b2..a7d87b987bd 100644 --- a/qt/scientific_interfaces/Indirect/IqtFit.ui +++ b/qt/scientific_interfaces/Indirect/IqtFit.ui @@ -22,7 +22,7 @@ <property name="childrenCollapsible"> <bool>false</bool> </property> - <widget class="MantidQt::CustomInterfaces::IDA::IndirectFitDataView" name="fitDataView" native="true"/> + <widget class="MantidQt::CustomInterfaces::IDA::IndirectFitDataViewLegacy" name="fitDataView" native="true"/> <widget class="QWidget" name="layoutWidget"> <layout class="QVBoxLayout" name="verticalLayout"> <item> @@ -144,9 +144,9 @@ <container>1</container> </customwidget> <customwidget> - <class>MantidQt::CustomInterfaces::IDA::IndirectFitDataView</class> + <class>MantidQt::CustomInterfaces::IDA::IndirectFitDataViewLegacy</class> <extends>QWidget</extends> - <header>IndirectFitDataView.h</header> + <header>IndirectFitDataViewLegacy.h</header> <container>1</container> </customwidget> <customwidget> diff --git a/qt/scientific_interfaces/Indirect/JumpFit.ui b/qt/scientific_interfaces/Indirect/JumpFit.ui index 9814347add8..f5800bb8f56 100644 --- a/qt/scientific_interfaces/Indirect/JumpFit.ui +++ b/qt/scientific_interfaces/Indirect/JumpFit.ui @@ -22,7 +22,7 @@ <property name="childrenCollapsible"> <bool>false</bool> </property> - <widget class="MantidQt::CustomInterfaces::IDA::IndirectFitDataView" name="fitDataView" native="true"/> + <widget class="MantidQt::CustomInterfaces::IDA::IndirectFitDataViewLegacy" name="fitDataView" native="true"/> <widget class="QWidget" name="layoutWidget"> <layout class="QVBoxLayout" name="verticalLayout"> <item> @@ -234,9 +234,9 @@ <container>1</container> </customwidget> <customwidget> - <class>MantidQt::CustomInterfaces::IDA::IndirectFitDataView</class> + <class>MantidQt::CustomInterfaces::IDA::IndirectFitDataViewLegacy</class> <extends>QWidget</extends> - <header>IndirectFitDataView.h</header> + <header>IndirectFitDataViewLegacy.h</header> <container>1</container> </customwidget> <customwidget> diff --git a/qt/scientific_interfaces/Indirect/JumpFitDataPresenter.cpp b/qt/scientific_interfaces/Indirect/JumpFitDataPresenter.cpp index 04c3b968f08..269701355c8 100644 --- a/qt/scientific_interfaces/Indirect/JumpFitDataPresenter.cpp +++ b/qt/scientific_interfaces/Indirect/JumpFitDataPresenter.cpp @@ -14,7 +14,7 @@ namespace CustomInterfaces { namespace IDA { JumpFitDataPresenter::JumpFitDataPresenter( - JumpFitModel *model, IIndirectFitDataView *view, QComboBox *cbParameterType, + JumpFitModel *model, IIndirectFitDataViewLegacy *view, QComboBox *cbParameterType, QComboBox *cbParameter, QLabel *lbParameterType, QLabel *lbParameter) : IndirectFitDataPresenter(model, view, std::make_unique<JumpFitDataTablePresenter>( diff --git a/qt/scientific_interfaces/Indirect/JumpFitDataPresenter.h b/qt/scientific_interfaces/Indirect/JumpFitDataPresenter.h index 575a25a3549..6e2f9f815c6 100644 --- a/qt/scientific_interfaces/Indirect/JumpFitDataPresenter.h +++ b/qt/scientific_interfaces/Indirect/JumpFitDataPresenter.h @@ -22,7 +22,7 @@ class MANTIDQT_INDIRECT_DLL JumpFitDataPresenter : public IndirectFitDataPresenter { Q_OBJECT public: - JumpFitDataPresenter(JumpFitModel *model, IIndirectFitDataView *view, + JumpFitDataPresenter(JumpFitModel *model, IIndirectFitDataViewLegacy *view, QComboBox *cbParameterType, QComboBox *cbParameter, QLabel *lbParameterType, QLabel *lbParameter); diff --git a/qt/scientific_interfaces/Indirect/MSDFit.ui b/qt/scientific_interfaces/Indirect/MSDFit.ui index 82fd2707124..123fc549928 100644 --- a/qt/scientific_interfaces/Indirect/MSDFit.ui +++ b/qt/scientific_interfaces/Indirect/MSDFit.ui @@ -22,7 +22,7 @@ <property name="childrenCollapsible"> <bool>false</bool> </property> - <widget class="MantidQt::CustomInterfaces::IDA::IndirectFitDataView" name="fitDataView" native="true"/> + <widget class="MantidQt::CustomInterfaces::IDA::IndirectFitDataViewLegacy" name="fitDataView" native="true"/> <widget class="QWidget" name="layoutWidget"> <layout class="QVBoxLayout" name="verticalLayout"> <property name="spacing"> @@ -141,9 +141,9 @@ <container>1</container> </customwidget> <customwidget> - <class>MantidQt::CustomInterfaces::IDA::IndirectFitDataView</class> + <class>MantidQt::CustomInterfaces::IDA::IndirectFitDataViewLegacy</class> <extends>QWidget</extends> - <header>IndirectFitDataView.h</header> + <header>IndirectFitDataViewLegacy.h</header> <container>1</container> </customwidget> <customwidget> diff --git a/qt/scientific_interfaces/Indirect/test/ConvFitDataPresenterTest.h b/qt/scientific_interfaces/Indirect/test/ConvFitDataPresenterTest.h index d92853c805b..0a866737ffc 100644 --- a/qt/scientific_interfaces/Indirect/test/ConvFitDataPresenterTest.h +++ b/qt/scientific_interfaces/Indirect/test/ConvFitDataPresenterTest.h @@ -12,7 +12,7 @@ #include "ConvFitDataPresenter.h" #include "ConvFitModel.h" -#include "IIndirectFitDataView.h" +#include "IIndirectFitDataViewLegacy.h" #include "MantidAPI/FrameworkManager.h" #include "MantidKernel/WarningSuppressions.h" @@ -39,7 +39,7 @@ std::unique_ptr<QTableWidget> createEmptyTableWidget(int columns, int rows) { GNU_DIAG_OFF_SUGGEST_OVERRIDE /// Mock object to mock the view -class MockConvFitDataView : public IIndirectFitDataView { +class MockConvFitDataView : public IIndirectFitDataViewLegacy { public: /// Signals void emitResolutionLoaded(QString const &workspaceName) { diff --git a/qt/scientific_interfaces/Indirect/test/IndirectFitDataPresenterTest.h b/qt/scientific_interfaces/Indirect/test/IndirectFitDataPresenterTest.h index f79d284d58b..8131aafb64e 100644 --- a/qt/scientific_interfaces/Indirect/test/IndirectFitDataPresenterTest.h +++ b/qt/scientific_interfaces/Indirect/test/IndirectFitDataPresenterTest.h @@ -10,7 +10,7 @@ #include <cxxtest/TestSuite.h> #include <gmock/gmock.h> -#include "IIndirectFitDataView.h" +#include "IIndirectFitDataViewLegacy.h" #include "IndirectDataTablePresenter.h" #include "IndirectFitDataPresenter.h" #include "IndirectFittingModel.h" @@ -57,7 +57,7 @@ private: GNU_DIAG_OFF_SUGGEST_OVERRIDE /// Mock object to mock the view -class MockIIndirectFitDataView : public IIndirectFitDataView { +class MockIIndirectFitDataView : public IIndirectFitDataViewLegacy { public: /// Signals void emitSampleLoaded(QString const &name) { emit sampleLoaded(name); } diff --git a/qt/scientific_interfaces/Indirect/test/JumpFitDataPresenterTest.h b/qt/scientific_interfaces/Indirect/test/JumpFitDataPresenterTest.h index c0811bba37a..e721b7a12f0 100644 --- a/qt/scientific_interfaces/Indirect/test/JumpFitDataPresenterTest.h +++ b/qt/scientific_interfaces/Indirect/test/JumpFitDataPresenterTest.h @@ -10,7 +10,7 @@ #include <cxxtest/TestSuite.h> #include <gmock/gmock.h> -#include "IIndirectFitDataView.h" +#include "IIndirectFitDataViewLegacy.h" #include "JumpFitDataPresenter.h" #include "JumpFitModel.h" @@ -70,7 +70,7 @@ std::unique_ptr<QTableWidget> createEmptyTableWidget(int columns, int rows) { GNU_DIAG_OFF_SUGGEST_OVERRIDE /// Mock object to mock the view -class MockJumpFitDataView : public IIndirectFitDataView { +class MockJumpFitDataView : public IIndirectFitDataViewLegacy { public: /// Public Methods MOCK_CONST_METHOD0(getDataTable, QTableWidget *()); -- GitLab