BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
ModelView::ViewModelController::ViewModelControllerImpl Struct Reference
Collaboration diagram for ModelView::ViewModelController::ViewModelControllerImpl:
[legend]

Public Member Functions

 ViewModelControllerImpl (ViewModelController *controller, ViewModelBase *view_model)
 
void check_initialization ()
 
std::vector< ViewItem * > findViews (const SessionItem *item) const
 
void init_view_model ()
 
void insert_view (SessionItem *parent, const TagRow &tagrow)
 
void iterate (const SessionItem *item, ViewItem *parent)
 
void remove_children_of_view (ViewItem *view)
 
void remove_row_of_views (SessionItem *item)
 Remove row of ViewItem's corresponding to given item. More...
 
void setRootSessionItemIntern (SessionItem *item)
 

Public Attributes

std::unique_ptr< ChildrenStrategyInterfacem_childrenStrategy
 
std::map< SessionItem *, ViewItem * > m_itemToVview
 
Path m_rootItemPath
 correspondence of item and its view More...
 
std::unique_ptr< RowStrategyInterfacem_rowStrategy
 
ViewModelControllerm_self
 
ViewModelBasem_viewModel {nullptr}
 

Detailed Description

Definition at line 47 of file viewmodelcontroller.cpp.

Constructor & Destructor Documentation

◆ ViewModelControllerImpl()

ModelView::ViewModelController::ViewModelControllerImpl::ViewModelControllerImpl ( ViewModelController controller,
ViewModelBase view_model 
)
inline

Definition at line 55 of file viewmodelcontroller.cpp.

Member Function Documentation

◆ check_initialization()

void ModelView::ViewModelController::ViewModelControllerImpl::check_initialization ( )
inline

Definition at line 60 of file viewmodelcontroller.cpp.

61  {
62  const std::string msg("Error in ViewModelController: ");
63  if (!m_viewModel)
64  throw std::runtime_error(msg + "ViewModel is not defined");
65 
66  if (!m_rowStrategy)
67  throw std::runtime_error(msg + "RowStrategy is not defined");
68 
69  if (!m_childrenStrategy)
70  throw std::runtime_error(msg + "Children is not defined");
71  }
std::unique_ptr< RowStrategyInterface > m_rowStrategy
std::unique_ptr< ChildrenStrategyInterface > m_childrenStrategy

References ModelView::ViewModelController::ViewModelControllerImpl::m_childrenStrategy, ModelView::ViewModelController::ViewModelControllerImpl::m_rowStrategy, and ModelView::ViewModelController::ViewModelControllerImpl::m_viewModel.

Referenced by ModelView::ViewModelController::ViewModelControllerImpl::init_view_model().

◆ findViews()

std::vector<ViewItem*> ModelView::ViewModelController::ViewModelControllerImpl::findViews ( const SessionItem item) const
inline

Definition at line 145 of file viewmodelcontroller.cpp.

146  {
147  if (item == m_viewModel->rootItem()->item())
148  return {m_viewModel->rootItem()};
149 
150  std::vector<ViewItem*> result;
151  auto on_index = [&](const QModelIndex& index) {
152  auto view_item = m_viewModel->itemFromIndex(index);
153  if (view_item->item() == item)
154  result.push_back(view_item);
155  };
156  Utils::iterate_model(m_viewModel, QModelIndex(), on_index);
157  return result;
158  }
SessionItem * item() const
Definition: viewitem.cpp:168
ViewItem * rootItem() const
Returns a pointer to invisible root item.
ViewItem * itemFromIndex(const QModelIndex &index) const
Returns a pointer to the RefViewItem associated with the given index.
MVVM_VIEWMODEL_EXPORT void iterate_model(const QAbstractItemModel *model, const QModelIndex &parent, const std::function< void(const QModelIndex &child)> &fun)
Iterates through QAbstractItem model.

References ModelView::ViewItem::item(), ModelView::ViewModelBase::itemFromIndex(), ModelView::Utils::iterate_model(), ModelView::ViewModelController::ViewModelControllerImpl::m_viewModel, and ModelView::ViewModelBase::rootItem().

Here is the call graph for this function:

◆ init_view_model()

void ModelView::ViewModelController::ViewModelControllerImpl::init_view_model ( )
inline

Definition at line 73 of file viewmodelcontroller.cpp.

References ModelView::ViewModelController::ViewModelControllerImpl::check_initialization(), ModelView::ViewModelController::ViewModelControllerImpl::iterate(), ModelView::ViewModelController::ViewModelControllerImpl::m_itemToVview, ModelView::ViewModelController::ViewModelControllerImpl::m_self, ModelView::ViewModelController::ViewModelControllerImpl::m_viewModel, ModelView::ViewModelBase::rootItem(), and ModelView::ViewModelController::rootSessionItem().

Referenced by ModelView::ViewModelController::ViewModelControllerImpl::setRootSessionItemIntern().

Here is the call graph for this function:

◆ insert_view()

void ModelView::ViewModelController::ViewModelControllerImpl::insert_view ( SessionItem parent,
const TagRow tagrow 
)
inline

Definition at line 121 of file viewmodelcontroller.cpp.

122  {
123  auto child = parent->getItem(tagrow.tag, tagrow.row);
124  auto children = m_childrenStrategy->children(parent);
125  auto index = Utils::IndexOfItem(children, child);
126  if (index == -1)
127  return;
128 
129  auto pos = m_itemToVview.find(parent);
130  if (pos == m_itemToVview.end())
131  return;
132 
133  auto parent_view = pos->second;
134 
135  auto row = m_rowStrategy->constructRow(child);
136  if (!row.empty()) {
137  auto next_parent = row.at(0).get();
138  m_viewModel->insertRow(parent_view, index, std::move(row));
139  m_itemToVview[child] = next_parent;
140  parent_view = next_parent; // labelItem
141  iterate(child, parent_view);
142  }
143  }
SessionItem * getItem(const std::string &tag, int row=0) const
Returns item at given row of given tag.
std::string tag
Definition: tagrow.h:27
void insertRow(ViewItem *parent, int row, std::vector< std::unique_ptr< ViewItem >> items)
Insert a row of items at index 'row' to given parent.
int IndexOfItem(It begin, It end, const T &item)
Returns index corresponding to the first occurance of the item in the container.

References ModelView::SessionItem::getItem(), ModelView::Utils::IndexOfItem(), ModelView::ViewModelBase::insertRow(), ModelView::ViewModelController::ViewModelControllerImpl::iterate(), ModelView::ViewModelController::ViewModelControllerImpl::m_childrenStrategy, ModelView::ViewModelController::ViewModelControllerImpl::m_itemToVview, ModelView::ViewModelController::ViewModelControllerImpl::m_rowStrategy, ModelView::ViewModelController::ViewModelControllerImpl::m_viewModel, ModelView::TagRow::row, and ModelView::TagRow::tag.

Here is the call graph for this function:

◆ iterate()

void ModelView::ViewModelController::ViewModelControllerImpl::iterate ( const SessionItem item,
ViewItem parent 
)
inline

Definition at line 81 of file viewmodelcontroller.cpp.

82  {
83  ViewItem* origParent(parent);
84  for (auto child : m_childrenStrategy->children(item)) {
85  auto row = m_rowStrategy->constructRow(child);
86  if (!row.empty()) {
87  auto next_parent = row.at(0).get();
88  m_viewModel->appendRow(parent, std::move(row));
89  m_itemToVview[child] = next_parent;
90  parent = next_parent; // labelItem
91  iterate(child, parent);
92  }
93  parent = origParent;
94  }
95  }
Represents the view of SessionItem's data in a single cell of ViewModel.
Definition: viewitem.h:29
void appendRow(ViewItem *parent, std::vector< std::unique_ptr< ViewItem >> items)
Appends row of items to given parent.

References ModelView::ViewModelBase::appendRow(), ModelView::ViewModelController::ViewModelControllerImpl::m_childrenStrategy, ModelView::ViewModelController::ViewModelControllerImpl::m_itemToVview, ModelView::ViewModelController::ViewModelControllerImpl::m_rowStrategy, and ModelView::ViewModelController::ViewModelControllerImpl::m_viewModel.

Referenced by ModelView::ViewModelController::ViewModelControllerImpl::init_view_model(), and ModelView::ViewModelController::ViewModelControllerImpl::insert_view().

Here is the call graph for this function:

◆ remove_children_of_view()

void ModelView::ViewModelController::ViewModelControllerImpl::remove_children_of_view ( ViewItem view)
inline

Definition at line 109 of file viewmodelcontroller.cpp.

110  {
111  for (auto child : view->children()) {
112  auto pos = std::find_if(m_itemToVview.begin(), m_itemToVview.end(),
113  [child](const auto& it) { return it.second == child; });
114  if (pos != m_itemToVview.end())
115  m_itemToVview.erase(pos);
116  }
117 
118  m_viewModel->clearRows(view);
119  }
std::vector< ViewItem * > children() const
Definition: viewitem.cpp:237
void clearRows(ViewItem *parent)

References ModelView::ViewItem::children(), ModelView::ViewModelBase::clearRows(), ModelView::ViewModelController::ViewModelControllerImpl::m_itemToVview, and ModelView::ViewModelController::ViewModelControllerImpl::m_viewModel.

Here is the call graph for this function:

◆ remove_row_of_views()

void ModelView::ViewModelController::ViewModelControllerImpl::remove_row_of_views ( SessionItem item)
inline

Remove row of ViewItem's corresponding to given item.

Definition at line 99 of file viewmodelcontroller.cpp.

100  {
101  auto pos = m_itemToVview.find(item);
102  if (pos != m_itemToVview.end()) {
103  auto view = pos->second;
104  m_viewModel->removeRow(view->parent(), view->row());
105  m_itemToVview.erase(pos);
106  }
107  }
void removeRow(ViewItem *parent, int row)

References ModelView::ViewModelController::ViewModelControllerImpl::m_itemToVview, ModelView::ViewModelController::ViewModelControllerImpl::m_viewModel, ModelView::ViewItem::parent(), ModelView::ViewModelBase::removeRow(), and ModelView::ViewItem::row().

Here is the call graph for this function:

◆ setRootSessionItemIntern()

void ModelView::ViewModelController::ViewModelControllerImpl::setRootSessionItemIntern ( SessionItem item)
inline

Definition at line 160 of file viewmodelcontroller.cpp.

161  {
163  m_viewModel->setRootViewItem(std::make_unique<RootViewItem>(item));
164  init_view_model();
165  }
void setRootViewItem(std::unique_ptr< ViewItem > root_item)
Sets new root item. Previous item will be deleted, model will be reset.
MVVM_MODEL_EXPORT Path PathFromItem(const SessionItem *item)
Constructs path to find given item. Item must belong to a model.
Definition: modelutils.cpp:22
Path m_rootItemPath
correspondence of item and its view

References ModelView::ViewModelController::ViewModelControllerImpl::init_view_model(), ModelView::ViewModelController::ViewModelControllerImpl::m_rootItemPath, ModelView::ViewModelController::ViewModelControllerImpl::m_viewModel, ModelView::Utils::PathFromItem(), and ModelView::ViewModelBase::setRootViewItem().

Here is the call graph for this function:

Member Data Documentation

◆ m_childrenStrategy

◆ m_itemToVview

◆ m_rootItemPath

Path ModelView::ViewModelController::ViewModelControllerImpl::m_rootItemPath

correspondence of item and its view

Definition at line 53 of file viewmodelcontroller.cpp.

Referenced by ModelView::ViewModelController::ViewModelControllerImpl::setRootSessionItemIntern().

◆ m_rowStrategy

◆ m_self

ViewModelController* ModelView::ViewModelController::ViewModelControllerImpl::m_self

◆ m_viewModel


The documentation for this struct was generated from the following file: