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