Skip to content
Snippets Groups Projects
Commit 801d0f02 authored by Yurov, Dmitry's avatar Yurov, Dmitry
Browse files

Introduced FitComparisonWidget_New (copy of FitComparisonWidget)

Redmine: #2106

The name will be changed after switching to DataItemView
parent b31fc263
No related branches found
No related tags found
No related merge requests found
// ************************************************************************** //
//
// BornAgain: simulate and fit scattering at grazing incidence
//
//! @file GUI/coregui/Views/FitWidgets/FitComparisonWidget1D.cpp
//! @brief Implements class FitComparisonWidget1D
//!
//! @homepage http://www.bornagainproject.org
//! @license GNU General Public License v3 or higher (see COPYING)
//! @copyright Forschungszentrum Jülich GmbH 2018
//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
//
// ************************************************************************** //
#include "FitComparisonWidget1D_New.h"
#include "FitComparisonController.h"
#include "FitFlowWidget.h"
#include "FitSuiteItem.h"
#include "IntensityDataPropertyWidget.h"
#include "JobItem.h"
#include "PlotStatusLabel.h"
#include "RealDataItem.h"
#include "SessionModel.h"
#include "SpecularDataItem.h"
#include "SpecularPlot.h"
#include "SpecularPlotCanvas.h"
#include <QAction>
#include <QGridLayout>
#include <QVBoxLayout>
FitComparisonWidget1D_New::FitComparisonWidget1D_New(QWidget *parent)
: SessionItemWidget(parent)
, m_data_plot(new SpecularPlotCanvas)
, m_diff_plot(new SpecularPlotCanvas)
, m_fitFlowWidget(new FitFlowWidget)
, m_statusLabel(new PlotStatusLabel(nullptr, this))
, m_propertyWidget(new IntensityDataPropertyWidget)
, m_resetViewAction(new QAction(this))
, m_comparisonController(new FitComparisonController1D(this))
{
auto vlayout = new QVBoxLayout;
vlayout->setMargin(0);
vlayout->setSpacing(0);
auto gridLayout = new QGridLayout;
gridLayout->setMargin(0);
gridLayout->setSpacing(0);
gridLayout->addWidget(m_data_plot, 0, 0, 1, -1);
gridLayout->addWidget(m_diff_plot, 1, 0);
gridLayout->addWidget(m_fitFlowWidget, 1, 1);
vlayout->addLayout(gridLayout);
vlayout->addWidget(m_statusLabel);
auto hlayout = new QHBoxLayout;
hlayout->setMargin(0);
hlayout->setSpacing(0);
hlayout->addLayout(vlayout);
hlayout->addWidget(m_propertyWidget);
setLayout(hlayout);
m_resetViewAction->setText("Reset View");
m_resetViewAction->setIcon(QIcon(":/images/toolbar16light_refresh.svg"));
m_resetViewAction->setToolTip("Reset View");
connect(m_resetViewAction, &QAction::triggered, this, &FitComparisonWidget1D_New::onResetViewAction);
m_propertyWidget->setVisible(false);
}
FitComparisonWidget1D_New::~FitComparisonWidget1D_New() = default;
QList<QAction*> FitComparisonWidget1D_New::actionList()
{
return QList<QAction*>() << m_resetViewAction << m_propertyWidget->actionList();
}
void FitComparisonWidget1D_New::subscribeToItem()
{
if (!jobItem()->isValidForFitting())
return;
jobItem()->mapper()->setOnPropertyChange(
[this](const QString& name) {
if (name == JobItem::P_STATUS) {
if (jobItem()->isCompleted())
onResetViewAction();
}
},
this);
m_comparisonController->setItem(jobItem());
m_data_plot->setItem(simulatedDataItem());
m_diff_plot->setItem(m_comparisonController->diffItem());
m_fitFlowWidget->setItem(jobItem()->fitSuiteItem());
m_statusLabel->reset();
m_statusLabel->addPlot(m_data_plot->specularPlot());
m_statusLabel->addPlot(m_diff_plot->specularPlot());
m_propertyWidget->setItem(simulatedDataItem());
}
void FitComparisonWidget1D_New::unsubscribeFromItem()
{
if (!currentItem())
return;
m_comparisonController->clear();
}
void FitComparisonWidget1D_New::onResetViewAction()
{
realDataItem()->resetView();
simulatedDataItem()->resetView();
m_comparisonController->resetDiffItem();
}
JobItem* FitComparisonWidget1D_New::jobItem()
{
JobItem* jobItem = dynamic_cast<JobItem*>(currentItem());
return jobItem;
}
SpecularDataItem* FitComparisonWidget1D_New::realDataItem()
{
assert(dynamic_cast<SpecularDataItem*>(jobItem()->realDataItem()->dataItem()));
return dynamic_cast<SpecularDataItem*>(jobItem()->realDataItem()->dataItem());
}
SpecularDataItem* FitComparisonWidget1D_New::simulatedDataItem()
{
assert(dynamic_cast<SpecularDataItem*>(jobItem()->dataItem()));
return dynamic_cast<SpecularDataItem*>(jobItem()->dataItem());
}
// ************************************************************************** //
//
// BornAgain: simulate and fit scattering at grazing incidence
//
//! @file GUI/coregui/Views/FitWidgets/FitComparisonWidget1D_New.h
//! @brief Defines class FitComparisonWidget1D
//!
//! @homepage http://www.bornagainproject.org
//! @license GNU General Public License v3 or higher (see COPYING)
//! @copyright Forschungszentrum Jülich GmbH 2018
//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
//
// ************************************************************************** //
#ifndef FITCOMPARISONWIDGET1D_NEW_H
#define FITCOMPARISONWIDGET1D_NEW_H
#include "SessionItemWidget.h"
class FitComparisonController1D;
class FitFlowWidget;
class IntensityDataPropertyWidget;
class JobItem;
class PlotStatusLabel;
class QAction;
class SpecularDataItem;
class SpecularPlotCanvas;
//! The FitComparisonWidget class plots realdata, simulated data and relative difference map
//! during the course of the fit.
class BA_CORE_API_ FitComparisonWidget1D_New : public SessionItemWidget
{
Q_OBJECT
public:
explicit FitComparisonWidget1D_New(QWidget* parent = nullptr);
~FitComparisonWidget1D_New() override;
virtual QList<QAction*> actionList() override;
private slots:
void onResetViewAction();
protected:
void subscribeToItem() override;
void unsubscribeFromItem() override;
private:
JobItem* jobItem();
SpecularDataItem* realDataItem();
SpecularDataItem* simulatedDataItem();
SpecularPlotCanvas* m_data_plot;
SpecularPlotCanvas* m_diff_plot;
FitFlowWidget* m_fitFlowWidget;
PlotStatusLabel* m_statusLabel;
IntensityDataPropertyWidget* m_propertyWidget;
QAction* m_resetViewAction;
FitComparisonController1D* m_comparisonController;
};
#endif // FITCOMPARISONWIDGET1D_NEW_H
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment