1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
// ************************************************************************************************
//
// BornAgain: simulate and fit reflection and scattering
//
//! @file GUI/Model/Project/DataSource.h
//! @brief Defines class DataSource.
//!
//! @homepage http://www.bornagainproject.org
//! @license GNU General Public License v3 or higher (see COPYING)
//! @copyright Forschungszentrum Jülich GmbH 2022
//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
//
// ************************************************************************************************
#ifndef BORNAGAIN_GUI_MODEL_PROJECT_DATASOURCE_H
#define BORNAGAIN_GUI_MODEL_PROJECT_DATASOURCE_H
#include <QObject>
class Data1DItem;
class Data2DItem;
class DataItem;
class JobItem;
//! The DataSource class is a base for widgets, working data, stored in JobItem or
//! DatafileItem. DataSource provides an access to SpecularDataItems and Data2DItems
//! separately and as a list of items that is required for simultaneous, synchronous work while
//! plotting and changing their properties.
class DataSource {
public:
virtual ~DataSource();
//... Access to concrete items:
virtual Data1DItem* realData1DItem() const = 0;
virtual Data2DItem* realData2DItem() const = 0;
virtual Data1DItem* simuData1DItem() const { return nullptr; }
virtual Data2DItem* simuData2DItem() const { return nullptr; }
virtual Data1DItem* diffData1DItem() const { return nullptr; }
virtual Data2DItem* diffData2DItem() const { return nullptr; }
//... Access to lists of items:
QVector<Data1DItem*> mainData1DItems() const;
QVector<Data2DItem*> mainData2DItems() const;
QVector<Data1DItem*> allData1DItems() const;
QVector<Data2DItem*> allData2DItems() const;
Data1DItem* currentData1DItem() const;
Data2DItem* currentData2DItem() const;
virtual bool isFromData() const { return false; }
virtual bool isFromJob() const { return false; }
};
class DataFromData : public DataSource {
public:
~DataFromData() override;
Data1DItem* realData1DItem() const override;
Data2DItem* realData2DItem() const override;
bool isFromData() const override { return true; }
private:
DataItem* realDataItem() const;
};
class DataFromJob : public DataSource {
public:
~DataFromJob() 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;
bool isFromJob() const override { return true; }
private:
JobItem* jobxItem() const;
};
#endif // BORNAGAIN_GUI_MODEL_PROJECT_DATASOURCE_H
|