From c010b2a54dfb35e8aa4f7c1ba1b4bba0483e63e9 Mon Sep 17 00:00:00 2001 From: Gennady Pospelov <g.pospelov@fz-juelich.de> Date: Thu, 9 Mar 2017 15:40:01 +0100 Subject: [PATCH] New DetectorItem::setSize to hide axes details from ImportDataAssistant. --- GUI/coregui/Models/DetectorItems.h | 2 + GUI/coregui/Models/InstrumentItem.cpp | 11 ++++- GUI/coregui/Models/InstrumentItem.h | 4 +- GUI/coregui/Models/JobModelFunctions.cpp | 2 +- .../Models/RectangularDetectorItem.cpp | 6 +++ GUI/coregui/Models/RectangularDetectorItem.h | 1 + GUI/coregui/Models/SphericalDetectorItem.cpp | 6 +++ GUI/coregui/Models/SphericalDetectorItem.h | 1 + .../ImportDataWidgets/ImportDataAssistant.cpp | 47 +------------------ .../LinkInstrumentManager.cpp | 2 +- .../InstrumentEditorWidget.cpp | 2 +- 11 files changed, 34 insertions(+), 50 deletions(-) diff --git a/GUI/coregui/Models/DetectorItems.h b/GUI/coregui/Models/DetectorItems.h index aae8e2c210e..3b61b8f4367 100644 --- a/GUI/coregui/Models/DetectorItems.h +++ b/GUI/coregui/Models/DetectorItems.h @@ -43,6 +43,8 @@ public: virtual std::unique_ptr<IDetector2D> createDetector() const = 0; virtual std::unique_ptr<IResolutionFunction2D> createResolutionFunction() = 0; + + virtual void setSize(int nx, int ny) = 0; }; diff --git a/GUI/coregui/Models/InstrumentItem.cpp b/GUI/coregui/Models/InstrumentItem.cpp index 9aed4f92fbd..6f0e84a2fa0 100644 --- a/GUI/coregui/Models/InstrumentItem.cpp +++ b/GUI/coregui/Models/InstrumentItem.cpp @@ -41,10 +41,19 @@ BeamItem *InstrumentItem::beamItem() const return 0; } -DetectorContainerItem *InstrumentItem::detectorItem() const +DetectorContainerItem *InstrumentItem::detectorContainerItem() const { for(SessionItem *item : childItems()) if(item->modelType() == Constants::DetectorContainerType) return dynamic_cast<DetectorContainerItem *>(item); return 0; } + +DetectorItem* InstrumentItem::detectorItem() const +{ + DetectorContainerItem* detectorContainer = detectorContainerItem(); + DetectorItem* detectorItem = dynamic_cast<DetectorItem*>( + detectorContainer->getGroupItem(DetectorContainerItem::P_DETECTOR)); + Q_ASSERT(detectorItem); + return detectorItem; +} diff --git a/GUI/coregui/Models/InstrumentItem.h b/GUI/coregui/Models/InstrumentItem.h index eb2818684e9..21ee1aff494 100644 --- a/GUI/coregui/Models/InstrumentItem.h +++ b/GUI/coregui/Models/InstrumentItem.h @@ -21,6 +21,7 @@ class BeamItem; class DetectorContainerItem; +class DetectorItem; class BA_CORE_API_ InstrumentItem : public SessionItem { @@ -29,7 +30,8 @@ public: InstrumentItem(); BeamItem *beamItem() const; - DetectorContainerItem *detectorItem() const; + DetectorContainerItem *detectorContainerItem() const; + DetectorItem *detectorItem() const; }; #endif // INSTRUMENTITEM_H diff --git a/GUI/coregui/Models/JobModelFunctions.cpp b/GUI/coregui/Models/JobModelFunctions.cpp index 8388bb95ae3..8a1176d77ad 100644 --- a/GUI/coregui/Models/JobModelFunctions.cpp +++ b/GUI/coregui/Models/JobModelFunctions.cpp @@ -97,7 +97,7 @@ void JobModelFunctions::processInstrumentLink(JobItem *jobItem) void JobModelFunctions::copyMasksToInstrument(JobItem *jobItem) { IntensityDataItem *intensityItem = jobItem->realDataItem()->intensityDataItem(); - DetectorContainerItem *detector = jobItem->instrumentItem()->detectorItem(); + DetectorContainerItem *detector = jobItem->instrumentItem()->detectorContainerItem(); // removing original masks from the detector, if exists if(detector->maskContainerItem()) diff --git a/GUI/coregui/Models/RectangularDetectorItem.cpp b/GUI/coregui/Models/RectangularDetectorItem.cpp index aa7f806791d..5f5df2236e4 100644 --- a/GUI/coregui/Models/RectangularDetectorItem.cpp +++ b/GUI/coregui/Models/RectangularDetectorItem.cpp @@ -193,6 +193,12 @@ void RectangularDetectorItem::setDetectorAlignment(const QString& alignment) setItemValue(RectangularDetectorItem::P_ALIGNMENT, combo_property.getVariant()); } +void RectangularDetectorItem::setSize(int nx, int ny) +{ + getItem(RectangularDetectorItem::P_X_AXIS)->setItemValue(BasicAxisItem::P_NBINS, nx); + getItem(RectangularDetectorItem::P_Y_AXIS)->setItemValue(BasicAxisItem::P_NBINS, ny); +} + //! updates property tooltips and visibility flags, depending from type of alignment selected void RectangularDetectorItem::update_properties_appearance() { diff --git a/GUI/coregui/Models/RectangularDetectorItem.h b/GUI/coregui/Models/RectangularDetectorItem.h index 50b42618e8c..9d1d2c037b7 100644 --- a/GUI/coregui/Models/RectangularDetectorItem.h +++ b/GUI/coregui/Models/RectangularDetectorItem.h @@ -41,6 +41,7 @@ public: std::unique_ptr<IResolutionFunction2D> createResolutionFunction(); void setDetectorAlignment(const QString& alignment); + void setSize(int nx, int ny); private: void update_properties_appearance(); diff --git a/GUI/coregui/Models/SphericalDetectorItem.cpp b/GUI/coregui/Models/SphericalDetectorItem.cpp index bacd0a56cdf..25a7369c853 100644 --- a/GUI/coregui/Models/SphericalDetectorItem.cpp +++ b/GUI/coregui/Models/SphericalDetectorItem.cpp @@ -72,3 +72,9 @@ std::unique_ptr<IResolutionFunction2D> SphericalDetectorItem::createResolutionFu return result; } + +void SphericalDetectorItem::setSize(int nx, int ny) +{ + getItem(SphericalDetectorItem::P_PHI_AXIS)->setItemValue(BasicAxisItem::P_NBINS, nx); + getItem(SphericalDetectorItem::P_ALPHA_AXIS)->setItemValue(BasicAxisItem::P_NBINS, ny); +} diff --git a/GUI/coregui/Models/SphericalDetectorItem.h b/GUI/coregui/Models/SphericalDetectorItem.h index 6d663e04de6..bf4a0db7a7b 100644 --- a/GUI/coregui/Models/SphericalDetectorItem.h +++ b/GUI/coregui/Models/SphericalDetectorItem.h @@ -29,6 +29,7 @@ public: std::unique_ptr<IDetector2D> createDetector() const; std::unique_ptr<IResolutionFunction2D> createResolutionFunction(); + void setSize(int nx, int ny); }; #endif // SPHERICALDETECTORITEM_H diff --git a/GUI/coregui/Views/ImportDataWidgets/ImportDataAssistant.cpp b/GUI/coregui/Views/ImportDataWidgets/ImportDataAssistant.cpp index dd526f00741..2137cf720ef 100644 --- a/GUI/coregui/Views/ImportDataWidgets/ImportDataAssistant.cpp +++ b/GUI/coregui/Views/ImportDataWidgets/ImportDataAssistant.cpp @@ -162,25 +162,7 @@ void ImportDataAssistant::realDataShape(const RealDataItem *realData, int &nx, i void ImportDataAssistant::detectorShape(const InstrumentItem *instrumentItem, int &nx, int &ny) { - nx = ny = 0; - DetectorContainerItem *detectorItem = instrumentItem ->detectorItem(); - Q_ASSERT(detectorItem); - - // FIXME Refactor subDetector - auto subDetector = detectorItem->getGroupItem(DetectorContainerItem::P_DETECTOR); - Q_ASSERT(subDetector); - - std::unique_ptr<IDetector2D> detector; - - if(auto sphericalDetector = dynamic_cast<SphericalDetectorItem *>(subDetector)) { - detector = sphericalDetector->createDetector(); - } - - else if(auto rectangularDetector = dynamic_cast<RectangularDetectorItem *>(subDetector)) { - detector = rectangularDetector->createDetector(); - } - - Q_ASSERT(detector.get()); + std::unique_ptr<IDetector2D> detector = instrumentItem ->detectorItem()->createDetector(); nx = detector->getAxis(0).size(); ny = detector->getAxis(1).size(); } @@ -190,30 +172,5 @@ void ImportDataAssistant::setInstrumentShapeToData(InstrumentItem *instrumentIte { int nxData(0), nyData(0); realDataShape(realDataItemItem, nxData, nyData); - - DetectorContainerItem *detectorItem = instrumentItem ->detectorItem(); - Q_ASSERT(detectorItem); - - // FIXME Refactor subDetector - auto subDetector = detectorItem->getGroupItem(DetectorContainerItem::P_DETECTOR); - Q_ASSERT(subDetector); - - if (subDetector->modelType() == Constants::SphericalDetectorType) { - subDetector->getItem(SphericalDetectorItem::P_PHI_AXIS) - ->setItemValue(BasicAxisItem::P_NBINS, nxData); - subDetector->getItem(SphericalDetectorItem::P_ALPHA_AXIS) - ->setItemValue(BasicAxisItem::P_NBINS, nyData); - } - - else if (subDetector->modelType() == Constants::RectangularDetectorType) { - subDetector->getItem(RectangularDetectorItem::P_X_AXIS) - ->setItemValue(BasicAxisItem::P_NBINS, nxData); - subDetector->getItem(RectangularDetectorItem::P_Y_AXIS) - ->setItemValue(BasicAxisItem::P_NBINS, nyData); - } - - else { - throw GUIHelpers::Error("ImportDataAssistant::setInstrumentShapeToData() -> Error."); - } - + instrumentItem->detectorItem()->setSize(nxData, nyData); } diff --git a/GUI/coregui/Views/ImportDataWidgets/LinkInstrumentManager.cpp b/GUI/coregui/Views/ImportDataWidgets/LinkInstrumentManager.cpp index 9286aaa0693..5279d2a458c 100644 --- a/GUI/coregui/Views/ImportDataWidgets/LinkInstrumentManager.cpp +++ b/GUI/coregui/Views/ImportDataWidgets/LinkInstrumentManager.cpp @@ -108,7 +108,7 @@ bool LinkInstrumentManager::canLinkDataToInstrument(const RealDataItem *realData return true; // FIXME temporary hack to get rid from Instrument's own masks and ROI - DetectorContainerItem *detectorItem = instrumentItem->detectorItem(); + DetectorContainerItem *detectorItem = instrumentItem->detectorContainerItem(); if(SessionItem *maskContainer = detectorItem->maskContainerItem()) { SessionItem *item = detectorItem->takeRow(detectorItem->rowOfChild(maskContainer)); delete item; diff --git a/GUI/coregui/Views/InstrumentWidgets/InstrumentEditorWidget.cpp b/GUI/coregui/Views/InstrumentWidgets/InstrumentEditorWidget.cpp index 11eca1dd7cb..c569cbadc88 100644 --- a/GUI/coregui/Views/InstrumentWidgets/InstrumentEditorWidget.cpp +++ b/GUI/coregui/Views/InstrumentWidgets/InstrumentEditorWidget.cpp @@ -140,7 +140,7 @@ void InstrumentEditorWidget::setInstrumentItem(SessionItem *instrument) InstrumentItem *instrumentItem = dynamic_cast<InstrumentItem *>(instrument); m_instrumentComponents->setBeamItem(instrumentItem->beamItem()); - m_instrumentComponents->setDetectorItem(instrumentItem->detectorItem()); + m_instrumentComponents->setDetectorItem(instrumentItem->detectorContainerItem()); } void InstrumentEditorWidget::onChangedEditor(const QString &) -- GitLab