diff --git a/GUI/Models/GUIDomainSampleVisitor.cpp b/GUI/Models/GUIDomainSampleVisitor.cpp index a496ed0c213583a783afb6c8b7a715b35b14ec6a..d02f724653a75dc2dcdfd9bdc6171d57b42aaae2 100644 --- a/GUI/Models/GUIDomainSampleVisitor.cpp +++ b/GUI/Models/GUIDomainSampleVisitor.cpp @@ -52,7 +52,7 @@ template <typename T> T* AddFormFactorItem(SessionItem* parent) { if (parent->hasModelType<ParticleItem>()) return polymorphic_cast<ParticleItem*>(parent)->setFormFactorType<T>(); - else if (parent->modelType() == "MesoCrystal") + else if (parent->hasModelType<MesoCrystalItem>()) return parent->setGroupPropertyType<T>(MesoCrystalItem::P_OUTER_SHAPE); else throw Error("AddFormFactorItem: parent is neither ParticleItem or " @@ -147,14 +147,14 @@ void GUIDomainSampleVisitor::visit(const ParticleComposition* sample) void GUIDomainSampleVisitor::visit(const MesoCrystal* sample) { - InsertIParticle(sample, "MesoCrystal"); + InsertIParticle(sample, MesoCrystalItem::M_TYPE); } void GUIDomainSampleVisitor::visit(const Crystal* sample) { SessionItem* mesocrystal_item = m_levelToParentItem[depth() - 1]; ASSERT(mesocrystal_item); - if (mesocrystal_item->modelType() != "MesoCrystal") { + if (!mesocrystal_item->hasModelType<MesoCrystalItem>()) { throw Error("GUI::Model::ObjectBuilder::visit(const Crystal*) " "-> Error. Parent is not a MesoCrystal"); } diff --git a/GUI/Models/ItemCatalog.cpp b/GUI/Models/ItemCatalog.cpp index e1818943db2bce6f1d1905389a7cc17da68ef75d..8f759d128ded1cb1bf4d58e69c8f05bb4dd7f19e 100644 --- a/GUI/Models/ItemCatalog.cpp +++ b/GUI/Models/ItemCatalog.cpp @@ -70,7 +70,7 @@ ItemCatalog::ItemCatalog() add("Rotation", create_new<TransformationItem>); add("ParticleCoreShell", create_new<ParticleCoreShellItem>); add("ParticleComposition", create_new<ParticleCompositionItem>); - add("MesoCrystal", create_new<MesoCrystalItem>); + addItem<MesoCrystalItem>(); addItem<InterferenceFunction1DLatticeItem>(); addItem<InterferenceFunction2DLatticeItem>(); addItem<InterferenceFunction2DParaCrystalItem>(); diff --git a/GUI/Models/MaterialItemUtils.cpp b/GUI/Models/MaterialItemUtils.cpp index 653d34075f1d464860334044df8298965ac3fd2a..f54bc7dc45d29cf20e8e06af9a97f308fe1af6a5 100644 --- a/GUI/Models/MaterialItemUtils.cpp +++ b/GUI/Models/MaterialItemUtils.cpp @@ -34,7 +34,7 @@ std::map<QString, QString> get_tag_map() std::map<QString, QString> result = { {"ParticleComposition", ParticleCompositionItem::T_PARTICLES}, {"ParticleLayout", ParticleLayoutItem::T_PARTICLES}, - {"MesoCrystal", MesoCrystalItem::T_BASIS_PARTICLE}}; + {MesoCrystalItem::M_TYPE, MesoCrystalItem::T_BASIS_PARTICLE}}; return result; } } // namespace diff --git a/GUI/Models/MesoCrystalItem.cpp b/GUI/Models/MesoCrystalItem.cpp index c1613cb98be0239d28855244730018e8d9d214b9..c8ed38d0fdefde4281714516596d4345bd86f8b6 100644 --- a/GUI/Models/MesoCrystalItem.cpp +++ b/GUI/Models/MesoCrystalItem.cpp @@ -52,9 +52,10 @@ const QString MesoCrystalItem::P_VECTOR_A = "First lattice vector"; const QString MesoCrystalItem::P_VECTOR_B = "Second lattice vector"; const QString MesoCrystalItem::P_VECTOR_C = "Third lattice vector"; +const QString MesoCrystalItem::M_TYPE = "MesoCrystal"; + MesoCrystalItem::MesoCrystalItem() - : SessionGraphicsItem("MesoCrystal"), - ItemWithParticles("MesoCrystal", abundance_tooltip, position_tooltip) + : SessionGraphicsItem(M_TYPE), ItemWithParticles(M_TYPE, abundance_tooltip, position_tooltip) { setToolTip("A 3D crystal structure of nanoparticles"); @@ -68,7 +69,7 @@ MesoCrystalItem::MesoCrystalItem() QStringList() << ParticleItem::M_TYPE << "ParticleCoreShell" << "ParticleComposition" - << "MesoCrystal"); + << MesoCrystalItem::M_TYPE); setDefaultTag(T_BASIS_PARTICLE); } @@ -116,7 +117,7 @@ std::unique_ptr<IParticle> MesoCrystalItem::getBasis() const } else if (childlist[i]->modelType() == "ParticleComposition") { auto* particlecomposition_item = dynamic_cast<ParticleCompositionItem*>(childlist[i]); return particlecomposition_item->createParticleComposition(); - } else if (childlist[i]->modelType() == "MesoCrystal") { + } else if (childlist[i]->hasModelType<MesoCrystalItem>()) { auto* mesocrystal_item = dynamic_cast<MesoCrystalItem*>(childlist[i]); return mesocrystal_item->createMesoCrystal(); } diff --git a/GUI/Models/MesoCrystalItem.h b/GUI/Models/MesoCrystalItem.h index eed5e98f44c2f5cc57d6912b3aea36feb67b7871..b2afdca3ec88d73b517cdc335c2a0957e48814ee 100644 --- a/GUI/Models/MesoCrystalItem.h +++ b/GUI/Models/MesoCrystalItem.h @@ -31,6 +31,8 @@ public: static const QString P_VECTOR_B; static const QString P_VECTOR_C; + static const QString M_TYPE; + MesoCrystalItem(); std::unique_ptr<MesoCrystal> createMesoCrystal() const; diff --git a/GUI/Models/ParticleCompositionItem.cpp b/GUI/Models/ParticleCompositionItem.cpp index d4820fe49592b3b702ebf9ce52f515464e2c9420..345a5e0ef59d9ecce9fda22cbdc5d566d9f4791a 100644 --- a/GUI/Models/ParticleCompositionItem.cpp +++ b/GUI/Models/ParticleCompositionItem.cpp @@ -43,7 +43,7 @@ ParticleCompositionItem::ParticleCompositionItem() QStringList() << ParticleItem::M_TYPE << "ParticleCoreShell" << "ParticleComposition" - << "MesoCrystal"); + << MesoCrystalItem::M_TYPE); setDefaultTag(T_PARTICLES); } diff --git a/GUI/Models/ParticleLayoutItem.cpp b/GUI/Models/ParticleLayoutItem.cpp index b6fe7f9dc3154f0b049f04fae3a4a1799c63cca7..50e72710be326900bc1d0f3ce99ca7060895a468 100644 --- a/GUI/Models/ParticleLayoutItem.cpp +++ b/GUI/Models/ParticleLayoutItem.cpp @@ -15,6 +15,7 @@ #include "GUI/Models/ParticleLayoutItem.h" #include "GUI/Models/InterferenceFunctionItems.h" #include "GUI/Models/Lattice2DItems.h" +#include "GUI/Models/MesoCrystalItem.h" #include "GUI/Models/ParticleItem.h" #include <QDebug> @@ -62,7 +63,7 @@ ParticleLayoutItem::ParticleLayoutItem() : SessionGraphicsItem("ParticleLayout") QStringList() << ParticleItem::M_TYPE << "ParticleCoreShell" << "ParticleComposition" - << "MesoCrystal"); + << MesoCrystalItem::M_TYPE); setDefaultTag(T_PARTICLES); registerTag( T_INTERFERENCE, 0, 1, diff --git a/GUI/Models/SessionItemUtils.cpp b/GUI/Models/SessionItemUtils.cpp index afa9a680ef475672b4bb20f57e97838548f9ac02..de3e65a2618832e74d5f48c50980bf94e6ef0218 100644 --- a/GUI/Models/SessionItemUtils.cpp +++ b/GUI/Models/SessionItemUtils.cpp @@ -15,6 +15,7 @@ #include "GUI/Models/SessionItemUtils.h" #include "GUI/Models/ExternalProperty.h" #include "GUI/Models/GroupInfoCatalog.h" +#include "GUI/Models/MesoCrystalItem.h" #include "GUI/Models/SessionGraphicsItem.h" #include <QColor> #include <QIcon> @@ -31,7 +32,7 @@ QStringList parents_with_abundance() { return QStringList() << "ParticleCoreShell" << "ParticleComposition" - << "MesoCrystal"; + << MesoCrystalItem::M_TYPE; } } // namespace diff --git a/GUI/Models/TransformToDomain.cpp b/GUI/Models/TransformToDomain.cpp index c21abb513838476bd3a799b8c68a7bbb3389a1b1..b59f9ace90f75563f8a1428b89cd01e8138c4d7c 100644 --- a/GUI/Models/TransformToDomain.cpp +++ b/GUI/Models/TransformToDomain.cpp @@ -116,7 +116,7 @@ std::unique_ptr<IParticle> GUI::Transform::ToDomain::createIParticle(const Sessi } else if (item.modelType() == "ParticleComposition") { auto& particle_composition_item = dynamic_cast<const ParticleCompositionItem&>(item); P_particle = particle_composition_item.createParticleComposition(); - } else if (item.modelType() == "MesoCrystal") { + } else if (item.hasModelType<MesoCrystalItem>()) { auto& mesocrystal_item = dynamic_cast<const MesoCrystalItem&>(item); P_particle = mesocrystal_item.createMesoCrystal(); } diff --git a/GUI/Views/RealSpaceWidgets/RealSpaceBuilder.cpp b/GUI/Views/RealSpaceWidgets/RealSpaceBuilder.cpp index 9bfd1aa03e431f046af11fde797c0d49ff065dfe..71cb8e45d937d44c84c49d070101fe234262df17 100644 --- a/GUI/Views/RealSpaceWidgets/RealSpaceBuilder.cpp +++ b/GUI/Views/RealSpaceWidgets/RealSpaceBuilder.cpp @@ -66,7 +66,7 @@ void RealSpaceBuilder::populate(RealSpaceModel* model, const SessionItem& item, else if (item.modelType() == "ParticleCoreShell") populateParticleFromParticleItem(model, item); - else if (item.modelType() == "MesoCrystal") + else if (item.hasModelType<MesoCrystalItem>()) populateParticleFromParticleItem(model, item); } @@ -148,7 +148,7 @@ void RealSpaceBuilder::populateParticleFromParticleItem(RealSpaceModel* model, auto particleComposition = particleCompositionItem->createParticleComposition(); particle3DContainer = GUI::RealSpace::BuilderUtils::particleComposition3DContainer(*particleComposition); - } else if (particleItem.modelType() == "MesoCrystal") { + } else if (particleItem.hasModelType<MesoCrystalItem>()) { auto mesoCrystalItem = dynamic_cast<const MesoCrystalItem*>(&particleItem); // If there is no particle to populate inside MesoCrystalItem if (!mesoCrystalItem->getItem(MesoCrystalItem::T_BASIS_PARTICLE)) diff --git a/GUI/Views/RealSpaceWidgets/RealSpaceBuilderUtils.cpp b/GUI/Views/RealSpaceWidgets/RealSpaceBuilderUtils.cpp index cd125f4d803efb6b11f15037e08756cb7c72895e..1d1525a106fb82c27dd0a6431ce5d40804a67610 100644 --- a/GUI/Views/RealSpaceWidgets/RealSpaceBuilderUtils.cpp +++ b/GUI/Views/RealSpaceWidgets/RealSpaceBuilderUtils.cpp @@ -237,7 +237,7 @@ GUI::RealSpace::BuilderUtils::particle3DContainerVector(const SessionItem& layou auto particleComposition = particleCompositionItem->createParticleComposition(); particle3DContainer = particleComposition3DContainer(*particleComposition, total_abundance, origin); - } else if (particleItem->modelType() == "MesoCrystal") { + } else if (particleItem->hasModelType<MesoCrystalItem>()) { auto mesoCrystalItem = dynamic_cast<const MesoCrystalItem*>(particleItem); // If there is no particle to populate inside MesoCrystalItem if (!mesoCrystalItem->getItem(MesoCrystalItem::T_BASIS_PARTICLE)) diff --git a/GUI/Views/SampleDesigner/DesignerScene.cpp b/GUI/Views/SampleDesigner/DesignerScene.cpp index 105f376c98c0116400d8e1faa7e7f060fb7d7906..80a12fcc833c25b7dcfc246b2ea4518af8ebc7cd 100644 --- a/GUI/Views/SampleDesigner/DesignerScene.cpp +++ b/GUI/Views/SampleDesigner/DesignerScene.cpp @@ -17,6 +17,7 @@ #include "GUI/Models/GUIExamplesFactory.h" #include "GUI/Models/InstrumentModel.h" #include "GUI/Models/ItemFactory.h" +#include "GUI/Models/MesoCrystalItem.h" #include "GUI/Models/ParticleCompositionItem.h" #include "GUI/Models/ParticleCoreShellItem.h" #include "GUI/Models/ParticleItem.h" @@ -363,7 +364,7 @@ void DesignerScene::onEstablishedConnection(NodeEditorConnection* connection_ptr tag = ParticleLayoutItem::T_INTERFERENCE; } else if ((parentItem->modelType() == "ParticleCoreShell" || parentItem->modelType() == "ParticleComposition" - || parentItem->modelType() == "MesoCrystal") + || parentItem->hasModelType<MesoCrystalItem>()) && connection->inputPort()->getPortType() == NodeEditorPort::TRANSFORMATION) { polymorphic_cast<ItemWithParticles*>(parentItem)->setTransformation (polymorphic_downcast<RotationItem*>(childItem)); diff --git a/GUI/Views/SampleDesigner/SampleViewFactory.cpp b/GUI/Views/SampleDesigner/SampleViewFactory.cpp index 3d55a2e5a344feb0c8ee40d9ec27c556b68c6075..4c01277dbafcf714a50fe294744fdc0a02ee2ccb 100644 --- a/GUI/Views/SampleDesigner/SampleViewFactory.cpp +++ b/GUI/Views/SampleDesigner/SampleViewFactory.cpp @@ -15,6 +15,7 @@ #include "GUI/Views/SampleDesigner/SampleViewFactory.h" #include "GUI/Models/InterferenceFunctionItems.h" #include "GUI/Models/LayerItem.h" +#include "GUI/Models/MesoCrystalItem.h" #include "GUI/Models/MultiLayerItem.h" #include "GUI/Models/ParticleItem.h" #include "GUI/Views/SampleDesigner/InterferenceFunctionViews.h" @@ -35,7 +36,7 @@ QStringList SampleViewFactory::m_valid_item_types = { "Rotation", "ParticleCoreShell", "ParticleComposition", - "MesoCrystal", + MesoCrystalItem::M_TYPE, InterferenceFunction1DLatticeItem::M_TYPE, InterferenceFunction2DLatticeItem::M_TYPE, InterferenceFunction2DParaCrystalItem::M_TYPE, @@ -68,7 +69,7 @@ IView* SampleViewFactory::createSampleView(const QString& model_type) return new ParticleCoreShellView(); } else if (model_type == "ParticleComposition") { return new ParticleCompositionView(); - } else if (model_type == "MesoCrystal") { + } else if (model_type == MesoCrystalItem::M_TYPE) { return new MesoCrystalView(); } else if (model_type == InterferenceFunction1DLatticeItem::M_TYPE) { return new InterferenceFunction1DLatticeView();