BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
MaterialModel.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/coregui/Models/MaterialModel.cpp
6 //! @brief Implements class MaterialModel
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
20 
22 {
23  setObjectName(SessionXML::MaterialModelTag);
24  if (AppSvc::materialModel() == nullptr)
25  AppSvc::subscribe(this);
26 }
27 
29 {
30  if (AppSvc::materialModel() == this)
31  AppSvc::unsubscribe(this);
32 }
33 
35 {
36  MaterialModel* result = new MaterialModel();
37  result->initFrom(this, parent);
38  return result;
39 }
40 
41 MaterialItem* MaterialModel::addRefractiveMaterial(const QString& name, double delta, double beta)
42 {
43  auto materialItem = createMaterial(name);
44  materialItem->setRefractiveData(delta, beta);
45  return materialItem;
46 }
47 
48 MaterialItem* MaterialModel::addSLDMaterial(const QString& name, double sld, double abs_term)
49 {
50  auto materialItem = createMaterial(name);
51  materialItem->setSLDData(sld, abs_term);
52  return materialItem;
53 }
54 
56 {
57  return dynamic_cast<MaterialItem*>(itemForIndex(index));
58 }
59 
61 {
62  for (auto materialItem : topItems<MaterialItem>())
63  if (materialItem->itemName() == name)
64  return materialItem;
65 
66  return nullptr;
67 }
68 
70 {
71  for (auto materialItem : topItems<MaterialItem>())
72  if (materialItem->identifier() == identifier)
73  return materialItem;
74 
75  return nullptr;
76 }
77 
78 //! Returns clone of material with given index. Clone will get unique identifier.
79 
80 MaterialItem* MaterialModel::cloneMaterial(const QModelIndex& index)
81 {
82  const auto origMaterial = materialFromIndex(index);
83  if (!origMaterial)
84  return nullptr;
85 
86  auto clonedMaterial = copyItem(origMaterial, 0);
87  clonedMaterial->setItemValue(MaterialItem::P_IDENTIFIER, GUIHelpers::createUuid());
88  clonedMaterial->setItemName(origMaterial->itemName() + " (clone)");
89  return dynamic_cast<MaterialItem*>(clonedMaterial);
90 }
91 
92 //! Creates material with name and color. Material data remains uninitialized.
93 
95 {
96  auto result = insertItem<MaterialItem>();
97  result->setItemName(name);
98 
100  result->setItemValue(MaterialItem::P_COLOR, MaterialItemUtils::colorProperty(color).variant());
101 
102  return result;
103 }
Defines class AppSvc.
Defines class GUIHelpers functions.
Defines MaterialDataItems classes.
Defines class MaterialItemUtils.
Defines class MaterialModel.
static void unsubscribe(ProjectManager *projectManager)
Definition: AppSvc.cpp:28
static MaterialModel * materialModel()
Definition: AppSvc.cpp:33
static void subscribe(ProjectManager *projectManager)
Definition: AppSvc.cpp:23
static const QString P_IDENTIFIER
Definition: MaterialItem.h:27
static const QString P_COLOR
Definition: MaterialItem.h:24
MaterialItem * addSLDMaterial(const QString &name, double sld, double abs_term)
MaterialModel(QObject *parent=nullptr)
MaterialModel * createCopy(SessionItem *parent=nullptr)
MaterialItem * materialFromName(const QString &name)
MaterialItem * createMaterial(const QString &name)
Creates material with name and color. Material data remains uninitialized.
MaterialItem * addRefractiveMaterial(const QString &name, double delta, double beta)
MaterialItem * materialFromIndex(const QModelIndex &index)
MaterialItem * cloneMaterial(const QModelIndex &index)
Returns clone of material with given index. Clone will get unique identifier.
MaterialItem * materialFromIdentifier(const QString &identifier)
virtual QModelIndex parent(const QModelIndex &child) const
T * copyItem(const T *item_to_copy, SessionItem *new_parent=0, const QString &tag="")
Definition: SessionModel.h:136
SessionItem * itemForIndex(const QModelIndex &index) const
virtual QModelIndex index(int row, int column, const QModelIndex &parent) const
virtual void initFrom(SessionModel *model, SessionItem *parent)
QString createUuid()
Definition: GUIHelpers.cpp:242
QColor suggestMaterialColor(const QString &name)
ExternalProperty colorProperty(const QColor &color)
Constructs color property from given color.
QString const & name(EShape k)
Definition: particles.cpp:21
const QString MaterialModelTag("MaterialModel")