From 8ad4d93e59e9dddc00e22caa452f87ce10f65e28 Mon Sep 17 00:00:00 2001 From: Matthias Puchner <github@mpuchner.de> Date: Wed, 1 Dec 2021 07:19:59 +0100 Subject: [PATCH] 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 --- .../SampleDesigner/MaterialInplaceForm.cpp | 60 ++----------------- GUI/View/SampleDesigner/MaterialInplaceForm.h | 1 - 2 files changed, 6 insertions(+), 55 deletions(-) diff --git a/GUI/View/SampleDesigner/MaterialInplaceForm.cpp b/GUI/View/SampleDesigner/MaterialInplaceForm.cpp index b5e638a814d..757ee6bff2f 100644 --- a/GUI/View/SampleDesigner/MaterialInplaceForm.cpp +++ b/GUI/View/SampleDesigner/MaterialInplaceForm.cpp @@ -77,44 +77,14 @@ void MaterialInplaceForm::selectMaterial() void MaterialInplaceForm::createWidgets() { - // We can not use the DoubleDescriptors from the MaterialItem itself, because e.g. when editing - // 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. + auto* material = m_item->materialItem(); // -- Create UI for delta/beta resp. sldRe/sldIm DoubleDescriptors values; - if (material()->hasRefractiveIndex()) { - DoubleDescriptor delta = material()->delta(); - delta.set = [=](double value) { material()->delta().set(value); }; - delta.get = [=]() { return material()->delta(); }; - 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; - } + if (material->hasRefractiveIndex()) + values << material->delta() << material->beta(); + else + values << material->sldRe() << material->sldIm(); int col = 0; for (const auto& d : values) { @@ -130,23 +100,10 @@ void MaterialInplaceForm::createWidgets() } // -- Create UI for magnetization vector - 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"; }; - + VectorDescriptor mag = material->magnetizationVector(); const auto setNewValue = [=](double value, DoubleDescriptor d) { m_ec->setMaterialValue(m_item, value, d); }; - LayerEditorUtils::addVectorToGrid(m_layout, col, mag, setNewValue, true, false); // -- Create UI for material selection button @@ -158,11 +115,6 @@ void MaterialInplaceForm::createWidgets() 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) { if (materialItem->identifier() == m_item->materialIdentifier()) diff --git a/GUI/View/SampleDesigner/MaterialInplaceForm.h b/GUI/View/SampleDesigner/MaterialInplaceForm.h index 0d1faa4fc12..bc8325fa351 100644 --- a/GUI/View/SampleDesigner/MaterialInplaceForm.h +++ b/GUI/View/SampleDesigner/MaterialInplaceForm.h @@ -34,7 +34,6 @@ public: private: void selectMaterial(); void createWidgets(); - MaterialItem* material(); void onMaterialChanged(MaterialItem* materialItem); ItemWithMaterial* m_item; -- GitLab