diff --git a/GUI/coregui/Models/BeamAngleItems.cpp b/GUI/coregui/Models/BeamAngleItems.cpp index aef7898eca6cb4ec151bcef218ad8055108fb69d..18b6608e9710bee84d366559eca4ea172e592eb9 100644 --- a/GUI/coregui/Models/BeamAngleItems.cpp +++ b/GUI/coregui/Models/BeamAngleItems.cpp @@ -26,8 +26,8 @@ BeamInclinationAngleItem::BeamInclinationAngleItem() getPropertyAttribute(BeamDistributionItem::P_CACHED_VALUE).setHidden().limited(0.0, 90.0).setDecimals(3); setRegisteredProperty(BeamDistributionItem::P_CACHED_VALUE, 0.2); - auto x = getSubItems(); - ParameterizedItem *distribution = dynamic_cast<DistributionNoneItem *>(x[P_DISTRIBUTION]); + auto x = getSubItems(); + ParameterizedItem *distribution = dynamic_cast<DistributionNoneItem *>(x[P_DISTRIBUTION]); Q_ASSERT(distribution); distribution->getPropertyAttribute(DistributionNoneItem::P_VALUE).limited(0.0, 90.0).setDecimals(3); } @@ -35,7 +35,7 @@ BeamInclinationAngleItem::BeamInclinationAngleItem() std::unique_ptr<IDistribution1D> BeamInclinationAngleItem::createDistribution1D() { std::unique_ptr<IDistribution1D> P_distribution {}; - if(DistributionItem *distributionItem = dynamic_cast<DistributionItem *>(getSubItems()[P_DISTRIBUTION])) { + if(DistributionItem *distributionItem = dynamic_cast<DistributionItem *>(getGroupProperty(P_DISTRIBUTION))) { P_distribution = BeamAngleHelper::creatAngleDistribution(distributionItem); } return P_distribution; @@ -48,7 +48,7 @@ BeamAzimuthalAngleItem::BeamAzimuthalAngleItem() { setRegisteredProperty(BeamDistributionItem::P_CACHED_VALUE, 0.0); getPropertyAttribute(BeamDistributionItem::P_CACHED_VALUE).setHidden().limited(-90.0, 90.0).setDecimals(3); - ParameterizedItem *distribution = dynamic_cast<DistributionNoneItem *>(getSubItems()[P_DISTRIBUTION]); + ParameterizedItem *distribution = dynamic_cast<DistributionNoneItem *>(getGroupProperty(P_DISTRIBUTION)); Q_ASSERT(distribution); distribution->getPropertyAttribute(DistributionNoneItem::P_VALUE).limited(-90.0, 90.0).setDecimals(3); } diff --git a/GUI/coregui/Models/ModelPath.cpp b/GUI/coregui/Models/ModelPath.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f92502dead84e1aa14a8d20ff9de86e544f77b18 --- /dev/null +++ b/GUI/coregui/Models/ModelPath.cpp @@ -0,0 +1,122 @@ +// ************************************************************************** // +// +// BornAgain: simulate and fit scattering at grazing incidence +// +//! @file coregui/Models/TestItem.cpp +//! @brief Implements class TestItem +//! +//! @homepage http://www.bornagainproject.org +//! @license GNU General Public License v3 or higher (see COPYING) +//! @copyright Forschungszentrum Jülich GmbH 2015 +//! @authors Scientific Computing Group at MLZ Garching +//! @authors C. Durniak, M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke +// +// ************************************************************************** // + +#include "ModelPath.h" +#include "ParameterizedItem.h" +#include <QStringList> +#include <sstream> + + +std::vector<std::unique_ptr<IParameterTranslator>> ModelPath::m_special_translators; + +QStringList ModelPath::getParameterTreeList(const ParameterizedItem *item, QString prefix) +{ + QStringList result; + if (item->modelType() == Constants::PropertyType + && item->value().type() == QVariant::Double) { + result << prefix + item->itemName(); + } else { + if (item->hasChildItems()) { + for (auto p_child : item->childItems()) { + QString child_name = p_child->itemName(); + QString child_prefix = prefix + child_name + QString("/"); + result << getParameterTreeList(p_child, child_prefix); + } + } + } + return result; +} + +double ModelPath::getParameterValue(const ParameterizedItem *item, const QString &name) +{ + QString head = getFirstField(name); + auto p_child = item->getChildByName(head); + if (p_child) { + return getParameterValue(p_child, stripFirstField(name)); + } + if (item->isRegisteredProperty(head)) { + return item->getRegisteredProperty(head).toDouble(); + } else { + return 0.0; + } +} + +std::string ModelPath::translateParameterName(const ParameterizedItem *item, const QString &par_name) +{ + std::ostringstream result; + auto list = splitParameterName(par_name); + if (list.isEmpty()) { + return std::string(); + } + auto first_field = list[0]; + result << "/" << translateSingleName(first_field); + if (list.size() > 1) { + auto remainder = list[1]; + auto p_child = item->getChildByName(first_field); + if (p_child) { + result << translateParameterName(p_child, remainder); + } + } + return result.str(); +} + +void ModelPath::addParameterTranslator(const IParameterTranslator &translator) +{ + m_special_translators.emplace_back(translator.clone()); +} + +QStringList ModelPath::splitParameterName(const QString &par_name) +{ + QStringList result; + for (auto& translator : m_special_translators) { + result = translator->split(par_name); + if (result.size() > 0) { + return result; + } + } + result << getFirstField(par_name); + QString remainder = stripFirstField(par_name); + if (!remainder.isEmpty()) { + result << remainder; + } + return result; +} + +QString ModelPath::getFirstField(const QString &par_name) +{ + QStringList par_list = par_name.split("/"); + if (par_list.size()==0) return QString(); + return par_list.front(); +} + +QString ModelPath::stripFirstField(const QString &par_name) +{ + QStringList par_list = par_name.split("/"); + if (par_list.size()<2) return QString(); + par_list.removeFirst(); + return par_list.join("/"); +} + +std::string ModelPath::translateSingleName(const QString &name) +{ + for (auto& translator : m_special_translators) { + auto result = translator->translate(name); + if (!result.empty()) { + return result; + } + } + return name.toStdString(); +} + diff --git a/GUI/coregui/Models/ModelPath.h b/GUI/coregui/Models/ModelPath.h new file mode 100644 index 0000000000000000000000000000000000000000..aedb5577975af94bfc9aba949e74607d892d89d5 --- /dev/null +++ b/GUI/coregui/Models/ModelPath.h @@ -0,0 +1,58 @@ +// ************************************************************************** // +// +// BornAgain: simulate and fit scattering at grazing incidence +// +//! @file coregui/Models/TestItem.h +//! @brief Defines class TestItem +//! +//! @homepage http://www.bornagainproject.org +//! @license GNU General Public License v3 or higher (see COPYING) +//! @copyright Forschungszentrum Jülich GmbH 2015 +//! @authors Scientific Computing Group at MLZ Garching +//! @authors C. Durniak, M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke +// +// ************************************************************************** // + +#ifndef MODELPATH_H +#define MODELPATH_H + +#include "WinDllMacros.h" +#include "ParameterTranslators.h" +#include <string> +#include <vector> +#include <memory> + +class ParameterizedItem; +class QString; +class QStringList; + +class BA_CORE_API_ ModelPath +{ +public: + //! retrieves a list of all parameter names in the ParameterizedItem tree starting + //! with this node and prefixes them + static QStringList getParameterTreeList(const ParameterizedItem *item, QString prefix = ""); + + //! retrieve value of given parameter name + static double getParameterValue(const ParameterizedItem *item, const QString &name); + + //! translates the given parameter name to a domain parameter name + //! name should start with a child/subitem name or be a direct parameter name + static std::string translateParameterName(const ParameterizedItem *item, const QString &par_name); + + static void addParameterTranslator(const IParameterTranslator &translator); + +private: + + static QStringList splitParameterName(const QString& par_name); + + static QString getFirstField(const QString &par_name); + + static QString stripFirstField(const QString &par_name); + + static std::string translateSingleName(const QString &name); + + static std::vector<std::unique_ptr<IParameterTranslator>> m_special_translators; +}; + +#endif diff --git a/GUI/coregui/Models/ParameterizedItem.cpp b/GUI/coregui/Models/ParameterizedItem.cpp index aadd3f9b2eb190653083f95bc765021c3a2b319f..7edefaa4f3990c80c98b9cab7b8da1d92b6ea7b4 100644 --- a/GUI/coregui/Models/ParameterizedItem.cpp +++ b/GUI/coregui/Models/ParameterizedItem.cpp @@ -341,7 +341,7 @@ ParameterizedItem *ParameterizedItem::registerGroupProperty(const QString &group ParameterizedItem *ParameterizedItem::setGroupProperty(const QString &name, const QString &value) { -// qDebug() << "ParameterizedItem::setGroupProperty()" << name << value; + qDebug() << "ParameterizedItem::setGroupProperty()" << name << value; if (GroupItem *item = dynamic_cast<GroupItem *>(m_propertyItems[name])) { GroupProperty_t group_property = item->group(); if (!value.isEmpty()) { @@ -352,6 +352,11 @@ ParameterizedItem *ParameterizedItem::setGroupProperty(const QString &name, cons return nullptr; } +ParameterizedItem *ParameterizedItem::getGroupProperty(const QString &name) +{ + return setGroupProperty(name); +} + const PropertyAttribute &ParameterizedItem::getPropertyAttribute(const QString &name) const { QMap<QString, PropertyAttribute>::const_iterator it = m_property_attribute.find(name); @@ -529,12 +534,6 @@ QMap<QString, ParameterizedItem *> ParameterizedItem::getSubItems() const - - - - - - void ParameterizedItem::onPropertyChange(const QString &name) { if (mp_parent) @@ -567,66 +566,6 @@ void ParameterizedItem::print() const // qDebug() << " "; } -QStringList ParameterizedItem::getParameterTreeList(QString prefix) const -{ - QStringList result; - // add child parameters: - if (hasChildItems()) { - for (auto p_child : m_children) { - QString child_name = p_child->displayName(); - QString child_prefix = prefix + child_name + QString("/"); - result << p_child->getParameterTreeList(child_prefix); - } - } - // add subitem parameters: - /*if (m_sub_items.size() > 0) { - for (QMap<QString, ParameterizedItem *>::const_iterator it = m_sub_items.begin(); - it != m_sub_items.end(); ++it) { - const PropertyAttribute &prop_attribute = getPropertyAttribute(it.key()); - if (prop_attribute.isHidden() || prop_attribute.isDisabled()) continue; - ParameterizedItem *p_subitem = it.value(); - QString subitem_name = p_subitem->displayName(); - QString subitem_prefix = prefix + subitem_name + QString("/"); - result << p_subitem->getParameterTreeList(subitem_prefix); - } - }*/ - // add own parameters: - result << getParameterList(prefix); - return result; -} - -double ParameterizedItem::getParameterValue(const QString &name) const -{ - QString head = getFirstField(name); - auto p_child = getChildByName(head); - if (p_child) { - return p_child->getParameterValue(stripFirstField(name)); - } - if (isRegisteredProperty(head)) { - return getRegisteredProperty(head).toDouble(); - } else { - return 0.0; - } -} - -std::string ParameterizedItem::translateParameterName(const QString &par_name) const -{ - std::ostringstream result; - auto list = splitParameterName(par_name); - if (list.isEmpty()) { - return std::string(); - } - auto first_field = list[0]; - result << "/" << translateSingleName(first_field); - if (list.size() > 1) { - auto remainder = list[1]; - auto p_child = getChildByName(first_field); - if (p_child) { - result << p_child->translateParameterName(remainder); - } - } - return result.str(); -} ////! called when new SubItem appeared void ParameterizedItem::onSubItemChanged(const QString &propertyName) @@ -669,78 +608,3 @@ void ParameterizedItem::processSubItemPropertyChanged(const QString &propertyNam // throw GUIHelpers::Error("ParameterizedItem::onSubItemPropertyChanged() ->" // " Error. No such propertyItem found"); } - -QStringList ParameterizedItem::splitParameterName(const QString &par_name) const -{ - QStringList result; - for (auto& translator : m_special_translators) { - result = translator->split(par_name); - if (result.size() > 0) { - return result; - } - } - result << getFirstField(par_name); - QString remainder = stripFirstField(par_name); - if (!remainder.isEmpty()) { - result << remainder; - } - return result; -} - -QString ParameterizedItem::getFirstField(const QString &par_name) const -{ - QStringList par_list = par_name.split("/"); - if (par_list.size()==0) return QString(); - return par_list.front(); -} - -QString ParameterizedItem::stripFirstField(const QString &par_name) const -{ - QStringList par_list = par_name.split("/"); - if (par_list.size()<2) return QString(); - par_list.removeFirst(); - return par_list.join("/"); -} - -std::string ParameterizedItem::translateSingleName(const QString &name) const -{ - for (auto& translator : m_special_translators) { - auto result = translator->translate(name); - if (!result.empty()) { - return result; - } - } - return name.toStdString(); -} - -void ParameterizedItem::addParameterTranslator(const IParameterTranslator &translator) -{ - m_special_translators.emplace_back(translator.clone()); -} - -void ParameterizedItem::notifySiblings() -{ - for (auto child : m_children) { - child->onSiblingsChanged(); - } -} - -QStringList ParameterizedItem::getParameterList(QString prefix) const -{ - QStringList result; - QList<QByteArray> property_names = dynamicPropertyNames(); - for (int i = 0; i < property_names.length(); ++i) { - QString prop_name = QString(property_names[i]); - const PropertyAttribute &prop_attribute = getPropertyAttribute(prop_name); - if (prop_attribute.isHidden() || prop_attribute.isDisabled() ) continue; - QVariant variant = property(prop_name.toUtf8().constData()); - int type = variant.type(); // NEW - if (type == QVariant::UserType) { // NEW - type = variant.userType(); // NEW - } - if (type == QVariant::Double) { - result << prefix + prop_name; - } - } - return result; -} diff --git a/GUI/coregui/Models/ParameterizedItem.h b/GUI/coregui/Models/ParameterizedItem.h index 5d99beab1347cfb44f948fafc530b38aaba87672..ec3b26d31b4b1ced39f0c3f06aa1d23d7559e8d3 100644 --- a/GUI/coregui/Models/ParameterizedItem.h +++ b/GUI/coregui/Models/ParameterizedItem.h @@ -187,6 +187,9 @@ public: //! call without second parameter to get current item directly ParameterizedItem *setGroupProperty(const QString &name, const QString &value = QString()); + //! returns current item of group property + ParameterizedItem *getGroupProperty(const QString &name); + // attributes @@ -248,8 +251,8 @@ private: // the following function will be moved out of parameterized item + // signals and slots -> use signals of session model - // paths and translators -> probably separate class (e.g. ModelPath) public: @@ -268,17 +271,6 @@ public: - //! retrieves a list of all parameter names in the ParameterizedItem tree starting - //! with this node and prefixes them - QStringList getParameterTreeList(QString prefix = "") const; - - //! retrieve value of given parameter name - double getParameterValue(const QString &name) const; - - //! translates the given parameter name to a domain parameter name - //! name should start with a child/subitem name or be a direct parameter name - std::string translateParameterName(const QString &par_name) const; - signals: void propertyChanged(const QString &propertyName); void subItemChanged(const QString &propertyName); @@ -296,26 +288,13 @@ private slots: protected: - QStringList splitParameterName(const QString& par_name) const; - - QString getFirstField(const QString &par_name) const; - QString stripFirstField(const QString &par_name) const; - - virtual std::string translateSingleName(const QString &name) const; - - void addParameterTranslator(const IParameterTranslator &translator); void notifySiblings(); -private: - QStringList getParameterList(QString prefix = "") const; - - std::vector<std::unique_ptr<IParameterTranslator>> m_special_translators; - }; #endif /* PARAMETERIZEDITEM_H_ */ diff --git a/GUI/coregui/Models/ParticleCompositionItem.cpp b/GUI/coregui/Models/ParticleCompositionItem.cpp index 7af0e5ac49047567735c954a1c79f98467c81001..cacacf266d85081da0091a64419a727d64df2702 100644 --- a/GUI/coregui/Models/ParticleCompositionItem.cpp +++ b/GUI/coregui/Models/ParticleCompositionItem.cpp @@ -18,6 +18,7 @@ #include "ParticleItem.h" #include "TransformToDomain.h" #include "GUIHelpers.h" +#include "ModelPath.h" ParticleCompositionItem::ParticleCompositionItem() : ParameterizedGraphicsItem(Constants::ParticleCompositionType) @@ -25,21 +26,21 @@ ParticleCompositionItem::ParticleCompositionItem() registerProperty(ParticleItem::P_ABUNDANCE, 1.0).limited(0.0, 1.0).setDecimals(3); registerGroupProperty(ParticleItem::P_POSITION, Constants::VectorType); PositionTranslator position_translator; - addParameterTranslator(position_translator); + ModelPath::addParameterTranslator(position_translator); addToValidChildren(Constants::ParticleType, PortInfo::PORT_0); addToValidChildren(Constants::ParticleCoreShellType, PortInfo::PORT_0); addToValidChildren(Constants::ParticleCompositionType, PortInfo::PORT_0); addToValidChildren(Constants::TransformationType, PortInfo::PORT_1, 1); RotationTranslator rotation_translator; - addParameterTranslator(rotation_translator); + ModelPath::addParameterTranslator(rotation_translator); } -void ParticleCompositionItem::insertChildItem(int row, ParameterizedItem *item) +void ParticleCompositionItem::insertChildItem(int row, ParameterizedItem *item) { // int port = item->getRegisteredProperty(ParameterizedItem::OBSOLETE_P_PORT).toInt(); int port = int(item->port()); - ParameterizedItem::insertChildItem(row, item); + ParameterizedItem::insertChildItem(row, item); if (item->modelType() == Constants::ParticleType || item->modelType() == Constants::ParticleCoreShellType || item->modelType() == Constants::ParticleCompositionType) { @@ -69,7 +70,7 @@ std::unique_ptr<ParticleComposition> ParticleCompositionItem::createParticleComp double abundance = getRegisteredProperty(ParticleItem::P_ABUNDANCE).toDouble(); auto P_composition = GUIHelpers::make_unique<ParticleComposition>(); P_composition->setAbundance(abundance); - QList<ParameterizedItem *> children = childItems(); + QList<ParameterizedItem *> children = childItems(); for (int i = 0; i < children.size(); ++i) { if (children[i]->modelType() == Constants::ParticleType) { auto *particle_item = static_cast<ParticleItem*>(children[i]); diff --git a/GUI/coregui/Models/ParticleCoreShellItem.cpp b/GUI/coregui/Models/ParticleCoreShellItem.cpp index 78801221464f50b8a4560ad98fb4632acc061bec..bf0600f5bb998948c6c628d56c36b6c47c8733f0 100644 --- a/GUI/coregui/Models/ParticleCoreShellItem.cpp +++ b/GUI/coregui/Models/ParticleCoreShellItem.cpp @@ -18,6 +18,7 @@ #include "VectorItem.h" #include "TransformToDomain.h" #include "GUIHelpers.h" +#include "ModelPath.h" #include <QDebug> ParticleCoreShellItem::ParticleCoreShellItem() @@ -26,21 +27,21 @@ ParticleCoreShellItem::ParticleCoreShellItem() registerProperty(ParticleItem::P_ABUNDANCE, 1.0).limited(0.0, 1.0).setDecimals(3); registerGroupProperty(ParticleItem::P_POSITION, Constants::VectorType); PositionTranslator position_translator; - addParameterTranslator(position_translator); + ModelPath::addParameterTranslator(position_translator); addToValidChildren(Constants::ParticleType, PortInfo::PORT_0, 1); // Core particle addToValidChildren(Constants::ParticleType, PortInfo::PORT_1, 1); // Shell particle addToValidChildren(Constants::TransformationType, PortInfo::PORT_2, 1); RotationTranslator rotation_translator; - addParameterTranslator(rotation_translator); + ModelPath::addParameterTranslator(rotation_translator); } -void ParticleCoreShellItem::insertChildItem(int row, ParameterizedItem *item) +void ParticleCoreShellItem::insertChildItem(int row, ParameterizedItem *item) { // int port = item->getRegisteredProperty(ParameterizedItem::OBSOLETE_P_PORT).toInt(); int port = int(item->port()); PortInfo::EPorts first_available_particle_port = getFirstAvailableParticlePort(); - ParameterizedItem::insertChildItem(row, item); + ParameterizedItem::insertChildItem(row, item); if (item->modelType() == Constants::ParticleType && port == PortInfo::DEFAULT && first_available_particle_port != PortInfo::DEFAULT) { item->setPort(first_available_particle_port); @@ -64,7 +65,7 @@ void ParticleCoreShellItem::onPropertyChange(const QString &name) std::unique_ptr<ParticleCoreShell> ParticleCoreShellItem::createParticleCoreShell() const { double abundance = getRegisteredProperty(ParticleItem::P_ABUNDANCE).toDouble(); - auto children = childItems(); + auto children = childItems(); std::unique_ptr<Particle> P_core {}; std::unique_ptr<Particle> P_shell {}; for (int i = 0; i < children.size(); ++i) { @@ -94,7 +95,7 @@ std::unique_ptr<ParticleCoreShell> ParticleCoreShellItem::createParticleCoreShel void ParticleCoreShellItem::notifyChildParticlePortChanged() { - QList<ParameterizedItem *> children = childItems(); + QList<ParameterizedItem *> children = childItems(); int core_index = -1; int shell_index = -1; for (int i=0; i<children.size(); ++i) { @@ -115,7 +116,7 @@ ParameterizedItem::PortInfo::EPorts ParticleCoreShellItem::getFirstAvailablePart // Also when no ports are available, return the first port (core particle will then be replaced) PortInfo::EPorts result = PortInfo::PORT_0; QList<PortInfo::EPorts> used_particle_ports; - QList<ParameterizedItem *> children = childItems(); + QList<ParameterizedItem *> children = childItems(); for (auto item : children) { if (item->modelType() == Constants::ParticleType) { PortInfo::EPorts port = item->port(); diff --git a/GUI/coregui/Models/ParticleDistributionItem.cpp b/GUI/coregui/Models/ParticleDistributionItem.cpp index bcc9bcb1af2d527957e2ee1d59d9cb90d27d1bcb..946aa8c783f73aed13049a7a8dee38fcdcfae21e 100644 --- a/GUI/coregui/Models/ParticleDistributionItem.cpp +++ b/GUI/coregui/Models/ParticleDistributionItem.cpp @@ -25,6 +25,7 @@ #include "Distributions.h" #include "ComboProperty.h" #include "GUIHelpers.h" +#include "ModelPath.h" #include <QDebug> #include <memory> @@ -52,9 +53,9 @@ ParticleDistributionItem::~ParticleDistributionItem() { } -void ParticleDistributionItem::insertChildItem(int row, ParameterizedItem *item) +void ParticleDistributionItem::insertChildItem(int row, ParameterizedItem *item) { - ParameterizedItem::insertChildItem(row, item); + ParameterizedItem::insertChildItem(row, item); if (item->modelType() == Constants::ParticleType || item->modelType() == Constants::ParticleCoreShellType || item->modelType() == Constants::ParticleCompositionType) { @@ -75,7 +76,7 @@ void ParticleDistributionItem::onChildPropertyChange(ParameterizedItem *item, co std::unique_ptr<ParticleDistribution> ParticleDistributionItem::createParticleDistribution() const { - auto children = childItems(); + auto children = childItems(); if (children.size() == 0) { return nullptr; } @@ -92,7 +93,7 @@ std::unique_ptr<ParticleDistribution> ParticleDistributionItem::createParticleDi auto prop = getRegisteredProperty(ParticleDistributionItem::P_DISTRIBUTED_PARAMETER) .value<ComboProperty>(); QString par_name = prop.getValue(); - std::string domain_par = translateParameterName(par_name); + std::string domain_par = ModelPath::translateParameterName(this, par_name); int nbr_samples = distr_item->getRegisteredProperty(DistributionItem::P_NUMBER_OF_SAMPLES).toInt(); double sigma_factor @@ -138,7 +139,7 @@ void ParticleDistributionItem::updateParameterList() QStringList ParticleDistributionItem::getChildParameterNames() const { QStringList result; - QList<ParameterizedItem *> children = childItems(); + QList<ParameterizedItem *> children = childItems(); if (children.size() > 1) { qDebug() << "ParticleDistributionItem::getChildParameterNames(): " << "More than one child item"; @@ -149,7 +150,7 @@ QStringList ParticleDistributionItem::getChildParameterNames() const return result; } QString prefix = children.front()->displayName() + QString("/"); - result = children.front()->getParameterTreeList(prefix); + result = ModelPath::getParameterTreeList(children.front(), prefix); result.prepend(NO_SELECTION); return result; } diff --git a/GUI/coregui/Models/ParticleItem.cpp b/GUI/coregui/Models/ParticleItem.cpp index 95dad6ad4ffd5ee150bf187eb0c18f9672a29c5a..0de4a04cb268e66b75a29817627f0acb230aab49 100644 --- a/GUI/coregui/Models/ParticleItem.cpp +++ b/GUI/coregui/Models/ParticleItem.cpp @@ -20,6 +20,7 @@ #include "VectorItem.h" #include "TransformToDomain.h" #include "GUIHelpers.h" +#include "ModelPath.h" #include <QDebug> @@ -37,16 +38,16 @@ ParticleItem::ParticleItem() registerProperty(P_ABUNDANCE, 1.0).limited(0.0, 1.0).setDecimals(3); registerGroupProperty(P_POSITION, Constants::VectorType); PositionTranslator position_translator; - addParameterTranslator(position_translator); + ModelPath::addParameterTranslator(position_translator); addToValidChildren(Constants::TransformationType, PortInfo::PORT_0, 1); RotationTranslator rotation_translator; - addParameterTranslator(rotation_translator); + ModelPath::addParameterTranslator(rotation_translator); } -void ParticleItem::insertChildItem(int row, ParameterizedItem *item) +void ParticleItem::insertChildItem(int row, ParameterizedItem *item) { - ParameterizedItem::insertChildItem(row, item); + ParameterizedItem::insertChildItem(row, item); if (item->modelType() == Constants::TransformationType) { int port = int(item->port()); // int port = item->getRegisteredProperty(ParameterizedItem::OBSOLETE_P_PORT).toInt(); diff --git a/GUI/coregui/Models/TransformFromDomain.cpp b/GUI/coregui/Models/TransformFromDomain.cpp index 83d510696a288f5e5486ddfba61f72ed1d033585..da157edeb3c2f17222141a21b23f2cebdf152825 100644 --- a/GUI/coregui/Models/TransformFromDomain.cpp +++ b/GUI/coregui/Models/TransformFromDomain.cpp @@ -62,6 +62,7 @@ #include "RectangularDetector.h" #include "RectangularDetectorItem.h" #include "VectorItem.h" +#include "ModelPath.h" #include <QString> #include <QDebug> @@ -458,7 +459,7 @@ void TransformFromDomain::setDetectorMasks(DetectorItem *detectorItem, const GIS const DetectorMask *detectorMask = detector->getDetectorMask(); if(detectorMask && detectorMask->getNumberOfMasks()) { MaskContainerItem *containerItem = new MaskContainerItem(); - detectorItem->insertChildItem(-1, containerItem); + detectorItem->insertChildItem(-1, containerItem); for(size_t i_mask=0; i_mask<detectorMask->getNumberOfMasks(); ++i_mask) { bool mask_value(false); const Geometry::IShape2D *shape = detectorMask->getMaskShape(i_mask, mask_value); @@ -470,7 +471,7 @@ void TransformFromDomain::setDetectorMasks(DetectorItem *detectorItem, const GIS ellipseItem->setRegisteredProperty(EllipseItem::P_YRADIUS, Units::rad2deg(ellipse->getRadiusY())); ellipseItem->setRegisteredProperty(EllipseItem::P_ANGLE, Units::rad2deg(ellipse->getTheta())); ellipseItem->setRegisteredProperty(MaskItem::P_MASK_VALUE, mask_value); - containerItem->insertChildItem(0, ellipseItem); + containerItem->insertChildItem(0, ellipseItem); } else if(const Geometry::Rectangle *rectangle = dynamic_cast<const Geometry::Rectangle *>(shape)) { @@ -480,7 +481,7 @@ void TransformFromDomain::setDetectorMasks(DetectorItem *detectorItem, const GIS rectangleItem->setRegisteredProperty(RectangleItem::P_XUP, Units::rad2deg(rectangle->getXup())); rectangleItem->setRegisteredProperty(RectangleItem::P_YUP, Units::rad2deg(rectangle->getYup())); rectangleItem->setRegisteredProperty(MaskItem::P_MASK_VALUE, mask_value); - containerItem->insertChildItem(0, rectangleItem); + containerItem->insertChildItem(0, rectangleItem); } else if(const Geometry::Polygon *polygon = dynamic_cast<const Geometry::Polygon *>(shape)) { @@ -491,31 +492,31 @@ void TransformFromDomain::setDetectorMasks(DetectorItem *detectorItem, const GIS PolygonPointItem *pointItem = new PolygonPointItem(); pointItem->setRegisteredProperty(PolygonPointItem::P_POSX, Units::rad2deg(xpos[i_point])); pointItem->setRegisteredProperty(PolygonPointItem::P_POSY, Units::rad2deg(ypos[i_point])); - polygonItem->insertChildItem(-1, pointItem); + polygonItem->insertChildItem(-1, pointItem); } polygonItem->setRegisteredProperty(MaskItem::P_MASK_VALUE, mask_value); polygonItem->setRegisteredProperty(PolygonItem::P_ISCLOSED, true); - containerItem->insertChildItem(0, polygonItem); + containerItem->insertChildItem(0, polygonItem); } else if(const Geometry::VerticalLine *vline = dynamic_cast<const Geometry::VerticalLine *>(shape)) { VerticalLineItem *lineItem = new VerticalLineItem(); lineItem->setRegisteredProperty(VerticalLineItem::P_POSX, Units::rad2deg(vline->getXpos())); lineItem->setRegisteredProperty(MaskItem::P_MASK_VALUE, mask_value); - containerItem->insertChildItem(0, lineItem); + containerItem->insertChildItem(0, lineItem); } else if(const Geometry::HorizontalLine *hline = dynamic_cast<const Geometry::HorizontalLine *>(shape)) { HorizontalLineItem *lineItem = new HorizontalLineItem(); lineItem->setRegisteredProperty(HorizontalLineItem::P_POSY, Units::rad2deg(hline->getYpos())); lineItem->setRegisteredProperty(MaskItem::P_MASK_VALUE, mask_value); - containerItem->insertChildItem(0, lineItem); + containerItem->insertChildItem(0, lineItem); } else if(const Geometry::InfinitePlane *plane = dynamic_cast<const Geometry::InfinitePlane *>(shape)) { Q_UNUSED(plane); MaskAllItem *planeItem = new MaskAllItem(); planeItem->setRegisteredProperty(MaskItem::P_MASK_VALUE, mask_value); - containerItem->insertChildItem(-1, planeItem); + containerItem->insertChildItem(-1, planeItem); } else { throw GUIHelpers::Error("TransformFromDomain::setDetectorMasks() -> Error. " @@ -549,9 +550,9 @@ void TransformFromDomain::setItemFromSample(BeamDistributionItem *beamDistributi QString TransformFromDomain::translateParameterNameToGUI(ParameterizedItem *item, const QString &par_name) { - auto gui_par_list = item->getParameterTreeList(); + auto gui_par_list = ModelPath::getParameterTreeList(item); for (auto gui_par_name : gui_par_list) { - auto domain_par_name = QString::fromStdString(item->translateParameterName(gui_par_name)); + auto domain_par_name = QString::fromStdString(ModelPath::translateParameterName(item, gui_par_name)); if (domain_par_name == par_name) { return gui_par_name; } diff --git a/GUI/coregui/Views/FitWidgets/FitParameterWidget.cpp b/GUI/coregui/Views/FitWidgets/FitParameterWidget.cpp index f0d464711b5ae1c5bb2fc25c68bd92f67c328bfc..04b311f630c7d5931c59ae229e51298fa98884b8 100644 --- a/GUI/coregui/Views/FitWidgets/FitParameterWidget.cpp +++ b/GUI/coregui/Views/FitWidgets/FitParameterWidget.cpp @@ -21,6 +21,7 @@ #include "DeleteEventFilter.h" #include "MinimizerSettingsWidget.h" #include "minisplitter.h" +#include "ModelPath.h" #include <QVBoxLayout> #include <QTreeView> #include <QSplitter> @@ -153,7 +154,7 @@ void FitParameterWidget::clearParameter() { void FitParameterWidget::buildTree(QStandardItem *root, ParameterizedItem *top) { - QStringList parameterTree = top->getParameterTreeList(); + QStringList parameterTree = ModelPath::getParameterTreeList(top); foreach (const QString &str, parameterTree) { QStringList parts = str.split("/"); @@ -175,7 +176,7 @@ void FitParameterWidget::buildTree(QStandardItem *root, ParameterizedItem *top) item->setEditable(false); data->setEditable(false); if (partIndex == parts.size() - 1) { // arrived at the end - double value = top->getParameterValue(str); + double value = ModelPath::getParameterValue(top, str); data->setData(QVariant(value), Qt::EditRole); } else { item->setDragEnabled(false); @@ -229,7 +230,7 @@ void FitParameterWidget::onCustomContextMenu(const QPoint &point) { QModelIndex index = m_parameterTreeview->indexAt(point); if (index.isValid()) { ParameterizedItem *cur = m_parameterModel->itemForIndex(index); - if (cur->itemName().startsWith("FitParameter")) { + if (cur->itemName().startsWith("FitParameter")) { m_parameterTreeview->setCurrentIndex(index); m_removeAction->setEnabled(true); }