diff --git a/qt/scientific_interfaces/Indirect/IndirectAddWorkspaceDialog.ui b/qt/scientific_interfaces/Indirect/IndirectAddWorkspaceDialog.ui
index 17cd5c058891..9299bee69d5c 100644
--- a/qt/scientific_interfaces/Indirect/IndirectAddWorkspaceDialog.ui
+++ b/qt/scientific_interfaces/Indirect/IndirectAddWorkspaceDialog.ui
@@ -132,40 +132,7 @@
-
-
- pbAdd
- clicked()
- IndirectAddWorkspaceDialog
- addData()
-
-
- 283
- 157
-
-
- 248
- 294
-
-
-
-
- pbClose
- clicked()
- IndirectAddWorkspaceDialog
- closeDialog()
-
-
- 358
- 160
-
-
- 354
- 227
-
-
-
-
+
addData()
closeDialog()
diff --git a/qt/scientific_interfaces/Inelastic/Analysis/ConvFitAddWorkspaceDialog.h b/qt/scientific_interfaces/Inelastic/Analysis/ConvFitAddWorkspaceDialog.h
index 28823935c865..8dae44777076 100644
--- a/qt/scientific_interfaces/Inelastic/Analysis/ConvFitAddWorkspaceDialog.h
+++ b/qt/scientific_interfaces/Inelastic/Analysis/ConvFitAddWorkspaceDialog.h
@@ -5,6 +5,7 @@
// Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
// SPDX - License - Identifier: GPL - 3.0 +
#pragma once
+#include "DllConfig.h"
#include "IAddWorkspaceDialog.h"
#include "ui_ConvFitAddWorkspaceDialog.h"
@@ -12,7 +13,7 @@ namespace MantidQt {
namespace CustomInterfaces {
namespace IDA {
-class ConvFitAddWorkspaceDialog : public IAddWorkspaceDialog {
+class MANTIDQT_INELASTIC_DLL ConvFitAddWorkspaceDialog : public IAddWorkspaceDialog {
Q_OBJECT
public:
explicit ConvFitAddWorkspaceDialog(QWidget *parent);
diff --git a/qt/scientific_interfaces/Inelastic/Analysis/ConvFitDataPresenter.cpp b/qt/scientific_interfaces/Inelastic/Analysis/ConvFitDataPresenter.cpp
index f7a93274212e..17ea1ab3e842 100644
--- a/qt/scientific_interfaces/Inelastic/Analysis/ConvFitDataPresenter.cpp
+++ b/qt/scientific_interfaces/Inelastic/Analysis/ConvFitDataPresenter.cpp
@@ -14,6 +14,15 @@ namespace MantidQt::CustomInterfaces::IDA {
ConvFitDataPresenter::ConvFitDataPresenter(IIndirectFitDataModel *model, IIndirectFitDataView *view)
: IndirectFitDataPresenter(model, view) {}
+bool ConvFitDataPresenter::addWorkspaceFromDialog(IAddWorkspaceDialog const *dialog) {
+ if (const auto convDialog = dynamic_cast(dialog)) {
+ addWorkspace(convDialog->workspaceName(), convDialog->workspaceIndices());
+ setResolution(convDialog->resolutionName());
+ return true;
+ }
+ return false;
+}
+
std::unique_ptr ConvFitDataPresenter::getAddWorkspaceDialog(QWidget *parent) const {
auto dialog = std::make_unique(parent);
dialog->setResolutionWSSuffices(getResolutionWSSuffices());
diff --git a/qt/scientific_interfaces/Inelastic/Analysis/ConvFitDataPresenter.h b/qt/scientific_interfaces/Inelastic/Analysis/ConvFitDataPresenter.h
index 5adf4a14e474..f72b530fa4a5 100644
--- a/qt/scientific_interfaces/Inelastic/Analysis/ConvFitDataPresenter.h
+++ b/qt/scientific_interfaces/Inelastic/Analysis/ConvFitDataPresenter.h
@@ -20,6 +20,8 @@ class MANTIDQT_INELASTIC_DLL ConvFitDataPresenter : public IndirectFitDataPresen
public:
ConvFitDataPresenter(IIndirectFitDataModel *model, IIndirectFitDataView *view);
+ bool addWorkspaceFromDialog(IAddWorkspaceDialog const *dialog) override;
+
signals:
void modelResolutionAdded(std::string const &name, WorkspaceID const &workspaceID);
diff --git a/qt/scientific_interfaces/Inelastic/Analysis/DataAnalysisTabFactory.cpp b/qt/scientific_interfaces/Inelastic/Analysis/DataAnalysisTabFactory.cpp
new file mode 100644
index 000000000000..e18ce05efc07
--- /dev/null
+++ b/qt/scientific_interfaces/Inelastic/Analysis/DataAnalysisTabFactory.cpp
@@ -0,0 +1,72 @@
+// Mantid Repository : https://github.com/mantidproject/mantid
+//
+// Copyright © 2023 ISIS Rutherford Appleton Laboratory UKRI,
+// NScD Oak Ridge National Laboratory, European Spallation Source,
+// Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
+// SPDX - License - Identifier: GPL - 3.0 +
+#include "DataAnalysisTabFactory.h"
+
+#include "ConvFitDataPresenter.h"
+#include "FitTabConstants.h"
+#include "FqFitDataPresenter.h"
+#include "FqFitModel.h"
+#include "FunctionBrowser/ConvFunctionModel.h"
+#include "FunctionBrowser/ConvTemplateBrowser.h"
+#include "FunctionBrowser/FqFunctionModel.h"
+#include "FunctionBrowser/IqtFunctionModel.h"
+#include "FunctionBrowser/IqtTemplateBrowser.h"
+#include "FunctionBrowser/MSDFunctionModel.h"
+#include "IndirectDataAnalysisTab.h"
+#include "IndirectFitDataPresenter.h"
+#include "IqtFitModel.h"
+#include "MSDFitModel.h"
+
+namespace MantidQt::CustomInterfaces::IDA {
+
+DataAnalysisTabFactory::DataAnalysisTabFactory(QTabWidget *tabWidget) : m_tabWidget(tabWidget) {}
+
+IndirectDataAnalysisTab *DataAnalysisTabFactory::makeMSDFitTab(int const index) const {
+ auto tab = new IndirectDataAnalysisTab(MSDFit::TAB_NAME, MSDFit::HAS_RESOLUTION, m_tabWidget->widget(index));
+ tab->setupFittingModel();
+ tab->setupFitPropertyBrowser(MSDFit::HIDDEN_PROPS);
+ tab->setupFitDataView();
+ tab->setupOutputOptionsPresenter();
+ tab->setUpFitDataPresenter();
+ tab->setupPlotView();
+ return tab;
+}
+
+IndirectDataAnalysisTab *DataAnalysisTabFactory::makeIqtFitTab(int const index) const {
+ auto tab = new IndirectDataAnalysisTab(IqtFit::TAB_NAME, IqtFit::HAS_RESOLUTION, m_tabWidget->widget(index));
+ tab->setupFittingModel();
+ tab->setupFitPropertyBrowser(IqtFit::HIDDEN_PROPS);
+ tab->setupFitDataView();
+ tab->setupOutputOptionsPresenter(true);
+ tab->setUpFitDataPresenter();
+ tab->setupPlotView();
+ return tab;
+}
+
+IndirectDataAnalysisTab *DataAnalysisTabFactory::makeConvFitTab(int const index) const {
+ auto tab = new IndirectDataAnalysisTab(ConvFit::TAB_NAME, ConvFit::HAS_RESOLUTION, m_tabWidget->widget(index));
+ tab->setupFittingModel();
+ tab->setupFitPropertyBrowser(ConvFit::HIDDEN_PROPS, true);
+ tab->setupFitDataView();
+ tab->setupOutputOptionsPresenter(true);
+ tab->setUpFitDataPresenter();
+ tab->setupPlotView();
+ return tab;
+}
+
+IndirectDataAnalysisTab *DataAnalysisTabFactory::makeFqFitTab(int const index) const {
+ auto tab = new IndirectDataAnalysisTab(FqFit::TAB_NAME, FqFit::HAS_RESOLUTION, m_tabWidget->widget(index));
+ tab->setupFittingModel();
+ tab->setupFitPropertyBrowser(FqFit::HIDDEN_PROPS);
+ tab->setupFitDataView();
+ tab->setupOutputOptionsPresenter();
+ tab->setUpFitDataPresenter();
+ tab->setupPlotView(FqFit::X_BOUNDS);
+ return tab;
+}
+
+} // namespace MantidQt::CustomInterfaces::IDA
\ No newline at end of file
diff --git a/qt/scientific_interfaces/Inelastic/Analysis/DataAnalysisTabFactory.h b/qt/scientific_interfaces/Inelastic/Analysis/DataAnalysisTabFactory.h
new file mode 100644
index 000000000000..a74b3894eff3
--- /dev/null
+++ b/qt/scientific_interfaces/Inelastic/Analysis/DataAnalysisTabFactory.h
@@ -0,0 +1,27 @@
+// Mantid Repository : https://github.com/mantidproject/mantid
+//
+// Copyright © 2023 ISIS Rutherford Appleton Laboratory UKRI,
+// NScD Oak Ridge National Laboratory, European Spallation Source,
+// Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
+// SPDX - License - Identifier: GPL - 3.0 +
+#pragma once
+
+#include
+
+namespace MantidQt::CustomInterfaces::IDA {
+
+class IndirectDataAnalysisTab;
+
+class DataAnalysisTabFactory {
+public:
+ explicit DataAnalysisTabFactory(QTabWidget *tabWidget);
+ IndirectDataAnalysisTab *makeMSDFitTab(int const index) const;
+ IndirectDataAnalysisTab *makeIqtFitTab(int const index) const;
+ IndirectDataAnalysisTab *makeConvFitTab(int const index) const;
+ IndirectDataAnalysisTab *makeFqFitTab(int const index) const;
+
+private:
+ QTabWidget *m_tabWidget;
+};
+
+} // namespace MantidQt::CustomInterfaces::IDA
\ No newline at end of file
diff --git a/qt/scientific_interfaces/Inelastic/Analysis/FQFitConstants.h b/qt/scientific_interfaces/Inelastic/Analysis/FQFitConstants.h
deleted file mode 100644
index a6b0ef98cf32..000000000000
--- a/qt/scientific_interfaces/Inelastic/Analysis/FQFitConstants.h
+++ /dev/null
@@ -1,54 +0,0 @@
-// Mantid Repository : https://github.com/mantidproject/mantid
-//
-// Copyright © 2020 ISIS Rutherford Appleton Laboratory UKRI,
-// NScD Oak Ridge National Laboratory, European Spallation Source,
-// Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
-// SPDX - License - Identifier: GPL - 3.0 +
-#pragma once
-
-#include