diff --git a/GUI/Models/Data1DViewItem.cpp b/GUI/Models/Data1DViewItem.cpp index f0e6cb7f15c9667ae6201a74d2b45f0ede4fd55c..41ba9862869d5900877b23c02cc54c6495b21c4c 100644 --- a/GUI/Models/Data1DViewItem.cpp +++ b/GUI/Models/Data1DViewItem.cpp @@ -36,7 +36,9 @@ const QString Data1DViewItem::P_YAXIS = "y-axis"; const QString Data1DViewItem::P_AXES_UNITS = "Axes Units"; const QString Data1DViewItem::T_DATA_PROPERTIES = "Data property container"; -Data1DViewItem::Data1DViewItem() : SessionItem("Data1DViewItem"), m_job_item(nullptr) +const QString Data1DViewItem::M_TYPE = "Data1DViewItem"; + +Data1DViewItem::Data1DViewItem() : SessionItem(M_TYPE), m_job_item(nullptr) { addProperty(P_TITLE, QString())->setVisible(false); @@ -139,6 +141,21 @@ void Data1DViewItem::setAxesRangeToData() setUpperY(data_range.second); } +ComboProperty Data1DViewItem::axesUnits() const +{ + return getItemValue(P_AXES_UNITS).value<ComboProperty>(); +} + +void Data1DViewItem::setAxesUnits(const ComboProperty& units) +{ + setItemValue(Data1DViewItem::P_AXES_UNITS, units.variant()); +} + +bool Data1DViewItem::isAxesUnitsPropertyName(const QString& name) +{ + return name == P_AXES_UNITS; +} + void Data1DViewItem::resetToDefault() { // TODO: implement when applying DataITem1DView in ImportView @@ -207,6 +224,11 @@ DataPropertyContainer* Data1DViewItem::propertyContainerItem() return item<DataPropertyContainer>(T_DATA_PROPERTIES); } +DataPropertyContainer* Data1DViewItem::createPropertyContainerItem() +{ + return model()->insertItem<DataPropertyContainer>(this, -1, T_DATA_PROPERTIES); +} + const BasicAxisItem* Data1DViewItem::xAxisItem() const { return item<BasicAxisItem>(P_XAXIS); @@ -227,6 +249,16 @@ AmplitudeAxisItem* Data1DViewItem::yAxisItem() return item<AmplitudeAxisItem>(P_YAXIS); } +bool Data1DViewItem::isXAxisPropertyName(const QString& name) +{ + return name == P_XAXIS; +} + +bool Data1DViewItem::isYAxisPropertyName(const QString& name) +{ + return name == P_YAXIS; +} + //! Set axes viewport to original data. void Data1DViewItem::resetView() diff --git a/GUI/Models/Data1DViewItem.h b/GUI/Models/Data1DViewItem.h index 679c02ba965471995966450934022280f09736d4..1f1154954d41f886bde66aca70672498976980f4 100644 --- a/GUI/Models/Data1DViewItem.h +++ b/GUI/Models/Data1DViewItem.h @@ -19,6 +19,7 @@ class AmplitudeAxisItem; class BasicAxisItem; +class ComboProperty; class DataPropertyContainer; class Data1DProperties; class DataItem; @@ -30,13 +31,16 @@ template <class T> class OutputData; //! items determines axes' limits. class BA_CORE_API_ Data1DViewItem : public SessionItem { -public: +private: static const QString P_TITLE; static const QString P_XAXIS; static const QString P_YAXIS; static const QString P_AXES_UNITS; static const QString T_DATA_PROPERTIES; +public: + static const QString M_TYPE; + Data1DViewItem(); //! Number of bins in data @@ -59,12 +63,19 @@ public: const AmplitudeAxisItem* yAxisItem() const; AmplitudeAxisItem* yAxisItem(); + static bool isXAxisPropertyName(const QString& name); + static bool isYAxisPropertyName(const QString& name); + void resetView(); void setXaxisTitle(const QString& title); void setYaxisTitle(const QString& title); void setAxesRangeToData(); + ComboProperty axesUnits() const; + void setAxesUnits(const ComboProperty& units); + static bool isAxesUnitsPropertyName(const QString& name); + //! Returns data view to default state (no dimensional units, default axes' names) void resetToDefault(); @@ -86,6 +97,7 @@ public: void setLog(bool log_flag); DataPropertyContainer* propertyContainerItem(); + DataPropertyContainer* createPropertyContainerItem(); private: QPair<double, double> dataRange(const OutputData<double>* data) const; diff --git a/GUI/Models/DataViewUtils.cpp b/GUI/Models/DataViewUtils.cpp index d069c1631e87ee00bc717b438e1d6147ea27f0b3..c2bb50ff4a9973c56eda54b6a86ebe6aca6d6fde 100644 --- a/GUI/Models/DataViewUtils.cpp +++ b/GUI/Models/DataViewUtils.cpp @@ -34,8 +34,7 @@ ICoordSystem* getConverter(Data1DViewItem* view_item) Axes::Coords selectedUnits(Data1DViewItem* view_item) { - auto current_unit_name = - view_item->getItemValue(Data1DViewItem::P_AXES_UNITS).value<ComboProperty>().getValue(); + QString current_unit_name = view_item->axesUnits().getValue(); return JobItemUtils::coordsFromName(current_unit_name); } diff --git a/GUI/Models/ItemCatalog.cpp b/GUI/Models/ItemCatalog.cpp index dcc941bb984ed10ab897429ffd6774adb4e320d1..c51d8395da3a21225669996cd49f57ef2f9a6af7 100644 --- a/GUI/Models/ItemCatalog.cpp +++ b/GUI/Models/ItemCatalog.cpp @@ -178,7 +178,7 @@ ItemCatalog::ItemCatalog() addItem<IntensityDataItem>(); addItem<SpecularDataItem>(); - add("Data1DViewItem", create_new<Data1DViewItem>); + addItem<Data1DViewItem>(); add("DataPropertyContainer", create_new<DataPropertyContainer>); add("DataItem1DProperties", create_new<Data1DProperties>); diff --git a/GUI/Models/JobItem.cpp b/GUI/Models/JobItem.cpp index 047dbd29709116bd024932bae3d681b3685b3406..106140e31a93959ea90c1bc9390a70a1aae93110 100644 --- a/GUI/Models/JobItem.cpp +++ b/GUI/Models/JobItem.cpp @@ -73,13 +73,13 @@ JobItem::JobItem() : SessionItem(M_TYPE) addProperty(P_PRESENTATION_TYPE, QVariant::Type::Invalid)->setVisible(false); registerTag(T_SAMPLE, 1, 1, QStringList() << "MultiLayer"); - registerTag(T_MATERIAL_CONTAINER, 1, 1, QStringList{"MaterialContainer"}); + registerTag(T_MATERIAL_CONTAINER, 1, 1, { MaterialItemContainer::M_TYPE }); registerTag(T_INSTRUMENT, 1, 1, {GISASInstrumentItem::M_TYPE, OffSpecularInstrumentItem::M_TYPE, SpecularInstrumentItem::M_TYPE, DepthProbeInstrumentItem::M_TYPE}); registerTag(T_OUTPUT, 1, 1, {IntensityDataItem::M_TYPE, SpecularDataItem::M_TYPE}); registerTag(T_REALDATA, 1, 1, QStringList() << "RealData"); - registerTag(T_DATAVIEW, 1, 1, QStringList() << "Data1DViewItem"); + registerTag(T_DATAVIEW, 1, 1, { Data1DViewItem::M_TYPE }); registerTag(T_PARAMETER_TREE, 0, -1, QStringList() << "Parameter Container"); registerTag(T_SIMULATION_OPTIONS, 1, 1, QStringList() << "SimulationOptions"); diff --git a/GUI/Models/JobModelFunctions.cpp b/GUI/Models/JobModelFunctions.cpp index eb0273a4ff6ead79accd7ec789c3f184440e2024..b7ae3631ca77c03b8ecceae16b8293b855798fa0 100644 --- a/GUI/Models/JobModelFunctions.cpp +++ b/GUI/Models/JobModelFunctions.cpp @@ -70,8 +70,7 @@ void JobModelFunctions::initDataView(JobItem* job_item) SessionModel* model = job_item->model(); auto view_item = job_item->createDataViewItem(); - auto property_container = - model->insertItem<DataPropertyContainer>(view_item, -1, Data1DViewItem::T_DATA_PROPERTIES); + auto property_container = view_item->createPropertyContainerItem(); property_container->addItem(job_item->realDataItem()->dataItem()); property_container->addItem(job_item->dataItem()); @@ -79,8 +78,7 @@ void JobModelFunctions::initDataView(JobItem* job_item) // also triggers Data1DViewItem::setAxesRangeToData and DataViewUtils::updateAxesTitle by // setting new value of P_AXES_UNITS. auto converter = job_item->instrumentItem()->createCoordSystem(); - view_item->setItemValue(Data1DViewItem::P_AXES_UNITS, - JobItemUtils::availableUnits(*converter).variant()); + view_item->setAxesUnits(JobItemUtils::availableUnits(*converter)); } void JobModelFunctions::setupJobItemSampleData(JobItem* jobItem, const MultiLayerItem* sampleItem) diff --git a/GUI/Views/FitWidgets/FitComparisonViewController.cpp b/GUI/Views/FitWidgets/FitComparisonViewController.cpp index ad31e77bc69c1e72e32e410ca9ab808c704d9042..83ea4da200ffa99611c7e92586854455e63c872a 100644 --- a/GUI/Views/FitWidgets/FitComparisonViewController.cpp +++ b/GUI/Views/FitWidgets/FitComparisonViewController.cpp @@ -15,6 +15,7 @@ #include "GUI/Views/FitWidgets/FitComparisonViewController.h" #include "Device/Data/DataUtils.h" #include "GUI/Models/AxesItems.h" +#include "GUI/Models/ComboProperty.h" #include "GUI/Models/Data1DViewItem.h" #include "GUI/Models/DataItem.h" #include "GUI/Models/DataPropertyContainer.h" @@ -91,14 +92,13 @@ void FitComparison1DViewController::clear() void FitComparison1DViewController::createDiffViewItem(JobItem* job_item) { m_diff_view_item = m_diff_item_controller->model()->insertItem<Data1DViewItem>(); - auto container = m_diff_view_item->model()->insertItem<DataPropertyContainer>( - m_diff_view_item, -1, Data1DViewItem::T_DATA_PROPERTIES); + auto container = m_diff_view_item->createPropertyContainerItem(); container->addItem(m_diff_item_controller->diffItem()); m_diff_view_item->setJobItem(job_item); auto job_data_view = job_item->dataItemView(); - auto units_value = job_data_view->getItemValue(Data1DViewItem::P_AXES_UNITS); - m_diff_view_item->setItemValue(Data1DViewItem::P_AXES_UNITS, units_value); + ComboProperty units_value = job_data_view->axesUnits(); + m_diff_view_item->setAxesUnits(units_value); } void FitComparison1DViewController::deleteDiffViewItem() diff --git a/GUI/Views/IntensityDataWidgets/Plot1D.cpp b/GUI/Views/IntensityDataWidgets/Plot1D.cpp index caa5cb2593c9fc7698c81d531065c5658d0fc4cc..93035da72ca376968f925e7af5108eb6a1ae5fb8 100644 --- a/GUI/Views/IntensityDataWidgets/Plot1D.cpp +++ b/GUI/Views/IntensityDataWidgets/Plot1D.cpp @@ -81,7 +81,7 @@ void Plot1D::onPropertyChanged(const QString& property_name) if (m_block_update) return; - if (property_name == Data1DViewItem::P_AXES_UNITS) { + if (Data1DViewItem::isAxesUnitsPropertyName(property_name)) { setAxesRangeFromItem(viewItem()); updateAllGraphs(); replot(); @@ -275,14 +275,14 @@ void Plot1D::modifyAxesProperties(const QString& axisName, const QString& proper replot(); } - if (axisName == Data1DViewItem::P_XAXIS) { + if (Data1DViewItem::isXAxisPropertyName(axisName)) { if (BasicAxisItem::isBoundsPropertiesName(propertyName)) { setAxesRangeConnected(false); m_custom_plot->xAxis->setRange(viewItem()->getLowerX(), viewItem()->getUpperX()); setAxesRangeConnected(true); replot(); } - } else if (axisName == Data1DViewItem::P_YAXIS) { + } else if (Data1DViewItem::isYAxisPropertyName(axisName)) { if (BasicAxisItem::isBoundsPropertiesName(propertyName)) { setAxesRangeConnected(false); m_custom_plot->yAxis->setRange(viewItem()->getLowerY(), viewItem()->getUpperY()); diff --git a/GUI/Views/TestView.cpp b/GUI/Views/TestView.cpp index c1a267c057fb61e7b40743c7b89dc3edf9f766e2..fd93a2498e0df6b396d0bf790ce7ae58db2df23f 100644 --- a/GUI/Views/TestView.cpp +++ b/GUI/Views/TestView.cpp @@ -197,8 +197,7 @@ void TestView::test_specular_data_widget() // creating data view auto data_view = new Data1DViewItem(); job_item->addDataViewItem(data_view); - data_view->insertItem(-1, new DataPropertyContainer, Data1DViewItem::T_DATA_PROPERTIES); - auto container = data_view->item<DataPropertyContainer>(Data1DViewItem::T_DATA_PROPERTIES); + auto container = data_view->createPropertyContainerItem(); container->addItem(job_item->realDataItem()->dataItem()); container->addItem(job_item->dataItem());