diff --git a/GUI/Models/GUIDomainSampleVisitor.cpp b/GUI/Models/GUIDomainSampleVisitor.cpp index a9988cbffe912944afd2575137d287d71ec10954..6b127f2e348317f8eae8994d79fe86e7602d6ac4 100644 --- a/GUI/Models/GUIDomainSampleVisitor.cpp +++ b/GUI/Models/GUIDomainSampleVisitor.cpp @@ -138,7 +138,7 @@ void GUIDomainSampleVisitor::visit(const Particle* sample) void GUIDomainSampleVisitor::visit(const ParticleCoreShell* sample) { - InsertIParticle(sample, "ParticleCoreShell"); + InsertIParticle(sample, ParticleCoreShellItem::M_TYPE); } void GUIDomainSampleVisitor::visit(const ParticleComposition* sample) @@ -585,7 +585,7 @@ SessionItem* GUIDomainSampleVisitor::InsertIParticle(const IParticle* particle, QString tag; auto parent_type = parent->modelType(); if (model_type == ParticleItem::M_TYPE) { - if (parent_type == "ParticleCoreShell") { + if (parent_type == ParticleCoreShellItem::M_TYPE) { const ParticleCoreShell* coreshell = dynamic_cast<const ParticleCoreShell*>(m_itemToSample[parent]); ASSERT(coreshell); diff --git a/GUI/Models/ItemCatalog.cpp b/GUI/Models/ItemCatalog.cpp index 61dcfb03f60eaa433611c8d8b48b4be4d2478c66..763b088752ec9228ca882b6f7b3d6669f245eedf 100644 --- a/GUI/Models/ItemCatalog.cpp +++ b/GUI/Models/ItemCatalog.cpp @@ -68,7 +68,7 @@ ItemCatalog::ItemCatalog() add("ParticleLayout", create_new<ParticleLayoutItem>); addItem<ParticleItem>(); add("Rotation", create_new<TransformationItem>); - add("ParticleCoreShell", create_new<ParticleCoreShellItem>); + addItem<ParticleCoreShellItem>(); addItem<ParticleCompositionItem>(); addItem<MesoCrystalItem>(); addItem<InterferenceFunction1DLatticeItem>(); @@ -255,7 +255,7 @@ QStringList ItemCatalog::validTopItemTypes() LayerItem::M_TYPE, "ParticleLayout", ParticleItem::M_TYPE, - "ParticleCoreShell", + ParticleCoreShellItem::M_TYPE, ParticleCompositionItem::M_TYPE, MesoCrystalItem::M_TYPE, "Rotation", diff --git a/GUI/Models/MaterialItemUtils.cpp b/GUI/Models/MaterialItemUtils.cpp index 9c093739f87ae44ef5fb292686039659c882ae3c..1ed2d22cdf216c12416aee6436e0e696c93e7470 100644 --- a/GUI/Models/MaterialItemUtils.cpp +++ b/GUI/Models/MaterialItemUtils.cpp @@ -155,7 +155,7 @@ QVector<SessionItem*> GUI::Model::MaterialItemUtils::materialPropertyItems(Sessi particle_holders.push_back(polymorphic_cast<MesoCrystalItem*>(item)->basisParticle()); else if (item->hasModelType<ParticleItem>()) materials.append(dynamic_cast<ParticleItem*>(item)->materialPropertyItems()); - else if (item->modelType() == "ParticleCoreShell") + else if (item->hasModelType<ParticleCoreShellItem>()) materials.append(dynamic_cast<ParticleCoreShellItem*>(item)->materialPropertyItems()); else throw Error("Error in GUI::Model::MaterialItemUtils::materialProperties: cannot handle " diff --git a/GUI/Models/MesoCrystalItem.cpp b/GUI/Models/MesoCrystalItem.cpp index 7a07d2350d4f9ddc69a53b7e9cc45d5c459eb390..a7466092ee2506d769522a1c1534d5a68bca58f6 100644 --- a/GUI/Models/MesoCrystalItem.cpp +++ b/GUI/Models/MesoCrystalItem.cpp @@ -65,11 +65,8 @@ MesoCrystalItem::MesoCrystalItem() addProperty<VectorItem>(P_VECTOR_B)->setToolTip(lattice_vector2_tooltip); addProperty<VectorItem>(P_VECTOR_C)->setToolTip(lattice_vector3_tooltip); - registerTag(T_BASIS_PARTICLE, 0, 1, - QStringList() << ParticleItem::M_TYPE - << "ParticleCoreShell" - << ParticleCompositionItem::M_TYPE - << MesoCrystalItem::M_TYPE); + registerTag(T_BASIS_PARTICLE, 0, 1, {ParticleItem::M_TYPE, ParticleCoreShellItem::M_TYPE, + ParticleCompositionItem::M_TYPE, MesoCrystalItem::M_TYPE}); setDefaultTag(T_BASIS_PARTICLE); } @@ -111,10 +108,10 @@ std::unique_ptr<IParticle> MesoCrystalItem::getBasis() const if (childlist[i]->hasModelType<ParticleItem>()) { auto* particle_item = dynamic_cast<ParticleItem*>(childlist[i]); return particle_item->createParticle(); - } else if (childlist[i]->modelType() == "ParticleCoreShell") { + } else if (childlist[i]->hasModelType<ParticleCoreShellItem>()) { auto* particle_coreshell_item = dynamic_cast<ParticleCoreShellItem*>(childlist[i]); return particle_coreshell_item->createParticleCoreShell(); - } else if (childlist[i]->modelType() == ParticleCompositionItem::M_TYPE) { + } else if (childlist[i]->hasModelType<ParticleCompositionItem>()) { auto* particlecomposition_item = dynamic_cast<ParticleCompositionItem*>(childlist[i]); return particlecomposition_item->createParticleComposition(); } else if (childlist[i]->hasModelType<MesoCrystalItem>()) { diff --git a/GUI/Models/ParticleCompositionItem.cpp b/GUI/Models/ParticleCompositionItem.cpp index 7be5245e352d5c89cdd15a19b3da52aa051e6ea6..0f79826e522fba0213a3226abfd75c0e64113214 100644 --- a/GUI/Models/ParticleCompositionItem.cpp +++ b/GUI/Models/ParticleCompositionItem.cpp @@ -42,11 +42,8 @@ ParticleCompositionItem::ParticleCompositionItem() { setToolTip("Composition of particles with fixed positions"); - registerTag(T_PARTICLES, 0, -1, - QStringList() << ParticleItem::M_TYPE - << "ParticleCoreShell" - << ParticleCompositionItem::M_TYPE - << MesoCrystalItem::M_TYPE); + registerTag(T_PARTICLES, 0, -1, {ParticleItem::M_TYPE, ParticleCoreShellItem::M_TYPE, + ParticleCompositionItem::M_TYPE, MesoCrystalItem::M_TYPE}); setDefaultTag(T_PARTICLES); } @@ -62,7 +59,7 @@ std::unique_ptr<ParticleComposition> ParticleCompositionItem::createParticleComp if (P_particle) { P_composition->addParticle(*P_particle); } - } else if (childlist[i]->modelType() == "ParticleCoreShell") { + } else if (childlist[i]->hasModelType<ParticleCoreShellItem>()) { auto* particle_coreshell_item = dynamic_cast<ParticleCoreShellItem*>(childlist[i]); auto P_particle_coreshell = particle_coreshell_item->createParticleCoreShell(); if (P_particle_coreshell) { diff --git a/GUI/Models/ParticleCoreShellItem.cpp b/GUI/Models/ParticleCoreShellItem.cpp index 20532997d21efd0ab78220ab7087d44474597639..53674d7db36be6e636f9f6284ede995d3e31633c 100644 --- a/GUI/Models/ParticleCoreShellItem.cpp +++ b/GUI/Models/ParticleCoreShellItem.cpp @@ -34,9 +34,11 @@ const QString position_tooltip = "Relative position of the particle's reference const QString ParticleCoreShellItem::T_CORE = "Core tag"; const QString ParticleCoreShellItem::T_SHELL = "Shell tag"; +const QString ParticleCoreShellItem::M_TYPE = "ParticleCoreShell"; + ParticleCoreShellItem::ParticleCoreShellItem() - : SessionGraphicsItem("ParticleCoreShell"), - ItemWithParticles("ParticleCoreShell", abundance_tooltip, position_tooltip) + : SessionGraphicsItem(M_TYPE), + ItemWithParticles(M_TYPE, abundance_tooltip, position_tooltip) { setToolTip("A particle with a core/shell geometry"); diff --git a/GUI/Models/ParticleCoreShellItem.h b/GUI/Models/ParticleCoreShellItem.h index 735983f1a97d3436cf7dbfd91ac702390eb6e3ca..23b2e0df242aa010e471607cccfa4c7232b056fd 100644 --- a/GUI/Models/ParticleCoreShellItem.h +++ b/GUI/Models/ParticleCoreShellItem.h @@ -25,6 +25,8 @@ public: static const QString T_CORE; static const QString T_SHELL; + static const QString M_TYPE; + ParticleCoreShellItem(); std::unique_ptr<ParticleCoreShell> createParticleCoreShell() const; diff --git a/GUI/Models/ParticleItem.cpp b/GUI/Models/ParticleItem.cpp index 24fa01336aea23cf90264c07fe0fedeff1ce7853..16bc9dc734411987cc609444735f0bfa76bd4370 100644 --- a/GUI/Models/ParticleItem.cpp +++ b/GUI/Models/ParticleItem.cpp @@ -93,7 +93,7 @@ bool ParticleItem::isShellParticle() const if (!parent()) return false; - return parent()->modelType() == "ParticleCoreShell" + return parent()->hasModelType<ParticleCoreShellItem>() && parent()->tagFromItem(this) == ParticleCoreShellItem::T_SHELL; } diff --git a/GUI/Models/ParticleLayoutItem.cpp b/GUI/Models/ParticleLayoutItem.cpp index 4e48570baf53a32fa027299cd0b3f8e3b84f412e..eb068600efd6260d2802627bb3a04e8d99f51c41 100644 --- a/GUI/Models/ParticleLayoutItem.cpp +++ b/GUI/Models/ParticleLayoutItem.cpp @@ -17,6 +17,7 @@ #include "GUI/Models/Lattice2DItems.h" #include "GUI/Models/MesoCrystalItem.h" #include "GUI/Models/ParticleCompositionItem.h" +#include "GUI/Models/ParticleCoreShellItem.h" #include "GUI/Models/ParticleItem.h" #include <QDebug> @@ -60,11 +61,8 @@ ParticleLayoutItem::ParticleLayoutItem() : SessionGraphicsItem("ParticleLayout") getItem(P_TOTAL_DENSITY)->setDecimals(10); addProperty(P_WEIGHT, 1.0)->setToolTip(weight_tooltip); - registerTag(T_PARTICLES, 0, -1, - QStringList() << ParticleItem::M_TYPE - << "ParticleCoreShell" - << ParticleCompositionItem::M_TYPE - << MesoCrystalItem::M_TYPE); + registerTag(T_PARTICLES, 0, -1, {ParticleItem::M_TYPE, ParticleCoreShellItem::M_TYPE, + ParticleCompositionItem::M_TYPE, MesoCrystalItem::M_TYPE}); setDefaultTag(T_PARTICLES); registerTag( T_INTERFERENCE, 0, 1, diff --git a/GUI/Models/SampleValidator.cpp b/GUI/Models/SampleValidator.cpp index 071decc49dce598362d2feb760762135be1dd97e..d84b4a9655cc58b42d3767e12270e8c788e8a9a1 100644 --- a/GUI/Models/SampleValidator.cpp +++ b/GUI/Models/SampleValidator.cpp @@ -50,7 +50,7 @@ void SampleValidator::validateItem(const SessionItem* item) diagnosis = validateMultiLayerItem(polymorphic_downcast<const MultiLayerItem*>(item)); } else if (item->modelType() == "ParticleLayout") { diagnosis = validateParticleLayoutItem(item); - } else if (item->modelType() == "ParticleCoreShell") { + } else if (item->modelType() == ParticleCoreShellItem::M_TYPE) { diagnosis = validateParticleCoreShellItem(item); } else if (item->hasModelType<ParticleCompositionItem>()) { diagnosis = validateParticleCompositionItem diff --git a/GUI/Models/SessionItemUtils.cpp b/GUI/Models/SessionItemUtils.cpp index 8b99ae58be404ce452921d43c0afc8c19a44eebf..05048af49d7cdadd704a40c0f5a58232346ec912 100644 --- a/GUI/Models/SessionItemUtils.cpp +++ b/GUI/Models/SessionItemUtils.cpp @@ -17,6 +17,7 @@ #include "GUI/Models/GroupInfoCatalog.h" #include "GUI/Models/MesoCrystalItem.h" #include "GUI/Models/ParticleCompositionItem.h" +#include "GUI/Models/ParticleCoreShellItem.h" #include "GUI/Models/SessionGraphicsItem.h" #include <QColor> #include <QIcon> @@ -31,9 +32,8 @@ const GroupInfoCatalog& groupInfoCatalog() QStringList parents_with_abundance() { - return QStringList() << "ParticleCoreShell" - << ParticleCompositionItem::M_TYPE - << MesoCrystalItem::M_TYPE; + return {ParticleCoreShellItem::M_TYPE, ParticleCompositionItem::M_TYPE, + MesoCrystalItem::M_TYPE}; } } // namespace diff --git a/GUI/Models/TransformToDomain.cpp b/GUI/Models/TransformToDomain.cpp index d7530871b6835f9be12ab7134e809eb0b6cbb615..b5b23f709e5a9ac2c4dea86e2bf2b475f6595de2 100644 --- a/GUI/Models/TransformToDomain.cpp +++ b/GUI/Models/TransformToDomain.cpp @@ -110,7 +110,7 @@ std::unique_ptr<IParticle> GUI::Transform::ToDomain::createIParticle(const Sessi if (item.hasModelType<ParticleItem>()) { auto& particle_item = dynamic_cast<const ParticleItem&>(item); P_particle = particle_item.createParticle(); - } else if (item.modelType() == "ParticleCoreShell") { + } else if (item.hasModelType<ParticleCoreShellItem>()) { auto& particle_coreshell_item = dynamic_cast<const ParticleCoreShellItem&>(item); P_particle = particle_coreshell_item.createParticleCoreShell(); } else if (item.hasModelType<ParticleCompositionItem>()) { diff --git a/GUI/Views/RealSpaceWidgets/RealSpaceBuilder.cpp b/GUI/Views/RealSpaceWidgets/RealSpaceBuilder.cpp index 2abb5b8a27c3d1e3872d7d5793b960bfaa4ae7ba..7c64077659654157f73e8a378443c0e037fdf9a8 100644 --- a/GUI/Views/RealSpaceWidgets/RealSpaceBuilder.cpp +++ b/GUI/Views/RealSpaceWidgets/RealSpaceBuilder.cpp @@ -63,7 +63,7 @@ void RealSpaceBuilder::populate(RealSpaceModel* model, const SessionItem& item, else if (item.hasModelType<ParticleCompositionItem>()) populateParticleFromParticleItem(model, item); - else if (item.modelType() == "ParticleCoreShell") + else if (item.hasModelType<ParticleCoreShellItem>()) populateParticleFromParticleItem(model, item); else if (item.hasModelType<MesoCrystalItem>()) @@ -131,7 +131,7 @@ void RealSpaceBuilder::populateParticleFromParticleItem(RealSpaceModel* model, auto pItem = dynamic_cast<const ParticleItem*>(&particleItem); auto particle = pItem->createParticle(); particle3DContainer = GUI::RealSpace::BuilderUtils::singleParticle3DContainer(*particle); - } else if (particleItem.modelType() == "ParticleCoreShell") { + } else if (particleItem.hasModelType<ParticleCoreShellItem>()) { auto particleCoreShellItem = dynamic_cast<const ParticleCoreShellItem*>(&particleItem); // If there is no CORE or SHELL to populate inside ParticleCoreShellItem if (!particleCoreShellItem->getItem(ParticleCoreShellItem::T_CORE) diff --git a/GUI/Views/RealSpaceWidgets/RealSpaceBuilderUtils.cpp b/GUI/Views/RealSpaceWidgets/RealSpaceBuilderUtils.cpp index 8d24ce741b04be19ce0b7ab46ff9d4e78024cafe..abb035033ec9ef228a99c781e9cdd9fadf803fde 100644 --- a/GUI/Views/RealSpaceWidgets/RealSpaceBuilderUtils.cpp +++ b/GUI/Views/RealSpaceWidgets/RealSpaceBuilderUtils.cpp @@ -219,7 +219,7 @@ GUI::RealSpace::BuilderUtils::particle3DContainerVector(const SessionItem& layou auto pItem = dynamic_cast<const ParticleItem*>(particleItem); auto particle = pItem->createParticle(); particle3DContainer = singleParticle3DContainer(*particle, total_abundance, origin); - } else if (particleItem->modelType() == "ParticleCoreShell") { + } else if (particleItem->hasModelType<ParticleCoreShellItem>()) { auto particleCoreShellItem = dynamic_cast<const ParticleCoreShellItem*>(particleItem); // If there is no CORE or SHELL to populate inside ParticleCoreShellItem if (!particleCoreShellItem->getItem(ParticleCoreShellItem::T_CORE) diff --git a/GUI/Views/SampleDesigner/DesignerScene.cpp b/GUI/Views/SampleDesigner/DesignerScene.cpp index f01929e6734fc0febb9f5a770a88e0550b75968b..ba0bf818347717a813e81a628d3adc42352b5ca2 100644 --- a/GUI/Views/SampleDesigner/DesignerScene.cpp +++ b/GUI/Views/SampleDesigner/DesignerScene.cpp @@ -362,14 +362,14 @@ void DesignerScene::onEstablishedConnection(NodeEditorConnection* connection_ptr if (parentItem->modelType() == "ParticleLayout") { if (connection->inputPort()->getPortType() == NodeEditorPort::INTERFERENCE) tag = ParticleLayoutItem::T_INTERFERENCE; - } else if ((parentItem->modelType() == "ParticleCoreShell" + } else if ((parentItem->hasModelType<ParticleCoreShellItem>() || parentItem->hasModelType<ParticleCompositionItem>() || parentItem->hasModelType<MesoCrystalItem>()) && connection->inputPort()->getPortType() == NodeEditorPort::TRANSFORMATION) { polymorphic_cast<ItemWithParticles*>(parentItem)->setTransformation (polymorphic_downcast<RotationItem*>(childItem)); return; - } else if (parentItem->modelType() == "ParticleCoreShell") { + } else if (parentItem->hasModelType<ParticleCoreShellItem>()) { if (parentView->getInputPortIndex(connection->inputPort()) == 0) tag = ParticleCoreShellItem::T_CORE; else if (parentView->getInputPortIndex(connection->inputPort()) == 1) diff --git a/GUI/Views/SampleDesigner/SampleViewFactory.cpp b/GUI/Views/SampleDesigner/SampleViewFactory.cpp index 66ff0e18cceff2f8dfa3b321a31dbcdaa6607805..ddcb881c1b3d977858c711867a299f034aeeff8c 100644 --- a/GUI/Views/SampleDesigner/SampleViewFactory.cpp +++ b/GUI/Views/SampleDesigner/SampleViewFactory.cpp @@ -18,6 +18,7 @@ #include "GUI/Models/MesoCrystalItem.h" #include "GUI/Models/MultiLayerItem.h" #include "GUI/Models/ParticleCompositionItem.h" +#include "GUI/Models/ParticleCoreShellItem.h" #include "GUI/Models/ParticleItem.h" #include "GUI/Views/SampleDesigner/InterferenceFunctionViews.h" #include "GUI/Views/SampleDesigner/LayerView.h" @@ -35,7 +36,7 @@ QStringList SampleViewFactory::m_valid_item_types = { "ParticleLayout", ParticleItem::M_TYPE, "Rotation", - "ParticleCoreShell", + ParticleCoreShellItem::M_TYPE, ParticleCompositionItem::M_TYPE, MesoCrystalItem::M_TYPE, InterferenceFunction1DLatticeItem::M_TYPE, @@ -66,7 +67,7 @@ IView* SampleViewFactory::createSampleView(const QString& model_type) return new ParticleView(); } else if (model_type == "Rotation") { return new TransformationView(); - } else if (model_type == "ParticleCoreShell") { + } else if (model_type == ParticleCoreShellItem::M_TYPE) { return new ParticleCoreShellView(); } else if (model_type == ParticleCompositionItem::M_TYPE) { return new ParticleCompositionView();