Skip to content
Snippets Groups Projects
Commit ba41010d authored by Wuttke, Joachim's avatar Wuttke, Joachim
Browse files

axis panels now parametrized through DataSource

parent 7ca751c6
Branches
Tags
1 merge request!2444Plot1|2DFrame are stateless, StackedDataFrame switches between widgets that have been created at start up
...@@ -16,68 +16,9 @@ ...@@ -16,68 +16,9 @@
#include "Base/Util/Assert.h" #include "Base/Util/Assert.h"
#include "GUI/Model/Data/Data1DItem.h" #include "GUI/Model/Data/Data1DItem.h"
#include "GUI/Model/Data/Data2DItem.h" #include "GUI/Model/Data/Data2DItem.h"
#include "GUI/Model/Files/DatafileItem.h" #include "GUI/Model/Files/DatafilesSet.h"
#include "GUI/Model/Job/JobItem.h" #include "GUI/Model/Job/JobsSet.h"
#include "GUI/Model/Project/ProjectDocument.h"
DataSource::DataSource(QObject* item)
: m_item(item)
{
ASSERT(jobxItem() || realDataItem());
}
JobItem* DataSource::jobxItem() const
{
return dynamic_cast<JobItem*>(m_item);
}
DataItem* DataSource::realDataItem() const
{
return dynamic_cast<DataItem*>(m_item);
}
Data1DItem* DataSource::realData1DItem() const
{
if (jobxItem()) {
if (const DatafileItem* ii = jobxItem()->dfileItem())
return dynamic_cast<Data1DItem*>(ii->dataItem());
return nullptr;
}
if (realDataItem())
return dynamic_cast<Data1DItem*>(realDataItem());
return nullptr;
}
Data2DItem* DataSource::realData2DItem() const
{
if (jobxItem()) {
if (const DatafileItem* ii = jobxItem()->dfileItem())
return dynamic_cast<Data2DItem*>(ii->dataItem());
return nullptr;
}
if (realDataItem())
return dynamic_cast<Data2DItem*>(realDataItem());
return nullptr;
}
Data1DItem* DataSource::simuData1DItem() const
{
return jobxItem() ? dynamic_cast<Data1DItem*>(jobxItem()->simulatedDataItem()) : nullptr;
}
Data2DItem* DataSource::simuData2DItem() const
{
return jobxItem() ? dynamic_cast<Data2DItem*>(jobxItem()->simulatedDataItem()) : nullptr;
}
Data1DItem* DataSource::diffData1DItem() const
{
return jobxItem() ? dynamic_cast<Data1DItem*>(jobxItem()->diffDataItem()) : nullptr;
}
Data2DItem* DataSource::diffData2DItem() const
{
return jobxItem() ? dynamic_cast<Data2DItem*>(jobxItem()->diffDataItem()) : nullptr;
}
QVector<Data1DItem*> DataSource::mainData1DItems() const QVector<Data1DItem*> DataSource::mainData1DItems() const
{ {
...@@ -128,3 +69,59 @@ Data2DItem* DataSource::currentData2DItem() const ...@@ -128,3 +69,59 @@ Data2DItem* DataSource::currentData2DItem() const
return nullptr; return nullptr;
return allData2DItems().first(); return allData2DItems().first();
} }
DataItem* DataFromData::realDataItem() const
{
return gDoc->datafilesRW()->currentItem()->dataItem();
}
Data1DItem* DataFromData::realData1DItem() const
{
return dynamic_cast<Data1DItem*>(realDataItem());
}
Data2DItem* DataFromData::realData2DItem() const
{
return dynamic_cast<Data2DItem*>(realDataItem());
}
JobItem* DataFromJob::jobxItem() const
{
return gDoc->jobsRW()->currentItem();
}
Data1DItem* DataFromJob::realData1DItem() const
{
if (const DatafileItem* ii = jobxItem()->dfileItem())
return dynamic_cast<Data1DItem*>(ii->dataItem());
return nullptr;
}
Data2DItem* DataFromJob::realData2DItem() const
{
if (const DatafileItem* ii = jobxItem()->dfileItem())
return dynamic_cast<Data2DItem*>(ii->dataItem());
return nullptr;
}
Data1DItem* DataFromJob::simuData1DItem() const
{
return dynamic_cast<Data1DItem*>(jobxItem()->simulatedDataItem());
}
Data2DItem* DataFromJob::simuData2DItem() const
{
return dynamic_cast<Data2DItem*>(jobxItem()->simulatedDataItem());
}
Data1DItem* DataFromJob::diffData1DItem() const
{
return dynamic_cast<Data1DItem*>(jobxItem()->diffDataItem());
}
Data2DItem* DataFromJob::diffData2DItem() const
{
return dynamic_cast<Data2DItem*>(jobxItem()->diffDataItem());
}
...@@ -29,20 +29,17 @@ class JobItem; ...@@ -29,20 +29,17 @@ class JobItem;
class DataSource { class DataSource {
public: public:
explicit DataSource(QObject* item); virtual JobItem* jobxItem() const = 0;
JobItem* jobxItem() const;
//... Access to concrete items: //... Access to concrete items:
Data1DItem* realData1DItem() const; virtual Data1DItem* realData1DItem() const = 0;
Data2DItem* realData2DItem() const; virtual Data2DItem* realData2DItem() const = 0;
Data1DItem* simuData1DItem() const;
Data2DItem* simuData2DItem() const;
Data1DItem* diffData1DItem() const; virtual Data1DItem* simuData1DItem() const { return nullptr; }
Data2DItem* diffData2DItem() const; virtual Data2DItem* simuData2DItem() const { return nullptr; }
virtual Data1DItem* diffData1DItem() const { return nullptr; }
virtual Data2DItem* diffData2DItem() const { return nullptr; }
//... Access to lists of items: //... Access to lists of items:
...@@ -55,20 +52,35 @@ public: ...@@ -55,20 +52,35 @@ public:
Data1DItem* currentData1DItem() const; Data1DItem* currentData1DItem() const;
Data2DItem* currentData2DItem() const; Data2DItem* currentData2DItem() const;
private: protected:
DataItem* realDataItem() const; virtual DataItem* realDataItem() const = 0;
QObject* m_item;
}; };
class DataFromData : public DataSource { class DataFromData : public DataSource {
public: public:
explicit DataFromData(DataItem* item); JobItem* jobxItem() const override { return nullptr; }
Data1DItem* realData1DItem() const override;
Data2DItem* realData2DItem() const override;
private:
DataItem* realDataItem() const override;
}; };
class DataFromJob : public DataSource { class DataFromJob : public DataSource {
public: public:
explicit DataFromJob(JobItem* item); JobItem* jobxItem() const override;
Data1DItem* realData1DItem() const override;
Data2DItem* realData2DItem() const override;
Data1DItem* simuData1DItem() const override;
Data2DItem* simuData2DItem() const override;
Data1DItem* diffData1DItem() const override;
Data2DItem* diffData2DItem() const override;
private:
DataItem* realDataItem() const override { return nullptr; }
}; };
#endif // BORNAGAIN_GUI_MODEL_JOB_DATASOURCE_H #endif // BORNAGAIN_GUI_MODEL_JOB_DATASOURCE_H
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
#include "GUI/Model/Job/JobsSet.h" #include "GUI/Model/Job/JobsSet.h"
#include "GUI/Model/Files/DatafileItem.h" #include "GUI/Model/Files/DatafileItem.h"
#include "GUI/Model/Job/BatchInfo.h" #include "GUI/Model/Job/BatchInfo.h"
#include "GUI/Model/Job/JobItem.h"
#include "GUI/Model/Par/ParameterTreeItems.h" #include "GUI/Model/Par/ParameterTreeItems.h"
#include "GUI/Support/Data/JobStatus.h" #include "GUI/Support/Data/JobStatus.h"
......
...@@ -17,12 +17,12 @@ ...@@ -17,12 +17,12 @@
#include "Base/Types/VectorWC.h" #include "Base/Types/VectorWC.h"
#include "GUI/Model/Files/DatafilesCleaner.h" #include "GUI/Model/Files/DatafilesCleaner.h"
#include "GUI/Model/Job/JobItem.h"
#include <QObject> #include <QObject>
#include <QXmlStreamReader> #include <QXmlStreamReader>
class DataItem; class DataItem;
class ISimulation; class ISimulation;
class JobItem;
class JobsSet : public QObject, public VectorWC<JobItem> { class JobsSet : public QObject, public VectorWC<JobItem> {
Q_OBJECT Q_OBJECT
......
...@@ -60,7 +60,8 @@ Fit1DFrame::Fit1DFrame(JobItem* job_item) ...@@ -60,7 +60,8 @@ Fit1DFrame::Fit1DFrame(JobItem* job_item)
hlayout->setSpacing(0); hlayout->setSpacing(0);
hlayout->addLayout(vlayout); hlayout->addLayout(vlayout);
auto* axis_panel = new AxisPanel(job_item); m_data_source = std::make_unique<DataFromJob>();
auto* axis_panel = new AxisPanel(m_data_source.get());
hlayout->addWidget(axis_panel); hlayout->addWidget(axis_panel);
axis_panel->setVisible(false); axis_panel->setVisible(false);
QObject::connect(gActions->toggle_properties_panel, &QAction::triggered, axis_panel, QObject::connect(gActions->toggle_properties_panel, &QAction::triggered, axis_panel,
...@@ -71,8 +72,6 @@ Fit1DFrame::Fit1DFrame(JobItem* job_item) ...@@ -71,8 +72,6 @@ Fit1DFrame::Fit1DFrame(JobItem* job_item)
m_reset_view_action->setToolTip("Reset View"); m_reset_view_action->setToolTip("Reset View");
connect(m_reset_view_action, &QAction::triggered, this, &Fit1DFrame::onResetViewAction); connect(m_reset_view_action, &QAction::triggered, this, &Fit1DFrame::onResetViewAction);
ASSERT(job_item);
m_data_source = std::make_unique<DataSource>(job_item);
GUI::Util::Ranges::setCommonRangeY(m_data_source->mainData1DItems()); GUI::Util::Ranges::setCommonRangeY(m_data_source->mainData1DItems());
updateDiffData(); updateDiffData();
connectItems(); connectItems();
...@@ -80,6 +79,8 @@ Fit1DFrame::Fit1DFrame(JobItem* job_item) ...@@ -80,6 +79,8 @@ Fit1DFrame::Fit1DFrame(JobItem* job_item)
m_data_canvas->setData1DItems( m_data_canvas->setData1DItems(
{m_data_source->simuData1DItem(), m_data_source->realData1DItem()}); {m_data_source->simuData1DItem(), m_data_source->realData1DItem()});
m_diff_canvas->setData1DItems({m_data_source->diffData1DItem()}); m_diff_canvas->setData1DItems({m_data_source->diffData1DItem()});
ASSERT(job_item);
m_progress_canvas->setJobItem(job_item); m_progress_canvas->setJobItem(job_item);
} }
......
...@@ -63,7 +63,8 @@ Fit2DFrame::Fit2DFrame(JobItem* job_item) ...@@ -63,7 +63,8 @@ Fit2DFrame::Fit2DFrame(JobItem* job_item)
hlayout->setSpacing(0); hlayout->setSpacing(0);
hlayout->addLayout(vlayout); hlayout->addLayout(vlayout);
auto* axes_panel = new AxesPanel(job_item); m_data_source = std::make_unique<DataFromJob>();
auto* axes_panel = new AxesPanel(m_data_source.get());
hlayout->addWidget(axes_panel); hlayout->addWidget(axes_panel);
axes_panel->setVisible(false); axes_panel->setVisible(false);
QObject::connect(gActions->toggle_properties_panel, &QAction::triggered, axes_panel, QObject::connect(gActions->toggle_properties_panel, &QAction::triggered, axes_panel,
...@@ -74,9 +75,6 @@ Fit2DFrame::Fit2DFrame(JobItem* job_item) ...@@ -74,9 +75,6 @@ Fit2DFrame::Fit2DFrame(JobItem* job_item)
m_reset_view_action->setToolTip("Reset View"); m_reset_view_action->setToolTip("Reset View");
connect(m_reset_view_action, &QAction::triggered, this, &Fit2DFrame::onResetViewAction); connect(m_reset_view_action, &QAction::triggered, this, &Fit2DFrame::onResetViewAction);
ASSERT(job_item);
m_data_source = std::make_unique<DataSource>(job_item);
GUI::Util::Ranges::setCommonRangeZ(m_data_source->mainData2DItems()); GUI::Util::Ranges::setCommonRangeZ(m_data_source->mainData2DItems());
updateDiffData(); updateDiffData();
connectItems(); connectItems();
...@@ -85,6 +83,7 @@ Fit2DFrame::Fit2DFrame(JobItem* job_item) ...@@ -85,6 +83,7 @@ Fit2DFrame::Fit2DFrame(JobItem* job_item)
m_real_canvas->itemToCanvas(m_data_source->realData2DItem()); m_real_canvas->itemToCanvas(m_data_source->realData2DItem());
m_diff_canvas->itemToCanvas(m_data_source->diffData2DItem()); m_diff_canvas->itemToCanvas(m_data_source->diffData2DItem());
ASSERT(job_item);
m_progress_canvas->setJobItem(job_item); m_progress_canvas->setJobItem(job_item);
} }
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "GUI/View/Frame/Plot2DFrame.h" #include "GUI/View/Frame/Plot2DFrame.h"
#include "Base/Util/Assert.h" #include "Base/Util/Assert.h"
#include "GUI/Model/Data/Data2DItem.h" #include "GUI/Model/Data/Data2DItem.h"
#include "GUI/Model/Job/DataSource.h"
#include "GUI/Model/Mask/MasksQModel.h" #include "GUI/Model/Mask/MasksQModel.h"
#include "GUI/Model/Project/ProjectDocument.h" #include "GUI/Model/Project/ProjectDocument.h"
#include "GUI/View/Canvas/MaskEditorCanvas.h" #include "GUI/View/Canvas/MaskEditorCanvas.h"
...@@ -54,7 +55,8 @@ Plot2DFrame::Plot2DFrame(Data2DItem* item) ...@@ -54,7 +55,8 @@ Plot2DFrame::Plot2DFrame(Data2DItem* item)
panels->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum); panels->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum);
panels->setHidden(true); panels->setHidden(true);
auto* axes_panel = new AxesPanel(item); m_data_source = std::make_unique<DataFromData>();
auto* axes_panel = new AxesPanel(m_data_source.get());
panels->addWidget(axes_panel); panels->addWidget(axes_panel);
panels->addWidget(m_masks_panel); panels->addWidget(m_masks_panel);
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <QWidget> #include <QWidget>
class Data2DItem; class Data2DItem;
class DataSource;
class MaskEditorCanvas; class MaskEditorCanvas;
class MasksPanel; class MasksPanel;
class ProjectedGraphsCanvas; class ProjectedGraphsCanvas;
...@@ -38,6 +39,7 @@ private: ...@@ -38,6 +39,7 @@ private:
MasksPanel* m_masks_panel; //!< panel with mask list and properties of one mask MasksPanel* m_masks_panel; //!< panel with mask list and properties of one mask
Data2DItem* m_data_item; Data2DItem* m_data_item;
std::unique_ptr<DataSource> m_data_source;
}; };
#endif // BORNAGAIN_GUI_VIEW_FRAME_PLOT2DFRAME_H #endif // BORNAGAIN_GUI_VIEW_FRAME_PLOT2DFRAME_H
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include "Base/Util/Assert.h" #include "Base/Util/Assert.h"
#include "GUI/Model/Data/Data1DItem.h" #include "GUI/Model/Data/Data1DItem.h"
#include "GUI/Model/Files/DatafileItem.h" #include "GUI/Model/Files/DatafileItem.h"
#include "GUI/Model/Job/DataSource.h"
#include "GUI/View/Canvas/SpecularDataCanvas.h" #include "GUI/View/Canvas/SpecularDataCanvas.h"
#include "GUI/View/Setup/AxisPanel.h" #include "GUI/View/Setup/AxisPanel.h"
#include "GUI/View/Setup/FrameActions.h" #include "GUI/View/Setup/FrameActions.h"
...@@ -35,6 +36,7 @@ void execContextMenu(const QPoint& point) ...@@ -35,6 +36,7 @@ void execContextMenu(const QPoint& point)
} // namespace } // namespace
SpecularFrame::SpecularFrame(Data1DItem* item) SpecularFrame::SpecularFrame(Data1DItem* item)
: m_specular_canvas(new SpecularDataCanvas) : m_specular_canvas(new SpecularDataCanvas)
{ {
...@@ -50,7 +52,8 @@ SpecularFrame::SpecularFrame(Data1DItem* item) ...@@ -50,7 +52,8 @@ SpecularFrame::SpecularFrame(Data1DItem* item)
connect(m_specular_canvas, &SpecularDataCanvas::customContextMenuRequested, connect(m_specular_canvas, &SpecularDataCanvas::customContextMenuRequested,
[](const QPoint& point) { execContextMenu(point); }); [](const QPoint& point) { execContextMenu(point); });
auto* axis_panel = new AxisPanel(item); m_data_source = std::make_unique<DataFromData>();
auto* axis_panel = new AxisPanel(m_data_source.get());
hlayout->addWidget(axis_panel); hlayout->addWidget(axis_panel);
QObject::connect(gActions->toggle_properties_panel, &QAction::triggered, axis_panel, QObject::connect(gActions->toggle_properties_panel, &QAction::triggered, axis_panel,
&QWidget::setVisible); &QWidget::setVisible);
......
...@@ -18,15 +18,16 @@ ...@@ -18,15 +18,16 @@
#include <QWidget> #include <QWidget>
class Data1DItem; class Data1DItem;
class DataSource;
class SpecularDataCanvas; class SpecularDataCanvas;
class SpecularFrame : public QWidget { class SpecularFrame : public QWidget {
Q_OBJECT
public: public:
SpecularFrame(Data1DItem* item); SpecularFrame(Data1DItem* item);
private: private:
SpecularDataCanvas* m_specular_canvas; SpecularDataCanvas* m_specular_canvas;
std::unique_ptr<DataSource> m_data_source;
}; };
#endif // BORNAGAIN_GUI_VIEW_FRAME_SPECULARFRAME_H #endif // BORNAGAIN_GUI_VIEW_FRAME_SPECULARFRAME_H
...@@ -27,8 +27,8 @@ ...@@ -27,8 +27,8 @@
#include <QFormLayout> #include <QFormLayout>
#include <QLineEdit> #include <QLineEdit>
AxesPanel::AxesPanel(QObject* item) AxesPanel::AxesPanel(DataSource* ds)
: m_data_source(std::make_unique<DataSource>(item)) : m_data_source(ds)
{ {
setWindowTitle("Properties"); setWindowTitle("Properties");
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::MinimumExpanding); setSizePolicy(QSizePolicy::Fixed, QSizePolicy::MinimumExpanding);
......
...@@ -23,7 +23,7 @@ class DataSource; ...@@ -23,7 +23,7 @@ class DataSource;
class AxesPanel : public QWidget { class AxesPanel : public QWidget {
public: public:
AxesPanel(QObject* item); AxesPanel(DataSource*);
~AxesPanel(); ~AxesPanel();
private: private:
...@@ -31,7 +31,7 @@ private: ...@@ -31,7 +31,7 @@ private:
QVector<std::function<void()>> m_updaters; QVector<std::function<void()>> m_updaters;
std::unique_ptr<DataSource> m_data_source; DataSource* m_data_source; //!< owned by owner of this panel
}; };
#endif // BORNAGAIN_GUI_VIEW_SETUP_AXESPANEL_H #endif // BORNAGAIN_GUI_VIEW_SETUP_AXESPANEL_H
...@@ -33,8 +33,8 @@ ...@@ -33,8 +33,8 @@
#include <QFormLayout> #include <QFormLayout>
#include <QLineEdit> #include <QLineEdit>
AxisPanel::AxisPanel(QObject* item) AxisPanel::AxisPanel(DataSource* ds)
: m_data_source(std::make_unique<DataSource>(item)) : m_data_source(ds)
{ {
setWindowTitle("Properties"); setWindowTitle("Properties");
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::MinimumExpanding); setSizePolicy(QSizePolicy::Fixed, QSizePolicy::MinimumExpanding);
......
...@@ -24,7 +24,7 @@ class DataSource; ...@@ -24,7 +24,7 @@ class DataSource;
class AxisPanel : public QWidget { class AxisPanel : public QWidget {
public: public:
AxisPanel(QObject* item); AxisPanel(DataSource*);
~AxisPanel(); ~AxisPanel();
private: private:
...@@ -33,7 +33,7 @@ private: ...@@ -33,7 +33,7 @@ private:
QVector<std::function<void()>> m_updaters; QVector<std::function<void()>> m_updaters;
std::unique_ptr<DataSource> m_data_source; DataSource* m_data_source; //!< owned by owner of this panel
}; };
#endif // BORNAGAIN_GUI_VIEW_SETUP_AXISPANEL_H #endif // BORNAGAIN_GUI_VIEW_SETUP_AXISPANEL_H
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment