diff --git a/GUI/Model/Job/JobsSet.h b/GUI/Model/Job/JobsSet.h index c3c3d9fd5a6f85ec54923533f0962b1d80b1deb5..f69e1b225864f54b2672f040f16814723c590fe7 100644 --- a/GUI/Model/Job/JobsSet.h +++ b/GUI/Model/Job/JobsSet.h @@ -53,6 +53,7 @@ signals: void jobMeritsAttention(JobItem* item); void globalProgress(int); void jobAdded(); + void setChanged(); private slots: void onFinishedJob(JobItem* job_item); diff --git a/GUI/View/Canvas/ProgressCanvas.cpp b/GUI/View/Canvas/ProgressCanvas.cpp index 6d758298d0c0d2d2ad25f72918ce6bd2d27754c6..3d0aaa519deb8ec38b16ac955b28599e0930f620 100644 --- a/GUI/View/Canvas/ProgressCanvas.cpp +++ b/GUI/View/Canvas/ProgressCanvas.cpp @@ -14,7 +14,8 @@ #include "GUI/View/Canvas/ProgressCanvas.h" #include "Base/Util/Assert.h" -#include "GUI/Model/Job/JobItem.h" +#include "GUI/Model/Job/JobsSet.h" +#include "GUI/Model/Project/ProjectDocument.h" #include "GUI/Model/Tune/FitSuiteItem.h" #include "GUI/View/Plotter/HistogramPlot.h" #include <QVBoxLayout> @@ -29,20 +30,25 @@ ProgressCanvas::ProgressCanvas() layout->addWidget(m_hist_plot); setStyleSheet("background-color:white;"); + + connect(gDoc->jobs(), &JobsSet::setChanged, this, &ProgressCanvas::setJobItem); } -void ProgressCanvas::setJobItem(JobItem* item) +void ProgressCanvas::setJobItem() { - ASSERT(item); - m_job_item = item; - - connect(item->fitSuiteItem(), &FitSuiteItem::iterationCountChanged, this, - &ProgressCanvas::onIterationCountChanged, Qt::UniqueConnection); + if (const JobItem* ji = gDoc->jobs()->currentItem()) { + connect(ji->fitSuiteItem(), &FitSuiteItem::iterationCountChanged, this, + &ProgressCanvas::onIterationCountChanged, Qt::UniqueConnection); + show(); + } else + hide(); } void ProgressCanvas::onIterationCountChanged(int iter) { - double chi = m_job_item->fitSuiteItem()->chi2(); + const JobItem* ji = gDoc->jobs()->currentItem(); + ASSERT(ji); + double chi = ji->fitSuiteItem()->chi2(); if (iter == 1) m_hist_plot->clearData(); m_hist_plot->addData(static_cast<double>(iter), chi); diff --git a/GUI/View/Canvas/ProgressCanvas.h b/GUI/View/Canvas/ProgressCanvas.h index 6e3e7ea369aa0f792bad20a12af0bd56bd6fc112..2b254d81089c39d204566cde050cd0a7db06ba18 100644 --- a/GUI/View/Canvas/ProgressCanvas.h +++ b/GUI/View/Canvas/ProgressCanvas.h @@ -18,7 +18,6 @@ #include <QWidget> class HistogramPlot; -class JobItem; //! Intended for showing chi2 .vs interation count dependency. //! The main goal is to fill vacant place in Fit2DFrame. @@ -28,13 +27,11 @@ class ProgressCanvas : public QWidget { public: ProgressCanvas(); - void setJobItem(JobItem* job_item); - private: + void setJobItem(); void onIterationCountChanged(int iter); HistogramPlot* m_hist_plot; - const JobItem* m_job_item; }; #endif // BORNAGAIN_GUI_VIEW_CANVAS_PROGRESSCANVAS_H diff --git a/GUI/View/Frame/Fit1DFrame.cpp b/GUI/View/Frame/Fit1DFrame.cpp index 15b8902ca50367f6297e86cf175eff7c810a1ee9..aee35f4ce2566f3c2d96ddc675450250528ed4e4 100644 --- a/GUI/View/Frame/Fit1DFrame.cpp +++ b/GUI/View/Frame/Fit1DFrame.cpp @@ -21,7 +21,6 @@ #include "GUI/Model/Data/Data1DItem.h" #include "GUI/Model/Data/RangeUtil.h" #include "GUI/Model/Job/DataSource.h" -#include "GUI/Model/Job/JobItem.h" #include "GUI/Model/Project/ProjectDocument.h" #include "GUI/View/Canvas/ProgressCanvas.h" #include "GUI/View/Canvas/SpecularPlotCanvas.h" @@ -30,7 +29,7 @@ #include "GUI/View/Setup/AxisPanel.h" #include "GUI/View/Setup/FrameActions.h" -Fit1DFrame::Fit1DFrame(JobItem* job_item) +Fit1DFrame::Fit1DFrame() : m_data_canvas(new SpecularPlotCanvas) , m_diff_canvas(new SpecularPlotCanvas) , m_progress_canvas(new ProgressCanvas) @@ -79,9 +78,6 @@ Fit1DFrame::Fit1DFrame(JobItem* job_item) m_data_canvas->setData1DItems( {m_data_source->simuData1DItem(), m_data_source->realData1DItem()}); m_diff_canvas->setData1DItems({m_data_source->diffData1DItem()}); - - ASSERT(job_item); - m_progress_canvas->setJobItem(job_item); } Fit1DFrame::~Fit1DFrame() = default; diff --git a/GUI/View/Frame/Fit1DFrame.h b/GUI/View/Frame/Fit1DFrame.h index 7c3aae87d4e8df10847d4c7f5497181e7edf9c63..67412f002ac9e69d454b54e6ec6dd759d9b00b3d 100644 --- a/GUI/View/Frame/Fit1DFrame.h +++ b/GUI/View/Frame/Fit1DFrame.h @@ -19,8 +19,6 @@ #include <QWidget> class DataSource; -class JobItem; -class JobRealBase; class PlotStatusLabel; class ProgressCanvas; class SpecularPlotCanvas; @@ -31,7 +29,7 @@ class SpecularPlotCanvas; class Fit1DFrame : public QWidget { Q_OBJECT public: - explicit Fit1DFrame(JobItem* item); + Fit1DFrame(); ~Fit1DFrame(); private: diff --git a/GUI/View/Frame/Fit2DFrame.cpp b/GUI/View/Frame/Fit2DFrame.cpp index bd4925d9704b4cde94ec6eb2f7f9b4ae097734a7..193fac9b3607b9e553e7628ba480e48441421fd9 100644 --- a/GUI/View/Frame/Fit2DFrame.cpp +++ b/GUI/View/Frame/Fit2DFrame.cpp @@ -20,7 +20,6 @@ #include "GUI/Model/Data/Data2DItem.h" #include "GUI/Model/Data/RangeUtil.h" #include "GUI/Model/Job/DataSource.h" -#include "GUI/Model/Job/JobItem.h" #include "GUI/Model/Project/ProjectDocument.h" #include "GUI/View/Canvas/ColorMapCanvas.h" #include "GUI/View/Canvas/ProgressCanvas.h" @@ -30,7 +29,7 @@ #include "GUI/View/Setup/FrameActions.h" #include <QVBoxLayout> -Fit2DFrame::Fit2DFrame(JobItem* job_item) +Fit2DFrame::Fit2DFrame() : m_real_canvas(new ColorMapCanvas) , m_simu_canvas(new ColorMapCanvas) , m_diff_canvas(new ColorMapCanvas) @@ -82,9 +81,6 @@ Fit2DFrame::Fit2DFrame(JobItem* job_item) m_simu_canvas->itemToCanvas(m_data_source->simuData2DItem()); m_real_canvas->itemToCanvas(m_data_source->realData2DItem()); m_diff_canvas->itemToCanvas(m_data_source->diffData2DItem()); - - ASSERT(job_item); - m_progress_canvas->setJobItem(job_item); } Fit2DFrame::~Fit2DFrame() = default; diff --git a/GUI/View/Frame/Fit2DFrame.h b/GUI/View/Frame/Fit2DFrame.h index aa7d366623c6b5029a16c147ed772f1246ac95f8..d403ef944c1d1746fc26c112f17c71d5cd46ba37 100644 --- a/GUI/View/Frame/Fit2DFrame.h +++ b/GUI/View/Frame/Fit2DFrame.h @@ -20,7 +20,6 @@ class ColorMapCanvas; class DataSource; -class JobItem; class PlotStatusLabel; class ProgressCanvas; @@ -29,7 +28,7 @@ class ProgressCanvas; class Fit2DFrame : public QWidget { Q_OBJECT public: - explicit Fit2DFrame(JobItem* item); + Fit2DFrame(); ~Fit2DFrame(); private: diff --git a/GUI/View/Frame/StackedFrames.cpp b/GUI/View/Frame/StackedFrames.cpp index 96ae62c006bf814525877e11e9a5ed621c0a0bd5..274e7d4f09c3fc62dc246751898485a973394420 100644 --- a/GUI/View/Frame/StackedFrames.cpp +++ b/GUI/View/Frame/StackedFrames.cpp @@ -97,9 +97,9 @@ QWidget* StackedJobFrames::newFrame(QObject* obj) const return new Plot2DFrame; if (auto* item = dynamic_cast<JobItem*>(obj)) { if (item->rank() == 1) - return new Fit1DFrame(item); + return new Fit1DFrame; if (item->rank() == 2) - return new Fit2DFrame(item); + return new Fit2DFrame; } ASSERT_NEVER; }