From 1dfba4256802968591d7c8ecd01868d75d7e55dd Mon Sep 17 00:00:00 2001 From: Applin Date: Fri, 19 Jan 2024 16:10:17 +0000 Subject: [PATCH] Do not hold pointer to dialog which can become invalidated --- .../Analysis/ConvFitAddWorkspaceDialog.cpp | 4 ++- .../Analysis/ConvFitAddWorkspaceDialog.h | 3 ++- .../Inelastic/Analysis/ConvFitDataView.cpp | 5 ++-- .../Analysis/FqFitAddWorkspaceDialog.cpp | 4 ++- .../Analysis/FqFitAddWorkspaceDialog.h | 11 ++++---- .../Inelastic/Analysis/FqFitDataView.cpp | 5 ++-- .../Analysis/IndirectFitDataPresenter.cpp | 2 ++ .../Analysis/IndirectFitDataView.cpp | 11 ++++---- .../Inelastic/Analysis/IndirectFitDataView.h | 3 +-- .../InelasticDataManipulationElwinTabView.cpp | 3 +++ .../Common/AddWorkspaceDialog.h | 3 ++- .../Common/FitScriptGeneratorPresenter.h | 3 ++- .../Common/FitScriptGeneratorView.h | 8 +++--- .../Common/IFitScriptGeneratorPresenter.h | 4 +++ .../Common/IFitScriptGeneratorView.h | 7 +++-- qt/widgets/common/src/AddWorkspaceDialog.cpp | 4 ++- .../src/FitScriptGeneratorPresenter.cpp | 9 ++----- .../common/src/FitScriptGeneratorView.cpp | 26 +++++++++---------- 18 files changed, 62 insertions(+), 53 deletions(-) diff --git a/qt/scientific_interfaces/Inelastic/Analysis/ConvFitAddWorkspaceDialog.cpp b/qt/scientific_interfaces/Inelastic/Analysis/ConvFitAddWorkspaceDialog.cpp index 0fc3f7fb742a..1312f5c8b338 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/ConvFitAddWorkspaceDialog.cpp +++ b/qt/scientific_interfaces/Inelastic/Analysis/ConvFitAddWorkspaceDialog.cpp @@ -73,7 +73,7 @@ ConvFitAddWorkspaceDialog::ConvFitAddWorkspaceDialog(QWidget *parent) : QDialog( connect(m_uiForm.dsWorkspace, SIGNAL(dataReady(const QString &)), this, SLOT(workspaceChanged(const QString &))); connect(m_uiForm.ckAllSpectra, SIGNAL(stateChanged(int)), this, SLOT(selectAllSpectra(int))); - connect(m_uiForm.pbAdd, SIGNAL(clicked()), this, SIGNAL(addData())); + connect(m_uiForm.pbAdd, SIGNAL(clicked()), this, SLOT(emitAddData())); connect(m_uiForm.pbClose, SIGNAL(clicked()), this, SLOT(close())); } @@ -128,6 +128,8 @@ void ConvFitAddWorkspaceDialog::workspaceChanged(const QString &workspaceName) { setAllSpectraSelectionEnabled(false); } +void ConvFitAddWorkspaceDialog::emitAddData() { emit addData(this); } + void ConvFitAddWorkspaceDialog::setWorkspace(const std::string &workspace) { setAllSpectraSelectionEnabled(true); if (m_uiForm.ckAllSpectra->isChecked()) { diff --git a/qt/scientific_interfaces/Inelastic/Analysis/ConvFitAddWorkspaceDialog.h b/qt/scientific_interfaces/Inelastic/Analysis/ConvFitAddWorkspaceDialog.h index fa6adaf6484b..0ae8959113ba 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/ConvFitAddWorkspaceDialog.h +++ b/qt/scientific_interfaces/Inelastic/Analysis/ConvFitAddWorkspaceDialog.h @@ -33,11 +33,12 @@ class MANTIDQT_INELASTIC_DLL ConvFitAddWorkspaceDialog : public QDialog, public void updateSelectedSpectra() override; signals: - void addData(); + void addData(MantidWidgets::IAddWorkspaceDialog *dialog); private slots: void selectAllSpectra(int state); void workspaceChanged(const QString &workspaceName); + void emitAddData(); private: void setWorkspace(const std::string &workspace); diff --git a/qt/scientific_interfaces/Inelastic/Analysis/ConvFitDataView.cpp b/qt/scientific_interfaces/Inelastic/Analysis/ConvFitDataView.cpp index 0f86bb991028..75a2747cbb9a 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/ConvFitDataView.cpp +++ b/qt/scientific_interfaces/Inelastic/Analysis/ConvFitDataView.cpp @@ -35,7 +35,8 @@ ConvFitDataView::ConvFitDataView(const QStringList &headers, QWidget *parent) : void ConvFitDataView::showAddWorkspaceDialog() { auto dialog = new ConvFitAddWorkspaceDialog(parentWidget()); - connect(dialog, SIGNAL(addData()), this, SLOT(notifyAddData())); + connect(dialog, SIGNAL(addData(MantidWidgets::IAddWorkspaceDialog *)), this, + SLOT(notifyAddData(MantidWidgets::IAddWorkspaceDialog *))); dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->setWSSuffices(m_wsSampleSuffixes); @@ -44,8 +45,6 @@ void ConvFitDataView::showAddWorkspaceDialog() { dialog->setResolutionFBSuffices(m_fbResolutionSuffixes); dialog->updateSelectedSpectra(); dialog->show(); - - m_addWorkspaceDialog = dialog; } void ConvFitDataView::addTableEntry(size_t row, FitDataRow newRow) { diff --git a/qt/scientific_interfaces/Inelastic/Analysis/FqFitAddWorkspaceDialog.cpp b/qt/scientific_interfaces/Inelastic/Analysis/FqFitAddWorkspaceDialog.cpp index 0065f755306f..d1388ba6a24c 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/FqFitAddWorkspaceDialog.cpp +++ b/qt/scientific_interfaces/Inelastic/Analysis/FqFitAddWorkspaceDialog.cpp @@ -18,7 +18,7 @@ FqFitAddWorkspaceDialog::FqFitAddWorkspaceDialog(QWidget *parent) : QDialog(pare connect(m_uiForm.dsWorkspace, SIGNAL(dataReady(const QString &)), this, SLOT(emitWorkspaceChanged(const QString &))); connect(m_uiForm.cbParameterType, SIGNAL(currentIndexChanged(const QString &)), this, SLOT(emitParameterTypeChanged(const QString &))); - connect(m_uiForm.pbAdd, SIGNAL(clicked()), this, SIGNAL(addData())); + connect(m_uiForm.pbAdd, SIGNAL(clicked()), this, SLOT(emitAddData())); connect(m_uiForm.pbClose, SIGNAL(clicked()), this, SLOT(close())); } @@ -71,4 +71,6 @@ void FqFitAddWorkspaceDialog::emitParameterTypeChanged(const QString &type) { emit parameterTypeChanged(this, type.toStdString()); } +void FqFitAddWorkspaceDialog::emitAddData() { emit addData(this); } + } // namespace MantidQt::CustomInterfaces::IDA diff --git a/qt/scientific_interfaces/Inelastic/Analysis/FqFitAddWorkspaceDialog.h b/qt/scientific_interfaces/Inelastic/Analysis/FqFitAddWorkspaceDialog.h index 00917c638ee1..70213354f179 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/FqFitAddWorkspaceDialog.h +++ b/qt/scientific_interfaces/Inelastic/Analysis/FqFitAddWorkspaceDialog.h @@ -35,15 +35,16 @@ class MANTIDQT_INELASTIC_DLL FqFitAddWorkspaceDialog : public QDialog, public Ma void updateSelectedSpectra() override{}; -public slots: - void emitWorkspaceChanged(const QString &name); - void emitParameterTypeChanged(const QString &index); - signals: - void addData(); + void addData(MantidWidgets::IAddWorkspaceDialog *dialog); void workspaceChanged(FqFitAddWorkspaceDialog *dialog, const std::string &workspace); void parameterTypeChanged(FqFitAddWorkspaceDialog *dialog, const std::string &type); +private slots: + void emitWorkspaceChanged(const QString &name); + void emitParameterTypeChanged(const QString &index); + void emitAddData(); + private: Ui::FqFitAddWorkspaceDialog m_uiForm; }; diff --git a/qt/scientific_interfaces/Inelastic/Analysis/FqFitDataView.cpp b/qt/scientific_interfaces/Inelastic/Analysis/FqFitDataView.cpp index c35e89289554..c1c22c45d2d8 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/FqFitDataView.cpp +++ b/qt/scientific_interfaces/Inelastic/Analysis/FqFitDataView.cpp @@ -38,7 +38,8 @@ FqFitDataView::FqFitDataView(const QStringList &headers, QWidget *parent) : Indi void FqFitDataView::showAddWorkspaceDialog() { auto dialog = new FqFitAddWorkspaceDialog(parentWidget()); - connect(dialog, SIGNAL(addData()), this, SLOT(notifyAddData())); + connect(dialog, SIGNAL(addData(MantidWidgets::IAddWorkspaceDialog *)), this, + SLOT(notifyAddData(MantidWidgets::IAddWorkspaceDialog *))); connect(dialog, SIGNAL(workspaceChanged(FqFitAddWorkspaceDialog *, const std::string &)), this, SLOT(notifyWorkspaceChanged(FqFitAddWorkspaceDialog *, const std::string &))); connect(dialog, SIGNAL(parameterTypeChanged(FqFitAddWorkspaceDialog *, const std::string &)), this, @@ -49,8 +50,6 @@ void FqFitDataView::showAddWorkspaceDialog() { dialog->setFBSuffices(m_fbSampleSuffixes); dialog->updateSelectedSpectra(); dialog->show(); - - m_addWorkspaceDialog = dialog; } void FqFitDataView::notifyAddClicked() { diff --git a/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataPresenter.cpp b/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataPresenter.cpp index 43287279f3fe..99ea31006b31 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataPresenter.cpp +++ b/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataPresenter.cpp @@ -102,6 +102,8 @@ void IndirectFitDataPresenter::handleAddData(MantidWidgets::IAddWorkspaceDialog m_tab->handleDataChanged(); } catch (const std::runtime_error &ex) { displayWarning(ex.what()); + } catch (const std::invalid_argument &ex) { + displayWarning(ex.what()); } } diff --git a/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataView.cpp b/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataView.cpp index ccb7f9759f94..069dfdcca65f 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataView.cpp +++ b/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataView.cpp @@ -199,19 +199,20 @@ void IndirectFitDataView::setResolutionWSSuffices(const QStringList &suffixes) { void IndirectFitDataView::setResolutionFBSuffices(const QStringList &suffixes) { m_fbResolutionSuffixes = suffixes; } void IndirectFitDataView::showAddWorkspaceDialog() { - auto dialog = new MantidWidgets::AddWorkspaceDialog(parentWidget()); - connect(dialog, SIGNAL(addData()), this, SLOT(notifyAddData())); + auto dialog = std::make_unique(parentWidget()); + connect(dialog.get(), SIGNAL(addData(MantidWidgets::IAddWorkspaceDialog *)), this, + SLOT(notifyAddData(MantidWidgets::AddWorkspaceDialog *))); dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->setWSSuffices(m_wsSampleSuffixes); dialog->setFBSuffices(m_fbSampleSuffixes); dialog->updateSelectedSpectra(); dialog->show(); - - m_addWorkspaceDialog = dialog; } -void IndirectFitDataView::notifyAddData() { m_presenter->handleAddData(m_addWorkspaceDialog); } +void IndirectFitDataView::notifyAddData(MantidWidgets::IAddWorkspaceDialog *dialog) { + m_presenter->handleAddData(dialog); +} void IndirectFitDataView::notifyRemoveClicked() { m_presenter->handleRemoveClicked(); } diff --git a/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataView.h b/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataView.h index 5410d218fb51..4a475ec31229 100644 --- a/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataView.h +++ b/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataView.h @@ -53,7 +53,7 @@ class MANTIDQT_INELASTIC_DLL IndirectFitDataView : public QTabWidget, public IIn void displayWarning(const std::string &warning) override; protected slots: - void notifyAddData(); + void notifyAddData(MantidWidgets::IAddWorkspaceDialog *dialog); protected: IndirectFitDataView(const QStringList &headers, QWidget *parent); @@ -66,7 +66,6 @@ protected slots: QStringList m_wsResolutionSuffixes; QStringList m_fbResolutionSuffixes; - MantidWidgets::IAddWorkspaceDialog *m_addWorkspaceDialog; IIndirectFitDataPresenter *m_presenter; protected slots: diff --git a/qt/scientific_interfaces/Inelastic/Manipulation/InelasticDataManipulationElwinTabView.cpp b/qt/scientific_interfaces/Inelastic/Manipulation/InelasticDataManipulationElwinTabView.cpp index c8754f20168d..b754dd4ec1c2 100644 --- a/qt/scientific_interfaces/Inelastic/Manipulation/InelasticDataManipulationElwinTabView.cpp +++ b/qt/scientific_interfaces/Inelastic/Manipulation/InelasticDataManipulationElwinTabView.cpp @@ -204,6 +204,9 @@ void InelasticDataManipulationElwinTabView::notifyRemoveDataClicked() { m_presen void InelasticDataManipulationElwinTabView::notifyAddWorkspaceDialog() { showAddWorkspaceDialog(); } void InelasticDataManipulationElwinTabView::showAddWorkspaceDialog() { + if (m_addWorkspaceDialog) + return; + auto dialog = new MantidWidgets::AddWorkspaceDialog(parentWidget()); connect(dialog, SIGNAL(addData()), this, SLOT(notifyAddData())); diff --git a/qt/widgets/common/inc/MantidQtWidgets/Common/AddWorkspaceDialog.h b/qt/widgets/common/inc/MantidQtWidgets/Common/AddWorkspaceDialog.h index 554a4e5b312b..f7e93e08da4c 100644 --- a/qt/widgets/common/inc/MantidQtWidgets/Common/AddWorkspaceDialog.h +++ b/qt/widgets/common/inc/MantidQtWidgets/Common/AddWorkspaceDialog.h @@ -34,11 +34,12 @@ class EXPORT_OPT_MANTIDQT_COMMON AddWorkspaceDialog : public QDialog, public IAd std::string getFileName() const; signals: - void addData(); + void addData(MantidWidgets::IAddWorkspaceDialog *dialog); private slots: void selectAllSpectra(int state); void workspaceChanged(const QString &workspaceName); + void emitAddData(); private: void setWorkspace(const std::string &workspace); diff --git a/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorPresenter.h b/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorPresenter.h index 90602fbc1afd..7765362826a2 100644 --- a/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorPresenter.h +++ b/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorPresenter.h @@ -38,6 +38,8 @@ class EXPORT_OPT_MANTIDQT_COMMON FitScriptGeneratorPresenter : public IFitScript [[maybe_unused]] std::string const &arg2 = "") override; void notifyPresenter(ViewEvent const &event, std::vector const &vec) override; void notifyPresenter(ViewEvent const &event, FittingMode fittingMode) override; + void handleAddDomainAccepted(std::vector const &workspaces, + FunctionModelSpectra const &workspaceIndices) override; void openFitScriptGenerator() override; @@ -50,7 +52,6 @@ class EXPORT_OPT_MANTIDQT_COMMON FitScriptGeneratorPresenter : public IFitScript void handleADSRenameEvent(std::string const &workspaceName, std::string const &newName); void handleRemoveDomainClicked(); void handleAddDomainClicked(); - void handleAddDomainAccepted(); void handleSelectionChanged(); void handleStartXChanged(); void handleEndXChanged(); diff --git a/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorView.h b/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorView.h index 3fc68d02938a..75cbd73f8470 100644 --- a/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorView.h +++ b/qt/widgets/common/inc/MantidQtWidgets/Common/FitScriptGeneratorView.h @@ -76,8 +76,8 @@ class EXPORT_OPT_MANTIDQT_COMMON FitScriptGeneratorView : public IFitScriptGener double endX) override; void openAddWorkspaceDialog() override; - [[nodiscard]] std::vector getDialogWorkspaces() override; - [[nodiscard]] FunctionModelSpectra getDialogWorkspaceIndices() const override; + [[nodiscard]] std::vector + getDialogWorkspaces(MantidWidgets::IAddWorkspaceDialog *dialog) override; void openEditLocalParameterDialog(std::string const ¶meter, std::vector const &workspaceNames, std::vector const &domainNames, std::vector const &values, @@ -112,7 +112,6 @@ class EXPORT_OPT_MANTIDQT_COMMON FitScriptGeneratorView : public IFitScriptGener FitScriptGeneratorDataTable *tableWidget() const override { return m_dataTable.get(); } QPushButton *removeButton() const override { return m_ui.pbRemoveDomain; } QPushButton *addWorkspaceButton() const override { return m_ui.pbAddDomain; } - AddWorkspaceDialog *addWorkspaceDialog() const override { return m_addWorkspaceDialog; } QPushButton *generateScriptToFileButton() const override { return m_ui.pbGenerateScriptToFile; } QPushButton *generateScriptToClipboardButton() const override { return m_ui.pbGenerateScriptToClipboard; } @@ -121,7 +120,7 @@ private slots: void notifyADSClearEvent(); void notifyADSRenameEvent(std::string const &workspaceName, std::string const &newName); - void addWorkspaceDialogAccepted(); + void addWorkspaceDialogAccepted(MantidWidgets::IAddWorkspaceDialog *dialog); void onRemoveDomainClicked(); void onAddDomainClicked(); @@ -153,7 +152,6 @@ private slots: void setFittingMode(FittingMode fittingMode); IFitScriptGeneratorPresenter *m_presenter; - AddWorkspaceDialog *m_addWorkspaceDialog; std::unique_ptr m_dataTable; std::unique_ptr m_functionTreeView; std::unique_ptr m_fitOptionsBrowser; diff --git a/qt/widgets/common/inc/MantidQtWidgets/Common/IFitScriptGeneratorPresenter.h b/qt/widgets/common/inc/MantidQtWidgets/Common/IFitScriptGeneratorPresenter.h index efe892eb6a7d..11af7f790159 100644 --- a/qt/widgets/common/inc/MantidQtWidgets/Common/IFitScriptGeneratorPresenter.h +++ b/qt/widgets/common/inc/MantidQtWidgets/Common/IFitScriptGeneratorPresenter.h @@ -8,8 +8,10 @@ #include "DllOption.h" #include "IFitScriptGeneratorView.h" +#include "MantidAPI/MatrixWorkspace_fwd.h" #include "MantidQtWidgets/Common/FittingGlobals.h" #include "MantidQtWidgets/Common/FittingMode.h" +#include "MantidQtWidgets/Common/FunctionModelSpectra.h" #include #include @@ -27,6 +29,8 @@ class EXPORT_OPT_MANTIDQT_COMMON IFitScriptGeneratorPresenter { [[maybe_unused]] std::string const &arg2 = "") = 0; virtual void notifyPresenter(ViewEvent const &event, std::vector const &vec) = 0; virtual void notifyPresenter(ViewEvent const &event, FittingMode fittingMode) = 0; + virtual void handleAddDomainAccepted(std::vector const &workspaces, + FunctionModelSpectra const &workspaceIndices) = 0; virtual void openFitScriptGenerator() = 0; diff --git a/qt/widgets/common/inc/MantidQtWidgets/Common/IFitScriptGeneratorView.h b/qt/widgets/common/inc/MantidQtWidgets/Common/IFitScriptGeneratorView.h index 148a6895a1c5..e49ec5673688 100644 --- a/qt/widgets/common/inc/MantidQtWidgets/Common/IFitScriptGeneratorView.h +++ b/qt/widgets/common/inc/MantidQtWidgets/Common/IFitScriptGeneratorView.h @@ -28,6 +28,7 @@ namespace MantidWidgets { class AddWorkspaceDialog; class FitScriptGeneratorDataTable; +class IAddWorkspaceDialog; class IFitScriptGeneratorPresenter; struct GlobalParameter; struct GlobalTie; @@ -42,7 +43,6 @@ class EXPORT_OPT_MANTIDQT_COMMON IFitScriptGeneratorView : public API::MantidWid ADSRenameEvent, RemoveDomainClicked, AddDomainClicked, - AddDomainAccepted, StartXChanged, EndXChanged, SelectionChanged, @@ -89,8 +89,8 @@ class EXPORT_OPT_MANTIDQT_COMMON IFitScriptGeneratorView : public API::MantidWid double endX) = 0; virtual void openAddWorkspaceDialog() = 0; - [[nodiscard]] virtual std::vector getDialogWorkspaces() = 0; - [[nodiscard]] virtual FunctionModelSpectra getDialogWorkspaceIndices() const = 0; + [[nodiscard]] virtual std::vector + getDialogWorkspaces(MantidWidgets::IAddWorkspaceDialog *dialog) = 0; virtual void openEditLocalParameterDialog(std::string const ¶meter, std::vector const &workspaceNames, @@ -128,7 +128,6 @@ class EXPORT_OPT_MANTIDQT_COMMON IFitScriptGeneratorView : public API::MantidWid virtual FitScriptGeneratorDataTable *tableWidget() const = 0; virtual QPushButton *removeButton() const = 0; virtual QPushButton *addWorkspaceButton() const = 0; - virtual AddWorkspaceDialog *addWorkspaceDialog() const = 0; virtual QPushButton *generateScriptToFileButton() const = 0; virtual QPushButton *generateScriptToClipboardButton() const = 0; }; diff --git a/qt/widgets/common/src/AddWorkspaceDialog.cpp b/qt/widgets/common/src/AddWorkspaceDialog.cpp index 33c2f490a21c..5a90674aeab2 100644 --- a/qt/widgets/common/src/AddWorkspaceDialog.cpp +++ b/qt/widgets/common/src/AddWorkspaceDialog.cpp @@ -74,7 +74,7 @@ AddWorkspaceDialog::AddWorkspaceDialog(QWidget *parent) : QDialog(parent) { connect(m_uiForm.dsWorkspace, SIGNAL(dataReady(const QString &)), this, SLOT(workspaceChanged(const QString &))); connect(m_uiForm.ckAllSpectra, SIGNAL(stateChanged(int)), this, SLOT(selectAllSpectra(int))); - connect(m_uiForm.pbAdd, SIGNAL(clicked()), this, SIGNAL(addData())); + connect(m_uiForm.pbAdd, SIGNAL(clicked()), this, SLOT(emitAddData())); connect(m_uiForm.pbClose, SIGNAL(clicked()), this, SLOT(close())); } @@ -113,6 +113,8 @@ void AddWorkspaceDialog::workspaceChanged(const QString &workspaceName) { setAllSpectraSelectionEnabled(false); } +void AddWorkspaceDialog::emitAddData() { emit addData(this); } + void AddWorkspaceDialog::setWorkspace(const std::string &workspace) { setAllSpectraSelectionEnabled(true); if (m_uiForm.ckAllSpectra->isChecked()) { diff --git a/qt/widgets/common/src/FitScriptGeneratorPresenter.cpp b/qt/widgets/common/src/FitScriptGeneratorPresenter.cpp index 86f9b5682db2..de541231de6c 100644 --- a/qt/widgets/common/src/FitScriptGeneratorPresenter.cpp +++ b/qt/widgets/common/src/FitScriptGeneratorPresenter.cpp @@ -50,9 +50,6 @@ void FitScriptGeneratorPresenter::notifyPresenter(ViewEvent const &event, [[mayb case ViewEvent::AddDomainClicked: handleAddDomainClicked(); return; - case ViewEvent::AddDomainAccepted: - handleAddDomainAccepted(); - return; case ViewEvent::StartXChanged: handleStartXChanged(); return; @@ -148,10 +145,8 @@ void FitScriptGeneratorPresenter::handleRemoveDomainClicked() { removeDomains(m_ void FitScriptGeneratorPresenter::handleAddDomainClicked() { m_view->openAddWorkspaceDialog(); } -void FitScriptGeneratorPresenter::handleAddDomainAccepted() { - auto const workspaces = m_view->getDialogWorkspaces(); - auto const workspaceIndices = m_view->getDialogWorkspaceIndices(); - +void FitScriptGeneratorPresenter::handleAddDomainAccepted(std::vector const &workspaces, + FunctionModelSpectra const &workspaceIndices) { if (!workspaces.empty() && !workspaceIndices.empty()) addWorkspaces(workspaces, workspaceIndices); } diff --git a/qt/widgets/common/src/FitScriptGeneratorView.cpp b/qt/widgets/common/src/FitScriptGeneratorView.cpp index 92206b678f70..4058a1bd435b 100644 --- a/qt/widgets/common/src/FitScriptGeneratorView.cpp +++ b/qt/widgets/common/src/FitScriptGeneratorView.cpp @@ -325,20 +325,24 @@ void FitScriptGeneratorView::addWorkspaceDomain(std::string const &workspaceName } void FitScriptGeneratorView::openAddWorkspaceDialog() { - m_addWorkspaceDialog = new AddWorkspaceDialog(this); - m_addWorkspaceDialog->setAttribute(Qt::WA_DeleteOnClose); - m_addWorkspaceDialog->show(); - connect(m_addWorkspaceDialog, SIGNAL(addData()), this, SLOT(addWorkspaceDialogAccepted())); + auto dialog = new AddWorkspaceDialog(this); + dialog->setAttribute(Qt::WA_DeleteOnClose); + dialog->show(); + connect(dialog, SIGNAL(addData(MantidWidgets::IAddWorkspaceDialog *)), this, + SLOT(addWorkspaceDialogAccepted(MantidWidgets::IAddWorkspaceDialog *))); } -void FitScriptGeneratorView::addWorkspaceDialogAccepted() { - m_presenter->notifyPresenter(ViewEvent::AddDomainAccepted); +void FitScriptGeneratorView::addWorkspaceDialogAccepted(MantidWidgets::IAddWorkspaceDialog *dialog) { + if (auto addWorkspaceDialog = dynamic_cast(dialog)) { + m_presenter->handleAddDomainAccepted(getDialogWorkspaces(dialog), addWorkspaceDialog->workspaceIndices()); + } } -std::vector FitScriptGeneratorView::getDialogWorkspaces() { +std::vector +FitScriptGeneratorView::getDialogWorkspaces(MantidWidgets::IAddWorkspaceDialog *dialog) { std::vector workspaces; - if (m_addWorkspaceDialog) { - auto const wsName = m_addWorkspaceDialog->workspaceName(); + if (dialog) { + auto const wsName = dialog->workspaceName(); auto &ads = AnalysisDataService::Instance(); if (ads.doesExist(wsName)) { workspaces.emplace_back(ads.retrieveWS(wsName)); @@ -349,10 +353,6 @@ std::vector FitScriptGeneratorView::getDialogWorkspa return workspaces; } -FunctionModelSpectra FitScriptGeneratorView::getDialogWorkspaceIndices() const { - return m_addWorkspaceDialog->workspaceIndices(); -} - void FitScriptGeneratorView::openEditLocalParameterDialog( std::string const ¶meter, std::vector const &workspaceNames, std::vector const &domainNames, std::vector const &values, std::vector const &fixes,