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

Handles data roles for SessionItem. More...

Public Types

using const_iterator = container_type::const_iterator
 
using container_type = std::vector< DataRole >
 

Public Member Functions

const_iterator begin () const
 
Variant data (int role) const
 
const_iterator end () const
 
bool hasData (int role) const
 Returns true if item has data with given role. More...
 
std::vector< int > roles () const
 
bool setData (const Variant &value, int role)
 Sets the data for given role. More...
 

Private Member Functions

void assure_validity (const Variant &variant, int role)
 Check if variant is compatible. More...
 

Private Attributes

container_type m_values
 

Detailed Description

Handles data roles for SessionItem.

Definition at line 26 of file sessionitemdata.h.

Member Typedef Documentation

◆ const_iterator

using ModelView::SessionItemData::const_iterator = container_type::const_iterator

Definition at line 29 of file sessionitemdata.h.

◆ container_type

Definition at line 28 of file sessionitemdata.h.

Member Function Documentation

◆ assure_validity()

void SessionItemData::assure_validity ( const Variant variant,
int  role 
)
private

Check if variant is compatible.

Definition at line 83 of file sessionitemdata.cpp.

84 {
85  if (variant.typeName() == QStringLiteral("QString"))
86  throw std::runtime_error("Attempt to set QString based variant");
87 
88  if (!Utils::CompatibleVariantTypes(data(role), variant)) {
89  std::ostringstream ostr;
90  ostr << "SessionItemData::assure_validity() -> Error. Variant types mismatch. "
91  << "Old variant type '" << data(role).typeName() << "' "
92  << "new variant type '" << variant.typeName() << "\n";
93  throw std::runtime_error(ostr.str());
94  }
95 }
#define QStringLiteral
Variant data(int role) const
MVVM_MODEL_EXPORT bool CompatibleVariantTypes(const Variant &oldValue, const Variant &newValue)
Returns true if variants has compatible types.

References ModelView::Utils::CompatibleVariantTypes(), data(), and QStringLiteral.

Referenced by setData().

Here is the call graph for this function:

◆ begin()

SessionItemData::const_iterator SessionItemData::begin ( ) const

Definition at line 63 of file sessionitemdata.cpp.

64 {
65  return m_values.begin();
66 }

References m_values.

◆ data()

Variant SessionItemData::data ( int  role) const

Definition at line 31 of file sessionitemdata.cpp.

32 {
33  for (const auto& value : m_values) {
34  if (value.m_role == role)
35  return value.m_data;
36  }
37  return Variant();
38 }
QVariant Variant
Definition: variant.h:23

References m_values.

Referenced by assure_validity(), and TEST_F().

◆ end()

SessionItemData::const_iterator SessionItemData::end ( ) const

Definition at line 68 of file sessionitemdata.cpp.

69 {
70  return m_values.end();
71 }

References m_values.

◆ hasData()

bool SessionItemData::hasData ( int  role) const

Returns true if item has data with given role.

Definition at line 75 of file sessionitemdata.cpp.

76 {
77  auto has_role = [role](const auto& x) { return x.m_role == role; };
78  return std::find_if(m_values.begin(), m_values.end(), has_role) != m_values.end();
79 }

References m_values.

Referenced by TEST_F().

◆ roles()

std::vector< int > SessionItemData::roles ( ) const

Definition at line 23 of file sessionitemdata.cpp.

24 {
25  std::vector<int> result;
26  for (const auto& value : m_values)
27  result.push_back(value.m_role);
28  return result;
29 }

References m_values.

Referenced by ModelView::JsonItemDataConverter::from_json(), and TEST_F().

◆ setData()

bool SessionItemData::setData ( const Variant value,
int  role 
)

Sets the data for given role.

Returns true if data was changed. If variant is invalid, corresponding role will be removed.

Definition at line 43 of file sessionitemdata.cpp.

44 {
45  assure_validity(value, role);
46 
47  for (auto it = m_values.begin(); it != m_values.end(); ++it) {
48  if (it->m_role == role) {
49  if (value.isValid()) {
50  if (Utils::IsTheSame(it->m_data, value))
51  return false;
52  it->m_data = value;
53  } else {
54  m_values.erase(it);
55  }
56  return true;
57  }
58  }
59  m_values.push_back(DataRole(value, role));
60  return true;
61 }
Represents pair of data,role for SessionItemData.
Definition: datarole.h:25
void assure_validity(const Variant &variant, int role)
Check if variant is compatible.
MVVM_MODEL_EXPORT bool IsTheSame(const Variant &var1, const Variant &var2)
Returns true if given variants have same type and value.

References assure_validity(), ModelView::Utils::IsTheSame(), and m_values.

Referenced by ModelView::JsonItemDataConverter::from_json(), and TEST_F().

Here is the call graph for this function:

Member Data Documentation

◆ m_values

container_type ModelView::SessionItemData::m_values
private

Definition at line 44 of file sessionitemdata.h.

Referenced by begin(), data(), end(), hasData(), roles(), and setData().


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