Skip to content
Snippets Groups Projects
Commit d30949d8 authored by Yurov, Dmitry's avatar Yurov, Dmitry
Browse files

MaterialItemContainer implementation

Redmine: #2142
parent 1d06e02d
No related branches found
No related tags found
No related merge requests found
......@@ -39,6 +39,7 @@
#include "LayerRoughnessItems.h"
#include "MaskItems.h"
#include "MaterialDataItems.h"
#include "MaterialItemContainer.h"
#include "MaterialItem.h"
#include "MesoCrystalItem.h"
#include "MinimizerItem.h"
......@@ -170,6 +171,7 @@ ItemCatalogue::ItemCatalogue()
add(Constants::HexagonalLatticeType, create_new<HexagonalLatticeItem>);
add(Constants::MaterialType, create_new<MaterialItem>);
add(Constants::MaterialContainerType, create_new<MaterialItemContainer>);
add(Constants::MaterialRefractiveDataType, create_new<MaterialRefractiveDataItem>);
add(Constants::MaterialSLDDataType, create_new<MaterialSLDDataItem>);
......
// ************************************************************************** //
//
// BornAgain: simulate and fit scattering at grazing incidence
//
//! @file GUI/coregui/Models/MaterialItemContainer.cpp
//! @brief Implements class MaterialItemContainer
//!
//! @homepage http://www.bornagainproject.org
//! @license GNU General Public License v3 or higher (see COPYING)
//! @copyright Forschungszentrum Jülich GmbH 2018
//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
//
// ************************************************************************** //
#include "MaterialItemContainer.h"
#include "GUIHelpers.h"
#include "MaterialItem.h"
#include "SessionModel.h"
const QString MaterialItemContainer::T_MATERIALS = "MaterialVector";
MaterialItemContainer::MaterialItemContainer()
:SessionItem(Constants::MaterialContainerType)
{
setItemName("Materials");
registerTag(T_MATERIALS, 0, -1, QStringList{Constants::MaterialType});
}
MaterialItem* MaterialItemContainer::insertCopy(MaterialItem* material_item)
{
MaterialItem* item_copy =
dynamic_cast<MaterialItem*>(model()->copyItem(material_item, this, T_MATERIALS));
item_copy->setItemValue(MaterialItem::P_IDENTIFIER, GUIHelpers::createUuid());
return item_copy;
}
MaterialItem* MaterialItemContainer::findMaterialById(QString id)
{
return const_cast<MaterialItem*>(
static_cast<const MaterialItemContainer*>(this)->findMaterialById(id));
}
const MaterialItem* MaterialItemContainer::findMaterialById(QString id) const
{
auto materials = getItems(T_MATERIALS);
for (auto item: materials) {
auto material = dynamic_cast<MaterialItem*>(item);
if (material->identifier() == id)
return material;
}
return nullptr;
}
// ************************************************************************** //
//
// BornAgain: simulate and fit scattering at grazing incidence
//
//! @file GUI/coregui/Models/MaterialItemContainer.h
//! @brief Defines class MaterialItemContainer
//!
//! @homepage http://www.bornagainproject.org
//! @license GNU General Public License v3 or higher (see COPYING)
//! @copyright Forschungszentrum Jülich GmbH 2018
//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
//
// ************************************************************************** //
#ifndef MATERIALITEMCONTAINER_H
#define MATERIALITEMCONTAINER_H
#include "SessionItem.h"
class MaterialItem;
class MaterialItemContainer : public SessionItem
{
public:
static const QString T_MATERIALS;
MaterialItemContainer();
//! Copies MaterialItem, inserts it into the container
//! and returns a pointer to the copy.
MaterialItem* insertCopy(MaterialItem* material_item);
const MaterialItem* findMaterialById(QString id) const;
MaterialItem* findMaterialById(QString id);
};
#endif // MATERIALITEMCONTAINER_H
......@@ -122,6 +122,7 @@ const ModelType SquareLatticeType = "SquareLattice";
const ModelType HexagonalLatticeType = "HexagonalLattice";
const ModelType MaterialType = "Material";
const ModelType MaterialContainerType = "MaterialContainer";
const ModelType MaterialRefractiveDataType = "MaterialRefractiveData";
const ModelType MaterialSLDDataType = "MaterialSLDData";
......
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