Skip to content
Snippets Groups Projects
Commit 4de1e0ed authored by Pospelov, Gennady's avatar Pospelov, Gennady
Browse files

New templated convenience function to get groupItem.

parent c43e8272
No related branches found
No related tags found
No related merge requests found
...@@ -74,11 +74,8 @@ void DetectorItem::register_resolution_function() ...@@ -74,11 +74,8 @@ void DetectorItem::register_resolution_function()
std::unique_ptr<IResolutionFunction2D> DetectorItem::createResolutionFunction() const std::unique_ptr<IResolutionFunction2D> DetectorItem::createResolutionFunction() const
{ {
auto resfuncItem auto& resfuncItem = groupItem<ResolutionFunctionItem>(DetectorItem::P_RESOLUTION_FUNCTION);
= dynamic_cast<ResolutionFunctionItem*>(getGroupItem(DetectorItem::P_RESOLUTION_FUNCTION)); return resfuncItem.createResolutionFunction(axesToDomainUnitsFactor());
Q_ASSERT(resfuncItem);
return resfuncItem->createResolutionFunction(axesToDomainUnitsFactor());
} }
void DetectorItem::addMasksToDomain(IDetector2D* detector) const void DetectorItem::addMasksToDomain(IDetector2D* detector) const
......
...@@ -47,9 +47,7 @@ BeamItem *InstrumentItem::beamItem() const ...@@ -47,9 +47,7 @@ BeamItem *InstrumentItem::beamItem() const
DetectorItem* InstrumentItem::detectorItem() const DetectorItem* InstrumentItem::detectorItem() const
{ {
DetectorItem* result = dynamic_cast<DetectorItem*>(getGroupItem(P_DETECTOR)); return &groupItem<DetectorItem>(P_DETECTOR);
Q_ASSERT(result);
return result;
} }
GroupItem* InstrumentItem::detectorGroup() GroupItem* InstrumentItem::detectorGroup()
......
...@@ -68,8 +68,8 @@ InterferenceFunctionRadialParaCrystalItem::createInterferenceFunction() const ...@@ -68,8 +68,8 @@ InterferenceFunctionRadialParaCrystalItem::createInterferenceFunction() const
result->setDomainSize(getItemValue(P_DOMAIN_SIZE).toDouble()); result->setDomainSize(getItemValue(P_DOMAIN_SIZE).toDouble());
result->setKappa(getItemValue(P_KAPPA).toDouble()); result->setKappa(getItemValue(P_KAPPA).toDouble());
auto pdfItem = dynamic_cast<FTDistribution1DItem*>(getGroupItem(P_PDF)); auto& pdfItem = groupItem<FTDistribution1DItem>(P_PDF);
result->setProbabilityDistribution(*pdfItem->createFTDistribution()); result->setProbabilityDistribution(*pdfItem.createFTDistribution());
return std::move(result); return std::move(result);
} }
...@@ -121,23 +121,20 @@ InterferenceFunction2DParaCrystalItem::InterferenceFunction2DParaCrystalItem() ...@@ -121,23 +121,20 @@ InterferenceFunction2DParaCrystalItem::InterferenceFunction2DParaCrystalItem()
std::unique_ptr<IInterferenceFunction> std::unique_ptr<IInterferenceFunction>
InterferenceFunction2DParaCrystalItem::createInterferenceFunction() const InterferenceFunction2DParaCrystalItem::createInterferenceFunction() const
{ {
auto latticeItem = dynamic_cast<Lattice2DItem*>( auto& latticeItem = groupItem<Lattice2DItem>(InterferenceFunction2DLatticeItem::P_LATTICE_TYPE);
getGroupItem(InterferenceFunction2DLatticeItem::P_LATTICE_TYPE));
std::unique_ptr<InterferenceFunction2DParaCrystal> result( std::unique_ptr<InterferenceFunction2DParaCrystal> result(
new InterferenceFunction2DParaCrystal(*latticeItem->createLattice())); new InterferenceFunction2DParaCrystal(*latticeItem.createLattice()));
result->setDampingLength(getItemValue(P_DAMPING_LENGTH).toDouble()); result->setDampingLength(getItemValue(P_DAMPING_LENGTH).toDouble());
result->setDomainSizes(getItemValue(P_DOMAIN_SIZE1).toDouble(), result->setDomainSizes(getItemValue(P_DOMAIN_SIZE1).toDouble(),
getItemValue(P_DOMAIN_SIZE2).toDouble()); getItemValue(P_DOMAIN_SIZE2).toDouble());
result->setIntegrationOverXi(getItemValue(P_XI_INTEGRATION).toBool()); result->setIntegrationOverXi(getItemValue(P_XI_INTEGRATION).toBool());
auto pdf1Item = dynamic_cast<FTDistribution2DItem*>( auto& pdf1Item = groupItem<FTDistribution2DItem>(InterferenceFunction2DParaCrystalItem::P_PDF1);
getGroupItem(InterferenceFunction2DParaCrystalItem::P_PDF1)); auto& pdf2Item = groupItem<FTDistribution2DItem>(InterferenceFunction2DParaCrystalItem::P_PDF2);
auto pdf2Item = dynamic_cast<FTDistribution2DItem*>( result->setProbabilityDistributions(*pdf1Item.createFTDistribution(),
getGroupItem(InterferenceFunction2DParaCrystalItem::P_PDF2)); *pdf2Item.createFTDistribution());
result->setProbabilityDistributions(*pdf1Item->createFTDistribution(),
*pdf2Item->createFTDistribution());
return std::move(result); return std::move(result);
} }
...@@ -217,12 +214,12 @@ InterferenceFunction2DLatticeItem::InterferenceFunction2DLatticeItem() ...@@ -217,12 +214,12 @@ InterferenceFunction2DLatticeItem::InterferenceFunction2DLatticeItem()
std::unique_ptr<IInterferenceFunction> std::unique_ptr<IInterferenceFunction>
InterferenceFunction2DLatticeItem::createInterferenceFunction() const InterferenceFunction2DLatticeItem::createInterferenceFunction() const
{ {
auto latticeItem = dynamic_cast<Lattice2DItem*>(getGroupItem(P_LATTICE_TYPE)); auto& latticeItem = groupItem<Lattice2DItem>(P_LATTICE_TYPE);
std::unique_ptr<InterferenceFunction2DLattice> result( std::unique_ptr<InterferenceFunction2DLattice> result(
new InterferenceFunction2DLattice(*latticeItem->createLattice())); new InterferenceFunction2DLattice(*latticeItem.createLattice()));
auto pdfItem = dynamic_cast<FTDecayFunction2DItem*>(getGroupItem(P_DECAY_FUNCTION)); auto& pdfItem = groupItem<FTDecayFunction2DItem>(P_DECAY_FUNCTION);
result->setDecayFunction(*pdfItem->createFTDecayFunction()); result->setDecayFunction(*pdfItem.createFTDecayFunction());
return std::move(result); return std::move(result);
} }
...@@ -42,9 +42,7 @@ MinimizerContainerItem::MinimizerContainerItem() : MinimizerItem(Constants::Mini ...@@ -42,9 +42,7 @@ MinimizerContainerItem::MinimizerContainerItem() : MinimizerItem(Constants::Mini
std::unique_ptr<IMinimizer> MinimizerContainerItem::createMinimizer() const std::unique_ptr<IMinimizer> MinimizerContainerItem::createMinimizer() const
{ {
auto minimizer = static_cast<MinimizerItem *>(getGroupItem(P_MINIMIZERS)); return groupItem<MinimizerItem>(P_MINIMIZERS).createMinimizer();
Q_ASSERT(minimizer);
return minimizer->createMinimizer();
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
......
...@@ -72,18 +72,15 @@ std::unique_ptr<ParticleDistribution> ParticleDistributionItem::createParticleDi ...@@ -72,18 +72,15 @@ std::unique_ptr<ParticleDistribution> ParticleDistributionItem::createParticleDi
if (!P_particle) if (!P_particle)
throw GUIHelpers::Error("DomainObjectBuilder::buildParticleDistribution()" throw GUIHelpers::Error("DomainObjectBuilder::buildParticleDistribution()"
" -> Error! No correct particle defined"); " -> Error! No correct particle defined");
auto distr_item = dynamic_cast<DistributionItem*>( auto& distr_item = groupItem<DistributionItem>(ParticleDistributionItem::P_DISTRIBUTION);
getGroupItem(ParticleDistributionItem::P_DISTRIBUTION));
Q_ASSERT(distr_item);
RealLimits limits = RealLimits::limitless(); RealLimits limits = RealLimits::limitless();
if(distr_item->isTag(DistributionItem::P_LIMITS)) { if(distr_item.isTag(DistributionItem::P_LIMITS)) {
auto limitsItem = dynamic_cast<RealLimitsItem*>( auto& limitsItem = distr_item.groupItem<RealLimitsItem>(DistributionItem::P_LIMITS);
distr_item->getGroupItem(DistributionItem::P_LIMITS)); limits = limitsItem.createRealLimits();
limits = limitsItem->createRealLimits();
} }
auto P_distribution = distr_item->createDistribution(); auto P_distribution = distr_item.createDistribution();
auto prop auto prop
= getItemValue(ParticleDistributionItem::P_DISTRIBUTED_PARAMETER).value<ComboProperty>(); = getItemValue(ParticleDistributionItem::P_DISTRIBUTED_PARAMETER).value<ComboProperty>();
...@@ -92,8 +89,8 @@ std::unique_ptr<ParticleDistribution> ParticleDistributionItem::createParticleDi ...@@ -92,8 +89,8 @@ std::unique_ptr<ParticleDistribution> ParticleDistributionItem::createParticleDi
std::string domain_par std::string domain_par
= ParameterTreeUtils::parameterNameToDomainName(par_name, childParticle()).toStdString(); = ParameterTreeUtils::parameterNameToDomainName(par_name, childParticle()).toStdString();
int nbr_samples = distr_item->getItemValue(DistributionItem::P_NUMBER_OF_SAMPLES).toInt(); int nbr_samples = distr_item.getItemValue(DistributionItem::P_NUMBER_OF_SAMPLES).toInt();
double sigma_factor = distr_item->getItemValue(DistributionItem::P_SIGMA_FACTOR).toDouble(); double sigma_factor = distr_item.getItemValue(DistributionItem::P_SIGMA_FACTOR).toDouble();
ParameterDistribution par_distr(domain_par, *P_distribution, nbr_samples, sigma_factor, limits); ParameterDistribution par_distr(domain_par, *P_distribution, nbr_samples, sigma_factor, limits);
auto result = GUIHelpers::make_unique<ParticleDistribution>(*P_particle, par_distr); auto result = GUIHelpers::make_unique<ParticleDistribution>(*P_particle, par_distr);
double abundance = getItemValue(ParticleItem::P_ABUNDANCE).toDouble(); double abundance = getItemValue(ParticleItem::P_ABUNDANCE).toDouble();
......
...@@ -80,10 +80,8 @@ std::unique_ptr<Particle> ParticleItem::createParticle() const ...@@ -80,10 +80,8 @@ std::unique_ptr<Particle> ParticleItem::createParticle() const
double abundance = getItemValue(ParticleItem::P_ABUNDANCE).toDouble(); double abundance = getItemValue(ParticleItem::P_ABUNDANCE).toDouble();
P_particle->setAbundance(abundance); P_particle->setAbundance(abundance);
auto ffItem = static_cast<FormFactorItem*>(getGroupItem(ParticleItem::P_FORM_FACTOR)); auto& ffItem = groupItem<FormFactorItem>(ParticleItem::P_FORM_FACTOR);
Q_ASSERT(ffItem); P_particle->setFormFactor(*ffItem.createFormFactor());
auto P_ff = ffItem->createFormFactor();
P_particle->setFormFactor(*P_ff);
TransformToDomain::setTransformationInfo(P_particle.get(), *this); TransformToDomain::setTransformationInfo(P_particle.get(), *this);
......
...@@ -97,6 +97,7 @@ public: ...@@ -97,6 +97,7 @@ public:
SessionItem *setGroupProperty(const QString &name, const QString &value) const; SessionItem *setGroupProperty(const QString &name, const QString &value) const;
SessionItem *getGroupItem(const QString &groupName) const; SessionItem *getGroupItem(const QString &groupName) const;
template<typename T> T& groupItem(const QString &groupName) const;
// access data stored in roles // access data stored in roles
virtual QVariant data(int role) const; virtual QVariant data(int role) const;
...@@ -171,4 +172,12 @@ T& SessionItem::item(const QString& tag) const ...@@ -171,4 +172,12 @@ T& SessionItem::item(const QString& tag) const
return *t; return *t;
} }
template<typename T>
T& SessionItem::groupItem(const QString& groupName) const
{
T* t = dynamic_cast<T*>(getGroupItem(groupName));
Q_ASSERT(t);
return *t;
}
#endif // SESSIONITEM_H #endif // SESSIONITEM_H
...@@ -214,17 +214,10 @@ void TransformToDomain::setRotationInfo(IParticle* result, const SessionItem& it ...@@ -214,17 +214,10 @@ void TransformToDomain::setRotationInfo(IParticle* result, const SessionItem& it
QVector<SessionItem*> children = item.childItems(); QVector<SessionItem*> children = item.childItems();
for (int i = 0; i < children.size(); ++i) { for (int i = 0; i < children.size(); ++i) {
if (children[i]->modelType() == Constants::TransformationType) { if (children[i]->modelType() == Constants::TransformationType) {
RotationItem* rot_item = dynamic_cast<RotationItem*>( auto& rot_item = children[i]->groupItem<RotationItem>(TransformationItem::P_ROT);
children[i]->getGroupItem(TransformationItem::P_ROT)); std::unique_ptr<IRotation> P_rotation(rot_item.createRotation());
if (!rot_item) { if (P_rotation)
throw GUIHelpers::Error("DomainObjectBuilder::setRotationInfo() "
"-> Error! ParticleItem's child is"
" not a rotation.");
}
std::unique_ptr<IRotation> P_rotation(rot_item->createRotation());
if (P_rotation.get()) {
result->setRotation(*P_rotation); result->setRotation(*P_rotation);
}
break; break;
} }
} }
......
...@@ -210,9 +210,8 @@ void DistributionWidget::plot_multiple_values() ...@@ -210,9 +210,8 @@ void DistributionWidget::plot_multiple_values()
RealLimits limits; RealLimits limits;
if (m_item->isTag(DistributionItem::P_LIMITS)) { if (m_item->isTag(DistributionItem::P_LIMITS)) {
auto limitsItem auto& limitsItem = m_item->groupItem<RealLimitsItem>(DistributionItem::P_LIMITS);
= dynamic_cast<RealLimitsItem*>(m_item->getGroupItem(DistributionItem::P_LIMITS)); limits = limitsItem.createRealLimits();
limits = limitsItem->createRealLimits();
} }
plotLimits(limits); plotLimits(limits);
......
...@@ -98,12 +98,7 @@ void ParticleView::update_appearance() ...@@ -98,12 +98,7 @@ void ParticleView::update_appearance()
void ParticleView::updatePixmap() void ParticleView::updatePixmap()
{ {
GroupProperty_t group_property QString ff_type = getItem()->item<GroupItem>(ParticleItem::P_FORM_FACTOR).currentType();
= dynamic_cast<GroupItem *>( QString filename = QString(":/widgetbox/images/ff_%1_32.png").arg(ff_type);
getItem()->getItem(ParticleItem::P_FORM_FACTOR))
->groupProperty();
QString current_ff_type = group_property->currentType();
QString filename
= QString(":/widgetbox/images/ff_%1_32.png").arg(current_ff_type);
m_pixmap = QPixmap(filename); m_pixmap = QPixmap(filename);
} }
...@@ -593,3 +593,6 @@ ...@@ -593,3 +593,6 @@
| 2017-03-16 15:53:02 | scgsun | Linux x86_64 | 2.7 | 93.3001 | 18.0506 | 0.7573 | 0.6264 | 3.9816 | 0.4498 | 2.7937 | 0.6295 | 2.9224 | 1.0736 | 1.9965 | 2.0363 | 0.7836 | | 2017-03-16 15:53:02 | scgsun | Linux x86_64 | 2.7 | 93.3001 | 18.0506 | 0.7573 | 0.6264 | 3.9816 | 0.4498 | 2.7937 | 0.6295 | 2.9224 | 1.0736 | 1.9965 | 2.0363 | 0.7836 |
16.03.2017 17:17:08 | domain2gui 1415 msec | gui2domain 1431 msec | realTime 1018 msec | 16.03.2017 17:17:08 | domain2gui 1415 msec | gui2domain 1431 msec | realTime 1018 msec |
# after groupProperty refactoring
17.03.2017 14:11:39 | domain2gui 1290 msec | gui2domain 1392 msec | realTime 983 msec |
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