From 1c9d628efbcfdc29a872368775a0ea7529a0e571 Mon Sep 17 00:00:00 2001 From: Dmitry Yurov <d.yurov@fz-juelich.de> Date: Thu, 12 Apr 2018 11:22:30 +0200 Subject: [PATCH] DataItem interface expansion Redmine: #2030 For later convenience while using it in JobItemUtils --- GUI/coregui/Models/DataItem.cpp | 11 +++++ GUI/coregui/Models/DataItem.h | 7 +++ GUI/coregui/Models/IntensityDataItem.cpp | 42 +++++++----------- GUI/coregui/Models/IntensityDataItem.h | 10 ++--- GUI/coregui/Models/JobItem.cpp | 2 +- GUI/coregui/Models/JobItemUtils.cpp | 2 +- GUI/coregui/Models/RealDataItem.cpp | 6 +-- GUI/coregui/Models/SpecularDataItem.cpp | 43 +++++++------------ GUI/coregui/Models/SpecularDataItem.h | 10 ++--- .../Views/FitWidgets/FitComparisonWidget.cpp | 2 +- .../DetectorMaskDelegate.cpp | 2 +- .../Views/IntensityDataWidgets/ColorMap.cpp | 2 +- .../SpecularDataWidgets/SpecularPlot.cpp | 2 +- 13 files changed, 67 insertions(+), 74 deletions(-) diff --git a/GUI/coregui/Models/DataItem.cpp b/GUI/coregui/Models/DataItem.cpp index efc99a91159..dc370cb21b1 100644 --- a/GUI/coregui/Models/DataItem.cpp +++ b/GUI/coregui/Models/DataItem.cpp @@ -14,9 +14,11 @@ #include "DataItem.h" #include "BornAgainNamespace.h" +#include "ComboProperty.h" #include "GUIHelpers.h" const QString DataItem::P_FILE_NAME = "FileName"; +const QString DataItem::P_AXES_UNITS = "Axes Units"; void DataItem::setOutputData(OutputData<double>* data) { @@ -49,11 +51,20 @@ void DataItem::setLastModified(const QDateTime& dtime) m_last_modified = dtime; } +QString DataItem::selectedAxesUnits() const +{ + ComboProperty combo = getItemValue(DataItem::P_AXES_UNITS).value<ComboProperty>(); + return combo.getValue(); +} + DataItem::DataItem(const QString& modelType) : SessionItem(modelType) { // name of the file used to serialize given IntensityDataItem addProperty(P_FILE_NAME, QStringLiteral("undefined"))->setVisible(false); + ComboProperty units = ComboProperty() << Constants::UnitsNbins; + addProperty(P_AXES_UNITS, units.variant()); + mapper()->setOnPropertyChange([this](const QString& name) { if (name == P_FILE_NAME) setLastModified(QDateTime::currentDateTime()); diff --git a/GUI/coregui/Models/DataItem.h b/GUI/coregui/Models/DataItem.h index 627eed28728..b96cfe9bf25 100644 --- a/GUI/coregui/Models/DataItem.h +++ b/GUI/coregui/Models/DataItem.h @@ -29,6 +29,7 @@ class BA_CORE_API_ DataItem : public SessionItem { public: static const QString P_FILE_NAME; + static const QString P_AXES_UNITS; OutputData<double>* getOutputData() { return m_data.get(); } const OutputData<double>* getOutputData() const { return m_data.get(); } @@ -40,6 +41,12 @@ public: QDateTime lastModified() const; void setLastModified(const QDateTime& dtime); + QString selectedAxesUnits() const; + + virtual void setXaxisTitle(QString xtitle) = 0; + virtual void setYaxisTitle(QString ytitle) = 0; + virtual void setAxesRangeToData() = 0; + protected: DataItem(const QString& modelType); diff --git a/GUI/coregui/Models/IntensityDataItem.cpp b/GUI/coregui/Models/IntensityDataItem.cpp index a4327ab095d..1fd22074818 100644 --- a/GUI/coregui/Models/IntensityDataItem.cpp +++ b/GUI/coregui/Models/IntensityDataItem.cpp @@ -34,7 +34,6 @@ ComboProperty gradientCombo() { } } -const QString IntensityDataItem::P_AXES_UNITS = "Axes Units"; const QString IntensityDataItem::P_TITLE = "Title"; const QString IntensityDataItem::P_PROJECTIONS_FLAG = "Projections"; const QString IntensityDataItem::P_IS_INTERPOLATED = "Interpolation"; @@ -47,9 +46,6 @@ const QString IntensityDataItem::T_PROJECTIONS = "Projection tag"; IntensityDataItem::IntensityDataItem() : DataItem(Constants::IntensityDataType) { - ComboProperty units = ComboProperty() << Constants::UnitsNbins; - addProperty(P_AXES_UNITS, units.variant()); - addProperty(P_TITLE, QString())->setVisible(false); addProperty(P_PROJECTIONS_FLAG, false)->setVisible(false); @@ -193,10 +189,23 @@ void IntensityDataItem::setZAxisLocked(bool state) return getItem(P_ZAXIS)->setItemValue(AmplitudeAxisItem::P_LOCK_MIN_MAX, state); } -QString IntensityDataItem::selectedAxesUnits() const +void IntensityDataItem::setXaxisTitle(QString xtitle) +{ + getItem(P_XAXIS)->setItemValue(BasicAxisItem::P_TITLE, xtitle); +} + +void IntensityDataItem::setYaxisTitle(QString ytitle) +{ + getItem(P_YAXIS)->setItemValue(BasicAxisItem::P_TITLE, ytitle); +} + +//! set zoom range of x,y axes to axes of input data +void IntensityDataItem::setAxesRangeToData() { - ComboProperty combo = getItemValue(IntensityDataItem::P_AXES_UNITS).value<ComboProperty>(); - return combo.getValue(); + setLowerX(getXmin()); + setUpperX(getXmax()); + setLowerY(getYmin()); + setUpperY(getYmax()); } void IntensityDataItem::setLowerX(double xmin) @@ -248,25 +257,6 @@ void IntensityDataItem::setInterpolated(bool interp) setItemValue(P_IS_INTERPOLATED, interp); } -void IntensityDataItem::setXaxisTitle(QString xtitle) -{ - getItem(P_XAXIS)->setItemValue(BasicAxisItem::P_TITLE, xtitle); -} - -void IntensityDataItem::setYaxisTitle(QString ytitle) -{ - getItem(P_YAXIS)->setItemValue(BasicAxisItem::P_TITLE, ytitle); -} - -//! set zoom range of x,y axes to axes of input data -void IntensityDataItem::setAxesRangeToData() -{ - setLowerX(getXmin()); - setUpperX(getXmax()); - setLowerY(getYmin()); - setUpperY(getYmax()); -} - //! Sets zoom range of X,Y axes, if it was not yet defined. void IntensityDataItem::updateAxesZoomLevel() diff --git a/GUI/coregui/Models/IntensityDataItem.h b/GUI/coregui/Models/IntensityDataItem.h index 10585d8daae..21557c27d5b 100644 --- a/GUI/coregui/Models/IntensityDataItem.h +++ b/GUI/coregui/Models/IntensityDataItem.h @@ -28,7 +28,6 @@ public: static const QString P_TITLE; static const QString P_IS_INTERPOLATED; static const QString P_GRADIENT; - static const QString P_AXES_UNITS; static const QString P_XAXIS; static const QString P_YAXIS; static const QString P_ZAXIS; @@ -73,8 +72,6 @@ public: bool isZAxisLocked() const; void setZAxisLocked(bool state); - QString selectedAxesUnits() const; - void updateDataRange(); void computeDataRange(); QPair<double, double> dataRange() const; @@ -91,6 +88,10 @@ public: MaskContainerItem* maskContainerItem(); ProjectionContainerItem* projectionContainerItem(); + void setXaxisTitle(QString xtitle) override; + void setYaxisTitle(QString ytitle) override; + void setAxesRangeToData() override; + public slots: void setLowerX(double xmin); void setUpperX(double xmax); @@ -101,9 +102,6 @@ public slots: void setUpperZ(double zmax); void setLogz(bool logz); void setInterpolated(bool interp); - void setXaxisTitle(QString xtitle); - void setYaxisTitle(QString ytitle); - void setAxesRangeToData(); private: void updateAxesZoomLevel(); diff --git a/GUI/coregui/Models/JobItem.cpp b/GUI/coregui/Models/JobItem.cpp index aa221bdc33e..f72de8e265f 100644 --- a/GUI/coregui/Models/JobItem.cpp +++ b/GUI/coregui/Models/JobItem.cpp @@ -84,7 +84,7 @@ JobItem::JobItem() : SessionItem(Constants::JobItemType) mapper()->setOnChildPropertyChange([this](SessionItem* item, const QString& name) { if (item->parent() == this && item->modelType() == Constants::IntensityDataType - && name == IntensityDataItem::P_AXES_UNITS) { + && name == DataItem::P_AXES_UNITS) { auto intensityItem = dynamic_cast<IntensityDataItem*>(item); MaskUnitsConverter converter; diff --git a/GUI/coregui/Models/JobItemUtils.cpp b/GUI/coregui/Models/JobItemUtils.cpp index 0a68439f665..d99d5a15ad5 100644 --- a/GUI/coregui/Models/JobItemUtils.cpp +++ b/GUI/coregui/Models/JobItemUtils.cpp @@ -194,7 +194,7 @@ void JobItemUtils::setIntensityItemAxesUnits(IntensityDataItem* intensityItem, AxesUnits preferrable_units = converter.defaultUnits(); combo.setValue(nameFromAxesUnits(preferrable_units)); - intensityItem->setItemValue(IntensityDataItem::P_AXES_UNITS, combo.variant()); + intensityItem->setItemValue(DataItem::P_AXES_UNITS, combo.variant()); } void JobItemUtils::createDefaultDetectorMap(IntensityDataItem* intensityItem, diff --git a/GUI/coregui/Models/RealDataItem.cpp b/GUI/coregui/Models/RealDataItem.cpp index 7e7fa89317a..b0ab10acaeb 100644 --- a/GUI/coregui/Models/RealDataItem.cpp +++ b/GUI/coregui/Models/RealDataItem.cpp @@ -60,7 +60,7 @@ RealDataItem::RealDataItem() [this](SessionItem* item, const QString &name) { if (item && item->modelType() == Constants::IntensityDataType - && name == IntensityDataItem::P_AXES_UNITS) { + && name == DataItem::P_AXES_UNITS) { if(!m_linkedInstrument) return; mapper()->setActive(false); @@ -129,8 +129,8 @@ void RealDataItem::updateToInstrument() if(m_linkedInstrument == 0) { ComboProperty combo = ComboProperty() << Constants::UnitsNbins; - item->setItemValue(IntensityDataItem::P_AXES_UNITS, combo.variant()); - item->getItem(IntensityDataItem::P_AXES_UNITS)->setVisible(true); + item->setItemValue(DataItem::P_AXES_UNITS, combo.variant()); + item->getItem(DataItem::P_AXES_UNITS)->setVisible(true); item->setXaxisTitle("X [nbins]"); item->setYaxisTitle("Y [nbins]"); MaskUnitsConverter converter; diff --git a/GUI/coregui/Models/SpecularDataItem.cpp b/GUI/coregui/Models/SpecularDataItem.cpp index d6128ef81bc..b50e91e7fe4 100644 --- a/GUI/coregui/Models/SpecularDataItem.cpp +++ b/GUI/coregui/Models/SpecularDataItem.cpp @@ -15,20 +15,15 @@ #include "SpecularDataItem.h" #include "AxesItems.h" #include "BornAgainNamespace.h" -#include "ComboProperty.h" #include "GUIHelpers.h" #include "BornAgainNamespace.h" -const QString SpecularDataItem::P_AXES_UNITS = "Axes Units"; const QString SpecularDataItem::P_TITLE = "Title"; const QString SpecularDataItem::P_XAXIS = "x-axis"; const QString SpecularDataItem::P_YAXIS = "y-axis"; SpecularDataItem::SpecularDataItem() : DataItem(Constants::SpecularDataType) { - ComboProperty units = ComboProperty() << Constants::UnitsNbins; - addProperty(P_AXES_UNITS, units.variant()); - addProperty(P_TITLE, QString())->setVisible(false); SessionItem* item = addGroupProperty(P_XAXIS, Constants::BasicAxisType); @@ -131,10 +126,23 @@ QString SpecularDataItem::getYaxisTitle() const return getItem(P_YAXIS)->getItemValue(BasicAxisItem::P_TITLE).toString(); } -QString SpecularDataItem::selectedAxesUnits() const +void SpecularDataItem::setXaxisTitle(QString xtitle) +{ + getItem(P_XAXIS)->setItemValue(BasicAxisItem::P_TITLE, xtitle); +} + +void SpecularDataItem::setYaxisTitle(QString ytitle) +{ + getItem(P_YAXIS)->setItemValue(AmplitudeAxisItem::P_TITLE, ytitle); +} + +//! set zoom range of x,y axes to axes of input data +void SpecularDataItem::setAxesRangeToData() { - ComboProperty combo = getItemValue(SpecularDataItem::P_AXES_UNITS).value<ComboProperty>(); - return combo.getValue(); + setLowerX(getXmin()); + setUpperX(getXmax()); + setLowerY(getYmin()); + setUpperY(getYmax()); } void SpecularDataItem::setLowerX(double xmin) @@ -162,25 +170,6 @@ void SpecularDataItem::setLog(bool log_flag) getItem(P_YAXIS)->setItemValue(AmplitudeAxisItem::P_IS_LOGSCALE, log_flag); } -void SpecularDataItem::setXaxisTitle(QString xtitle) -{ - getItem(P_XAXIS)->setItemValue(BasicAxisItem::P_TITLE, xtitle); -} - -void SpecularDataItem::setYaxisTitle(QString ytitle) -{ - getItem(P_YAXIS)->setItemValue(AmplitudeAxisItem::P_TITLE, ytitle); -} - -//! set zoom range of x,y axes to axes of input data -void SpecularDataItem::setAxesRangeToData() -{ - setLowerX(getXmin()); - setUpperX(getXmax()); - setLowerY(getYmin()); - setUpperY(getYmax()); -} - //! Sets zoom range of X,Y axes, if it was not yet defined. void SpecularDataItem::updateAxesZoomLevel() diff --git a/GUI/coregui/Models/SpecularDataItem.h b/GUI/coregui/Models/SpecularDataItem.h index 2ec6db95f62..8b5702cf50f 100644 --- a/GUI/coregui/Models/SpecularDataItem.h +++ b/GUI/coregui/Models/SpecularDataItem.h @@ -26,7 +26,6 @@ class BA_CORE_API_ SpecularDataItem : public DataItem { public: static const QString P_TITLE; - static const QString P_AXES_UNITS; static const QString P_XAXIS; static const QString P_YAXIS; @@ -58,8 +57,6 @@ public: QString getXaxisTitle() const; QString getYaxisTitle() const; - QString selectedAxesUnits() const; - void updateDataRange(); void computeDataRange(); QPair<double, double> dataRange() const; @@ -70,15 +67,16 @@ public: void resetView(); + void setXaxisTitle(QString xtitle) override; + void setYaxisTitle(QString ytitle) override; + void setAxesRangeToData() override; + public slots: void setLowerX(double xmin); void setUpperX(double xmax); void setLowerY(double ymin); void setUpperY(double ymax); void setLog(bool log_flag); - void setXaxisTitle(QString xtitle); - void setYaxisTitle(QString ytitle); - void setAxesRangeToData(); private: void updateAxesZoomLevel(); diff --git a/GUI/coregui/Views/FitWidgets/FitComparisonWidget.cpp b/GUI/coregui/Views/FitWidgets/FitComparisonWidget.cpp index eca373c4bd9..eb7aeda67a6 100644 --- a/GUI/coregui/Views/FitWidgets/FitComparisonWidget.cpp +++ b/GUI/coregui/Views/FitWidgets/FitComparisonWidget.cpp @@ -128,7 +128,7 @@ void FitComparisonWidget::subscribeToItem() if (auto diff_item = diffItem()) { diff_item->mapper()->setOnPropertyChange([this](const QString& name) { - if (name == IntensityDataItem::P_AXES_UNITS) { + if (name == DataItem::P_AXES_UNITS) { JobItemUtils::updateDataAxes(diffItem(), jobItem()->instrumentItem()); } }, this); diff --git a/GUI/coregui/Views/InstrumentWidgets/DetectorMaskDelegate.cpp b/GUI/coregui/Views/InstrumentWidgets/DetectorMaskDelegate.cpp index ec8bf6e59a7..a19b4c8ec8b 100644 --- a/GUI/coregui/Views/InstrumentWidgets/DetectorMaskDelegate.cpp +++ b/GUI/coregui/Views/InstrumentWidgets/DetectorMaskDelegate.cpp @@ -78,5 +78,5 @@ void DetectorMaskDelegate::createIntensityDataItem() JobItemUtils::createDefaultDetectorMap(m_intensityItem, instrument); m_intensityItem->getOutputData()->setAllTo(1.0); - m_intensityItem->getItem(IntensityDataItem::P_AXES_UNITS)->setEnabled(false); + m_intensityItem->getItem(DataItem::P_AXES_UNITS)->setEnabled(false); } diff --git a/GUI/coregui/Views/IntensityDataWidgets/ColorMap.cpp b/GUI/coregui/Views/IntensityDataWidgets/ColorMap.cpp index d9036811ff0..6939c08ae56 100644 --- a/GUI/coregui/Views/IntensityDataWidgets/ColorMap.cpp +++ b/GUI/coregui/Views/IntensityDataWidgets/ColorMap.cpp @@ -150,7 +150,7 @@ void ColorMap::onPropertyChanged(const QString& property_name) } else if (property_name == IntensityDataItem::P_IS_INTERPOLATED) { m_colorMap->setInterpolate(intensityItem()->isInterpolated()); replot(); - } else if (property_name == IntensityDataItem::P_AXES_UNITS) { + } else if (property_name == DataItem::P_AXES_UNITS) { setAxesRangeFromItem(intensityItem()); replot(); } diff --git a/GUI/coregui/Views/SpecularDataWidgets/SpecularPlot.cpp b/GUI/coregui/Views/SpecularDataWidgets/SpecularPlot.cpp index 59277109310..40391be0df7 100644 --- a/GUI/coregui/Views/SpecularDataWidgets/SpecularPlot.cpp +++ b/GUI/coregui/Views/SpecularDataWidgets/SpecularPlot.cpp @@ -63,7 +63,7 @@ void SpecularPlot::onPropertyChanged(const QString& property_name) if (m_block_update) return; - if (property_name == SpecularDataItem::P_AXES_UNITS) { + if (property_name == DataItem::P_AXES_UNITS) { setAxesRangeFromItem(specularItem()); replot(); } -- GitLab