From 94062c7b182b0b3216a568e35bbbe0f20913f233 Mon Sep 17 00:00:00 2001
From: AlQuemist <alquemist@Lyriks>
Date: Mon, 30 Oct 2023 13:05:57 +0100
Subject: [PATCH] convert GUI/View/MaterialEditor/MaterialEditorDialog.ui to
 C++ code

---
 .../MaterialEditor/MaterialEditorDialog.cpp   | 243 +++++++++++++-----
 .../MaterialEditor/MaterialEditorDialog.h     |  31 ++-
 2 files changed, 205 insertions(+), 69 deletions(-)

diff --git a/GUI/View/MaterialEditor/MaterialEditorDialog.cpp b/GUI/View/MaterialEditor/MaterialEditorDialog.cpp
index ef251b8d4e3..42fe95f487f 100644
--- a/GUI/View/MaterialEditor/MaterialEditorDialog.cpp
+++ b/GUI/View/MaterialEditor/MaterialEditorDialog.cpp
@@ -23,39 +23,155 @@
 #include "GUI/View/Tool/mainwindow_constants.h"
 #include "GUI/View/Widget/ApplicationSettings.h"
 #include "GUI/View/Widget/StyledToolbar.h"
-#include "ui_MaterialEditorDialog.h"
 #include <QAction>
 #include <QColorDialog>
+#include <QDialogButtonBox>
+#include <QDoubleSpinBox>
+#include <QFormLayout>
+#include <QGroupBox>
+#include <QHeaderView>
+#include <QLabel>
+#include <QLineEdit>
 #include <QMessageBox>
 #include <QPushButton>
 #include <QSettings>
+#include <QSplitter>
+#include <QTreeView>
 #include <QVBoxLayout>
 
+
 MaterialEditorDialog::MaterialEditorDialog(SampleItem* sample, QWidget* parent)
     : QDialog(parent)
-    , m_ui(new Ui::MaterialEditorDialog)
     , m_sample(sample)
 {
+    // object name is needed to reload application settings
+    if (this->objectName().isEmpty())
+        this->setObjectName("MaterialEditorDialog");
+
     m_tmpMaterialModel.initFrom(m_sample->materialModel());
 
     m_model = new MaterialEditorModel(&m_tmpMaterialModel);
 
-    m_ui->setupUi(this);
+    setGeometry(0, 0, 1023, 469);
+    setWindowTitle("Material Editor");
+
+    auto* m_mainLayout = new QVBoxLayout(this);
+    setLayout(m_mainLayout);
+
+    auto* splitter = new QSplitter;
+    m_mainLayout->addWidget(splitter);
+    splitter->setOrientation(Qt::Horizontal);
+    splitter->setChildrenCollapsible(false);
+
+    m_treeView = new QTreeView;
+    splitter->addWidget(m_treeView);
+    m_treeView->setContextMenuPolicy(Qt::ActionsContextMenu);
+    m_treeView->setSelectionMode(QAbstractItemView::SingleSelection);
+    m_treeView->setSelectionBehavior(QAbstractItemView::SelectRows);
+    m_treeView->setRootIsDecorated(false);
+
+    m_propertiesWidget = new QWidget;
+    splitter->addWidget(m_propertiesWidget);
+    auto* verticalLayout_2 = new QVBoxLayout;
+    m_propertiesWidget->setLayout(verticalLayout_2);
+    verticalLayout_2->setSpacing(6);
+    verticalLayout_2->setContentsMargins(0, 0, 0, 0);
+
+    auto* formLayout_3 = new QFormLayout;
+    verticalLayout_2->addLayout(formLayout_3);
+    auto* label = new QLabel("Name:");
+    formLayout_3->setWidget(0, QFormLayout::LabelRole, label);
+    m_nameEdit = new QLineEdit;
+    formLayout_3->setWidget(0, QFormLayout::FieldRole, m_nameEdit);
+    auto* label_2 = new QLabel("Color:");
+    formLayout_3->setWidget(1, QFormLayout::LabelRole, label_2);
+
+    m_refractiveGroupBox = new QGroupBox("Material data (refractive index based)");
+    verticalLayout_2->addWidget(m_refractiveGroupBox);
+
+    auto* horizontalLayout = new QHBoxLayout;
+
+    m_selectColorButton = new QPushButton;
+    horizontalLayout->addWidget(m_selectColorButton);
+    QSizePolicy sizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
+    sizePolicy.setHorizontalStretch(0);
+    sizePolicy.setVerticalStretch(0);
+    sizePolicy.setHeightForWidth(m_selectColorButton->sizePolicy().hasHeightForWidth());
+    m_selectColorButton->setSizePolicy(sizePolicy);
+    m_selectColorButton->setToolTip("Choose color");
+    m_selectColorButton->setText(QString());
+
+    m_colorInfo = new QLineEdit;
+    horizontalLayout->addWidget(m_colorInfo);
+    m_colorInfo->setEnabled(false);
+    formLayout_3->setLayout(1, QFormLayout::FieldRole, horizontalLayout);
+
+    auto* formLayout_5 = new QFormLayout(m_refractiveGroupBox); // WHERE USED?
+    auto* label_3 = new QLabel("Delta:");
+    m_deltaEdit = new QLineEdit;
+    m_deltaEdit->setToolTip("Delta of refractive index (n = 1 - delta + i*beta)");
+    auto* label_4 = new QLabel("Beta:");
+    m_betaEdit = new QLineEdit;
+    m_betaEdit->setToolTip("Beta of refractive index (n = 1 - delta + i*beta)");
+    formLayout_5->addRow(label_3, m_deltaEdit);
+    formLayout_5->addRow(label_4, m_betaEdit);
+
+    m_sldGroupBox = new QGroupBox("Material data (SLD based [1/Ų])");
+    verticalLayout_2->addWidget(m_sldGroupBox);
+    auto* formLayout_4 = new QFormLayout;
+    auto* label_5 = new QLabel("Real:");
+    m_realEdit = new QLineEdit;
+    m_realEdit->setToolTip("Real part of SLD (SLD = real - i*imag), AA^{-2}");
+    auto* label_6 = new QLabel("Imaginary:");
+    m_imaginaryEdit = new QLineEdit;
+    m_imaginaryEdit->setToolTip("Imaginary part of SLD (SLD = real - i*imag), AA^{-2}");
+    formLayout_4->addRow(label_5, m_realEdit);
+    formLayout_4->addRow(label_6, m_imaginaryEdit);
+
+    auto* groupBox_3 = new QGroupBox("Magnetization");
+    verticalLayout_2->addWidget(groupBox_3);
+    auto* formLayout_2 = new QFormLayout(groupBox_3);
+
+    auto* label_7 = new QLabel("X:");
+    m_xSpinBox = new QDoubleSpinBox;
+    formLayout_2->addRow(label_7, m_xSpinBox);
+    m_xSpinBox->setSuffix(" A/m");
+    m_xSpinBox->setToolTip("x coordinate of magnetization");
+
+    auto* label_8 = new QLabel("Y:");
+    m_ySpinBox = new QDoubleSpinBox;
+    formLayout_2->addRow(label_8, m_ySpinBox);
+    m_ySpinBox->setSuffix(" A/m");
+    m_ySpinBox->setToolTip("y coordinate of magnetization");
+
+    auto* label_9 = new QLabel("Z:");
+    m_zSpinBox = new QDoubleSpinBox;
+    formLayout_2->addRow(label_9, m_zSpinBox);
+    m_zSpinBox->setSuffix(" A/m");
+    m_zSpinBox->setToolTip("z coordinate of magnetization");
+
+    auto* verticalSpacer = new QSpacerItem(20, 15, QSizePolicy::Minimum, QSizePolicy::Expanding);
+    verticalLayout_2->addItem(verticalSpacer);
+
+    auto* m_buttonBox = new QDialogButtonBox;
+    m_mainLayout->addWidget(m_buttonBox);
+    m_buttonBox->setOrientation(Qt::Horizontal);
+    m_buttonBox->setStandardButtons(QDialogButtonBox::Cancel | QDialogButtonBox::Ok);
 
     using GUI::View::NumberUtil::configScientificDoubleEdit;
-    configScientificDoubleEdit(m_ui->deltaEdit, RealLimits::limitless());
-    configScientificDoubleEdit(m_ui->betaEdit, RealLimits::limitless());
-    configScientificDoubleEdit(m_ui->realEdit, RealLimits::limitless());
-    configScientificDoubleEdit(m_ui->imaginaryEdit, RealLimits::limitless());
+    configScientificDoubleEdit(m_deltaEdit, RealLimits::limitless());
+    configScientificDoubleEdit(m_betaEdit, RealLimits::limitless());
+    configScientificDoubleEdit(m_realEdit, RealLimits::limitless());
+    configScientificDoubleEdit(m_imaginaryEdit, RealLimits::limitless());
 
     using GUI::View::NumberUtil::configSpinbox;
-    configSpinbox(m_ui->xSpinBox, 3, RealLimits::limitless());
-    configSpinbox(m_ui->ySpinBox, 3, RealLimits::limitless());
-    configSpinbox(m_ui->zSpinBox, 3, RealLimits::limitless());
+    configSpinbox(m_xSpinBox, 3, RealLimits::limitless());
+    configSpinbox(m_ySpinBox, 3, RealLimits::limitless());
+    configSpinbox(m_zSpinBox, 3, RealLimits::limitless());
 
     // Setting z-component is temporary disabled (see issue #654)
     // When implemented, rm disabling
-    m_ui->zSpinBox->setDisabled(true);
+    m_zSpinBox->setDisabled(true);
 
     auto* addRefractiveMaterialAction = new QAction("Add material (refractive index)", parent);
     addRefractiveMaterialAction->setIcon(QIcon(":/images/shape-square-plus.svg"));
@@ -80,15 +196,15 @@ MaterialEditorDialog::MaterialEditorDialog(SampleItem* sample, QWidget* parent)
     connect(m_removeMaterialAction, &QAction::triggered, this,
             &MaterialEditorDialog::removeCurrentMaterial);
 
-    m_ui->treeView->addAction(addRefractiveMaterialAction);
-    m_ui->treeView->addAction(addSldMaterialAction);
-    m_ui->treeView->addAction(m_cloneMaterialAction);
+    m_treeView->addAction(addRefractiveMaterialAction);
+    m_treeView->addAction(addSldMaterialAction);
+    m_treeView->addAction(m_cloneMaterialAction);
     auto* separator = new QAction(this);
     separator->setSeparator(true);
-    m_ui->treeView->addAction(separator);
-    m_ui->treeView->addAction(m_removeMaterialAction);
-    m_ui->treeView->setModel(m_model);
-    m_ui->treeView->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
+    m_treeView->addAction(separator);
+    m_treeView->addAction(m_removeMaterialAction);
+    m_treeView->setModel(m_model);
+    m_treeView->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
 
     auto* toolbar = new StyledToolbar(this);
     toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
@@ -96,50 +212,51 @@ MaterialEditorDialog::MaterialEditorDialog(SampleItem* sample, QWidget* parent)
     toolbar->addAction(addSldMaterialAction);
     toolbar->addAction(m_cloneMaterialAction);
     toolbar->addAction(m_removeMaterialAction);
-    m_ui->mainLayout->insertWidget(0, toolbar);
+    m_mainLayout->insertWidget(0, toolbar);
 
     GUI::Style::setResizable(this);
     appSettings->loadWindowSizeAndPos(this);
 
-    connect(m_ui->treeView->selectionModel(), &QItemSelectionModel::currentChanged, this,
+    connect(m_treeView->selectionModel(), &QItemSelectionModel::currentChanged, this,
             &MaterialEditorDialog::fill);
 
-    connect(m_ui->treeView->selectionModel(), &QItemSelectionModel::currentChanged, this,
+    connect(m_treeView->selectionModel(), &QItemSelectionModel::currentChanged, this,
             &MaterialEditorDialog::updateActionEnabling);
 
-    connect(m_ui->selectColorButton, &QPushButton::clicked, this,
-            &MaterialEditorDialog::onSelectColor);
+    connect(m_selectColorButton, &QPushButton::clicked, this, &MaterialEditorDialog::onSelectColor);
 
-    connect(m_ui->nameEdit, &QLineEdit::textEdited,
+    connect(m_nameEdit, &QLineEdit::textEdited,
             [&](const QString& t) { m_model->setMaterialItemName(currentIndex(), t); });
 
-    connect(m_ui->xSpinBox, &QDoubleSpinBox::valueChanged,
+    connect(m_xSpinBox, &QDoubleSpinBox::valueChanged,
             [&](double value) { m_model->setX(currentIndex(), value); });
 
-    connect(m_ui->ySpinBox, &QDoubleSpinBox::valueChanged,
+    connect(m_ySpinBox, &QDoubleSpinBox::valueChanged,
             [&](double value) { m_model->setY(currentIndex(), value); });
 
-    connect(m_ui->zSpinBox, &QDoubleSpinBox::valueChanged,
+    connect(m_zSpinBox, &QDoubleSpinBox::valueChanged,
             [&](double value) { m_model->setZ(currentIndex(), value); });
 
-    connect(m_ui->deltaEdit, &QLineEdit::editingFinished,
-            [&]() { m_model->setDelta(currentIndex(), m_ui->deltaEdit->text().toDouble()); });
+    connect(m_deltaEdit, &QLineEdit::editingFinished,
+            [&]() { m_model->setDelta(currentIndex(), m_deltaEdit->text().toDouble()); });
 
-    connect(m_ui->betaEdit, &QLineEdit::editingFinished,
-            [&]() { m_model->setBeta(currentIndex(), m_ui->betaEdit->text().toDouble()); });
+    connect(m_betaEdit, &QLineEdit::editingFinished,
+            [&]() { m_model->setBeta(currentIndex(), m_betaEdit->text().toDouble()); });
 
-    connect(m_ui->realEdit, &QLineEdit::editingFinished,
-            [&]() { m_model->setRe(currentIndex(), m_ui->realEdit->text().toDouble()); });
+    connect(m_realEdit, &QLineEdit::editingFinished,
+            [&]() { m_model->setRe(currentIndex(), m_realEdit->text().toDouble()); });
 
-    connect(m_ui->imaginaryEdit, &QLineEdit::editingFinished,
-            [&]() { m_model->setIm(currentIndex(), m_ui->imaginaryEdit->text().toDouble()); });
+    connect(m_imaginaryEdit, &QLineEdit::editingFinished,
+            [&]() { m_model->setIm(currentIndex(), m_imaginaryEdit->text().toDouble()); });
 
+    connect(m_buttonBox, &QDialogButtonBox::accepted, this, &MaterialEditorDialog::accept);
+    connect(m_buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
 
     if (m_model->rowCount() > 0)
-        m_ui->treeView->setCurrentIndex(m_model->first());
+        m_treeView->setCurrentIndex(m_model->first());
     else {
-        m_ui->sldGroupBox->hide();
-        m_ui->propertiesWidget->setEnabled(false);
+        m_sldGroupBox->hide();
+        m_propertiesWidget->setEnabled(false);
     }
 }
 
@@ -226,56 +343,56 @@ void MaterialEditorDialog::fill()
 {
     auto* materialItem = currentMaterialItem();
 
-    m_ui->propertiesWidget->setEnabled(materialItem != nullptr);
+    m_propertiesWidget->setEnabled(materialItem != nullptr);
     if (materialItem == nullptr) {
-        m_ui->refractiveGroupBox->show();
-        m_ui->sldGroupBox->hide();
-        for (auto* lineEdit : m_ui->propertiesWidget->findChildren<QLineEdit*>())
+        m_refractiveGroupBox->show();
+        m_sldGroupBox->hide();
+        for (auto* lineEdit : m_propertiesWidget->findChildren<QLineEdit*>())
             lineEdit->clear();
-        for (auto* spinBox : m_ui->propertiesWidget->findChildren<QDoubleSpinBox*>())
+        for (auto* spinBox : m_propertiesWidget->findChildren<QDoubleSpinBox*>())
             spinBox->clear();
         return;
     }
 
-    m_ui->refractiveGroupBox->setVisible(materialItem->hasRefractiveIndex());
-    m_ui->sldGroupBox->setVisible(!materialItem->hasRefractiveIndex());
+    m_refractiveGroupBox->setVisible(materialItem->hasRefractiveIndex());
+    m_sldGroupBox->setVisible(!materialItem->hasRefractiveIndex());
 
-    m_ui->nameEdit->setText(materialItem->matItemName());
-    m_ui->colorInfo->setText(QString("[%1, %2, %3] (%4)")
-                                 .arg(materialItem->color().red())
-                                 .arg(materialItem->color().green())
-                                 .arg(materialItem->color().blue())
-                                 .arg(materialItem->color().alpha()));
-    QPixmap pixmap(m_ui->selectColorButton->iconSize());
+    m_nameEdit->setText(materialItem->matItemName());
+    m_colorInfo->setText(QString("[%1, %2, %3] (%4)")
+                             .arg(materialItem->color().red())
+                             .arg(materialItem->color().green())
+                             .arg(materialItem->color().blue())
+                             .arg(materialItem->color().alpha()));
+    QPixmap pixmap(m_selectColorButton->iconSize());
     pixmap.fill(materialItem->color());
-    m_ui->selectColorButton->setIcon(pixmap);
+    m_selectColorButton->setIcon(pixmap);
 
     if (materialItem->hasRefractiveIndex()) {
-        m_ui->deltaEdit->setText(QString::number(materialItem->delta().value(), 'g'));
-        m_ui->betaEdit->setText(QString::number(materialItem->beta().value(), 'g'));
+        m_deltaEdit->setText(QString::number(materialItem->delta().value(), 'g'));
+        m_betaEdit->setText(QString::number(materialItem->beta().value(), 'g'));
     } else {
-        m_ui->realEdit->setText(QString::number(materialItem->sldRe().value(), 'g'));
-        m_ui->imaginaryEdit->setText(QString::number(materialItem->sldIm().value(), 'g'));
+        m_realEdit->setText(QString::number(materialItem->sldRe().value(), 'g'));
+        m_imaginaryEdit->setText(QString::number(materialItem->sldIm().value(), 'g'));
     }
 
-    m_ui->xSpinBox->setValue(materialItem->magnetization().r3().x());
-    m_ui->ySpinBox->setValue(materialItem->magnetization().r3().y());
-    m_ui->zSpinBox->setValue(materialItem->magnetization().r3().z());
+    m_xSpinBox->setValue(materialItem->magnetization().r3().x());
+    m_ySpinBox->setValue(materialItem->magnetization().r3().y());
+    m_zSpinBox->setValue(materialItem->magnetization().r3().z());
 }
 
 void MaterialEditorDialog::setCurrentMaterial(const MaterialItem* m)
 {
-    m_ui->treeView->setCurrentIndex(m_model->indexFromMaterial(m));
+    m_treeView->setCurrentIndex(m_model->indexFromMaterial(m));
 }
 
 void MaterialEditorDialog::setCurrentMaterial(const QString& identifier)
 {
-    m_ui->treeView->setCurrentIndex(m_model->indexFromMaterial(identifier));
+    m_treeView->setCurrentIndex(m_model->indexFromMaterial(identifier));
 }
 
 QModelIndex MaterialEditorDialog::currentIndex() const
 {
-    return m_ui->treeView->currentIndex();
+    return m_treeView->currentIndex();
 }
 
 QStringList MaterialEditorDialog::identifiersOfUsedMaterials() const
diff --git a/GUI/View/MaterialEditor/MaterialEditorDialog.h b/GUI/View/MaterialEditor/MaterialEditorDialog.h
index 91af8b75abc..46497eea4df 100644
--- a/GUI/View/MaterialEditor/MaterialEditorDialog.h
+++ b/GUI/View/MaterialEditor/MaterialEditorDialog.h
@@ -22,10 +22,15 @@
 class MaterialItem;
 class MaterialEditorModel;
 class SampleItem;
-
-namespace Ui {
-class MaterialEditorDialog;
-}
+// UI
+class QVBoxLayout;
+class QTreeView;
+class QPushButton;
+class QWidget;
+class QGroupBox;
+class QDoubleSpinBox;
+class QLineEdit;
+class QDialogButtonBox;
 
 //! Dialog to select a material and also to edit the list of existing materials.
 //! The dialog operates on a copy of the current materials. The original material store is only
@@ -74,10 +79,24 @@ private:
     QAction* m_cloneMaterialAction;
     QAction* m_removeMaterialAction;
 
-    Ui::MaterialEditorDialog* m_ui;
-
     MaterialEditorModel* m_model; //! Model for the left list. Works on m_tmpMaterialModel
     SampleItem* m_sample;
+
+    // UI
+    QTreeView* m_treeView;
+    QPushButton* m_selectColorButton;
+    QWidget* m_propertiesWidget;
+    QGroupBox* m_sldGroupBox;
+    QGroupBox* m_refractiveGroupBox;
+    QDoubleSpinBox* m_xSpinBox;
+    QDoubleSpinBox* m_ySpinBox;
+    QDoubleSpinBox* m_zSpinBox;
+    QLineEdit* m_deltaEdit;
+    QLineEdit* m_betaEdit;
+    QLineEdit* m_realEdit;
+    QLineEdit* m_imaginaryEdit;
+    QLineEdit* m_nameEdit;
+    QLineEdit* m_colorInfo;
 };
 
 #endif // BORNAGAIN_GUI_VIEW_MATERIALEDITOR_MATERIALEDITORDIALOG_H
-- 
GitLab