Skip to content

Commit

Permalink
Merge pull request #36624 from robertapplin/36565-iadd-workspace-dial…
Browse files Browse the repository at this point in the history
…og-not-qobject

IAddWorkspaceDialog moved to a common location and no longer a qobject
  • Loading branch information
SilkeSchomann committed Jan 30, 2024
2 parents 498f0ce + 2855541 commit 1630012
Show file tree
Hide file tree
Showing 52 changed files with 365 additions and 1,009 deletions.
4 changes: 2 additions & 2 deletions buildconfig/CMake/CppCheck_Suppressions.txt.in
Original file line number Diff line number Diff line change
Expand Up @@ -1425,13 +1425,13 @@ unreadVariable:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/ISISReflectometry/GU
passedByValue:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Indirect/Reduction/ISISEnergyTransferValidator.cpp:100
useStlAlgorithm:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Indirect/Reduction/ISISEnergyTransferModelUtils.h:99
useStlAlgorithm:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/FqFitDataPresenter.cpp:23
virtualCallInConstructor:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataView.h:41
virtualCallInConstructor:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataView.h:42
returnTempReference:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitData.cpp:127
knownConditionTrueFalse:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitData.cpp:93
useStlAlgorithm:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/IqtFitModel.cpp:47
constVariableReference:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataModel.cpp:92
constVariableReference:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataModel.cpp:112
useStlAlgorithm:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataModel.cpp:201
useStlAlgorithm:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitDataModel.cpp:193
constVariablePointer:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/IndirectFitOutput.cpp:59
accessMoved:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/IndirectFittingModel.cpp:278
postfixOperator:${CMAKE_SOURCE_DIR}/qt/scientific_interfaces/Inelastic/Analysis/IndirectFittingModel.cpp:123
Expand Down
4 changes: 2 additions & 2 deletions docs/source/interfaces/general/Fit Script Generator.rst
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ Usage Example for Sequential Fitting

4. In the ``Workspace Indices`` field enter '0-3'.

5. Untick ``Keep Open`` and click ``Ok``.
5. Click ``Add`` and the ``Close``.

6. Right click on the ``Function Browser`` and add a ``Lorentzian`` function.

Expand Down Expand Up @@ -173,7 +173,7 @@ Usage Example for Simultaneous Fitting

3. In the ``Workspace Indices`` field enter '0-3'.

4. Untick ``Keep Open`` and click ``Ok``.
4. Click ``Add`` and the ``Close``.

5. Change the ``Fitting Mode`` to Simultaneous.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,14 +66,14 @@ const QString SPECTRA_LIST = "(" + NATURAL_OR_RANGE + "(" + COMMA + NATURAL_OR_R

namespace MantidQt::CustomInterfaces::IDA {

ConvFitAddWorkspaceDialog::ConvFitAddWorkspaceDialog(QWidget *parent) : IAddWorkspaceDialog(parent) {
ConvFitAddWorkspaceDialog::ConvFitAddWorkspaceDialog(QWidget *parent) : QDialog(parent) {
m_uiForm.setupUi(this);
m_uiForm.leWorkspaceIndices->setValidator(createValidator(Regexes::SPECTRA_LIST, this).release());
setAllSpectraSelectionEnabled(false);

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()));
}

Expand All @@ -85,8 +85,8 @@ std::string ConvFitAddWorkspaceDialog::resolutionName() const {
return m_uiForm.dsResolution->getCurrentDataName().toStdString();
}

std::string ConvFitAddWorkspaceDialog::workspaceIndices() const {
return m_uiForm.leWorkspaceIndices->text().toStdString();
MantidWidgets::FunctionModelSpectra ConvFitAddWorkspaceDialog::workspaceIndices() const {
return MantidWidgets::FunctionModelSpectra(m_uiForm.leWorkspaceIndices->text().toStdString());
}

void ConvFitAddWorkspaceDialog::setWSSuffices(const QStringList &suffices) {
Expand Down Expand Up @@ -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()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,25 @@
// Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
// SPDX - License - Identifier: GPL - 3.0 +
#pragma once
#include "Common/IAddWorkspaceDialog.h"
#include "DllConfig.h"
#include "MantidQtWidgets/Common/FunctionModelSpectra.h"
#include "MantidQtWidgets/Common/IAddWorkspaceDialog.h"
#include "ui_ConvFitAddWorkspaceDialog.h"

#include <QDialog>

namespace MantidQt {
namespace CustomInterfaces {
namespace IDA {

class MANTIDQT_INELASTIC_DLL ConvFitAddWorkspaceDialog : public IAddWorkspaceDialog {
class MANTIDQT_INELASTIC_DLL ConvFitAddWorkspaceDialog : public QDialog, public MantidWidgets::IAddWorkspaceDialog {
Q_OBJECT
public:
explicit ConvFitAddWorkspaceDialog(QWidget *parent);

std::string workspaceName() const override;
std::string resolutionName() const;
std::string workspaceIndices() const;
MantidWidgets::FunctionModelSpectra workspaceIndices() const;

void setWSSuffices(const QStringList &suffices) override;
void setFBSuffices(const QStringList &suffices) override;
Expand All @@ -29,9 +32,13 @@ class MANTIDQT_INELASTIC_DLL ConvFitAddWorkspaceDialog : public IAddWorkspaceDia

void updateSelectedSpectra() override;

signals:
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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
<string>Indirect Data Selection</string>
<string>Data Selection</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
Expand Down Expand Up @@ -146,6 +146,5 @@
<connections/>
<slots>
<slot>addData()</slot>
<slot>closeDialog()</slot>
</slots>
</ui>
21 changes: 12 additions & 9 deletions qt/scientific_interfaces/Inelastic/Analysis/ConvFitDataView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,18 @@ ConvFitDataView::ConvFitDataView(const QStringList &headers, QWidget *parent) :
header->setSectionResizeMode(1, QHeaderView::Stretch);
}

IAddWorkspaceDialog *ConvFitDataView::getAddWorkspaceDialog() {
m_addWorkspaceDialog = new ConvFitAddWorkspaceDialog(parentWidget());
if (auto dialog = dynamic_cast<ConvFitAddWorkspaceDialog *>(m_addWorkspaceDialog)) {
dialog->setResolutionWSSuffices(m_wsResolutionSuffixes);
dialog->setResolutionFBSuffices(m_fbResolutionSuffixes);
}
connect(m_addWorkspaceDialog, SIGNAL(addData()), this, SLOT(notifyAddData()));

return m_addWorkspaceDialog;
void ConvFitDataView::showAddWorkspaceDialog() {
auto dialog = new ConvFitAddWorkspaceDialog(parentWidget());
connect(dialog, SIGNAL(addData(MantidWidgets::IAddWorkspaceDialog *)), this,
SLOT(notifyAddData(MantidWidgets::IAddWorkspaceDialog *)));

dialog->setAttribute(Qt::WA_DeleteOnClose);
dialog->setWSSuffices(m_wsSampleSuffixes);
dialog->setFBSuffices(m_fbSampleSuffixes);
dialog->setResolutionWSSuffices(m_wsResolutionSuffixes);
dialog->setResolutionFBSuffices(m_fbResolutionSuffixes);
dialog->updateSelectedSpectra();
dialog->show();
}

void ConvFitDataView::addTableEntry(size_t row, FitDataRow newRow) {
Expand Down
7 changes: 3 additions & 4 deletions qt/scientific_interfaces/Inelastic/Analysis/ConvFitDataView.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,6 @@ namespace MantidQt {
namespace CustomInterfaces {
namespace IDA {

class IAddWorkspaceDialog;
class ConvFitAddWorkspaceDialog;

/**
Presenter for a table of convolution fitting data.
*/
Expand All @@ -30,7 +27,9 @@ class MANTIDQT_INELASTIC_DLL ConvFitDataView : public IndirectFitDataView {

protected:
ConvFitDataView(const QStringList &headers, QWidget *parent = nullptr);
IAddWorkspaceDialog *getAddWorkspaceDialog() override;

protected slots:
void showAddWorkspaceDialog() override;
};

} // namespace IDA
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@

namespace MantidQt::CustomInterfaces::IDA {

FqFitAddWorkspaceDialog::FqFitAddWorkspaceDialog(QWidget *parent) : IAddWorkspaceDialog(parent) {
FqFitAddWorkspaceDialog::FqFitAddWorkspaceDialog(QWidget *parent) : QDialog(parent) {
m_uiForm.setupUi(this);

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()));
}

Expand Down Expand Up @@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,17 @@
// SPDX - License - Identifier: GPL - 3.0 +
#pragma once

#include "Common/IAddWorkspaceDialog.h"
#include "DllConfig.h"
#include "MantidQtWidgets/Common/IAddWorkspaceDialog.h"
#include "ui_FqFitAddWorkspaceDialog.h"

#include <QDialog>

namespace MantidQt {
namespace CustomInterfaces {
namespace IDA {

class MANTIDQT_INELASTIC_DLL FqFitAddWorkspaceDialog : public IAddWorkspaceDialog {
class MANTIDQT_INELASTIC_DLL FqFitAddWorkspaceDialog : public QDialog, public MantidWidgets::IAddWorkspaceDialog {
Q_OBJECT
public:
explicit FqFitAddWorkspaceDialog(QWidget *parent);
Expand All @@ -33,14 +35,16 @@ class MANTIDQT_INELASTIC_DLL FqFitAddWorkspaceDialog : public IAddWorkspaceDialo

void updateSelectedSpectra() override{};

public slots:
void emitWorkspaceChanged(const QString &name);
void emitParameterTypeChanged(const QString &index);

signals:
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;
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
<string>F(Q) Fit Data Selection</string>
<string>Data Selection</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
Expand Down Expand Up @@ -149,6 +149,5 @@
<connections/>
<slots>
<slot>addData()</slot>
<slot>closeDialog()</slot>
</slots>
</ui>
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ void FqFitDataPresenter::subscribeFitPropertyBrowser(IIndirectFitPropertyBrowser
m_fitPropertyBrowser = browser;
}

bool FqFitDataPresenter::addWorkspaceFromDialog(IAddWorkspaceDialog const *dialog) {
bool FqFitDataPresenter::addWorkspaceFromDialog(MantidWidgets::IAddWorkspaceDialog const *dialog) {
if (const auto fqFitDialog = dynamic_cast<FqFitAddWorkspaceDialog const *>(dialog)) {
addWorkspace(fqFitDialog->workspaceName(), fqFitDialog->parameterType(), fqFitDialog->parameterNameIndex());
setActiveWorkspaceIDToCurrentWorkspace(fqFitDialog);
Expand Down Expand Up @@ -321,7 +321,7 @@ std::vector<std::string> FqFitDataPresenter::getParameterTypes(FqFitParameters &
return types;
}

void FqFitDataPresenter::setActiveWorkspaceIDToCurrentWorkspace(IAddWorkspaceDialog const *dialog) {
void FqFitDataPresenter::setActiveWorkspaceIDToCurrentWorkspace(MantidWidgets::IAddWorkspaceDialog const *dialog) {
// update active data index with correct index based on the workspace name
// and the vector in m_fitDataModel which is in the base class
// indirectFittingModel get table workspace index
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ class MANTIDQT_INELASTIC_DLL FqFitDataPresenter : public IndirectFitDataPresente

public:
FqFitDataPresenter(IIndirectDataAnalysisTab *tab, IIndirectFitDataModel *model, IIndirectFitDataView *view);
bool addWorkspaceFromDialog(IAddWorkspaceDialog const *dialog) override;
bool addWorkspaceFromDialog(MantidWidgets::IAddWorkspaceDialog const *dialog) override;
void addWorkspace(const std::string &workspaceName, const std::string &paramType, const int &spectrum_index) override;
void setActiveWidth(std::size_t widthIndex, WorkspaceID dataIndex, bool single = true) override;
void setActiveEISF(std::size_t eisfIndex, WorkspaceID dataIndex, bool single = true) override;
Expand All @@ -56,7 +56,7 @@ class MANTIDQT_INELASTIC_DLL FqFitDataPresenter : public IndirectFitDataPresente
void updateParameterTypes(FqFitAddWorkspaceDialog *dialog, FqFitParameters &parameters);
std::vector<std::string> getParameterTypes(FqFitParameters &parameters) const;
std::map<std::string, std::string> chooseFqFitFunctions(bool paramWidth) const;
void setActiveWorkspaceIDToCurrentWorkspace(IAddWorkspaceDialog const *dialog);
void setActiveWorkspaceIDToCurrentWorkspace(MantidWidgets::IAddWorkspaceDialog const *dialog);

std::string m_activeParameterType;
WorkspaceID m_activeWorkspaceID;
Expand Down
18 changes: 11 additions & 7 deletions qt/scientific_interfaces/Inelastic/Analysis/FqFitDataView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,16 +36,20 @@ FqFitDataView::FqFitDataView(const QStringList &headers, QWidget *parent) : Indi
header->setSectionResizeMode(1, QHeaderView::Stretch);
}

IAddWorkspaceDialog *FqFitDataView::getAddWorkspaceDialog() {
m_addWorkspaceDialog = new FqFitAddWorkspaceDialog(parentWidget());

connect(m_addWorkspaceDialog, SIGNAL(addData()), this, SLOT(notifyAddData()));
connect(m_addWorkspaceDialog, SIGNAL(workspaceChanged(FqFitAddWorkspaceDialog *, const std::string &)), this,
void FqFitDataView::showAddWorkspaceDialog() {
auto dialog = new FqFitAddWorkspaceDialog(parentWidget());
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(m_addWorkspaceDialog, SIGNAL(parameterTypeChanged(FqFitAddWorkspaceDialog *, const std::string &)), this,
connect(dialog, SIGNAL(parameterTypeChanged(FqFitAddWorkspaceDialog *, const std::string &)), this,
SLOT(notifyParameterTypeChanged(FqFitAddWorkspaceDialog *, const std::string &)));

return m_addWorkspaceDialog;
dialog->setAttribute(Qt::WA_DeleteOnClose);
dialog->setWSSuffices(m_wsSampleSuffixes);
dialog->setFBSuffices(m_fbSampleSuffixes);
dialog->updateSelectedSpectra();
dialog->show();
}

void FqFitDataView::notifyAddClicked() {
Expand Down
5 changes: 3 additions & 2 deletions qt/scientific_interfaces/Inelastic/Analysis/FqFitDataView.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
namespace MantidQt {
namespace CustomInterfaces {
namespace IDA {
class IAddWorkspaceDialog;
class FqFitAddWorkspaceDialog;

/**
Expand All @@ -29,7 +28,9 @@ class MANTIDQT_INELASTIC_DLL FqFitDataView : public IndirectFitDataView {

protected:
FqFitDataView(const QStringList &headers, QWidget *parent = nullptr);
IAddWorkspaceDialog *getAddWorkspaceDialog() override;

protected slots:
void showAddWorkspaceDialog() override;

private slots:
void notifyAddClicked();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ class MANTIDQT_INELASTIC_DLL IIndirectFitDataModel {
virtual void setSpectra(const std::string &spectra, WorkspaceID workspaceID) = 0;
virtual void setSpectra(FunctionModelSpectra &&spectra, WorkspaceID workspaceID) = 0;
virtual void setSpectra(const FunctionModelSpectra &spectra, WorkspaceID workspaceID) = 0;
virtual void addWorkspace(const std::string &workspaceName, const std::string &spectra) = 0;
virtual void addWorkspace(const std::string &workspaceName, const FunctionModelSpectra &spectra) = 0;
virtual void addWorkspace(Mantid::API::MatrixWorkspace_sptr workspace, const FunctionModelSpectra &spectra) = 0;
virtual void removeWorkspace(WorkspaceID workspaceID) = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,20 +176,12 @@ std::vector<std::string> IndirectFitDataModel::getWorkspaceNames() const {
return names;
}

void IndirectFitDataModel::addWorkspace(const std::string &workspaceName, const std::string &spectra) {
if (spectra.empty())
throw std::runtime_error("Fitting Data must consist of one or more spectra.");
void IndirectFitDataModel::addWorkspace(const std::string &workspaceName, const FunctionModelSpectra &spectra) {
if (workspaceName.empty() || !m_adsInstance.doesExist(workspaceName))
throw std::runtime_error("A valid sample file needs to be selected.");
if (spectra.empty())
throw std::runtime_error("Fitting Data must consist of one or more spectra.");

try {
addWorkspace(workspaceName, FunctionModelSpectra(spectra));
} catch (std::logic_error &e) {
throw std::runtime_error(e.what());
}
}

void IndirectFitDataModel::addWorkspace(const std::string &workspaceName, const FunctionModelSpectra &spectra) {
auto ws = m_adsInstance.retrieveWS<Mantid::API::MatrixWorkspace>(workspaceName);
addWorkspace(ws, spectra);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ class MANTIDQT_INELASTIC_DLL IndirectFitDataModel : public IIndirectFitDataModel
virtual ~IndirectFitDataModel() = default;
std::vector<IndirectFitData> *getFittingData() override;

void addWorkspace(const std::string &workspaceName, const std::string &spectra) override;
void addWorkspace(const std::string &workspaceName, const FunctionModelSpectra &spectra) override;
void addWorkspace(Mantid::API::MatrixWorkspace_sptr workspace, const FunctionModelSpectra &spectra) override;
Mantid::API::MatrixWorkspace_sptr getWorkspace(WorkspaceID workspaceID) const override;
Expand Down
Loading

0 comments on commit 1630012

Please sign in to comment.