BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
ComponentEditor.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/coregui/Views/PropertyEditor/ComponentEditor.cpp
6 //! @brief Implements ComponentEditor class
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
19 #include <QBoxLayout>
20 #include <QGroupBox>
21 
22 namespace {
23 
24 template <typename T> T* createGroupBox(ComponentView* componentView, QString title)
25 {
26  auto box = new T(title);
27  auto boxlayout = new QVBoxLayout;
28  boxlayout->setContentsMargins(0, 0, 0, 0);
29  boxlayout->addWidget(componentView);
30  box->setLayout(boxlayout);
31  return box;
32 }
33 } // namespace
34 
35 ComponentEditor::ComponentEditor(EditorType editorType, const QString& title)
36  : m_type(editorType), m_componentView(nullptr), m_item(nullptr), m_title(title)
37 {
39 
40  auto mainLayout = new QVBoxLayout;
41  mainLayout->setSpacing(0);
42  mainLayout->setMargin(0);
43 
44  if (m_type.testFlag(GroupLayout)) {
45  auto box = createGroupBox<QGroupBox>(m_componentView, title);
46  mainLayout->addWidget(box);
47  mainLayout->setMargin(4);
48  mainLayout->addStretch();
49 
50  } else if (m_type.testFlag(InfoLayout)) {
51  auto box = createGroupBox<GroupInfoBox>(m_componentView, title);
52  connect(box, &GroupInfoBox::clicked, this, &ComponentEditor::onDialogRequest);
53  mainLayout->addWidget(box);
54  mainLayout->setMargin(4);
55  mainLayout->addStretch();
56 
57  } else {
58  mainLayout->addWidget(m_componentView);
59  }
60 
61  setLayout(mainLayout);
62 }
63 
65 {
66  m_item = item;
67  m_componentView->setItem(item);
68 }
69 
71 {
72  m_item = nullptr;
74 }
75 
77 {
78  if (!m_item)
79  m_item = item;
80  m_componentView->addItem(item);
81 }
82 
84 {
86 }
87 
89 {
90  ComponentView* result(nullptr);
91 
92  if (m_type.testFlag(Tree)) {
93  auto view = new ComponentTreeView;
94  view->setShowHeader(m_type.testFlag(T_Header));
95  view->setShowRootItem(m_type.testFlag(T_Root));
96  result = view;
97  } else {
98  auto view = new ComponentFlatView;
99  view->setShowChildren(!m_type.testFlag(W_NoChildren));
100  result = view;
101  }
102 
103  return result;
104 }
Defines ComponentEditor class.
Defines class ComponentFlatView.
Defines class ComponentTreeView.
Defines class GroupInfoBox.
void addItem(SessionItem *item)
ComponentEditor(EditorType editorType=HeaderTree, const QString &title="")
void setItem(SessionItem *item)
EditorType m_type
void dialogRequest(SessionItem *item, const QString &names)
SessionItem * m_item
ComponentView * createComponentView()
ComponentView * m_componentView
Component property widget for SessionItems.
void setShowChildren(bool show)
Component property tree for SessionItems.
void setShowHeader(bool show)
Base class for ComponentTreeView and ComponentFlatView.
Definition: ComponentView.h:24
virtual void clearEditor()=0
virtual void setItem(SessionItem *item)=0
virtual void addItem(SessionItem *)
Definition: ComponentView.h:31