From 2f618c011cbb0583be1106f6314194334c2e59d8 Mon Sep 17 00:00:00 2001
From: Dmitry Yurov <d.yurov@fz-juelich.de>
Date: Wed, 7 Mar 2018 11:55:27 +0100
Subject: [PATCH] Minor changes for better access to footprint items

Redmine: #1974
---
 GUI/coregui/Models/BeamItems.cpp                           | 6 ++++++
 GUI/coregui/Models/BeamItems.h                             | 3 +++
 GUI/coregui/Models/InstrumentItems.cpp                     | 5 +++++
 GUI/coregui/Models/InstrumentItems.h                       | 7 ++++---
 GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.cpp | 7 +------
 GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.h   | 1 -
 6 files changed, 19 insertions(+), 10 deletions(-)

diff --git a/GUI/coregui/Models/BeamItems.cpp b/GUI/coregui/Models/BeamItems.cpp
index f617bd88b88..4427715e713 100644
--- a/GUI/coregui/Models/BeamItems.cpp
+++ b/GUI/coregui/Models/BeamItems.cpp
@@ -18,6 +18,7 @@
 #include "BeamDistributionItem.h"
 #include "BeamWavelengthItem.h"
 #include "BornAgainNamespace.h"
+#include "FootprintItems.h"
 #include "GUIHelpers.h"
 #include "ParameterTranslators.h"
 #include "SessionItemUtils.h"
@@ -150,6 +151,11 @@ void SpecularBeamItem::setInclinationAngle(double value)
     BeamItem::setInclinationAngle(value);
 }
 
+FootprintItem* SpecularBeamItem::currentFootprintItem() const
+{
+    return &groupItem<FootprintItem>(P_FOOPTPRINT);
+}
+
 // GISAS beam item
 /* ------------------------------------------------------------------------- */
 
diff --git a/GUI/coregui/Models/BeamItems.h b/GUI/coregui/Models/BeamItems.h
index 6b8e8ee791c..3a7a7305a56 100644
--- a/GUI/coregui/Models/BeamItems.h
+++ b/GUI/coregui/Models/BeamItems.h
@@ -18,6 +18,7 @@
 #include "SessionItem.h"
 
 class Beam;
+class FootprintItem;
 
 class BA_CORE_API_ BeamItem : public SessionItem
 {
@@ -60,6 +61,8 @@ public:
 
     double getInclinationAngle() const override;
     void setInclinationAngle(double value) override;
+
+    FootprintItem* currentFootprintItem() const;
 };
 
 class BA_CORE_API_ GISASBeamItem : public BeamItem
diff --git a/GUI/coregui/Models/InstrumentItems.cpp b/GUI/coregui/Models/InstrumentItems.cpp
index 3cc2fd9c698..f012f48d345 100644
--- a/GUI/coregui/Models/InstrumentItems.cpp
+++ b/GUI/coregui/Models/InstrumentItems.cpp
@@ -102,6 +102,11 @@ SpecularInstrumentItem::SpecularInstrumentItem()
     initBeamGroup(Constants::SpecularBeamType);
 }
 
+SpecularBeamItem* SpecularInstrumentItem::beamItem() const
+{
+    return &item<SpecularBeamItem>(P_BEAM);
+}
+
 SpecularInstrumentItem::~SpecularInstrumentItem() = default;
 
 std::unique_ptr<Instrument> SpecularInstrumentItem::createInstrument() const
diff --git a/GUI/coregui/Models/InstrumentItems.h b/GUI/coregui/Models/InstrumentItems.h
index f5f6ea25235..f0dc2c31eb5 100644
--- a/GUI/coregui/Models/InstrumentItems.h
+++ b/GUI/coregui/Models/InstrumentItems.h
@@ -15,10 +15,9 @@
 #ifndef INSTRUMENTITEMS_H
 #define INSTRUMENTITEMS_H
 
-#include "SessionItem.h"
+#include "BeamItems.h"
 
 class BackgroundItem;
-class BeamItem;
 class DetectorItem;
 class GroupItem;
 class Instrument;
@@ -33,7 +32,7 @@ public:
 
     QStringList translateList(const QStringList& list) const override;
 
-    BeamItem* beamItem() const;
+    virtual BeamItem* beamItem() const;
     BackgroundItem* backgroundItem() const;
     GroupItem* backgroundGroup();
 
@@ -51,6 +50,8 @@ public:
     SpecularInstrumentItem();
     virtual ~SpecularInstrumentItem();
 
+    SpecularBeamItem* beamItem() const override;
+
     std::unique_ptr<Instrument> createInstrument() const override;
 };
 
diff --git a/GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.cpp b/GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.cpp
index 17019597ef2..2afd8cd3f44 100644
--- a/GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.cpp
+++ b/GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.cpp
@@ -64,7 +64,7 @@ SpecularBeamEditor::SpecularBeamEditor(ColumnResizer* columnResizer, QWidget* pa
 
 void SpecularBeamEditor::subscribeToItem()
 {
-    const auto beam_item = beamItem();
+    const auto beam_item = instrumentItem()->beamItem();
     Q_ASSERT(beam_item);
 
     m_intensityEditor->setItem(beam_item->getItem(SpecularBeamItem::P_INTENSITY));
@@ -96,11 +96,6 @@ SpecularInstrumentItem* SpecularBeamEditor::instrumentItem()
     return result;
 }
 
-BeamItem* SpecularBeamEditor::beamItem()
-{
-    return instrumentItem()->beamItem();
-}
-
 void SpecularBeamEditor::onDialogRequest(SessionItem* item, const QString& name)
 {
     if(!item)
diff --git a/GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.h b/GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.h
index df8a3c33f22..7d8d34cd873 100644
--- a/GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.h
+++ b/GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.h
@@ -38,7 +38,6 @@ protected:
 
 private:
     SpecularInstrumentItem* instrumentItem();
-    BeamItem* beamItem();
     void onDialogRequest(SessionItem* item, const QString& name);
 
     ColumnResizer* m_columnResizer;
-- 
GitLab