diff --git a/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorDataTable.h b/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorDataTable.h index 1f74616a2f40dfe3afc1c242399c256210670ae1..5106be006cfcf475467cc497a566c3030cd41973 100644 --- a/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorDataTable.h +++ b/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorDataTable.h @@ -57,6 +57,7 @@ public: [[nodiscard]] std::vector<FitDomainIndex> allRows() const; [[nodiscard]] std::vector<FitDomainIndex> selectedRows() const; + [[nodiscard]] FitDomainIndex currentRow() const; bool hasLoadedData() const; diff --git a/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorPresenter.h b/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorPresenter.h index c5cfca0d43ee68ef813e247a6613826341bd298f..3cea1f795a908fa5bd512053a0971875927b85d2 100644 --- a/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorPresenter.h +++ b/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorPresenter.h @@ -82,23 +82,28 @@ private: WorkspaceIndex workspaceIndex, double startX, double endX); void updateStartX(std::string const &workspaceName, - WorkspaceIndex workspaceIndex, double startX); + WorkspaceIndex workspaceIndex, FitDomainIndex domainIndex); void updateEndX(std::string const &workspaceName, - WorkspaceIndex workspaceIndex, double endX); + WorkspaceIndex workspaceIndex, FitDomainIndex domainIndex); void updateParameterTie(std::string const &workspaceName, WorkspaceIndex workspaceIndex, std::string const ¶meter, std::string const &tie); - [[nodiscard]] std::vector<FitDomainIndex> getRowIndices() const; - - void checkForWarningMessages(); + template <void (FitScriptGeneratorPresenter::*func)( + std::string const &workspaceName, WorkspaceIndex workspaceIndex, + FitDomainIndex domainIndex)> + void updateDomainXRange(); template <void (IFitScriptGeneratorModel::*func)( std::string const &workspaceName, WorkspaceIndex workspaceIndex, std::string const &function)> void updateDomainFunctions(std::string const &function); + [[nodiscard]] std::vector<FitDomainIndex> getRowIndices() const; + + void checkForWarningMessages(); + std::vector<std::string> m_warnings; IFitScriptGeneratorView *m_view; diff --git a/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorView.h b/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorView.h index 017bcac298141c0d57f50ab4ebd8913ce0469d65..47b4307987a4d40110bfe340976c5c72520e41a2 100644 --- a/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorView.h +++ b/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorView.h @@ -56,6 +56,7 @@ public: [[nodiscard]] std::vector<FitDomainIndex> allRows() const override; [[nodiscard]] std::vector<FitDomainIndex> selectedRows() const override; + [[nodiscard]] FitDomainIndex currentRow() const override; [[nodiscard]] bool hasLoadedData() const override; diff --git a/qt/widgets/common/inc/MantidQtWidgets/Common/IFitScriptGeneratorView.h b/qt/widgets/common/inc/MantidQtWidgets/Common/IFitScriptGeneratorView.h index 1755972e3d666c048e51c6a79abb458e8546d616..45e8774ca8d9ad7f5c4508753dfb6907e1e4b815 100644 --- a/qt/widgets/common/inc/MantidQtWidgets/Common/IFitScriptGeneratorView.h +++ b/qt/widgets/common/inc/MantidQtWidgets/Common/IFitScriptGeneratorView.h @@ -68,6 +68,7 @@ public: [[nodiscard]] virtual std::vector<FitDomainIndex> allRows() const = 0; [[nodiscard]] virtual std::vector<FitDomainIndex> selectedRows() const = 0; + [[nodiscard]] virtual FitDomainIndex currentRow() const = 0; [[nodiscard]] virtual bool hasLoadedData() const = 0; diff --git a/qt/widgets/common/src/FitScriptGeneratorDataTable.cpp b/qt/widgets/common/src/FitScriptGeneratorDataTable.cpp index 2a45726e82044b2f17e31dade2c398a64b05f47f..cee0a8db69b539174cd2e6527226d7f64a3f752f 100644 --- a/qt/widgets/common/src/FitScriptGeneratorDataTable.cpp +++ b/qt/widgets/common/src/FitScriptGeneratorDataTable.cpp @@ -229,6 +229,14 @@ std::vector<FitDomainIndex> FitScriptGeneratorDataTable::selectedRows() const { return rowIndices; } +FitDomainIndex FitScriptGeneratorDataTable::currentRow() const { + if (hasLoadedData()) + return selectedRows()[0]; + + throw std::runtime_error( + "There is no currentRow as data has not been loaded yet."); +} + bool FitScriptGeneratorDataTable::hasLoadedData() const { return this->rowCount() > 0; } diff --git a/qt/widgets/common/src/FitScriptGeneratorPresenter.cpp b/qt/widgets/common/src/FitScriptGeneratorPresenter.cpp index bbaead62b87ad68c1a81094b042983422c555ec6..7fde71cb998c161e7aba6570a0fe566111a46a22 100644 --- a/qt/widgets/common/src/FitScriptGeneratorPresenter.cpp +++ b/qt/widgets/common/src/FitScriptGeneratorPresenter.cpp @@ -137,25 +137,11 @@ void FitScriptGeneratorPresenter::handleAddWorkspaceClicked() { } void FitScriptGeneratorPresenter::handleStartXChanged() { - auto const selectedRows = m_view->selectedRows(); - if (!selectedRows.empty()) { - auto const workspaceName = m_view->workspaceName(selectedRows[0]); - auto const workspaceIndex = m_view->workspaceIndex(selectedRows[0]); - auto const startX = m_view->startX(selectedRows[0]); - - updateStartX(workspaceName, workspaceIndex, startX); - } + updateDomainXRange<&FitScriptGeneratorPresenter::updateStartX>(); } void FitScriptGeneratorPresenter::handleEndXChanged() { - auto const selectedRows = m_view->selectedRows(); - if (!selectedRows.empty()) { - auto const workspaceName = m_view->workspaceName(selectedRows[0]); - auto const workspaceIndex = m_view->workspaceIndex(selectedRows[0]); - auto const endX = m_view->endX(selectedRows[0]); - - updateEndX(workspaceName, workspaceIndex, endX); - } + updateDomainXRange<&FitScriptGeneratorPresenter::updateEndX>(); } void FitScriptGeneratorPresenter::handleSelectionChanged() { @@ -350,8 +336,9 @@ void FitScriptGeneratorPresenter::addWorkspace(std::string const &workspaceName, void FitScriptGeneratorPresenter::updateStartX(std::string const &workspaceName, WorkspaceIndex workspaceIndex, - double startX) { - if (!m_model->updateStartX(workspaceName, workspaceIndex, startX)) { + FitDomainIndex domainIndex) { + if (!m_model->updateStartX(workspaceName, workspaceIndex, + m_view->startX(domainIndex))) { m_view->resetSelection(); m_view->displayWarning("The StartX provided must be within the x limits of " "its workspace, and less than the EndX."); @@ -360,26 +347,15 @@ void FitScriptGeneratorPresenter::updateStartX(std::string const &workspaceName, void FitScriptGeneratorPresenter::updateEndX(std::string const &workspaceName, WorkspaceIndex workspaceIndex, - double endX) { - if (!m_model->updateEndX(workspaceName, workspaceIndex, endX)) { + FitDomainIndex domainIndex) { + if (!m_model->updateEndX(workspaceName, workspaceIndex, + m_view->endX(domainIndex))) { m_view->resetSelection(); m_view->displayWarning("The EndX provided must be within the x limits of " "its workspace, and greater than the StartX."); } } -template <void (IFitScriptGeneratorModel::*func)( - std::string const &workspaceName, WorkspaceIndex workspaceIndex, - std::string const &function)> -void FitScriptGeneratorPresenter::updateDomainFunctions( - std::string const &function) { - for (auto const &domainIndex : getRowIndices()) { - auto const workspaceName = m_view->workspaceName(domainIndex); - auto const workspaceIndex = m_view->workspaceIndex(domainIndex); - (m_model->*func)(workspaceName, workspaceIndex, function); - } -} - void FitScriptGeneratorPresenter::updateParameterTie( std::string const &workspaceName, WorkspaceIndex workspaceIndex, std::string const ¶meter, std::string const &tie) { @@ -396,6 +372,31 @@ void FitScriptGeneratorPresenter::updateParameterTie( } } +template <void (FitScriptGeneratorPresenter::*func)( + std::string const &workspaceName, WorkspaceIndex workspaceIndex, + FitDomainIndex domainIndex)> +void FitScriptGeneratorPresenter::updateDomainXRange() { + if (m_view->hasLoadedData()) { + auto const domainIndex = m_view->currentRow(); + auto const workspaceName = m_view->workspaceName(domainIndex); + auto const workspaceIndex = m_view->workspaceIndex(domainIndex); + + (this->*func)(workspaceName, workspaceIndex, domainIndex); + } +} + +template <void (IFitScriptGeneratorModel::*func)( + std::string const &workspaceName, WorkspaceIndex workspaceIndex, + std::string const &function)> +void FitScriptGeneratorPresenter::updateDomainFunctions( + std::string const &function) { + for (auto const &domainIndex : getRowIndices()) { + auto const workspaceName = m_view->workspaceName(domainIndex); + auto const workspaceIndex = m_view->workspaceIndex(domainIndex); + (m_model->*func)(workspaceName, workspaceIndex, function); + } +} + std::vector<FitDomainIndex> FitScriptGeneratorPresenter::getRowIndices() const { return m_view->applyFunctionChangesToAll() ? m_view->allRows() : m_view->selectedRows(); diff --git a/qt/widgets/common/src/FitScriptGeneratorView.cpp b/qt/widgets/common/src/FitScriptGeneratorView.cpp index ab7ef6d81198f142a7ad2cd9227b072f30a532d8..fa9c0db4cb6c0d93cf420a418ca2baa8abd92e0d 100644 --- a/qt/widgets/common/src/FitScriptGeneratorView.cpp +++ b/qt/widgets/common/src/FitScriptGeneratorView.cpp @@ -293,6 +293,10 @@ std::vector<FitDomainIndex> FitScriptGeneratorView::selectedRows() const { return m_dataTable->selectedRows(); } +FitDomainIndex FitScriptGeneratorView::currentRow() const { + return m_dataTable->currentRow(); +} + bool FitScriptGeneratorView::hasLoadedData() const { return m_dataTable->hasLoadedData(); }