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

DiffItemController introduced

Redmine: #2051
parent df3fb599
Branches
Tags
No related merge requests found
...@@ -13,10 +13,29 @@ ...@@ -13,10 +13,29 @@
// ************************************************************************** // // ************************************************************************** //
#include "FitComparisonController.h" #include "FitComparisonController.h"
#include "SessionModel.h" #include "AxesItems.h"
#include "IntensityDataFunctions.h"
#include "IntensityDataItem.h" #include "IntensityDataItem.h"
#include "JobItem.h"
#include "PropertyRepeater.h" #include "PropertyRepeater.h"
#include "AxesItems.h" #include "RealDataItem.h"
#include "SessionModel.h"
class DiffItemController : public QObject
{
public:
DiffItemController(const QString& data_type, QObject* parent);
~DiffItemController() override;
void setItem(JobItem* job_item);
void updateDiffData();
DataItem* diffItem();
void subscribe();
void unsubscribe();
private:
JobItem* m_current_item;
SessionModel* m_tempIntensityDataModel;
DataItem* m_diff_item;
};
FitComparisonController2D::FitComparisonController2D(QObject* parent) FitComparisonController2D::FitComparisonController2D(QObject* parent)
: QObject(parent) : QObject(parent)
...@@ -74,3 +93,76 @@ void FitComparisonController2D::createRelativeDifferenceItem() ...@@ -74,3 +93,76 @@ void FitComparisonController2D::createRelativeDifferenceItem()
m_relativeDiffItem = dynamic_cast<IntensityDataItem*>( m_relativeDiffItem = dynamic_cast<IntensityDataItem*>(
m_tempIntensityDataModel->insertNewItem(Constants::IntensityDataType)); m_tempIntensityDataModel->insertNewItem(Constants::IntensityDataType));
} }
DiffItemController::DiffItemController(const QString& data_type, QObject* parent)
: QObject(parent)
, m_current_item(nullptr)
, m_tempIntensityDataModel(new SessionModel("TempIntensityDataModel", this))
, m_diff_item(dynamic_cast<DataItem*>(m_tempIntensityDataModel->insertNewItem(data_type)))
{
assert(m_diff_item);
}
DiffItemController::~DiffItemController()
{
unsubscribe();
}
void DiffItemController::setItem(JobItem* job_item)
{
assert(job_item);
if (m_current_item)
unsubscribe();
m_current_item = job_item;
subscribe();
updateDiffData();
}
void DiffItemController::updateDiffData()
{
assert(m_current_item);
auto sim_data = m_current_item->dataItem();
auto real_data = m_current_item->realDataItem()->dataItem();
assert(sim_data && real_data);
if (!sim_data->getOutputData()) // job failed
return;
m_diff_item->setOutputData(IntensityDataFunctions::createRelativeDifferenceData(
*sim_data->getOutputData(), *real_data->getOutputData())
.release());
}
DataItem* DiffItemController::diffItem()
{
return m_diff_item;
}
void DiffItemController::subscribe()
{
if (!m_current_item) {
assert(false);
return;
}
// on simulation data change
m_current_item->dataItem()->mapper()->setOnValueChange([this]() { updateDiffData(); }, this);
// on diff item units change
m_diff_item->mapper()->setOnPropertyChange(
[this](const QString& name) {
if (name == DataItem::P_AXES_UNITS)
m_diff_item->updateAxesUnits(m_current_item->instrumentItem());
},
this);
}
void DiffItemController::unsubscribe()
{
if (!m_current_item)
return;
m_current_item->dataItem()->mapper()->unsubscribe(this);
m_diff_item->mapper()->unsubscribe(this);
m_current_item = nullptr;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment