diff --git a/GUI/View/MaterialEditor/MaterialEditorDialog.cpp b/GUI/View/MaterialEditor/MaterialEditorDialog.cpp index 845e94ebb7253bc980a35548278d6486347aae3a..1b7928266a57a823153de5bf30ababd35c544890 100644 --- a/GUI/View/MaterialEditor/MaterialEditorDialog.cpp +++ b/GUI/View/MaterialEditor/MaterialEditorDialog.cpp @@ -32,9 +32,23 @@ #include <QHBoxLayout> #include <QVBoxLayout> -MaterialEditorDialog::MaterialEditorDialog(SampleItem* sample, QWidget* parent) - : QDialog(parent) - , m_sample(sample) +//! Static caller + +QString MaterialEditorDialog::chooseMaterial(SampleItem* sample, + const QString& identifierOfPreviousMaterial) +{ + MaterialEditorDialog dialog(sample); + dialog.setCurrentMaterial(identifierOfPreviousMaterial); + if (dialog.exec() == QDialog::Accepted) + if (MaterialItem* material = dialog.currentMaterialItem()) + return material->identifier(); + + return {}; +} + + +MaterialEditorDialog::MaterialEditorDialog(SampleItem* sample) + : m_sample(sample) { setObjectName("MaterialEditorDialog"); @@ -95,26 +109,29 @@ MaterialEditorDialog::MaterialEditorDialog(SampleItem* sample, QWidget* parent) // Refractive data - m_refractiveGroupBox = new QGroupBox("Material data (refractive index based)"); - ed_vlayout->addWidget(m_refractiveGroupBox); + m_refr_group = new QGroupBox("Material data (refractive index based)"); + ed_vlayout->addWidget(m_refr_group); - auto* formLayout_5 = new QFormLayout(m_refractiveGroupBox); // WHERE USED? + auto* refr_form = new QFormLayout; + m_refr_group->setLayout(refr_form); m_deltaEdit = new QLineEdit; m_deltaEdit->setToolTip("Delta of refractive index (n = 1 - delta + i*beta)"); m_betaEdit = new QLineEdit; m_betaEdit->setToolTip("Beta of refractive index (n = 1 - delta + i*beta)"); - formLayout_5->addRow("Delta:", m_deltaEdit); - formLayout_5->addRow("Beta:", m_betaEdit); + refr_form->addRow("Delta:", m_deltaEdit); + refr_form->addRow("Beta:", m_betaEdit); - m_sldGroupBox = new QGroupBox("Material data (SLD based [1/Ų])"); - ed_vlayout->addWidget(m_sldGroupBox); - auto* formLayout_4 = new QFormLayout; + m_sld_group = new QGroupBox("Material data (SLD based [1/Ų])"); + ed_vlayout->addWidget(m_sld_group); + + auto* sld_form = new QFormLayout; + m_refr_group->setLayout(sld_form); m_realEdit = new QLineEdit; m_realEdit->setToolTip("Real part of SLD (SLD = real - i*imag), AA^{-2}"); m_imaginaryEdit = new QLineEdit; m_imaginaryEdit->setToolTip("Imaginary part of SLD (SLD = real - i*imag), AA^{-2}"); - formLayout_4->addRow("Real:", m_realEdit); - formLayout_4->addRow("Imaginary:", m_imaginaryEdit); + sld_form->addRow("Real:", m_realEdit); + sld_form->addRow("Imaginary:", m_imaginaryEdit); // Magnetization @@ -246,9 +263,11 @@ MaterialEditorDialog::MaterialEditorDialog(SampleItem* sample, QWidget* parent) if (m_model->rowCount() > 0) m_treeView->setCurrentIndex(m_model->first()); else { - m_sldGroupBox->hide(); + m_sld_group->hide(); m_editor->setEnabled(false); } + + onSelectMaterial(); } MaterialEditorDialog::~MaterialEditorDialog() @@ -262,18 +281,6 @@ void MaterialEditorDialog::accept() QDialog::accept(); } -QString MaterialEditorDialog::chooseMaterial(QWidget* parent, SampleItem* sample, - const QString& identifierOfPreviousMaterial) -{ - MaterialEditorDialog dialog(sample, parent); - dialog.setCurrentMaterial(identifierOfPreviousMaterial); - if (dialog.exec() == QDialog::Accepted) - if (MaterialItem* material = dialog.currentMaterialItem()) - return material->identifier(); - - return {}; -} - void MaterialEditorDialog::addRefractiveMaterial() { setCurrentMaterial(m_model->addRefractiveMaterialItem("unnamed", 0.0, 0.0)); @@ -293,7 +300,7 @@ void MaterialEditorDialog::cloneCurrentMaterial() void MaterialEditorDialog::removeCurrentMaterial() { MaterialItem* material = currentMaterialItem(); - if (material == nullptr) + if (!material) return; if (identifiersOfUsedMaterials().contains(material->identifier())) { @@ -313,6 +320,16 @@ void MaterialEditorDialog::onSelectColor() fill(); } +void MaterialEditorDialog::onSelectMaterial() +{ + MaterialItem* material = currentMaterialItem(); + if (!material) + return; + + m_refr_group->setVisible(material->hasRefractiveIndex()); + m_sld_group->setVisible(!material->hasRefractiveIndex()); +} + void MaterialEditorDialog::updateActionEnabling() { m_removeMaterialAction->setEnabled(currentIndex().isValid()); @@ -330,8 +347,8 @@ void MaterialEditorDialog::fill() m_editor->setEnabled(materialItem != nullptr); if (materialItem == nullptr) { - m_refractiveGroupBox->show(); - m_sldGroupBox->hide(); + m_refr_group->show(); + m_sld_group->hide(); for (auto* lineEdit : m_editor->findChildren<QLineEdit*>()) lineEdit->clear(); for (auto* spinBox : m_editor->findChildren<QDoubleSpinBox*>()) @@ -339,9 +356,6 @@ void MaterialEditorDialog::fill() return; } - m_refractiveGroupBox->setVisible(materialItem->hasRefractiveIndex()); - m_sldGroupBox->setVisible(!materialItem->hasRefractiveIndex()); - m_nameEdit->setText(materialItem->matItemName()); m_colorInfo->setText(QString("[%1, %2, %3] (%4)") .arg(materialItem->color().red()) @@ -368,11 +382,13 @@ void MaterialEditorDialog::fill() void MaterialEditorDialog::setCurrentMaterial(const MaterialItem* m) { m_treeView->setCurrentIndex(m_model->indexFromMaterial(m)); + onSelectMaterial(); } void MaterialEditorDialog::setCurrentMaterial(const QString& identifier) { m_treeView->setCurrentIndex(m_model->indexFromMaterial(identifier)); + onSelectMaterial(); } QModelIndex MaterialEditorDialog::currentIndex() const diff --git a/GUI/View/MaterialEditor/MaterialEditorDialog.h b/GUI/View/MaterialEditor/MaterialEditorDialog.h index d5a305cb9615064918971ace29d837455aa11ea9..856c1d621f6735540bb2a64979eb34172fcb1336 100644 --- a/GUI/View/MaterialEditor/MaterialEditorDialog.h +++ b/GUI/View/MaterialEditor/MaterialEditorDialog.h @@ -41,11 +41,11 @@ public: //! Use this to choose a material. identifierOfPreviousMaterial is the material which should be //! selected when opening the dialog. Returns the identifier of the newly selected material. //! Returns an empty string, if the dialog is cancelled. - static QString chooseMaterial(QWidget* parent, SampleItem* sample, + static QString chooseMaterial(SampleItem* sample, const QString& identifierOfPreviousMaterial); private: - MaterialEditorDialog(SampleItem* sample, QWidget* parent = nullptr); + MaterialEditorDialog(SampleItem* sample); ~MaterialEditorDialog() override; //! updates original material model with the edited model @@ -57,6 +57,8 @@ private: void removeCurrentMaterial(); void onSelectColor(); + void onSelectMaterial(); + void updateActionEnabling(); void fill(); void setCurrentMaterial(const MaterialItem* m); @@ -68,7 +70,6 @@ private: //! E.g. the material selected in a particle. QStringList identifiersOfUsedMaterials() const; -private: MaterialModel m_tmpMaterialModel; //! Materials for working within this dialog QAction* m_cloneMaterialAction; @@ -80,8 +81,8 @@ private: QTreeView* m_treeView; QPushButton* m_selectColorButton; QWidget* m_editor; - QGroupBox* m_sldGroupBox; - QGroupBox* m_refractiveGroupBox; + QGroupBox* m_sld_group; + QGroupBox* m_refr_group; QDoubleSpinBox* m_xSpinBox; QDoubleSpinBox* m_ySpinBox; QDoubleSpinBox* m_zSpinBox; diff --git a/GUI/View/Sample/MaterialInplaceForm.cpp b/GUI/View/Sample/MaterialInplaceForm.cpp index 368de35d651c7f32af9dc85b980c9e095ab8533d..3cd18ab5fd4566abac1765f098226789ddc45bc2 100644 --- a/GUI/View/Sample/MaterialInplaceForm.cpp +++ b/GUI/View/Sample/MaterialInplaceForm.cpp @@ -59,7 +59,7 @@ void MaterialInplaceForm::selectMaterial() { const auto materialsBackup = GUI::Util::createBackup(&m_ec->sampleItem()->materialModel()); const QString newMaterialIdentifier = MaterialEditorDialog::chooseMaterial( - GUI::Global::mainWindow, m_ec->sampleItem(), m_item->materialIdentifier()); + m_ec->sampleItem(), m_item->materialIdentifier()); if (!newMaterialIdentifier.isEmpty() && newMaterialIdentifier != m_item->materialIdentifier()) { itemWithMaterial()->materialItem()->disconnect(this);