diff --git a/GUI/coregui/Models/BeamItem.cpp b/GUI/coregui/Models/BeamItem.cpp index 732e37a977007c59a9e84491a89101e6595103e9..7ae3a885abaf16826c8ede322bc394af207b8044 100644 --- a/GUI/coregui/Models/BeamItem.cpp +++ b/GUI/coregui/Models/BeamItem.cpp @@ -18,6 +18,7 @@ #include "BeamDistributionItem.h" #include "BeamWavelengthItem.h" #include "BornAgainNamespace.h" +#include "GUIHelpers.h" #include "ParameterTranslators.h" #include "SessionItemUtils.h" #include "Units.h" @@ -35,7 +36,7 @@ const QString BeamItem::P_INCLINATION_ANGLE = QString::fromStdString(BornAgain:: const QString BeamItem::P_AZIMUTHAL_ANGLE = QString::fromStdString(BornAgain::Azimuth); const QString BeamItem::P_POLARIZATION = QString("Polarization"); -BeamItem::BeamItem() : SessionItem(Constants::BeamType) +BeamItem::BeamItem(const QString& beam_model) : SessionItem(beam_model) { addProperty(P_INTENSITY, 1e+08) ->setLimits(RealLimits::limited(0.0, 1e+32)) @@ -43,7 +44,13 @@ BeamItem::BeamItem() : SessionItem(Constants::BeamType) .setEditorType(Constants::ScientificEditorType); addGroupProperty(P_WAVELENGTH, Constants::BeamWavelengthType); - addGroupProperty(P_INCLINATION_ANGLE, Constants::BeamInclinationAngleType); + + if (beam_model == Constants::BeamType) + addGroupProperty(P_INCLINATION_ANGLE, Constants::BeamInclinationAngleType); + else if (beam_model == Constants::SpecularBeamType) + addGroupProperty(P_INCLINATION_ANGLE, Constants::BeamInclinationAxisType); + else + GUIHelpers::Error("Error in BeamItem: unknown type of the beam"); addGroupProperty(P_AZIMUTHAL_ANGLE, Constants::BeamAzimuthalAngleType); addGroupProperty(P_POLARIZATION, Constants::VectorType)->setToolTip(polarization_tooltip); @@ -131,3 +138,9 @@ std::unique_ptr<Beam> BeamItem::createBeam() const return result; } + +SpecularBeamItem::SpecularBeamItem() : BeamItem(Constants::SpecularBeamType) +{ +} + +SpecularBeamItem::~SpecularBeamItem() = default; diff --git a/GUI/coregui/Models/BeamItem.h b/GUI/coregui/Models/BeamItem.h index 69d6b9f9b4692076d0e8ba08b39035827be8c2bb..17588e898224134e1a8cec7722d4deb28ae4e690 100644 --- a/GUI/coregui/Models/BeamItem.h +++ b/GUI/coregui/Models/BeamItem.h @@ -28,7 +28,8 @@ public: static const QString P_INCLINATION_ANGLE; static const QString P_AZIMUTHAL_ANGLE; static const QString P_POLARIZATION; - BeamItem(); + + explicit BeamItem(const QString& beam_model = Constants::BeamType); virtual ~BeamItem(); double getIntensity() const; @@ -46,5 +47,12 @@ public: std::unique_ptr<Beam> createBeam() const; }; +class BA_CORE_API_ SpecularBeamItem : public BeamItem +{ +public: + SpecularBeamItem(); + virtual ~SpecularBeamItem(); +}; + #endif // BEAMITEM_H diff --git a/GUI/coregui/Models/ItemCatalogue.cpp b/GUI/coregui/Models/ItemCatalogue.cpp index b857bc5f9f7414e6d8228cb7485f410b5c354b17..8f3e564a9aeffd9c5ccedd9f4e8e3f71c7fafd63 100644 --- a/GUI/coregui/Models/ItemCatalogue.cpp +++ b/GUI/coregui/Models/ItemCatalogue.cpp @@ -84,6 +84,7 @@ ItemCatalogue::ItemCatalogue() add(Constants::OffSpecInstrumentType, create_new<OffSpecInstrumentItem>); add(Constants::SpecularInstrumentType, create_new<SpecularInstrumentItem>); add(Constants::BeamType, create_new<BeamItem>); + add(Constants::SpecularBeamType, create_new<SpecularBeamItem>); add(Constants::BackgroundNoneType, create_new<BackgroundNoneItem>); add(Constants::ConstantBackgroundType, create_new<ConstantBackgroundItem>); add(Constants::PoissonNoiseBackgroundType, create_new<PoissonNoiseBackgroundItem>); diff --git a/GUI/coregui/Models/item_constants.h b/GUI/coregui/Models/item_constants.h index ae9191270f4805e03d79a2e682a2616ed3625ad4..605953615d2db2c8ee3942945ee8c52f4508cb63 100644 --- a/GUI/coregui/Models/item_constants.h +++ b/GUI/coregui/Models/item_constants.h @@ -43,6 +43,7 @@ const ModelType GISASInstrumentType = "GISASInstrument"; const ModelType OffSpecInstrumentType = "OffSpecInstrument"; const ModelType SpecularInstrumentType = "SpecularInstrument"; const ModelType BeamType = "Beam"; +const ModelType SpecularBeamType = "SpecularBeam"; const ModelType FormFactorType = "FormFactor"; const ModelType AnisoPyramidType = "AnisoPyramid";