BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
customvariants.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/model/mvvm/model/customvariants.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 
19 
20 namespace {
21 const QString qstring_name = "QString";
22 }
23 
24 using namespace ModelView;
25 
26 std::string Utils::VariantName(const Variant& variant)
27 {
28  return variant.isValid() ? variant.typeName() : Constants::invalid_type_name;
29 }
30 
31 int Utils::VariantType(const Variant& variant)
32 {
33  auto result = static_cast<int>(variant.type());
34  if (result == Variant::UserType)
35  result = variant.userType();
36  return result;
37 }
38 
39 bool Utils::CompatibleVariantTypes(const Variant& oldValue, const Variant& newValue)
40 {
41  // Invalid variant can be rewritten by any variant.
42  // Valid Variant can be replaced by invalid variant.
43  // In other cases types of variants should coincide to be compatible.
44 
45  if (!oldValue.isValid() || !newValue.isValid())
46  return true;
47 
48  return Utils::VariantType(oldValue) == Utils::VariantType(newValue);
49 }
50 
51 bool Utils::IsTheSame(const Variant& var1, const Variant& var2)
52 {
53  // variants of different type are always reported as not the same
54  if (VariantType(var1) != VariantType(var2))
55  return false;
56 
57  // variants of same type are compared by value
58  return var1 == var2;
59 }
60 
62 {
63  if (!custom.isValid())
64  return custom;
65 
66  // converts variant based on std::string to variant based on QString
67  if (custom.typeName() == Constants::string_type_name) {
68  return Variant(QString::fromStdString(custom.value<std::string>()));
69  } else if (IsDoubleVectorVariant(custom)) {
70  QString str =
71  QString("vector of %1 elements").arg(custom.value<std::vector<double>>().size());
72  return Variant(str);
73  }
74 
75  // in other cases returns unchanged variant
76  return custom;
77 }
78 
80 {
81  if (!standard.isValid())
82  return standard;
83 
84  // converts variant based on std::string to variant based on QString
85  if (standard.typeName() == qstring_name)
86  return Variant::fromValue(standard.toString().toStdString());
87 
88  // in other cases returns unchanged variant
89  return standard;
90 }
91 
92 bool Utils::IsBoolVariant(const Variant& variant)
93 {
94  return variant.type() == Variant::Bool;
95 }
96 
97 bool Utils::IsIntVariant(const Variant& variant)
98 {
99  return variant.type() == Variant::Int;
100 }
101 
102 bool Utils::IsDoubleVariant(const Variant& variant)
103 {
104  return variant.type() == Variant::Double;
105 }
106 
107 bool Utils::IsComboVariant(const Variant& variant)
108 {
109  return variant.canConvert<ComboProperty>();
110 }
111 
112 bool Utils::IsStdStringVariant(const Variant& variant)
113 {
114  return variant.canConvert<std::string>();
115 }
116 
118 {
119  return variant.typeName() == Constants::vector_double_type_name;
120 }
121 
122 bool Utils::IsColorVariant(const Variant& variant)
123 {
124  return variant.type() == Variant::Color;
125 }
126 
128 {
129  return variant.canConvert<ExternalProperty>();
130 }
131 
133 {
134  return variant.canConvert<RealLimits>();
135 }
Custom property to define list of string values with multiple selections.
Definition: comboproperty.h:27
Property to carry text, color and identifier.
Limits for double.
Definition: reallimits.h:25
Defines class CLASS?
Defines class CLASS?
Defines class CLASS?
const std::string string_type_name
const std::string vector_double_type_name
const std::string invalid_type_name
MVVM_MODEL_EXPORT bool IsTheSame(const Variant &var1, const Variant &var2)
Returns true if given variants have same type and value.
MVVM_MODEL_EXPORT Variant toCustomVariant(const Variant &standard)
Converts Qt variant to custom variant on board of SessionItem.
MVVM_MODEL_EXPORT bool IsIntVariant(const Variant &variant)
Returns true in the case of double value based variant.
MVVM_MODEL_EXPORT std::string VariantName(const Variant &variant)
Returns name of variant.
MVVM_MODEL_EXPORT bool IsColorVariant(const Variant &variant)
Returns true in the case of QColor based variant.
MVVM_MODEL_EXPORT int VariantType(const Variant &variant)
Returns type of variant (additionally checks for user type).
MVVM_MODEL_EXPORT bool IsDoubleVariant(const Variant &variant)
Returns true in the case of double value based variant.
MVVM_MODEL_EXPORT Variant toQtVariant(const Variant &custom)
Converts custom variant to standard variant which Qt views will understand.
MVVM_MODEL_EXPORT bool CompatibleVariantTypes(const Variant &oldValue, const Variant &newValue)
Returns true if variants has compatible types.
MVVM_MODEL_EXPORT bool IsStdStringVariant(const Variant &variant)
Returns true in the case of double value based variant.
MVVM_MODEL_EXPORT bool IsBoolVariant(const Variant &variant)
Returns true in the case of double value based variant.
MVVM_MODEL_EXPORT bool IsExtPropertyVariant(const Variant &variant)
Returns true in the case of ExternalProperty based variant.
MVVM_MODEL_EXPORT bool IsComboVariant(const Variant &variant)
Returns true in the case of double value based variant.
MVVM_MODEL_EXPORT bool IsDoubleVectorVariant(const Variant &variant)
Returns true in the case of variant based on std::vector<double>.
MVVM_MODEL_EXPORT bool IsRealLimitsVariant(const Variant &variant)
Returns true in the case of RealLimits based variant.
materialitems.h Collection of materials to populate MaterialModel.
int VariantType(const QVariant &variant)
Returns type of variant (additionally checks for user type).
QVariant Variant
Definition: variant.h:23
Defines class CLASS?