From 6ac531f1d0eded186a4aeba519478bcc6d9112bd Mon Sep 17 00:00:00 2001
From: Matthew Andrew <matthew.andrew@tessella.com>
Date: Thu, 27 Feb 2020 16:12:00 +0000
Subject: [PATCH] Added all fit types to multiple input Re #28077

Multiple input can be either width or EISF data. Therefore in line with the old functionality  in this mode the full range of fitting functions are enabled.
---
 .../Indirect/IFQFitObserver.h                 |  1 +
 .../FQFunctionModel.cpp                       | 10 +++++++--
 .../Indirect/JumpFitDataPresenter.cpp         | 22 ++++++++++++++++---
 .../Indirect/JumpFitDataPresenter.h           |  2 ++
 4 files changed, 30 insertions(+), 5 deletions(-)

diff --git a/qt/scientific_interfaces/Indirect/IFQFitObserver.h b/qt/scientific_interfaces/Indirect/IFQFitObserver.h
index 049ff3520fd..0f0d405738e 100644
--- a/qt/scientific_interfaces/Indirect/IFQFitObserver.h
+++ b/qt/scientific_interfaces/Indirect/IFQFitObserver.h
@@ -10,6 +10,7 @@
 enum DataType {
   WIDTH,
   EISF,
+  ALL,
 };
 
 class IFQFitObserver {
diff --git a/qt/scientific_interfaces/Indirect/IndirectFunctionBrowser/FQFunctionModel.cpp b/qt/scientific_interfaces/Indirect/IndirectFunctionBrowser/FQFunctionModel.cpp
index da240e854af..9db35f02dee 100644
--- a/qt/scientific_interfaces/Indirect/IndirectFunctionBrowser/FQFunctionModel.cpp
+++ b/qt/scientific_interfaces/Indirect/IndirectFunctionBrowser/FQFunctionModel.cpp
@@ -25,8 +25,14 @@ QStringList widthFits = QStringList(
 QStringList eisfFits = QStringList(
     {"None", "EISFDiffCylinder", "EISFDiffSphere", "EISFDiffSphereAlkyl"});
 
-std::unordered_map<DataType, QStringList> dataTypeFitTypeMap(
-    {{DataType::WIDTH, widthFits}, {DataType::EISF, eisfFits}});
+QStringList combinedFits = QStringList(
+    {"None", "ChudleyElliot", "HallRoss", "FickDiffusion", "TeixeiraWater",
+     "EISFDiffCylinder", "EISFDiffSphere", "EISFDiffSphereAlkyl"});
+
+std::unordered_map<DataType, QStringList>
+    dataTypeFitTypeMap({{DataType::WIDTH, widthFits},
+                        {DataType::EISF, eisfFits},
+                        {DataType::ALL, combinedFits}});
 
 FQFunctionModel::FQFunctionModel() {
   for (auto functionName : widthFits + eisfFits) {
diff --git a/qt/scientific_interfaces/Indirect/JumpFitDataPresenter.cpp b/qt/scientific_interfaces/Indirect/JumpFitDataPresenter.cpp
index 8a420a07663..5c129c68242 100644
--- a/qt/scientific_interfaces/Indirect/JumpFitDataPresenter.cpp
+++ b/qt/scientific_interfaces/Indirect/JumpFitDataPresenter.cpp
@@ -25,9 +25,9 @@ JumpFitDataPresenter::JumpFitDataPresenter(
       m_lbParameterType(lbParameterType), m_lbParameter(lbParameter),
       m_jumpModel(model) {
   connect(view, SIGNAL(singleDataViewSelected()), this,
-          SLOT(showParameterComboBoxes()));
+          SLOT(handleSingleInputSelected()));
   connect(view, SIGNAL(multipleDataViewSelected()), this,
-          SLOT(hideParameterComboBoxes()));
+          SLOT(handleMultipleInputSelected()));
 
   connect(this, SIGNAL(requestedAddWorkspaceDialog()), this,
           SLOT(updateActiveDataIndex()));
@@ -54,6 +54,23 @@ void JumpFitDataPresenter::handleSampleLoaded(const QString &workspaceName) {
   emit updateAvailableFitTypes();
 }
 
+void JumpFitDataPresenter::handleMultipleInputSelected() {
+  hideParameterComboBoxes();
+  m_notifier.notify(
+      [](IFQFitObserver &obs) { obs.updateDataType(DataType::ALL); });
+}
+
+void JumpFitDataPresenter::handleSingleInputSelected() {
+  showParameterComboBoxes();
+  m_dataIndex = TableDatasetIndex{0};
+  std::string currentText = m_cbParameterType->currentText().toStdString();
+  auto dataType = m_cbParameterType->currentText() == QString("Width")
+                      ? DataType::WIDTH
+                      : DataType::EISF;
+  m_notifier.notify(
+      [&dataType](IFQFitObserver &obs) { obs.updateDataType(dataType); });
+}
+
 void JumpFitDataPresenter::hideParameterComboBoxes() {
   m_cbParameter->hide();
   m_cbParameterType->hide();
@@ -66,7 +83,6 @@ void JumpFitDataPresenter::showParameterComboBoxes() {
   m_cbParameterType->show();
   m_lbParameter->show();
   m_lbParameterType->show();
-  m_dataIndex = TableDatasetIndex{0};
 }
 
 void JumpFitDataPresenter::setActiveParameterType(const std::string &type) {
diff --git a/qt/scientific_interfaces/Indirect/JumpFitDataPresenter.h b/qt/scientific_interfaces/Indirect/JumpFitDataPresenter.h
index 011bbf49509..e9052b0d968 100644
--- a/qt/scientific_interfaces/Indirect/JumpFitDataPresenter.h
+++ b/qt/scientific_interfaces/Indirect/JumpFitDataPresenter.h
@@ -47,6 +47,8 @@ private slots:
   void setSingleModelSpectrum(int index);
   void handleParameterTypeChanged(const QString &parameter);
   void handleSpectrumSelectionChanged(int parameterIndex);
+  void handleMultipleInputSelected();
+  void handleSingleInputSelected();
 
 signals:
   void spectrumChanged(WorkspaceIndex);
-- 
GitLab