From 342f447456df9da14b574e32f6fa0020b566c3fa Mon Sep 17 00:00:00 2001
From: Gennady Pospelov <g.pospelov@fz-juelich.de>
Date: Tue, 14 Mar 2017 08:28:03 +0100
Subject: [PATCH] DetectorContainerItem now created in constructor of
 InstrumentItem

---
 GUI/coregui/Models/ApplicationModels.cpp | 1 -
 GUI/coregui/Models/GUIObjectBuilder.cpp  | 9 ++++-----
 GUI/coregui/Models/InstrumentItem.cpp    | 9 +++++----
 GUI/coregui/Models/ModelPath.cpp         | 3 ++-
 GUI/coregui/Views/InstrumentView.cpp     | 2 --
 Tests/UnitTests/GUI/TestSessionModel.h   | 6 ------
 6 files changed, 11 insertions(+), 19 deletions(-)

diff --git a/GUI/coregui/Models/ApplicationModels.cpp b/GUI/coregui/Models/ApplicationModels.cpp
index 0ab0eb5275a..b06e57f6642 100644
--- a/GUI/coregui/Models/ApplicationModels.cpp
+++ b/GUI/coregui/Models/ApplicationModels.cpp
@@ -118,7 +118,6 @@ void ApplicationModels::resetModels()
     m_instrumentModel->clear();
     SessionItem *instrument = m_instrumentModel->insertNewItem(Constants::InstrumentType);
     instrument->setItemName("Default GISAS");
-    m_instrumentModel->insertNewItem(Constants::DetectorContainerType, m_instrumentModel->indexOfItem(instrument));
 
 //    m_realDataModel->insertNewItem(Constants::RealDataType);
 //    m_realDataModel->insertNewItem(Constants::RealDataType);
diff --git a/GUI/coregui/Models/GUIObjectBuilder.cpp b/GUI/coregui/Models/GUIObjectBuilder.cpp
index 144d5d4e6c5..74f23ef483e 100644
--- a/GUI/coregui/Models/GUIObjectBuilder.cpp
+++ b/GUI/coregui/Models/GUIObjectBuilder.cpp
@@ -50,6 +50,7 @@
 #include "TransformFromDomain.h"
 #include "TransformationItem.h"
 #include "InstrumentItem.h"
+#include "DetectorItems.h"
 #include "Units.h"
 #include "VectorItem.h"
 
@@ -111,13 +112,11 @@ SessionItem* GUIObjectBuilder::populateInstrumentModel(
     TransformFromDomain::setItemFromSample(&beamItem, simulation);
 
     // detector
-    DetectorContainerItem* detectorItem = dynamic_cast<DetectorContainerItem*>(instrumentModel->insertNewItem(
-        Constants::DetectorContainerType, instrumentModel->indexOfItem(instrumentItem)));
-    TransformFromDomain::setItemFromSample(detectorItem, simulation);
+    auto& detectorItem = instrumentItem->item<DetectorContainerItem>(InstrumentItem::P_DETECTOR);
+    TransformFromDomain::setItemFromSample(&detectorItem, simulation);
 
     // detector masks
-    TransformFromDomain::setDetectorMasks(detectorItem, simulation);
-
+    TransformFromDomain::setDetectorMasks(&detectorItem, simulation);
 
     return instrumentItem;
 }
diff --git a/GUI/coregui/Models/InstrumentItem.cpp b/GUI/coregui/Models/InstrumentItem.cpp
index 826b9c8b2f9..09f4aa69f99 100644
--- a/GUI/coregui/Models/InstrumentItem.cpp
+++ b/GUI/coregui/Models/InstrumentItem.cpp
@@ -24,7 +24,7 @@
 
 const QString InstrumentItem::P_IDENTIFIER = "Identifier";
 const QString InstrumentItem::P_BEAM = "Beam";
-const QString InstrumentItem::P_DETECTOR = "DetectorType";
+const QString InstrumentItem::P_DETECTOR = "Data tag";
 
 InstrumentItem::InstrumentItem()
     : SessionItem(Constants::InstrumentType)
@@ -34,10 +34,11 @@ InstrumentItem::InstrumentItem()
     addProperty(P_IDENTIFIER, GUIHelpers::createUuid())->setVisible(false);
 
     addGroupProperty(P_BEAM, Constants::BeamType);
+    addGroupProperty(P_DETECTOR, Constants::DetectorContainerType);
 
-    const QString T_DATA = "Data tag";
-    registerTag(T_DATA, 0, -1, QStringList() << Constants::DetectorContainerType);
-    setDefaultTag(T_DATA);
+//    const QString T_DATA = "Data tag";
+//    registerTag(T_DATA, 0, -1, QStringList() << Constants::DetectorContainerType);
+    setDefaultTag(P_DETECTOR);
 }
 
 BeamItem *InstrumentItem::beamItem() const
diff --git a/GUI/coregui/Models/ModelPath.cpp b/GUI/coregui/Models/ModelPath.cpp
index 66cdba8dae4..5de7f351f53 100644
--- a/GUI/coregui/Models/ModelPath.cpp
+++ b/GUI/coregui/Models/ModelPath.cpp
@@ -17,6 +17,7 @@
 #include "ModelPath.h"
 #include "SessionModel.h"
 #include "JobItem.h"
+#include "InstrumentItem.h"
 
 QString ModelPath::getPathFromIndex(const QModelIndex& index)
 {
@@ -88,7 +89,7 @@ bool ModelPath::isValidItem(SessionModel* model, SessionItem* item, const QModel
 bool ModelPath::isTranslatable(const SessionItem* item, const QString& par_name)
 {
     Q_UNUSED(item);
-    if (par_name.contains(Constants::DetectorContainerType))
+    if (par_name.contains(InstrumentItem::P_DETECTOR))
         return false;
     if (par_name.contains(Constants::DistributionSigmaFactor))
         return false;
diff --git a/GUI/coregui/Views/InstrumentView.cpp b/GUI/coregui/Views/InstrumentView.cpp
index 11c2d3c8729..62714ee7d9d 100644
--- a/GUI/coregui/Views/InstrumentView.cpp
+++ b/GUI/coregui/Views/InstrumentView.cpp
@@ -111,8 +111,6 @@ void InstrumentView::onAddInstrument()
 {
     SessionItem *instrument = m_instrumentModel->insertNewItem(Constants::InstrumentType);
     instrument->setItemName(getNewInstrumentName("Default GISAS"));
-    m_instrumentModel->insertNewItem(
-        Constants::DetectorContainerType, m_instrumentModel->indexOfItem(instrument));
     QModelIndex itemIndex = m_instrumentModel->indexOfItem(instrument);
     m_instrumentSelector->getSelectionModel()->clearSelection();
     m_instrumentSelector->getSelectionModel()->select(itemIndex, QItemSelectionModel::Select);
diff --git a/Tests/UnitTests/GUI/TestSessionModel.h b/Tests/UnitTests/GUI/TestSessionModel.h
index 11e0d2b45ea..f6c0113689f 100644
--- a/Tests/UnitTests/GUI/TestSessionModel.h
+++ b/Tests/UnitTests/GUI/TestSessionModel.h
@@ -75,11 +75,9 @@ inline void TestSessionModel::test_InstrumentModel_CreateCopy()
     InstrumentModel *model1 = new InstrumentModel();
     SessionItem *instrument1 = model1->insertNewItem(Constants::InstrumentType);
     instrument1->setItemName("instrument1");
-    model1->insertNewItem(Constants::DetectorContainerType, model1->indexOfItem(instrument1));
 
     SessionItem *instrument2 = model1->insertNewItem(Constants::InstrumentType);
     instrument2->setItemName("instrument2");
-    model1->insertNewItem(Constants::DetectorContainerType, model1->indexOfItem(instrument2));
 
     QString buffer1;
     QXmlStreamWriter writer1(&buffer1);
@@ -101,11 +99,9 @@ inline void TestSessionModel::test_InstrumentModel_CreatePartialCopy()
     InstrumentModel *model1 = new InstrumentModel();
     SessionItem *instrument1 = model1->insertNewItem(Constants::InstrumentType);
     instrument1->setItemName("instrument1");
-    model1->insertNewItem(Constants::DetectorContainerType, model1->indexOfItem(instrument1));
 
     SessionItem *instrument2 = model1->insertNewItem(Constants::InstrumentType);
     instrument2->setItemName("instrument2");
-    model1->insertNewItem(Constants::DetectorContainerType, model1->indexOfItem(instrument2));
 
 //    QString buffer1;
 //    QXmlStreamWriter writer1(&buffer1);
@@ -142,8 +138,6 @@ inline void TestSessionModel::test_copyParameterizedItem()
     InstrumentModel *instrumentModel = new InstrumentModel();
     SessionItem *instrument1 = instrumentModel->insertNewItem(Constants::InstrumentType);
     instrument1->setItemName("instrument1");
-    instrumentModel->insertNewItem(Constants::DetectorContainerType, instrumentModel->indexOfItem(instrument1));
-    instrumentModel->insertNewItem(Constants::BeamType, instrumentModel->indexOfItem(instrument1));
 
     JobModel *jobModel = new JobModel();
     SessionItem *jobItem = jobModel->insertNewItem(Constants::JobItemType);
-- 
GitLab