BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
itemutils.h
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/model/mvvm/model/itemutils.h
6 //! @brief Defines 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 
15 #ifndef BORNAGAIN_MVVM_MODEL_MVVM_MODEL_ITEMUTILS_H
16 #define BORNAGAIN_MVVM_MODEL_MVVM_MODEL_ITEMUTILS_H
17 
18 #include "mvvm/model_export.h"
19 #include <functional>
20 #include <string>
21 #include <vector>
22 
23 namespace ModelView {
24 
25 class SessionItem;
26 
27 namespace Utils {
28 
29 //! Iterates through item and all its children.
30 MVVM_MODEL_EXPORT void iterate(SessionItem* item, const std::function<void(SessionItem*)>& fun);
31 
32 //! Iterates through all model indices and calls user function.
33 //! If function returns false for given index, iteration will not go down to children.
34 MVVM_MODEL_EXPORT void iterate_if(const SessionItem* item,
35  const std::function<bool(const SessionItem*)>& fun);
36 
37 //! Returns copy number of given item in it's parent hierarchy. Takes into account only items with
38 //! same modelType.
39 MVVM_MODEL_EXPORT int CopyNumber(const SessionItem* item);
40 
41 //! Returns child at given index of parent. No tags are involved, index is considered
42 //! as global index in the combined array of all children.
43 MVVM_MODEL_EXPORT SessionItem* ChildAt(const SessionItem* parent, int index);
44 
45 //! Returns index in children array corresponding to given child. No tags are involved,
46 //! index is considered as global index in the combined array of all children.
47 MVVM_MODEL_EXPORT int IndexOfChild(const SessionItem* parent, const SessionItem* child);
48 
49 //! Returns true if given item has registered tag.
50 MVVM_MODEL_EXPORT bool HasTag(const SessionItem& item, const std::string& tag);
51 
52 //! Returns true if given item has registered `tag`, and it belongs to single property.
53 MVVM_MODEL_EXPORT bool IsSinglePropertyTag(const SessionItem& item, const std::string& tag);
54 
55 //! Returns vector of strings containing all registered tags of the given item.
56 MVVM_MODEL_EXPORT std::vector<std::string> RegisteredTags(const SessionItem& item);
57 
58 //! Returns vector of strings containing all registered universal tags of the given item.
59 //! A universal tag is a tag that is usually empty after item construction and serves for later
60 //! children's insertion.
61 MVVM_MODEL_EXPORT std::vector<std::string> RegisteredUniversalTags(const SessionItem& item);
62 
63 //! Returns vector of children representing top level items.
64 MVVM_MODEL_EXPORT std::vector<SessionItem*> TopLevelItems(const SessionItem& item);
65 
66 //! Returns vector of children representing property items.
67 
68 MVVM_MODEL_EXPORT std::vector<SessionItem*> SinglePropertyItems(const SessionItem& item);
69 
70 //! Returns next sibling with same tag.
71 
72 MVVM_MODEL_EXPORT SessionItem* FindNextSibling(SessionItem* item);
73 
74 //! Returns previous sibling with same tag.
75 
76 MVVM_MODEL_EXPORT SessionItem* FindPreviousSibling(SessionItem* item);
77 
78 //! Finds next item to select
79 //! Method is used in the context of next item selection after given item was deleted.
80 
81 MVVM_MODEL_EXPORT SessionItem* FindNextItemToSelect(SessionItem* item);
82 
83 //! Returns true if 'candidate' is one of ancestor of given item.
84 MVVM_MODEL_EXPORT bool IsItemAncestor(const SessionItem* item, const SessionItem* candidate);
85 
86 //! Returns vector with duplicates and 'nullptr' filtered out.
87 MVVM_MODEL_EXPORT std::vector<SessionItem*> UniqueItems(const std::vector<SessionItem*>& items);
88 
89 //! Returns vector of items casted to given type.
90 template <typename T> std::vector<T*> CastedItems(const std::vector<SessionItem*>& items)
91 {
92  std::vector<T*> result;
93  for (auto item : items)
94  if (auto casted_item = dynamic_cast<T*>(item); casted_item)
95  result.push_back(casted_item);
96 
97  return result;
98 }
99 
100 } // namespace Utils
101 
102 } // namespace ModelView
103 
104 #endif // BORNAGAIN_MVVM_MODEL_MVVM_MODEL_ITEMUTILS_H
MVVM_MODEL_EXPORT int CopyNumber(const SessionItem *item)
Returns copy number of given item in it's parent hierarchy.
Definition: itemutils.cpp:49
MVVM_MODEL_EXPORT SessionItem * FindNextSibling(SessionItem *item)
Returns next sibling with same tag.
Definition: itemutils.cpp:131
MVVM_MODEL_EXPORT SessionItem * FindNextItemToSelect(SessionItem *item)
Finds next item to select Method is used in the context of next item selection after given item was d...
Definition: itemutils.cpp:149
MVVM_MODEL_EXPORT std::vector< SessionItem * > SinglePropertyItems(const SessionItem &item)
Returns vector of children representing property items.
Definition: itemutils.cpp:122
MVVM_MODEL_EXPORT void iterate(SessionItem *item, const std::function< void(SessionItem *)> &fun)
Iterates through item and all its children.
Definition: itemutils.cpp:24
MVVM_MODEL_EXPORT int IndexOfChild(const SessionItem *parent, const SessionItem *child)
Returns index in children array corresponding to given child.
Definition: itemutils.cpp:81
MVVM_MODEL_EXPORT std::vector< SessionItem * > UniqueItems(const std::vector< SessionItem * > &items)
Returns vector with duplicates and 'nullptr' filtered out.
Definition: itemutils.cpp:170
MVVM_MODEL_EXPORT void iterate_if(const SessionItem *item, const std::function< bool(const SessionItem *)> &fun)
Iterates through all model indices and calls user function.
Definition: itemutils.cpp:35
MVVM_MODEL_EXPORT std::vector< SessionItem * > TopLevelItems(const SessionItem &item)
Returns vector of children representing top level items.
Definition: itemutils.cpp:113
MVVM_MODEL_EXPORT std::vector< std::string > RegisteredUniversalTags(const SessionItem &item)
Returns vector of strings containing all registered universal tags of the given item.
Definition: itemutils.cpp:104
MVVM_MODEL_EXPORT bool HasTag(const SessionItem &item, const std::string &tag)
Returns true if given item has registered tag.
Definition: itemutils.cpp:86
MVVM_MODEL_EXPORT std::vector< std::string > RegisteredTags(const SessionItem &item)
Returns vector of strings containing all registered tags of the given item.
Definition: itemutils.cpp:96
std::vector< T * > CastedItems(const std::vector< SessionItem * > &items)
Returns vector of items casted to given type.
Definition: itemutils.h:90
MVVM_MODEL_EXPORT SessionItem * ChildAt(const SessionItem *parent, int index)
Returns child at given index of parent.
Definition: itemutils.cpp:70
MVVM_MODEL_EXPORT bool IsItemAncestor(const SessionItem *item, const SessionItem *candidate)
Returns true if 'candidate' is one of ancestor of given item.
Definition: itemutils.cpp:156
MVVM_MODEL_EXPORT SessionItem * FindPreviousSibling(SessionItem *item)
Returns previous sibling with same tag.
Definition: itemutils.cpp:140
MVVM_MODEL_EXPORT bool IsSinglePropertyTag(const SessionItem &item, const std::string &tag)
Returns true if given item has registered tag, and it belongs to single property.
Definition: itemutils.cpp:91
materialitems.h Collection of materials to populate MaterialModel.