BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
viewmodel.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // qt-mvvm: Model-view-view-model framework for large GUI applications
4 //
5 //! @file mvvm/viewmodel/mvvm/viewmodel/viewmodel.cpp
6 //! @brief Implements class 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 2020
11 //! @authors Gennady Pospelov et al, Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
16 #include "mvvm/model/sessionitem.h"
20 
21 using namespace ModelView;
22 
23 ViewModel::ViewModel(std::unique_ptr<ViewModelController> controller, QObject* parent)
24  : ViewModelBase(parent), m_controller(std::move(controller))
25 {
26  m_controller->setViewModel(this);
27  m_controller->setRootSessionItem(sessionModel()->rootItem());
28 }
29 
30 QVariant ViewModel::headerData(int section, Qt::Orientation orientation, int role) const
31 {
32  if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
33  auto data = m_controller->horizontalHeaderLabels();
34  if (section < data.size())
35  return data.at(section);
36  }
37  return QVariant();
38 }
39 
41 {
42  return m_controller->sessionModel();
43 }
44 
46 {
47  return m_controller->rootSessionItem();
48 }
49 
50 ViewModel::~ViewModel() = default;
51 
53 {
54  if (!item)
55  throw std::runtime_error("Error in ViewModel: atttemp to set nulptr as root item");
56  m_controller->setRootSessionItem(item);
57 }
58 
59 SessionItem* ViewModel::sessionItemFromIndex(const QModelIndex& index) const
60 {
61  return index.isValid() ? itemFromIndex(index)->item() : m_controller->rootSessionItem();
62 }
63 
64 ViewItem* ViewModel::viewItemFromIndex(const QModelIndex& index) const
65 {
66  return itemFromIndex(index);
67 }
68 
69 //! Returns list of model indices representing given SessionItem.
70 
71 QModelIndexList ViewModel::indexOfSessionItem(const SessionItem* item) const
72 {
73  QModelIndexList result;
74  for (auto view : m_controller->findViews(item))
75  result.push_back(indexFromItem(view));
76  return result;
77 }
78 
79 //! Returns vector of all ViewItem's representing given SessionItem.
80 
81 std::vector<ViewItem*> ViewModel::findViews(const SessionItem* item) const
82 {
83  return m_controller->findViews(item);
84 }
The main object representing an editable/displayable/serializable entity.
Definition: sessionitem.h:38
Main class to hold hierarchy of SessionItem objects.
Definition: sessionmodel.h:37
Represents the view of SessionItem's data in a single cell of ViewModel.
Definition: viewitem.h:29
SessionItem * item() const
Definition: viewitem.cpp:168
Base class for all view models to show content of SessionModel in Qt views.
Definition: viewmodelbase.h:31
ViewItem * rootItem() const
Returns a pointer to invisible root item.
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
QModelIndex indexFromItem(const ViewItem *item) const
Returns the QModelIndex associated with the given item.
ViewItem * itemFromIndex(const QModelIndex &index) const
Returns a pointer to the RefViewItem associated with the given index.
SessionModel * sessionModel() const
Definition: viewmodel.cpp:40
QModelIndexList indexOfSessionItem(const SessionItem *item) const
Returns list of model indices representing given SessionItem.
Definition: viewmodel.cpp:71
ViewItem * viewItemFromIndex(const QModelIndex &index) const
Definition: viewmodel.cpp:64
void setRootSessionItem(SessionItem *item)
Definition: viewmodel.cpp:52
SessionItem * sessionItemFromIndex(const QModelIndex &index) const
Definition: viewmodel.cpp:59
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
Definition: viewmodel.cpp:30
ViewModel(std::unique_ptr< ViewModelController > controller, QObject *parent=nullptr)
Definition: viewmodel.cpp:23
std::unique_ptr< ViewModelController > m_controller
Definition: viewmodel.h:54
std::vector< ViewItem * > findViews(const ModelView::SessionItem *item) const
Returns vector of all ViewItem's representing given SessionItem.
Definition: viewmodel.cpp:81
SessionItem * rootSessionItem()
Definition: viewmodel.cpp:45
materialitems.h Collection of materials to populate MaterialModel.
Definition: filesystem.h:81
Defines class CLASS?
Defines class CLASS?
Defines class CLASS?
Defines class CLASS?
Defines class CLASS?