Skip to content
Snippets Groups Projects
Commit 47980c62 authored by Pospelov, Gennady's avatar Pospelov, Gennady
Browse files

Refactoring of FitComparisonWidget to cure invalid memory access on application close.

parent f0c6c2e9
No related branches found
No related tags found
No related merge requests found
...@@ -48,7 +48,7 @@ FitComparisonWidget::FitComparisonWidget(QWidget *parent) ...@@ -48,7 +48,7 @@ FitComparisonWidget::FitComparisonWidget(QWidget *parent)
// , m_simulatedDataItem(0) // , m_simulatedDataItem(0)
, m_relativeDiffItem(0) , m_relativeDiffItem(0)
, m_resetViewAction(0) , m_resetViewAction(0)
, m_tempIntensityDataModel(new SessionModel("TempIntensityDataModel", this)) , m_tempIntensityDataModel(new SessionModel("TempIntensityDataModel"))
{ {
QVBoxLayout *vlayout = new QVBoxLayout; QVBoxLayout *vlayout = new QVBoxLayout;
vlayout->setMargin(0); vlayout->setMargin(0);
...@@ -75,23 +75,15 @@ FitComparisonWidget::FitComparisonWidget(QWidget *parent) ...@@ -75,23 +75,15 @@ FitComparisonWidget::FitComparisonWidget(QWidget *parent)
m_resetViewAction->setToolTip("Reset View"); m_resetViewAction->setToolTip("Reset View");
connect(m_resetViewAction, SIGNAL(triggered()), this, SLOT(onResetViewAction())); connect(m_resetViewAction, SIGNAL(triggered()), this, SLOT(onResetViewAction()));
m_relativeDiffItem = createRelativeDifferenceItem();
m_relativeDiffPlot->setItem(m_relativeDiffItem);
} }
FitComparisonWidget::~FitComparisonWidget() FitComparisonWidget::~FitComparisonWidget()
{ {
// if(m_simulatedDataItem) // FIXME unclear corrupter memory on aplication exist (comment lines below to reproduce)
// m_simulatedDataItem->mapper()->unsubscribe(this); m_relativeDiffPlot->setItem(0);
delete m_tempIntensityDataModel;
// if(m_currentJobItem)
// m_currentJobItem->mapper()->unsubscribe(this);
}
void FitComparisonWidget::setItem(SessionItem *item)
{
SessionItemWidget::setItem(item);
qDebug() << "FitComparisonWidget::setItem(SessionItem *item)";
// JobItem *jobItem = dynamic_cast<JobItem *>(item);
// setJobItem(jobItem);
} }
QList<QAction *> FitComparisonWidget::actionList() QList<QAction *> FitComparisonWidget::actionList()
...@@ -99,49 +91,6 @@ QList<QAction *> FitComparisonWidget::actionList() ...@@ -99,49 +91,6 @@ QList<QAction *> FitComparisonWidget::actionList()
return QList<QAction *>() << m_resetViewAction; return QList<QAction *>() << m_resetViewAction;
} }
//void FitComparisonWidget::setJobItem(JobItem *jobItem)
//{
// if(!jobItem->isValidForFitting())
// return;
// processJobItemItem(jobItem);
// setSimulatedDataItem(jobItem->intensityDataItem());
// m_relativeDiffItem = createRelativeDifferenceItem();
// calculateRelativeDifference();
// m_realDataPlot->setItem(m_realDataItem);
// m_simulatedDataPlot->setItem(m_simulatedDataItem);
// m_relativeDiffPlot->setItem(m_relativeDiffItem);
// m_fitFlowWidget->setItem(jobItem->fitSuiteItem());
// m_statusLabel->reset();
// m_statusLabel->addColorMap(m_realDataPlot);
// m_statusLabel->addColorMap(m_simulatedDataPlot);
// m_statusLabel->addColorMap(m_relativeDiffPlot);
//}
//! When widget is visible, axes labels will be removed intensity data items to free more space.
//void FitComparisonWidget::showEvent(QShowEvent *)
//{
//// if(isVisible()) {
//// removeLabels(m_realDataItem);
//// removeLabels(m_simulatedDataItem);
//// }
//}
//! When widget is about to be hidden, axes labels will be restored to not to upset other widgets.
//void FitComparisonWidget::hideEvent(QHideEvent *)
//{
//// if(isHidden()) {
//// restoreLabels(m_realDataItem);
//// restoreLabels(m_simulatedDataItem);
//// }
//}
void FitComparisonWidget::subscribeToItem() void FitComparisonWidget::subscribeToItem()
{ {
if(!jobItem()->isValidForFitting()) if(!jobItem()->isValidForFitting())
...@@ -164,22 +113,16 @@ void FitComparisonWidget::subscribeToItem() ...@@ -164,22 +113,16 @@ void FitComparisonWidget::subscribeToItem()
}, this); }, this);
} }
if(!m_relativeDiffItem)
m_relativeDiffItem = createRelativeDifferenceItem();
calculateRelativeDifference(); calculateRelativeDifference();
m_realDataPlot->setItem(realDataItem()); m_realDataPlot->setItem(realDataItem());
m_simulatedDataPlot->setItem(simulatedDataItem()); m_simulatedDataPlot->setItem(simulatedDataItem());
m_relativeDiffPlot->setItem(m_relativeDiffItem);
m_fitFlowWidget->setItem(jobItem()->fitSuiteItem()); m_fitFlowWidget->setItem(jobItem()->fitSuiteItem());
m_statusLabel->reset(); m_statusLabel->reset();
m_statusLabel->addColorMap(m_realDataPlot); m_statusLabel->addColorMap(m_realDataPlot);
m_statusLabel->addColorMap(m_simulatedDataPlot); m_statusLabel->addColorMap(m_simulatedDataPlot);
m_statusLabel->addColorMap(m_relativeDiffPlot); m_statusLabel->addColorMap(m_relativeDiffPlot);
} }
void FitComparisonWidget::unsubscribeFromItem() void FitComparisonWidget::unsubscribeFromItem()
...@@ -191,35 +134,6 @@ void FitComparisonWidget::unsubscribeFromItem() ...@@ -191,35 +134,6 @@ void FitComparisonWidget::unsubscribeFromItem()
simulatedDataItem()->mapper()->unsubscribe(this); simulatedDataItem()->mapper()->unsubscribe(this);
} }
//void FitComparisonWidget::processJobItemItem(JobItem *jobItem)
//{
// if(jobItem == m_currentJobItem)
// return;
// if(m_currentJobItem)
// m_currentJobItem->mapper()->unsubscribe(this);
// m_currentJobItem = jobItem;
// if(!m_currentJobItem) return;
// m_currentJobItem->mapper()->setOnPropertyChange(
// [this](const QString &name)
// {
// if(name == JobItem::P_STATUS) {
// if(m_currentJobItem->isCompleted())
// onResetViewAction();
// }
// }, this);
// m_currentJobItem->mapper()->setOnItemDestroy(
// [this](SessionItem *) {
// m_currentJobItem = 0;
// }, this);
// m_realDataItem = m_currentJobItem->realDataItem()->intensityDataItem();
//}
void FitComparisonWidget::onResetViewAction() void FitComparisonWidget::onResetViewAction()
{ {
if(auto item = realDataItem()) if(auto item = realDataItem())
...@@ -234,32 +148,6 @@ void FitComparisonWidget::onResetViewAction() ...@@ -234,32 +148,6 @@ void FitComparisonWidget::onResetViewAction()
} }
} }
//! Sets tracking of simulated data item.
//void FitComparisonWidget::setSimulatedDataItem(IntensityDataItem *simulatedDataItem)
//{
// if(simulatedDataItem == m_simulatedDataItem)
// return;
// if(m_simulatedDataItem)
// m_simulatedDataItem->mapper()->unsubscribe(this);
// m_simulatedDataItem = simulatedDataItem;
// if(!m_simulatedDataItem) return;
// m_simulatedDataItem->mapper()->setOnValueChange(
// [this]()
// {
// calculateRelativeDifference();
// }, this);
// m_simulatedDataItem->mapper()->setOnItemDestroy(
// [this](SessionItem *) {
// m_simulatedDataItem = 0;
// }, this);
//}
//! Creates an IntensityDataItem which will hold relative difference map between simulation //! Creates an IntensityDataItem which will hold relative difference map between simulation
//! and real data. //! and real data.
...@@ -292,7 +180,7 @@ void FitComparisonWidget::calculateRelativeDifference() ...@@ -292,7 +180,7 @@ void FitComparisonWidget::calculateRelativeDifference()
} }
//! Restores item labels from the backup. //! Restores item labels from the backup (FIXME currently unused. Do we need to hide labels?).
void FitComparisonWidget::restoreLabels(IntensityDataItem *intensityItem) void FitComparisonWidget::restoreLabels(IntensityDataItem *intensityItem)
{ {
......
...@@ -39,25 +39,16 @@ public: ...@@ -39,25 +39,16 @@ public:
explicit FitComparisonWidget(QWidget *parent = 0); explicit FitComparisonWidget(QWidget *parent = 0);
~FitComparisonWidget(); ~FitComparisonWidget();
void setItem(SessionItem *item);
virtual QList<QAction *> actionList(); virtual QList<QAction *> actionList();
private slots: private slots:
void onResetViewAction(); void onResetViewAction();
protected: protected:
// void setJobItem(class JobItem *jobItem);
// virtual void showEvent(QShowEvent *);
// virtual void hideEvent(QHideEvent *);
virtual void subscribeToItem(); virtual void subscribeToItem();
virtual void unsubscribeFromItem(); virtual void unsubscribeFromItem();
private: private:
// void processJobItemItem(JobItem *jobItem);
// void setSimulatedDataItem(IntensityDataItem *simulatedDataItem);
IntensityDataItem *createRelativeDifferenceItem(); IntensityDataItem *createRelativeDifferenceItem();
void calculateRelativeDifference(); void calculateRelativeDifference();
void restoreLabels(IntensityDataItem *intensityItem); void restoreLabels(IntensityDataItem *intensityItem);
...@@ -70,17 +61,11 @@ private: ...@@ -70,17 +61,11 @@ private:
ColorMapCanvas *m_realDataPlot; ColorMapCanvas *m_realDataPlot;
ColorMapCanvas *m_simulatedDataPlot; ColorMapCanvas *m_simulatedDataPlot;
ColorMapCanvas *m_relativeDiffPlot; ColorMapCanvas *m_relativeDiffPlot;
FitFlowWidget *m_fitFlowWidget; FitFlowWidget *m_fitFlowWidget;
ColorMapLabel *m_statusLabel; ColorMapLabel *m_statusLabel;
// JobItem *m_currentJobItem;
// IntensityDataItem *m_realDataItem;
// IntensityDataItem *m_simulatedDataItem;
IntensityDataItem *m_relativeDiffItem; IntensityDataItem *m_relativeDiffItem;
QAction *m_resetViewAction; QAction *m_resetViewAction;
SessionModel *m_tempIntensityDataModel; SessionModel *m_tempIntensityDataModel;
}; };
......
...@@ -26,6 +26,8 @@ class FitSuiteItem; ...@@ -26,6 +26,8 @@ class FitSuiteItem;
//! The FitFlowWidget class is intended for showing chi2 .vs interation count dependency. //! The FitFlowWidget class is intended for showing chi2 .vs interation count dependency.
//! The main goal is to fill vacant place in FitComparisonWidget. //! The main goal is to fill vacant place in FitComparisonWidget.
// FIXME Switch to SessionItemWidget
class BA_CORE_API_ FitFlowWidget : public QFrame class BA_CORE_API_ FitFlowWidget : public QFrame
{ {
Q_OBJECT Q_OBJECT
......
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