From 2a2365d30e52fc2d2e3b9e0447c68f9b61a7a51c Mon Sep 17 00:00:00 2001 From: Robert Applin <40830825+robertapplin@users.noreply.github.com> Date: Mon, 15 Apr 2019 15:23:31 +0100 Subject: [PATCH] Refs #25074. Move std::find to model --- .../Indirect/IIndirectFitDataView.h | 4 +++- .../Indirect/IndirectFitDataPresenter.cpp | 18 ++++++++++++++---- .../Indirect/IndirectFitDataPresenter.h | 4 +++- .../Indirect/IndirectFitDataView.cpp | 6 +++++- .../Indirect/IndirectFitDataView.h | 3 ++- .../Indirect/IndirectFittingModel.cpp | 7 +++++++ .../Indirect/IndirectFittingModel.h | 5 +++-- 7 files changed, 37 insertions(+), 10 deletions(-) diff --git a/qt/scientific_interfaces/Indirect/IIndirectFitDataView.h b/qt/scientific_interfaces/Indirect/IIndirectFitDataView.h index 81aa57eed08..e2ec61adec7 100644 --- a/qt/scientific_interfaces/Indirect/IIndirectFitDataView.h +++ b/qt/scientific_interfaces/Indirect/IIndirectFitDataView.h @@ -44,7 +44,9 @@ public: virtual void setResolutionWSSuffices(QStringList const &suffices) = 0; virtual void setResolutionFBSuffices(QStringList const &suffices) = 0; - virtual void setWorkspaceSelectorIndex(QString const &workspaceName) = 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; diff --git a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp index 10e02007a8a..c7bee8fe2d1 100644 --- a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp +++ b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp @@ -65,6 +65,8 @@ IndirectFitDataPresenter::IndirectFitDataPresenter( std::size_t))); } +IndirectFitDataPresenter::~IndirectFitDataPresenter() { observeReplace(false); } + IIndirectFitDataView const *IndirectFitDataPresenter::getView() const { return m_view; } @@ -144,10 +146,18 @@ void IndirectFitDataPresenter::loadSettings(const QSettings &settings) { void IndirectFitDataPresenter::replaceHandle(const std::string &workspaceName, const Workspace_sptr &workspace) { UNUSED_ARG(workspace) - const auto names = m_model->getWorkspaceNames(); - const auto iter = std::find(names.begin(), names.end(), workspaceName); - if (iter != names.end() && !m_view->isMultipleDataTabSelected()) - m_view->setWorkspaceSelectorIndex(QString::fromStdString(workspaceName)); + if (m_model->hasWorkspace(workspaceName) && + !m_view->isMultipleDataTabSelected()) + selectReplacedWorkspace(QString::fromStdString(workspaceName)); +} + +void IndirectFitDataPresenter::selectReplacedWorkspace( + const QString &workspaceName) { + if (m_view->isSampleWorkspaceSelectorVisible()) { + setModelWorkspace(workspaceName); + emit dataChanged(); + } else + m_view->setSampleWorkspaceSelectorIndex(workspaceName); } UserInputValidator & diff --git a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h index 0acb861d958..0614eff9bb6 100644 --- a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h +++ b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h @@ -32,7 +32,7 @@ public: IndirectFitDataPresenter( IndirectFittingModel *model, IIndirectFitDataView *view, std::unique_ptr<IndirectDataTablePresenter> tablePresenter); - ~IndirectFitDataPresenter() { observeReplace(false); } + ~IndirectFitDataPresenter(); void setSampleWSSuffices(const QStringList &suffices); void setSampleFBSuffices(const QStringList &suffices); @@ -92,6 +92,8 @@ private: getAddWorkspaceDialog(QWidget *parent) const; void updateDataInTable(std::size_t dataIndex); + void selectReplacedWorkspace(const QString &workspaceName); + std::unique_ptr<IAddWorkspaceDialog> m_addWorkspaceDialog; IndirectFittingModel *m_model; PrivateFittingData m_singleData; diff --git a/qt/scientific_interfaces/Indirect/IndirectFitDataView.cpp b/qt/scientific_interfaces/Indirect/IndirectFitDataView.cpp index a050baed437..9c910a94a46 100644 --- a/qt/scientific_interfaces/Indirect/IndirectFitDataView.cpp +++ b/qt/scientific_interfaces/Indirect/IndirectFitDataView.cpp @@ -97,7 +97,11 @@ void IndirectFitDataView::setResolutionFBSuffices(const QStringList &suffices) { m_dataForm->dsResolution->setFBSuffixes(suffices); } -void IndirectFitDataView::setWorkspaceSelectorIndex( +bool IndirectFitDataView::isSampleWorkspaceSelectorVisible() const { + return m_dataForm->dsSample->isWorkspaceSelectorVisible(); +} + +void IndirectFitDataView::setSampleWorkspaceSelectorIndex( const QString &workspaceName) { m_dataForm->dsSample->setWorkspaceSelectorIndex(workspaceName); m_dataForm->dsSample->setSelectorIndex(1); diff --git a/qt/scientific_interfaces/Indirect/IndirectFitDataView.h b/qt/scientific_interfaces/Indirect/IndirectFitDataView.h index 6bb6df9b48c..9724485ef2c 100644 --- a/qt/scientific_interfaces/Indirect/IndirectFitDataView.h +++ b/qt/scientific_interfaces/Indirect/IndirectFitDataView.h @@ -45,7 +45,8 @@ public: virtual void setResolutionWSSuffices(const QStringList &suffices) override; virtual void setResolutionFBSuffices(const QStringList &suffices) override; - void setWorkspaceSelectorIndex(const QString &workspaceName); + bool isSampleWorkspaceSelectorVisible() const override; + void setSampleWorkspaceSelectorIndex(const QString &workspaceName) override; void readSettings(const QSettings &settings) override; UserInputValidator &validate(UserInputValidator &validator) override; diff --git a/qt/scientific_interfaces/Indirect/IndirectFittingModel.cpp b/qt/scientific_interfaces/Indirect/IndirectFittingModel.cpp index 9a2348218f9..0f7652660e7 100644 --- a/qt/scientific_interfaces/Indirect/IndirectFittingModel.cpp +++ b/qt/scientific_interfaces/Indirect/IndirectFittingModel.cpp @@ -339,6 +339,13 @@ PrivateFittingData::operator=(PrivateFittingData &&fittingData) { IndirectFittingModel::IndirectFittingModel() : m_previousModelSelected(false), m_fittingMode(FittingMode::SEQUENTIAL) {} +bool IndirectFittingModel::hasWorkspace( + std::string const &workspaceName) const { + auto const names = getWorkspaceNames(); + auto const iter = std::find(names.begin(), names.end(), workspaceName); + return iter != names.end(); +} + MatrixWorkspace_sptr IndirectFittingModel::getWorkspace(std::size_t index) const { if (index < m_fittingData.size()) diff --git a/qt/scientific_interfaces/Indirect/IndirectFittingModel.h b/qt/scientific_interfaces/Indirect/IndirectFittingModel.h index 6ed312bab0f..8c7d5fa665e 100644 --- a/qt/scientific_interfaces/Indirect/IndirectFittingModel.h +++ b/qt/scientific_interfaces/Indirect/IndirectFittingModel.h @@ -47,6 +47,7 @@ public: IndirectFittingModel(); virtual ~IndirectFittingModel() = default; + bool hasWorkspace(std::string const &workspaceName) const; virtual Mantid::API::MatrixWorkspace_sptr getWorkspace(std::size_t index) const; Spectra getSpectra(std::size_t index) const; @@ -117,8 +118,6 @@ public: std::size_t spectrum) const; std::string getOutputBasename() const; - std::vector<std::string> getWorkspaceNames() const; - void cleanFailedRun(Mantid::API::IAlgorithm_sptr fittingAlgorithm); void cleanFailedSingleRun(Mantid::API::IAlgorithm_sptr fittingAlgorithm, std::size_t index); @@ -142,6 +141,8 @@ protected: void removeFittingData(std::size_t index); private: + std::vector<std::string> getWorkspaceNames() const; + void removeWorkspaceFromFittingData(std::size_t const &index); Mantid::API::IAlgorithm_sptr -- GitLab