Skip to content
Snippets Groups Projects
Commit 8ad4d93e authored by Matthias Puchner's avatar Matthias Puchner
Browse files

Simplify MaterialInPlaceForm with new MaterialModel

the materials are not deleted and created any more after closing the material selection dialog => no need to take care of material deletion
parent 8d1ed687
No related branches found
No related tags found
1 merge request!494Remove SessionModel/SessionItem from MaterialModel/MaterialItem
...@@ -77,44 +77,14 @@ void MaterialInplaceForm::selectMaterial() ...@@ -77,44 +77,14 @@ void MaterialInplaceForm::selectMaterial()
void MaterialInplaceForm::createWidgets() void MaterialInplaceForm::createWidgets()
{ {
// We can not use the DoubleDescriptors from the MaterialItem itself, because e.g. when editing auto* material = m_item->materialItem();
// a material in the material editor, the whole material model will be created from scratch.
// This means, that all SessionItems will be deleted. If we would use these SessionItems, a
// crash will happen once an access takes place.
// What not changes is the material identifier (it is not changed when
// material is edited in the material editor dialog). Therefore DoubleDescriptors have to be
// created which use the material identifier for every access.
// In the following, first the descriptors are copied
// from the MaterialItem descriptors to get the labels, tooltips etc. Then for set, get &
// path the functions are redefined to use the material identifier.
// -- Create UI for delta/beta resp. sldRe/sldIm // -- Create UI for delta/beta resp. sldRe/sldIm
DoubleDescriptors values; DoubleDescriptors values;
if (material()->hasRefractiveIndex()) { if (material->hasRefractiveIndex())
DoubleDescriptor delta = material()->delta(); values << material->delta() << material->beta();
delta.set = [=](double value) { material()->delta().set(value); }; else
delta.get = [=]() { return material()->delta(); }; values << material->sldRe() << material->sldIm();
delta.path = [=] { return GUI::Model::Path::getPathFromItem(m_item) + "/delta"; };
DoubleDescriptor beta = material()->beta();
beta.set = [=](double value) { material()->beta().set(value); };
beta.get = [=]() { return material()->beta(); };
beta.path = [=] { return GUI::Model::Path::getPathFromItem(m_item) + "/beta"; };
values << delta << beta;
} else {
DoubleDescriptor re = material()->sldRe();
re.set = [=](double value) { material()->sldRe().set(value); };
re.get = [=]() { return material()->sldRe(); };
re.path = [=] { return GUI::Model::Path::getPathFromItem(m_item) + "/re"; };
DoubleDescriptor im = material()->sldIm();
im.set = [=](double value) { material()->sldIm().set(value); };
im.get = [=]() { return material()->sldIm(); };
im.path = [=] { return GUI::Model::Path::getPathFromItem(m_item) + "/im"; };
values << re << im;
}
int col = 0; int col = 0;
for (const auto& d : values) { for (const auto& d : values) {
...@@ -130,23 +100,10 @@ void MaterialInplaceForm::createWidgets() ...@@ -130,23 +100,10 @@ void MaterialInplaceForm::createWidgets()
} }
// -- Create UI for magnetization vector // -- Create UI for magnetization vector
VectorDescriptor mag = material()->magnetizationVector(); VectorDescriptor mag = material->magnetizationVector();
mag.x.set = [=](double value) { material()->magnetizationVector().x.set(value); };
mag.x.get = [=]() { return material()->magnetizationVector().x; };
mag.x.path = [=] { return GUI::Model::Path::getPathFromItem(m_item) + "/x"; };
mag.y.set = [=](double value) { material()->magnetizationVector().y.set(value); };
mag.y.get = [=]() { return material()->magnetizationVector().y; };
mag.y.path = [=] { return GUI::Model::Path::getPathFromItem(m_item) + "/y"; };
mag.z.set = [=](double value) { material()->magnetizationVector().z.set(value); };
mag.z.get = [=]() { return material()->magnetizationVector().z; };
mag.z.path = [=] { return GUI::Model::Path::getPathFromItem(m_item) + "/z"; };
const auto setNewValue = [=](double value, DoubleDescriptor d) { const auto setNewValue = [=](double value, DoubleDescriptor d) {
m_ec->setMaterialValue(m_item, value, d); m_ec->setMaterialValue(m_item, value, d);
}; };
LayerEditorUtils::addVectorToGrid(m_layout, col, mag, setNewValue, true, false); LayerEditorUtils::addVectorToGrid(m_layout, col, mag, setNewValue, true, false);
// -- Create UI for material selection button // -- Create UI for material selection button
...@@ -158,11 +115,6 @@ void MaterialInplaceForm::createWidgets() ...@@ -158,11 +115,6 @@ void MaterialInplaceForm::createWidgets()
m_layout->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding), 0, m_layout->columnCount()); m_layout->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding), 0, m_layout->columnCount());
} }
MaterialItem* MaterialInplaceForm::material()
{
return m_item->materialItem();
}
void MaterialInplaceForm::onMaterialChanged(MaterialItem* materialItem) void MaterialInplaceForm::onMaterialChanged(MaterialItem* materialItem)
{ {
if (materialItem->identifier() == m_item->materialIdentifier()) if (materialItem->identifier() == m_item->materialIdentifier())
......
...@@ -34,7 +34,6 @@ public: ...@@ -34,7 +34,6 @@ public:
private: private:
void selectMaterial(); void selectMaterial();
void createWidgets(); void createWidgets();
MaterialItem* material();
void onMaterialChanged(MaterialItem* materialItem); void onMaterialChanged(MaterialItem* materialItem);
ItemWithMaterial* m_item; ItemWithMaterial* m_item;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment