Newer
Older
// ************************************************************************************************
//
// BornAgain: simulate and fit reflection and scattering
//
//! @file GUI/View/SampleDesigner/SampleForm.h
//! @brief Defines class SampleForm
//!
//! @homepage http://www.bornagainproject.org
//! @license GNU General Public License v3 or higher (see COPYING)
//! @copyright Forschungszentrum Jülich GmbH 2021
//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
//
// ************************************************************************************************
#ifndef BORNAGAIN_GUI_VIEW_SAMPLEDESIGNER_SAMPLEFORM_H
#define BORNAGAIN_GUI_VIEW_SAMPLEDESIGNER_SAMPLEFORM_H
#include <QPushButton>
#include <QVBoxLayout>
class SampleEditorController;
class LayerItem;
class LayerForm;
//! Form to present/edit a sample
class SampleForm : public QWidget {
SampleForm(QWidget* parent, SampleItem* sampleItem, SampleEditorController* ec);
//! Show or hide all buttons related to structure editing (like "add layer", "remove particle")
void showInlineEditButtons(bool b);
//! Create widgets for the new layer.
void onLayerAdded(LayerItem* layerItem);
//! Call this when a layerItem has been moved to a different position.
//!
//! This updates the item's position in the layout.
void onLayerMoved(LayerItem* layerItem);
//! Call this before removing (deleting) a LayerItem.
//!
//! Any widgets related to the item will be deleted or scheduled for later deletion.
void onAboutToRemoveLayer(LayerItem* layerItem);
void updateRowVisibilities();
//! Update the presented units in all contained widgets according to current settings.
void updateUnits();
void ensureVisible(QWidget* w);
//! Show values in Angstrom or nanometers
void setUseAngstrom(bool angstrom);
bool useAngstrom() const;
//! Show values in radiants or degrees
void setUseRadiant(bool radiant);
bool useRadiant() const;
//! Shows or hides the "Add Layer" buttons.
void showAddLayerButtons(bool show);
//! Search for the next LayerForm, starting from the given widget.
//!
//! The search starts with the given widget itself If it is a LayerForm, it is returned.
//! If no following LayerForm is found, nullptr is returned.
LayerForm* findNextLayerForm(QWidget* w);
private:
QVBoxLayout* m_layout;
SampleItem* m_sampleItem; //!< Ptr is borrowed, don't delete
SampleEditorController* m_ec; //!< Ptr is borrowed, don't delete
bool m_showInlineEditButtons = false;
bool m_useAngstrom;
bool m_useRadiant;
QList<QPushButton*> m_addLayerButtons;
};
#endif // BORNAGAIN_GUI_VIEW_SAMPLEDESIGNER_SAMPLEFORM_H