BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
ModelView::SessionItemContainer Class Reference

Holds collection of SessionItem objects related to the same tag. More...

Collaboration diagram for ModelView::SessionItemContainer:
[legend]

Public Types

using const_iterator = container_t::const_iterator
 
using container_t = std::vector< SessionItem * >
 

Public Member Functions

 SessionItemContainer (const SessionItemContainer &)=delete
 
 SessionItemContainer (TagInfo tag_info)
 
 ~SessionItemContainer ()
 
const_iterator begin () const
 
bool canInsertItem (const SessionItem *item, int index) const
 Returns true if given item can be inserted under given index. More...
 
bool canTakeItem (int index) const
 Returns true if item can be taken. More...
 
bool empty () const
 
const_iterator end () const
 
int indexOfItem (const SessionItem *item) const
 Returns index of item in vector of items. More...
 
bool insertItem (SessionItem *item, int index)
 Inserts item in a vector of children at given index, returns true in the case of success. More...
 
SessionItemitemAt (int index) const
 Returns item at given index. Returns nullptr if index is invalid. More...
 
int itemCount () const
 Returns number of items in given tag. More...
 
std::vector< SessionItem * > items () const
 Returns vector of items in this container. More...
 
std::string name () const
 Returns the name of SessionItemTag. More...
 
SessionItemContaineroperator= (const SessionItemContainer &)=delete
 
TagInfo tagInfo () const
 
SessionItemtakeItem (int index)
 Removes item at given index and returns it to the user. More...
 

Private Member Functions

bool is_valid_item (const SessionItem *item) const
 Returns true if item's modelType is intended for this tag. More...
 
bool maximum_reached () const
 Returns true if no more items are allowed. More...
 
bool minimum_reached () const
 Returns true if less items than now is not allowed. More...
 

Private Attributes

container_t m_items
 
TagInfo m_tag_info
 

Detailed Description

Holds collection of SessionItem objects related to the same tag.

Definition at line 28 of file sessionitemcontainer.h.

Member Typedef Documentation

◆ const_iterator

using ModelView::SessionItemContainer::const_iterator = container_t::const_iterator

Definition at line 31 of file sessionitemcontainer.h.

◆ container_t

Definition at line 30 of file sessionitemcontainer.h.

Constructor & Destructor Documentation

◆ SessionItemContainer() [1/2]

SessionItemContainer::SessionItemContainer ( ModelView::TagInfo  tag_info)

Definition at line 21 of file sessionitemcontainer.cpp.

22  : m_tag_info(std::move(tag_info))
23 {
24 }

◆ SessionItemContainer() [2/2]

ModelView::SessionItemContainer::SessionItemContainer ( const SessionItemContainer )
delete

◆ ~SessionItemContainer()

SessionItemContainer::~SessionItemContainer ( )

Definition at line 26 of file sessionitemcontainer.cpp.

27 {
28  for (auto item : m_items)
29  delete item;
30 }

References m_items.

Member Function Documentation

◆ begin()

SessionItemContainer::const_iterator SessionItemContainer::begin ( ) const

Definition at line 126 of file sessionitemcontainer.cpp.

127 {
128  return m_items.begin();
129 }

References m_items.

◆ canInsertItem()

bool SessionItemContainer::canInsertItem ( const SessionItem item,
int  index 
) const

Returns true if given item can be inserted under given index.

Definition at line 92 of file sessionitemcontainer.cpp.

93 {
94  const bool valid_index = (index >= 0 && index <= itemCount());
95  const bool enough_place = !maximum_reached();
96  return valid_index && enough_place && is_valid_item(item);
97 }
bool maximum_reached() const
Returns true if no more items are allowed.
bool is_valid_item(const SessionItem *item) const
Returns true if item's modelType is intended for this tag.
int itemCount() const
Returns number of items in given tag.

References is_valid_item(), itemCount(), and maximum_reached().

Referenced by insertItem(), and TEST_F().

Here is the call graph for this function:

◆ canTakeItem()

bool SessionItemContainer::canTakeItem ( int  index) const

Returns true if item can be taken.

Definition at line 85 of file sessionitemcontainer.cpp.

86 {
87  return itemAt(index) && !minimum_reached();
88 }
bool minimum_reached() const
Returns true if less items than now is not allowed.
SessionItem * itemAt(int index) const
Returns item at given index. Returns nullptr if index is invalid.

References itemAt(), and minimum_reached().

Referenced by ModelView::SessionItemTags::canTakeItem(), and TEST_F().

Here is the call graph for this function:

◆ empty()

◆ end()

SessionItemContainer::const_iterator SessionItemContainer::end ( ) const

Definition at line 131 of file sessionitemcontainer.cpp.

132 {
133  return m_items.end();
134 }

References m_items.

◆ indexOfItem()

int SessionItemContainer::indexOfItem ( const SessionItem item) const

Returns index of item in vector of items.

Returns -1 if item doesn't belong to us.

Definition at line 102 of file sessionitemcontainer.cpp.

103 {
104  return Utils::IndexOfItem(m_items, item);
105 }
int IndexOfItem(It begin, It end, const T &item)
Returns index corresponding to the first occurance of the item in the container.

References ModelView::Utils::IndexOfItem(), and m_items.

Referenced by TEST_F().

Here is the call graph for this function:

◆ insertItem()

bool SessionItemContainer::insertItem ( SessionItem item,
int  index 
)

Inserts item in a vector of children at given index, returns true in the case of success.

Parameters
itemItem to be inserted, ownership will be taken.
indexItem insert index in a range [0, itemCount]

Insert index is an index which item will have after insertion. If item can't be inserted (wrong model type, wrong index or maximum number of items reached), will return false.

Definition at line 60 of file sessionitemcontainer.cpp.

61 {
62  if (!canInsertItem(item, index))
63  return false;
64 
65  m_items.insert(std::next(m_items.begin(), index), item);
66  return true;
67 }
bool canInsertItem(const SessionItem *item, int index) const
Returns true if given item can be inserted under given index.

References canInsertItem(), and m_items.

Referenced by ModelView::JsonItemContainerConverter::JsonItemContainerConverterImpl::create_items(), ModelView::SessionItemTags::insertItem(), and TEST_F().

Here is the call graph for this function:

◆ is_valid_item()

bool SessionItemContainer::is_valid_item ( const SessionItem item) const
private

Returns true if item's modelType is intended for this tag.

Definition at line 152 of file sessionitemcontainer.cpp.

153 {
154  return item && m_tag_info.isValidChild(item->modelType());
155 }
model_type modelType() const
Returns item's model type.
Definition: sessionitem.cpp:80
bool isValidChild(const std::string &modelType) const
Returns true if given modelType matches the list of possible model types.
Definition: taginfo.cpp:67

References ModelView::TagInfo::isValidChild(), m_tag_info, and ModelView::SessionItem::modelType().

Referenced by canInsertItem().

Here is the call graph for this function:

◆ itemAt()

SessionItem * SessionItemContainer::itemAt ( int  index) const

Returns item at given index. Returns nullptr if index is invalid.

Definition at line 109 of file sessionitemcontainer.cpp.

110 {
111  return index >= 0 && index < itemCount() ? m_items[static_cast<size_t>(index)] : nullptr;
112 }

Referenced by canTakeItem(), ModelView::SessionItemTags::getItem(), takeItem(), TEST_F(), and ModelView::JsonItemContainerConverter::JsonItemContainerConverterImpl::update_items().

◆ itemCount()

int SessionItemContainer::itemCount ( ) const

◆ items()

std::vector< SessionItem * > SessionItemContainer::items ( ) const

Returns vector of items in this container.

Definition at line 46 of file sessionitemcontainer.cpp.

47 {
48  return m_items;
49 }

References m_items.

Referenced by ModelView::SessionItemTags::getItems(), and TEST_F().

◆ maximum_reached()

bool SessionItemContainer::maximum_reached ( ) const
private

Returns true if no more items are allowed.

Definition at line 138 of file sessionitemcontainer.cpp.

139 {
140  return m_tag_info.max() != -1 && m_tag_info.max() == itemCount();
141 }
int max() const
Definition: taginfo.cpp:55

References itemCount(), m_tag_info, and ModelView::TagInfo::max().

Referenced by canInsertItem().

Here is the call graph for this function:

◆ minimum_reached()

bool SessionItemContainer::minimum_reached ( ) const
private

Returns true if less items than now is not allowed.

Definition at line 145 of file sessionitemcontainer.cpp.

146 {
147  return m_tag_info.min() != -1 && m_tag_info.min() == itemCount();
148 }
int min() const
Definition: taginfo.cpp:50

References itemCount(), m_tag_info, and ModelView::TagInfo::min().

Referenced by canTakeItem(), and takeItem().

Here is the call graph for this function:

◆ name()

std::string SessionItemContainer::name ( ) const

Returns the name of SessionItemTag.

Definition at line 116 of file sessionitemcontainer.cpp.

117 {
118  return m_tag_info.name();
119 }
std::string name() const
Definition: taginfo.cpp:45

References m_tag_info, and ModelView::TagInfo::name().

Referenced by TEST_F().

Here is the call graph for this function:

◆ operator=()

SessionItemContainer& ModelView::SessionItemContainer::operator= ( const SessionItemContainer )
delete

◆ tagInfo()

TagInfo SessionItemContainer::tagInfo ( ) const

◆ takeItem()

SessionItem * SessionItemContainer::takeItem ( int  index)

Removes item at given index and returns it to the user.

Definition at line 71 of file sessionitemcontainer.cpp.

72 {
73  if (minimum_reached())
74  return nullptr;
75 
76  SessionItem* result = itemAt(index);
77  if (result)
78  m_items.erase(std::next(m_items.begin(), index));
79 
80  return result;
81 }
The main object representing an editable/displayable/serializable entity.
Definition: sessionitem.h:38

References itemAt(), m_items, and minimum_reached().

Referenced by ModelView::SessionItemTags::takeItem(), and TEST_F().

Here is the call graph for this function:

Member Data Documentation

◆ m_items

container_t ModelView::SessionItemContainer::m_items
private

◆ m_tag_info

TagInfo ModelView::SessionItemContainer::m_tag_info
private

Definition at line 68 of file sessionitemcontainer.h.

Referenced by is_valid_item(), maximum_reached(), minimum_reached(), name(), and tagInfo().


The documentation for this class was generated from the following files: