Skip to content
Snippets Groups Projects
Commit 6f0da289 authored by t.knopff's avatar t.knopff
Browse files

Use string constant for PointwiseAxisItem type name

parent e93dfb03
No related branches found
No related tags found
1 merge request!72Refactor model: PointwiseAxisItem
Pipeline #36762 passed
...@@ -242,9 +242,9 @@ void SpecularBeamItem::updateToData(const IAxis& axis, QString units) ...@@ -242,9 +242,9 @@ void SpecularBeamItem::updateToData(const IAxis& axis, QString units)
} }
auto axis_group = inclinationAxisGroup(); auto axis_group = inclinationAxisGroup();
auto axis_item = static_cast<PointwiseAxisItem*>(axis_group->getChildOfType("PointwiseAxis")); auto axis_item = axis_group->firstChildOfType<PointwiseAxisItem>();
axis_item->init(axis, units); axis_item->init(axis, units);
axis_group->setCurrentType("PointwiseAxis"); // calls updateWavelength() axis_group->setCurrentType(PointwiseAxisItem::M_TYPE); // calls updateWavelength()
axis_item->updateIndicators(); axis_item->updateIndicators();
} }
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "GUI/Models/GroupInfoCatalog.h" #include "GUI/Models/GroupInfoCatalog.h"
#include "GUI/Models/AxesItems.h" #include "GUI/Models/AxesItems.h"
#include "GUI/Models/MaterialDataItems.h" #include "GUI/Models/MaterialDataItems.h"
#include "GUI/Models/PointwiseAxisItem.h"
#include "GUI/utils/GUIHelpers.h" #include "GUI/utils/GUIHelpers.h"
GroupInfoCatalog::GroupInfoCatalog() GroupInfoCatalog::GroupInfoCatalog()
...@@ -189,7 +190,7 @@ GroupInfoCatalog::GroupInfoCatalog() ...@@ -189,7 +190,7 @@ GroupInfoCatalog::GroupInfoCatalog()
info = GroupInfo("Axes group"); info = GroupInfo("Axes group");
info.add(BasicAxisItem::M_TYPE, "Uniform axis"); info.add(BasicAxisItem::M_TYPE, "Uniform axis");
info.add("PointwiseAxis", "Non-uniform axis"); info.add(PointwiseAxisItem::M_TYPE, "Non-uniform axis");
info.setDefaultType(BasicAxisItem::M_TYPE); info.setDefaultType(BasicAxisItem::M_TYPE);
addInfo(info); addInfo(info);
......
...@@ -14,7 +14,6 @@ ...@@ -14,7 +14,6 @@
#include "GUI/Models/GroupItem.h" #include "GUI/Models/GroupItem.h"
#include "GUI/Models/ComboProperty.h" #include "GUI/Models/ComboProperty.h"
#include "GUI/Models/GroupItemController.h"
#include "GUI/utils/GUIHelpers.h" #include "GUI/utils/GUIHelpers.h"
const QString GroupItem::T_ITEMS = "Item tag"; const QString GroupItem::T_ITEMS = "Item tag";
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#define BORNAGAIN_GUI_MODELS_GROUPITEM_H #define BORNAGAIN_GUI_MODELS_GROUPITEM_H
#include "GUI/Models/GroupInfo.h" #include "GUI/Models/GroupInfo.h"
#include "GUI/Models/GroupItemController.h"
#include "GUI/Models/SessionItem.h" #include "GUI/Models/SessionItem.h"
#include <memory> #include <memory>
...@@ -37,10 +38,17 @@ public: ...@@ -37,10 +38,17 @@ public:
SessionItem* getItemOfType(const QString& type); SessionItem* getItemOfType(const QString& type);
template <typename T> T* itemOfType() const;
private: private:
void onValueChange(); void onValueChange();
void updateComboValue(); void updateComboValue();
std::unique_ptr<GroupItemController> m_controller; std::unique_ptr<GroupItemController> m_controller;
}; };
template <typename T> T* GroupItem::itemOfType() const
{
return dynamic_cast<T*>(m_controller->getItemOfType(T::M_TYPE));
}
#endif // BORNAGAIN_GUI_MODELS_GROUPITEM_H #endif // BORNAGAIN_GUI_MODELS_GROUPITEM_H
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "GUI/Models/InstrumentModel.h" #include "GUI/Models/InstrumentModel.h"
#include "GUI/Models/InstrumentItems.h" #include "GUI/Models/InstrumentItems.h"
#include "GUI/Models/PointwiseAxisItem.h"
#include "GUI/Models/SpecularBeamInclinationItem.h" #include "GUI/Models/SpecularBeamInclinationItem.h"
InstrumentModel::InstrumentModel(QObject* parent) InstrumentModel::InstrumentModel(QObject* parent)
...@@ -43,7 +44,7 @@ QVector<SessionItem*> InstrumentModel::nonXMLItems() const ...@@ -43,7 +44,7 @@ QVector<SessionItem*> InstrumentModel::nonXMLItems() const
->inclinationAngleItem() ->inclinationAngleItem()
->getItem(SpecularBeamInclinationItem::P_ALPHA_AXIS); ->getItem(SpecularBeamInclinationItem::P_ALPHA_AXIS);
if (auto pointwise_axis = axis_group->getChildOfType("PointwiseAxis")) if (auto pointwise_axis = axis_group->firstChildOfType<PointwiseAxisItem>())
result.push_back(pointwise_axis); result.push_back(pointwise_axis);
} }
......
...@@ -180,7 +180,7 @@ ItemCatalog::ItemCatalog() ...@@ -180,7 +180,7 @@ ItemCatalog::ItemCatalog()
add("DataItem1DProperties", create_new<Data1DProperties>); add("DataItem1DProperties", create_new<Data1DProperties>);
addItem<BasicAxisItem>(); addItem<BasicAxisItem>();
add("PointwiseAxis", create_new<PointwiseAxisItem>); addItem<PointwiseAxisItem>();
addItem<AmplitudeAxisItem>(); addItem<AmplitudeAxisItem>();
add("BeamWavelength", create_new<BeamWavelengthItem>); add("BeamWavelength", create_new<BeamWavelengthItem>);
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include "GUI/Models/MultiLayerItem.h" #include "GUI/Models/MultiLayerItem.h"
#include "GUI/Models/ParameterTreeItems.h" #include "GUI/Models/ParameterTreeItems.h"
#include "GUI/Models/ParameterTreeUtils.h" #include "GUI/Models/ParameterTreeUtils.h"
#include "GUI/Models/PointwiseAxisItem.h"
#include "GUI/Models/RealDataItem.h" #include "GUI/Models/RealDataItem.h"
#include "GUI/Models/SimulationOptionsItem.h" #include "GUI/Models/SimulationOptionsItem.h"
#include "GUI/utils/GUIHelpers.h" #include "GUI/utils/GUIHelpers.h"
...@@ -151,7 +152,7 @@ QVector<SessionItem*> JobModel::nonXMLItems() const ...@@ -151,7 +152,7 @@ QVector<SessionItem*> JobModel::nonXMLItems() const
dynamic_cast<SpecularInstrumentItem*>(jobItem->getItem(JobItem::T_INSTRUMENT)); dynamic_cast<SpecularInstrumentItem*>(jobItem->getItem(JobItem::T_INSTRUMENT));
if (instrument) { if (instrument) {
auto axis_group = instrument->beamItem()->inclinationAxisGroup(); auto axis_group = instrument->beamItem()->inclinationAxisGroup();
result.push_back(axis_group->getChildOfType("PointwiseAxis")); result.push_back(axis_group->firstChildOfType<PointwiseAxisItem>());
} }
} }
......
...@@ -129,7 +129,7 @@ void JobModelFunctions::setupJobItemInstrument(JobItem* jobItem, const Instrumen ...@@ -129,7 +129,7 @@ void JobModelFunctions::setupJobItemInstrument(JobItem* jobItem, const Instrumen
auto spec_from = static_cast<const SpecularInstrumentItem*>(from); auto spec_from = static_cast<const SpecularInstrumentItem*>(from);
auto axis_origin = getPointwiseAxisItem(spec_from); auto axis_origin = getPointwiseAxisItem(spec_from);
const QString current_axis_type = spec_from->beamItem()->inclinationAxisGroup()->currentType(); const QString current_axis_type = spec_from->beamItem()->inclinationAxisGroup()->currentType();
if (current_axis_type == "PointwiseAxis") if (current_axis_type == PointwiseAxisItem::M_TYPE)
spec_to->beamItem()->updateToData(*axis_origin->axis(), axis_origin->getUnitsLabel()); spec_to->beamItem()->updateToData(*axis_origin->axis(), axis_origin->getUnitsLabel());
else if (axis_origin->containsNonXMLData()) else if (axis_origin->containsNonXMLData())
getPointwiseAxisItem(spec_to)->init(*axis_origin->axis(), axis_origin->getUnitsLabel()); getPointwiseAxisItem(spec_to)->init(*axis_origin->axis(), axis_origin->getUnitsLabel());
...@@ -291,7 +291,7 @@ void createFitContainers(JobItem* jobItem) ...@@ -291,7 +291,7 @@ void createFitContainers(JobItem* jobItem)
PointwiseAxisItem* getPointwiseAxisItem(const SpecularInstrumentItem* instrument) PointwiseAxisItem* getPointwiseAxisItem(const SpecularInstrumentItem* instrument)
{ {
return dynamic_cast<PointwiseAxisItem*>( return instrument->beamItem()->inclinationAxisGroup()
instrument->beamItem()->inclinationAxisGroup()->getChildOfType("PointwiseAxis")); ->firstChildOfType<PointwiseAxisItem>();
} }
} // namespace } // namespace
...@@ -34,8 +34,9 @@ std::unique_ptr<OutputData<double>> makeOutputData(const IAxis& axis) ...@@ -34,8 +34,9 @@ std::unique_ptr<OutputData<double>> makeOutputData(const IAxis& axis)
const QString PointwiseAxisItem::P_NATIVE_AXIS_UNITS = "NativeAxisUnits"; const QString PointwiseAxisItem::P_NATIVE_AXIS_UNITS = "NativeAxisUnits";
const QString PointwiseAxisItem::P_FILE_NAME = "FileName"; const QString PointwiseAxisItem::P_FILE_NAME = "FileName";
const QString PointwiseAxisItem::M_TYPE = "PointwiseAxis";
PointwiseAxisItem::PointwiseAxisItem() : BasicAxisItem("PointwiseAxis"), m_instrument(nullptr) PointwiseAxisItem::PointwiseAxisItem() : BasicAxisItem(M_TYPE), m_instrument(nullptr)
{ {
lowerBoundItem()->setEnabled(false); lowerBoundItem()->setEnabled(false);
binsItem()->setEnabled(false); binsItem()->setEnabled(false);
......
...@@ -29,6 +29,7 @@ private: ...@@ -29,6 +29,7 @@ private:
static const QString P_FILE_NAME; static const QString P_FILE_NAME;
public: public:
static const QString M_TYPE;
explicit PointwiseAxisItem(); explicit PointwiseAxisItem();
~PointwiseAxisItem() override; ~PointwiseAxisItem() override;
......
...@@ -50,6 +50,7 @@ public: ...@@ -50,6 +50,7 @@ public:
int rowOfChild(SessionItem* child) const; int rowOfChild(SessionItem* child) const;
SessionItem* getChildOfType(const QString& type) const; SessionItem* getChildOfType(const QString& type) const;
QVector<SessionItem*> getChildrenOfType(const QString& model_type) const; QVector<SessionItem*> getChildrenOfType(const QString& model_type) const;
template <typename T> T* firstChildOfType() const;
SessionItem* takeRow(int row); SessionItem* takeRow(int row);
// manage and check tags // manage and check tags
...@@ -161,6 +162,15 @@ template <typename T> QVector<T*> SessionItem::items(const QString& tag) const ...@@ -161,6 +162,15 @@ template <typename T> QVector<T*> SessionItem::items(const QString& tag) const
return result; return result;
} }
template <typename T> T* SessionItem::firstChildOfType() const
{
for (auto child : m_children)
if (child->modelType() == T::M_TYPE)
return dynamic_cast<T*>(child);
return nullptr;
}
template <typename T> T* SessionItem::addProperty(const QString& tagname) template <typename T> T* SessionItem::addProperty(const QString& tagname)
{ {
auto property = new T; auto property = new T;
......
...@@ -44,8 +44,8 @@ double SpecularBeamInclinationItem::scaleFactor() const ...@@ -44,8 +44,8 @@ double SpecularBeamInclinationItem::scaleFactor() const
void SpecularBeamInclinationItem::updateFileName(const QString& filename) void SpecularBeamInclinationItem::updateFileName(const QString& filename)
{ {
auto group_item = item<GroupItem>(P_ALPHA_AXIS); auto group_item = item<GroupItem>(P_ALPHA_AXIS);
SessionItem* item = group_item->getChildOfType("PointwiseAxis"); PointwiseAxisItem* axis_item =
PointwiseAxisItem* axis_item = dynamic_cast<PointwiseAxisItem*>(item); group_item->firstChildOfType<PointwiseAxisItem>();
ASSERT(axis_item); ASSERT(axis_item);
axis_item->setFileName(filename); axis_item->setFileName(filename);
} }
...@@ -59,7 +59,7 @@ void SpecularBeamInclinationItem::setupAxisGroup() ...@@ -59,7 +59,7 @@ void SpecularBeamInclinationItem::setupAxisGroup()
// handling (no signal emulation required). // handling (no signal emulation required).
// Basic axis item is the default one. // Basic axis item is the default one.
group_item->setCurrentType("PointwiseAxis"); group_item->setCurrentType(PointwiseAxisItem::M_TYPE);
setAxisPresentationDefaults(group_item->currentItem(), group_item->currentType()); setAxisPresentationDefaults(group_item->currentItem(), group_item->currentType());
group_item->setCurrentType(BasicAxisItem::M_TYPE); group_item->setCurrentType(BasicAxisItem::M_TYPE);
...@@ -70,7 +70,8 @@ void SpecularBeamInclinationItem::setupAxisGroup() ...@@ -70,7 +70,8 @@ void SpecularBeamInclinationItem::setupAxisGroup()
group_item->setEnabled(false); group_item->setEnabled(false);
group_item->mapper()->setOnValueChange( group_item->mapper()->setOnValueChange(
[group_item]() { [group_item]() {
if (group_item->currentItem()->modelType() == "PointwiseAxis") if (group_item->currentItem()->modelType()
== PointwiseAxisItem::M_TYPE)
group_item->setEnabled(true); group_item->setEnabled(true);
}, },
this); this);
...@@ -106,7 +107,7 @@ void setAxisPresentationDefaults(SessionItem* item, const QString& type) ...@@ -106,7 +107,7 @@ void setAxisPresentationDefaults(SessionItem* item, const QString& type)
axis_item->setLowerBound(0.0); axis_item->setLowerBound(0.0);
axis_item->setUpperBound(3.0); axis_item->setUpperBound(3.0);
axis_item->setBinCount(500); axis_item->setBinCount(500);
} else if (type == "PointwiseAxis") { } else if (type == PointwiseAxisItem::M_TYPE) {
axis_item->lowerBoundItem()->setEnabled(false); axis_item->lowerBoundItem()->setEnabled(false);
axis_item->upperBoundItem()->setEnabled(false); axis_item->upperBoundItem()->setEnabled(false);
axis_item->binsItem()->setEnabled(false); axis_item->binsItem()->setEnabled(false);
......
...@@ -104,16 +104,14 @@ void InstrumentViewActions::onCloneInstrument() ...@@ -104,16 +104,14 @@ void InstrumentViewActions::onCloneInstrument()
if (auto instrument = dynamic_cast<SpecularInstrumentItem*>(item)) { if (auto instrument = dynamic_cast<SpecularInstrumentItem*>(item)) {
auto axis_group = instrument->beamItem()->inclinationAxisGroup(); auto axis_group = instrument->beamItem()->inclinationAxisGroup();
auto donor_axis = auto donor_axis = axis_group->itemOfType<PointwiseAxisItem>();
dynamic_cast<PointwiseAxisItem*>(axis_group->getItemOfType("PointwiseAxis"));
if (!donor_axis->containsNonXMLData()) if (!donor_axis->containsNonXMLData())
return; return;
auto acceptor_axis = auto acceptor_axis = dynamic_cast<SpecularInstrumentItem*>(clone)
dynamic_cast<PointwiseAxisItem*>(dynamic_cast<SpecularInstrumentItem*>(clone) ->beamItem()
->beamItem() ->inclinationAxisGroup()
->inclinationAxisGroup() ->itemOfType<PointwiseAxisItem>();
->getItemOfType("PointwiseAxis"));
acceptor_axis->init(*donor_axis->axis(), donor_axis->getUnitsLabel()); acceptor_axis->init(*donor_axis->axis(), donor_axis->getUnitsLabel());
} }
} }
......
...@@ -45,8 +45,7 @@ SpecularInstrumentItem* TestSavingSpecularData::createSpecularInstrument(Applica ...@@ -45,8 +45,7 @@ SpecularInstrumentItem* TestSavingSpecularData::createSpecularInstrument(Applica
PointwiseAxisItem* TestSavingSpecularData::createPointwiseAxisItem(SessionModel& model) PointwiseAxisItem* TestSavingSpecularData::createPointwiseAxisItem(SessionModel& model)
{ {
auto instrument_item = model.insertItem<SpecularInstrumentItem>(); auto instrument_item = model.insertItem<SpecularInstrumentItem>();
return dynamic_cast<PointwiseAxisItem*>( return getAxisGroup(instrument_item)->firstChildOfType<PointwiseAxisItem>();
getAxisGroup(instrument_item)->getChildOfType("PointwiseAxis"));
} }
GroupItem* TestSavingSpecularData::getAxisGroup(SpecularInstrumentItem* instrument) GroupItem* TestSavingSpecularData::getAxisGroup(SpecularInstrumentItem* instrument)
...@@ -82,7 +81,7 @@ TEST_F(TestSavingSpecularData, test_SpecularInsturment) ...@@ -82,7 +81,7 @@ TEST_F(TestSavingSpecularData, test_SpecularInsturment)
// explicitly switching to pointwise axis item // explicitly switching to pointwise axis item
auto axis_group = getAxisGroup(instrument); auto axis_group = getAxisGroup(instrument);
axis_group->setCurrentType("PointwiseAxis"); axis_group->setCurrentType(PointwiseAxisItem::M_TYPE);
EXPECT_EQ(models.instrumentModel()->nonXMLItems().size(), 1); EXPECT_EQ(models.instrumentModel()->nonXMLItems().size(), 1);
// hiding pointwise axis item back // hiding pointwise axis item back
...@@ -116,7 +115,7 @@ TEST_F(TestSavingSpecularData, test_InstrumentInJobItem) ...@@ -116,7 +115,7 @@ TEST_F(TestSavingSpecularData, test_InstrumentInJobItem)
// explicitly switching to pointwise axis item // explicitly switching to pointwise axis item
auto axis_group = getAxisGroup(instrument); auto axis_group = getAxisGroup(instrument);
axis_group->setCurrentType("PointwiseAxis"); axis_group->setCurrentType(PointwiseAxisItem::M_TYPE);
EXPECT_EQ(models.jobModel()->nonXMLItems().size(), 2); EXPECT_EQ(models.jobModel()->nonXMLItems().size(), 2);
OutputDataIOService service(&models); OutputDataIOService service(&models);
...@@ -202,13 +201,13 @@ TEST_F(TestSavingSpecularData, test_OutputDataIOService) ...@@ -202,13 +201,13 @@ TEST_F(TestSavingSpecularData, test_OutputDataIOService)
auto instrument2 = createSpecularInstrument(models); auto instrument2 = createSpecularInstrument(models);
auto axis_group1 = getAxisGroup(instrument1); auto axis_group1 = getAxisGroup(instrument1);
auto pointwise_axis_item1 = PointwiseAxisItem* pointwise_axis_item1 =
dynamic_cast<PointwiseAxisItem*>(axis_group1->getChildOfType("PointwiseAxis")); axis_group1->firstChildOfType<PointwiseAxisItem>();
pointwise_axis_item1->init(*m_axis, "Degrees"); pointwise_axis_item1->init(*m_axis, "Degrees");
auto axis_group2 = getAxisGroup(instrument2); auto axis_group2 = getAxisGroup(instrument2);
auto pointwise_axis_item2 = PointwiseAxisItem* pointwise_axis_item2 =
dynamic_cast<PointwiseAxisItem*>(axis_group2->getChildOfType("PointwiseAxis")); axis_group2->firstChildOfType<PointwiseAxisItem>();
PointwiseAxis tmp("y", std::vector<double>{1.0, 2.0, 3.0}); PointwiseAxis tmp("y", std::vector<double>{1.0, 2.0, 3.0});
pointwise_axis_item2->init(tmp, "Radians"); pointwise_axis_item2->init(tmp, "Radians");
...@@ -260,8 +259,8 @@ TEST_F(TestSavingSpecularData, test_CopyInstrumentToJobItem) ...@@ -260,8 +259,8 @@ TEST_F(TestSavingSpecularData, test_CopyInstrumentToJobItem)
// adding instrument and initializing pointwise axis // adding instrument and initializing pointwise axis
auto instrument = createSpecularInstrument(models); auto instrument = createSpecularInstrument(models);
auto axis_group = getAxisGroup(instrument); auto axis_group = getAxisGroup(instrument);
auto pointwise_axis_item = PointwiseAxisItem* pointwise_axis_item =
dynamic_cast<PointwiseAxisItem*>(axis_group->getChildOfType("PointwiseAxis")); axis_group->firstChildOfType<PointwiseAxisItem>();
pointwise_axis_item->init(*m_axis, "q-space"); pointwise_axis_item->init(*m_axis, "q-space");
// adding JobItem and copying instrument // adding JobItem and copying instrument
...@@ -269,8 +268,8 @@ TEST_F(TestSavingSpecularData, test_CopyInstrumentToJobItem) ...@@ -269,8 +268,8 @@ TEST_F(TestSavingSpecularData, test_CopyInstrumentToJobItem)
JobModelFunctions::setupJobItemInstrument(jobItem, instrument); JobModelFunctions::setupJobItemInstrument(jobItem, instrument);
auto job_instrument = auto job_instrument =
dynamic_cast<SpecularInstrumentItem*>(jobItem->getItem(JobItem::T_INSTRUMENT)); dynamic_cast<SpecularInstrumentItem*>(jobItem->getItem(JobItem::T_INSTRUMENT));
auto job_axis_item = dynamic_cast<PointwiseAxisItem*>( PointwiseAxisItem* job_axis_item =
getAxisGroup(job_instrument)->getChildOfType("PointwiseAxis")); getAxisGroup(job_instrument)->firstChildOfType<PointwiseAxisItem>();
// checking filenames // checking filenames
EXPECT_EQ(pointwise_axis_item->fileName(), EXPECT_EQ(pointwise_axis_item->fileName(),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment