From 114ae6de637b7bf533badbb8eabbe2ac9d0c2e93 Mon Sep 17 00:00:00 2001 From: Dmitry Yurov <d.yurov@fz-juelich.de> Date: Thu, 6 Dec 2018 09:22:36 +0100 Subject: [PATCH] Update wavelength on Axis type switch in SpecularBeamItem Redmine: #2217 --- GUI/coregui/Models/BeamItems.cpp | 26 ++++++++++++++++-------- GUI/coregui/Models/BeamItems.h | 3 +++ GUI/coregui/Models/PointwiseAxisItem.cpp | 1 - 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/GUI/coregui/Models/BeamItems.cpp b/GUI/coregui/Models/BeamItems.cpp index 60b028f5e68..cf1da288dc0 100644 --- a/GUI/coregui/Models/BeamItems.cpp +++ b/GUI/coregui/Models/BeamItems.cpp @@ -157,6 +157,8 @@ SpecularBeamItem::SpecularBeamItem() : BeamItem(Constants::SpecularBeamType) axis_item->updateIndicators(); }, this); + + inclinationAxisGroup()->mapper()->setOnValueChange([this]() { updateWavelength(); }, this); } SpecularBeamItem::~SpecularBeamItem() = default; @@ -203,19 +205,27 @@ void SpecularBeamItem::updateToData(const IAxis& axis, QString units) inclinationAxisGroup()->setCurrentType(Constants::BasicAxisType); auto axis_item = currentInclinationAxisItem(); axis_item->setItemValue(BasicAxisItem::P_NBINS, static_cast<int>(axis.size())); - auto wl_item = static_cast<SpecularBeamWavelengthItem*>(getItem(P_WAVELENGTH)); - wl_item->setToRange(RealLimits::positive()); return; } auto axis_group = inclinationAxisGroup(); - axis_group->setCurrentType(Constants::PointwiseAxisType); - auto axis_item = static_cast<PointwiseAxisItem*>(axis_group->currentItem()); - if (units == Constants::UnitsQyQz) { - auto wl_item = static_cast<SpecularBeamWavelengthItem*>(getItem(P_WAVELENGTH)); - wl_item->setToRange(getLimits(axis.getMax())); - } + auto axis_item = + static_cast<PointwiseAxisItem*>(axis_group->getChildOfType(Constants::PointwiseAxisType)); axis_item->init(axis, units); + axis_group->setCurrentType(Constants::PointwiseAxisType); // calls updateWavelength() + axis_item->updateIndicators(); +} + +void SpecularBeamItem::updateWavelength() +{ + auto item = inclinationAxisGroup()->currentItem(); + auto wl_item = static_cast<SpecularBeamWavelengthItem*>(getItem(P_WAVELENGTH)); + if (auto axis_item = dynamic_cast<PointwiseAxisItem*>(item)) { + auto axis = axis_item->getAxis(); + if (axis && axis_item->getUnitsLabel() == Constants::UnitsQyQz) + wl_item->setToRange(getLimits(axis->getMax())); + } else + wl_item->setToRange(RealLimits::positive()); } // GISAS beam item diff --git a/GUI/coregui/Models/BeamItems.h b/GUI/coregui/Models/BeamItems.h index 73435a2e409..e3605f48735 100644 --- a/GUI/coregui/Models/BeamItems.h +++ b/GUI/coregui/Models/BeamItems.h @@ -72,6 +72,9 @@ public: void updateFileName(const QString& filename); void updateToData(const IAxis& axis, QString units); + +private: + void updateWavelength(); }; class BA_CORE_API_ GISASBeamItem : public BeamItem diff --git a/GUI/coregui/Models/PointwiseAxisItem.cpp b/GUI/coregui/Models/PointwiseAxisItem.cpp index 49fe97d0147..907e7459daa 100644 --- a/GUI/coregui/Models/PointwiseAxisItem.cpp +++ b/GUI/coregui/Models/PointwiseAxisItem.cpp @@ -51,7 +51,6 @@ void PointwiseAxisItem::init(const IAxis& axis, const QString& units_label) m_axis = std::unique_ptr<IAxis>(axis.clone()); setItemValue(P_NATIVE_UNITS, units_label); findInstrument(); - updateIndicators(); } const IAxis* PointwiseAxisItem::getAxis() const -- GitLab