diff --git a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp index 0c6eb63abff0431ec2ad08ff2f0f229b6e1ca7dd..71c5490c986dba5c31d31c4c1baecfa1233f3597 100644 --- a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp +++ b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp @@ -247,7 +247,11 @@ IndirectFitDataPresenter::getAddWorkspaceDialog(QWidget *parent) const { } void IndirectFitDataPresenter::addData() { - addData(m_addWorkspaceDialog.get()); + if (const auto indirectDialog = dynamic_cast<AddWorkspaceDialog const *>( + m_addWorkspaceDialog.get())) { + addData(indirectDialog->workspaceName(), + indirectDialog->workspaceIndices()); + } } void IndirectFitDataPresenter::closeDialog() { @@ -258,9 +262,10 @@ void IndirectFitDataPresenter::closeDialog() { m_addWorkspaceDialog->close(); } -void IndirectFitDataPresenter::addData(IAddWorkspaceDialog const *dialog) { +void IndirectFitDataPresenter::addData(const std::string &workspaceName, + const std::string &spectra) { try { - addDataToModel(dialog); + m_model->addWorkspace(workspaceName, spectra); m_tablePresenter->addData(m_model->numberOfWorkspaces() - TableDatasetIndex{1}); emit dataAdded(); diff --git a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h index ae5f9d668e03d709b14ec4dfaedce365bc79850e..2ba759cb966b52a1188d095a1bb8a8cf28514d27 100644 --- a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h +++ b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h @@ -59,6 +59,7 @@ public: const Workspace_sptr &workspace) override; DataForParameterEstimationCollection getDataForParameterEstimation(const EstimationDataSelector &selector) const; + void addData(const std::string &workspaceName, const std::string &spectra); public slots: void updateSpectraInTable(TableDatasetIndex dataIndex); @@ -90,7 +91,6 @@ signals: protected: IIndirectFitDataView const *getView() const; - void addData(IAddWorkspaceDialog const *dialog); virtual void addDataToModel(IAddWorkspaceDialog const *dialog); void setSingleModelData(const std::string &name); void updateRanges(); diff --git a/qt/scientific_interfaces/Indirect/IndirectFittingModel.h b/qt/scientific_interfaces/Indirect/IndirectFittingModel.h index b4b39ccbb0ab93ab8906fb5d482988c9eb06820e..b57370ef22a052c2a581311d18dd85329e0abd55 100644 --- a/qt/scientific_interfaces/Indirect/IndirectFittingModel.h +++ b/qt/scientific_interfaces/Indirect/IndirectFittingModel.h @@ -98,8 +98,8 @@ public: WorkspaceIndex spectrum); virtual void addWorkspace(const std::string &workspaceName); - void addWorkspace(const std::string &workspaceName, - const std::string &spectra); + virtual void addWorkspace(const std::string &workspaceName, + const std::string &spectra); void addWorkspace(const std::string &workspaceName, const Spectra &spectra); virtual void addWorkspace(Mantid::API::MatrixWorkspace_sptr workspace, const Spectra &spectra); diff --git a/qt/scientific_interfaces/Indirect/test/IndirectFitDataPresenterTest.h b/qt/scientific_interfaces/Indirect/test/IndirectFitDataPresenterTest.h index 1f38bca91d5c79ae5021debfa2b615ff88fd34b8..e198c65d758d2799b6c7c19c9bbad5a49a7ebb7e 100644 --- a/qt/scientific_interfaces/Indirect/test/IndirectFitDataPresenterTest.h +++ b/qt/scientific_interfaces/Indirect/test/IndirectFitDataPresenterTest.h @@ -9,10 +9,10 @@ #include <cxxtest/TestSuite.h> #include <gmock/gmock.h> -#include "IIndirectFitDataViewLegacy.h" -#include "IndirectDataTablePresenterLegacy.h" -#include "IndirectFitDataPresenterLegacy.h" -#include "IndirectFittingModelLegacy.h" +#include "IIndirectFitDataView.h" +#include "IndirectDataTablePresenter.h" +#include "IndirectFitDataPresenter.h" +#include "IndirectFittingModel.h" #include "MantidAPI/FrameworkManager.h" #include "MantidKernel/WarningSuppressions.h" @@ -56,7 +56,7 @@ private: GNU_DIAG_OFF_SUGGEST_OVERRIDE /// Mock object to mock the view -class MockIIndirectFitDataView : public IIndirectFitDataViewLegacy { +class MockIIndirectFitDataView : public IIndirectFitDataView { public: /// Signals void emitSampleLoaded(QString const &name) { emit sampleLoaded(name); } @@ -81,6 +81,9 @@ public: MOCK_METHOD1(setSampleFBSuffices, void(QStringList const &suffices)); MOCK_METHOD1(setResolutionWSSuffices, void(QStringList const &suffices)); MOCK_METHOD1(setResolutionFBSuffices, void(QStringList const &suffices)); + MOCK_METHOD1(setXRange, void(std::pair<double, double> const &range)); + MOCK_METHOD1(setStartX, void(double startX)); + MOCK_METHOD1(setEndX, void(double endX)); MOCK_CONST_METHOD0(isSampleWorkspaceSelectorVisible, bool()); MOCK_METHOD1(setSampleWorkspaceSelectorIndex, @@ -94,23 +97,25 @@ public: }; /// Mock object to mock the model -class MockIndirectFitDataModel : public IndirectFittingModelLegacy { +class MockIndirectFitDataModel : public IndirectFittingModel { public: - using IndirectFittingModelLegacy::addWorkspace; + using IndirectFittingModel::addWorkspace; /// Public Methods MOCK_CONST_METHOD1(hasWorkspace, bool(std::string const &workspaceName)); MOCK_CONST_METHOD0(isMultiFit, bool()); - MOCK_CONST_METHOD0(numberOfWorkspaces, std::size_t()); + MOCK_CONST_METHOD0(numberOfWorkspaces, TableDatasetIndex()); MOCK_METHOD1(addWorkspace, void(std::string const &workspaceName)); + MOCK_METHOD2(addWorkspace, void(std::string const &workspaceName, + std::string const &spectra)); private: std::string sequentialFitOutputName() const override { return ""; }; std::string simultaneousFitOutputName() const override { return ""; }; - std::string singleFitOutputName(std::size_t index, - std::size_t spectrum) const override { + std::string singleFitOutputName(TableDatasetIndex index, + IDA::WorkspaceIndex spectrum) const override { UNUSED_ARG(index); UNUSED_ARG(spectrum); return ""; @@ -141,9 +146,9 @@ public: m_model = std::make_unique<NiceMock<MockIndirectFitDataModel>>(); m_table = createEmptyTableWidget(5, 5); - m_dataTablePresenter = std::make_unique<IndirectDataTablePresenterLegacy>( + m_dataTablePresenter = std::make_unique<IndirectDataTablePresenter>( std::move(m_model.get()), std::move(m_table.get())); - m_presenter = std::make_unique<IndirectFitDataPresenterLegacy>( + m_presenter = std::make_unique<IndirectFitDataPresenter>( std::move(m_model.get()), std::move(m_view.get()), std::move(m_dataTablePresenter)); @@ -186,7 +191,8 @@ public: void test_that_invoking_a_presenter_method_will_call_the_relevant_methods_in_the_view_and_model() { ON_CALL(*m_view, isMultipleDataTabSelected()).WillByDefault(Return(true)); - ON_CALL(*m_model, numberOfWorkspaces()).WillByDefault(Return(2)); + ON_CALL(*m_model, numberOfWorkspaces()) + .WillByDefault(Return(TableDatasetIndex{2})); Expectation isMultipleData = EXPECT_CALL(*m_view, isMultipleDataTabSelected()) @@ -194,7 +200,7 @@ public: .WillOnce(Return(true)); EXPECT_CALL(*m_model, numberOfWorkspaces()).Times(1).After(isMultipleData); - m_presenter->updateSpectraInTable(0); + m_presenter->updateSpectraInTable(TableDatasetIndex{0}); } ///---------------------------------------------------------------------- @@ -250,26 +256,34 @@ public: void test_that_setStartX_will_alter_the_relevant_startX_column_in_the_data_table() { TableItem const startX(2.3); + EXPECT_CALL(*m_model, numberOfWorkspaces()) + .WillRepeatedly(Return(TableDatasetIndex{1})); + m_presenter->addData("Workspace1", "1"); - m_presenter->setStartX(startX.asDouble(), 0, 0); - - assertValueIsGlobal(START_X_COLUMN, startX); + m_presenter->setStartX(startX.asDouble(), TableDatasetIndex{0}, + IDA::WorkspaceIndex{0}); + TS_ASSERT_EQUALS(startX.asString(), getTableItem(0, START_X_COLUMN)); } void test_that_setEndX_will_alter_the_relevant_endX_column_in_the_data_table() { TableItem const endX(5.5); + EXPECT_CALL(*m_model, numberOfWorkspaces()) + .WillRepeatedly(Return(TableDatasetIndex{1})); + m_presenter->addData("Workspace1", "1"); - m_presenter->setEndX(endX.asDouble(), 0, 0); + m_presenter->setEndX(endX.asDouble(), TableDatasetIndex{0}, + IDA::WorkspaceIndex{0}); - assertValueIsGlobal(END_X_COLUMN, endX); + TS_ASSERT_EQUALS(endX.asString(), getTableItem(0, END_X_COLUMN)); } void test_that_the_setExcludeRegion_slot_will_alter_the_relevant_excludeRegion_column_in_the_table() { TableItem const excludeRegion("2-3"); - m_presenter->setExclude(excludeRegion.asString(), 0, 0); + m_presenter->setExclude(excludeRegion.asString(), TableDatasetIndex{0}, + IDA::WorkspaceIndex{0}); assertValueIsGlobal(EXCLUDE_REGION_COLUMN, excludeRegion); } @@ -303,7 +317,7 @@ private: void assertValueIsGlobal(int column, TableItem const &value) const { for (auto row = 0; row < m_table->rowCount(); ++row) - TS_ASSERT_EQUALS(value, getTableItem(row, column)); + TS_ASSERT_EQUALS(value.asString(), getTableItem(row, column)); } std::string getTableItem(int row, int column) const { @@ -311,11 +325,11 @@ private: } std::unique_ptr<QTableWidget> m_table; - std::unique_ptr<IndirectDataTablePresenterLegacy> m_dataTablePresenter; + std::unique_ptr<IndirectDataTablePresenter> m_dataTablePresenter; std::unique_ptr<MockIIndirectFitDataView> m_view; std::unique_ptr<MockIndirectFitDataModel> m_model; - std::unique_ptr<IndirectFitDataPresenterLegacy> m_presenter; + std::unique_ptr<IndirectFitDataPresenter> m_presenter; SetUpADSWithWorkspace *m_ads; };