BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
MaterialEditorToolBar.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/coregui/Views/MaterialEditor/MaterialEditorToolBar.cpp
6 //! @brief Implements class MaterialEditorToolBar
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 
18 #include <QAction>
19 #include <QItemSelectionModel>
20 #include <QListView>
21 #include <QMenu>
22 #include <QVariant>
23 
24 namespace {
25 const int toolbar_icon_size = 32;
26 }
27 
29  : QToolBar(parent)
30  , m_materialModel(materialModel)
31  , m_selectionModel(nullptr)
32  , m_newMaterialAction(nullptr)
33  , m_cloneMaterialAction(nullptr)
34  , m_removeMaterialAction(nullptr)
35 {
36  setIconSize(QSize(toolbar_icon_size, toolbar_icon_size));
37  setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
38 
39  m_newMaterialAction = new QAction("Add", parent);
40  m_newMaterialAction->setIcon(QIcon(":/images/shape-square-plus.svg"));
41  m_newMaterialAction->setToolTip("Add new material");
42  connect(m_newMaterialAction, &QAction::triggered, this,
44  addAction(m_newMaterialAction);
45 
46  m_cloneMaterialAction = new QAction("Clone", parent);
47  m_cloneMaterialAction->setIcon(QIcon(":/images/content-copy.svg"));
48  m_cloneMaterialAction->setToolTip("Clone selected material");
49  connect(m_cloneMaterialAction, &QAction::triggered, this,
51  addAction(m_cloneMaterialAction);
52 
53  m_removeMaterialAction = new QAction("Remove", parent);
54  m_removeMaterialAction->setIcon(QIcon(":/images/delete.svg"));
55  m_removeMaterialAction->setToolTip("Remove selected material");
56  connect(m_removeMaterialAction, &QAction::triggered, this,
58  addAction(m_removeMaterialAction);
59 }
60 
61 void MaterialEditorToolBar::setSelectionModel(QItemSelectionModel* selectionModel)
62 {
63  m_selectionModel = selectionModel;
64 }
65 
67 {
68  QListView* listView = qobject_cast<QListView*>(sender());
69  ASSERT(listView);
70  QMenu menu;
71  initItemContextMenu(menu);
72  menu.exec(listView->mapToGlobal(point));
73 }
74 
76 {
77  m_materialModel->addRefractiveMaterial("unnamed", 0.0, 0.0); // vacuum
78 }
79 
81 {
82  auto selected = m_selectionModel->currentIndex();
83 
84  if (selected.isValid())
85  m_materialModel->cloneMaterial(selected);
86 }
87 
89 {
92 
93  auto selected = m_selectionModel->currentIndex();
94 
95  if (selected.isValid())
96  m_materialModel->removeRows(selected.row(), 1, selected.parent());
97 }
98 
100 {
101  menu.addAction(m_newMaterialAction);
102  menu.addAction(m_cloneMaterialAction);
103  menu.addSeparator();
104  menu.addAction(m_removeMaterialAction);
105 }
#define ASSERT(condition)
Definition: Assert.h:31
Defines class MaterialEditorToolBar.
Defines class MaterialItem.
Defines class MaterialModel.
MaterialEditorToolBar(MaterialModel *materialModel, QWidget *parent=nullptr)
void setSelectionModel(QItemSelectionModel *selectionModel)
QItemSelectionModel * m_selectionModel
void onCustomContextMenuRequested(const QPoint &point)
MaterialModel * m_materialModel
void initItemContextMenu(QMenu &menu)
MaterialItem * addRefractiveMaterial(const QString &name, double delta, double beta)
MaterialItem * cloneMaterial(const QModelIndex &index)
Returns clone of material with given index. Clone will get unique identifier.
virtual bool removeRows(int row, int count, const QModelIndex &parent)
const int toolbar_icon_size