Skip to content
Snippets Groups Projects
LayerStackForm.cpp 2.06 KiB
Newer Older
Mikhail Svechnikov's avatar
Mikhail Svechnikov committed
//  ************************************************************************************************
//
//  BornAgain: simulate and fit reflection and scattering
//
//! @file      GUI/View/Sample/LayerStackForm.cpp
//! @brief     Implements class LayerStackForm.
//!
//! @homepage  http://www.bornagainproject.org
//! @license   GNU General Public License v3 or higher (see COPYING)
//! @copyright Forschungszentrum Jülich GmbH 2024
//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
//
//  ************************************************************************************************

#include "GUI/View/Sample/LayerStackForm.h"
#include "GUI/Model/Sample/LayerStackItem.h"
#include "GUI/View/Sample/SampleEditorController.h"
#include <QPushButton>
namespace {

//! Widget with a button to add a layer or stack (the "Add layer/add stack" buttons shown between
//! items)
class AddLayerContainerWidget : public QWidget {
public:
    AddLayerContainerWidget(QWidget* parent, LayerStackItem& parentStackItem,
                            ItemWithLayers* itemBefore, SampleEditorController* ec)
        : QWidget(parent)
        , m_item(itemBefore)
    {
        auto* l = new QHBoxLayout(this);
        l->setContentsMargins(0, 0, 0, 0);
        l->addStretch();

        auto* layer_btn = new QPushButton("Add layer", this);
        l->addWidget(layer_btn);
        connect(layer_btn, &QPushButton::clicked,
                [&] { ec->addLayerItem(parentStackItem, itemBefore); });

        auto* stack_btn = new QPushButton("Add stack", this);
        l->addWidget(stack_btn);
        connect(stack_btn, &QPushButton::clicked,
                [&] { ec->addLayerItem(parentStackItem, itemBefore); });

        l->addStretch();
    }

    ItemWithLayers* m_item;
};

} // namespace

LayerStackForm::LayerStackForm(QWidget* parent, LayerStackItem* stack, SampleEditorController* ec)
    : LayerContainerForm(parent, stack, ec, "stack")
    , m_layout(new QVBoxLayout(this))
{
}

LayerStackItem* LayerStackForm::stackItem() const
{
    return dynamic_cast<LayerStackItem*>(m_item);
}