23 #include <QJsonObject>
30 const QString variantTypeKey =
"type";
31 const QString variantValueKey =
"value";
32 const QString comboValuesKey =
"values";
33 const QString comboSelectionKey =
"selections";
34 const QString extPropertyTextKey =
"text";
35 const QString extPropertyColorKey =
"color";
36 const QString extPropertyIdKey =
"identifier";
37 const QString realLimitsTextKey =
"text";
38 const QString realLimitsMinKey =
"min";
39 const QString realLimitsMaxKey =
"max";
41 QStringList expected_variant_keys();
43 QJsonObject from_invalid(
const Variant& variant);
44 Variant to_invalid(
const QJsonObject&
object);
46 QJsonObject from_bool(
const Variant& variant);
47 Variant to_bool(
const QJsonObject&
object);
49 QJsonObject from_int(
const Variant& variant);
50 Variant to_int(
const QJsonObject&
object);
52 QJsonObject from_string(
const Variant& variant);
53 Variant to_string(
const QJsonObject&
object);
55 QJsonObject from_double(
const Variant& variant);
56 Variant to_double(
const QJsonObject&
object);
58 QJsonObject from_vector_double(
const Variant& variant);
59 Variant to_vector_double(
const QJsonObject&
object);
61 QJsonObject from_comboproperty(
const Variant& variant);
62 Variant to_comboproperty(
const QJsonObject&
object);
64 QJsonObject from_qcolor(
const Variant& variant);
65 Variant to_qcolor(
const QJsonObject&
object);
67 QJsonObject from_extproperty(
const Variant& variant);
68 Variant to_extproperty(
const QJsonObject&
object);
70 QJsonObject from_reallimits(
const Variant& variant);
71 Variant to_reallimits(
const QJsonObject&
object);
94 throw std::runtime_error(
"json::get_json() -> Error. Unknown variant type '" + type_name
103 throw std::runtime_error(
"json::get_variant() -> Error. Invalid json object");
105 const auto type_name =
object[variantTypeKey].toString().toStdString();
107 throw std::runtime_error(
"json::get_variant() -> Error. Unknown variant type '" + type_name
108 +
"' in json object.");
117 static const QStringList expected = expected_variant_keys();
118 return object.keys() == expected;
123 QStringList expected_variant_keys()
125 QStringList result = QStringList() << variantTypeKey << variantValueKey;
126 std::sort(result.begin(), result.end());
130 QJsonObject from_invalid(
const Variant& variant)
135 result[variantValueKey] = QJsonValue();
139 Variant to_invalid(
const QJsonObject&
object)
145 QJsonObject from_bool(
const Variant& variant)
149 result[variantValueKey] = variant.value<
bool>();
153 Variant to_bool(
const QJsonObject&
object)
155 return object[variantValueKey].toVariant();
158 QJsonObject from_int(
const Variant& variant)
162 result[variantValueKey] = variant.value<
int>();
166 Variant to_int(
const QJsonObject&
object)
169 return Variant::fromValue(
object[variantValueKey].toVariant().value<int>());
172 QJsonObject from_string(
const Variant& variant)
176 result[variantValueKey] = QString::fromStdString(variant.value<std::string>());
180 Variant to_string(
const QJsonObject&
object)
182 std::string value =
object[variantValueKey].toString().toStdString();
183 return Variant::fromValue(value);
186 QJsonObject from_double(
const Variant& variant)
190 result[variantValueKey] = variant.value<
double>();
194 Variant to_double(
const QJsonObject&
object)
198 return object[variantValueKey].toVariant().value<
double>();
203 QJsonObject from_vector_double(
const Variant& variant)
208 auto data = variant.value<std::vector<double>>();
209 std::copy(data.begin(), data.end(), std::back_inserter(array));
210 result[variantValueKey] = array;
214 Variant to_vector_double(
const QJsonObject&
object)
216 std::vector<double> vec;
217 for (
auto x :
object[variantValueKey].toArray())
218 vec.push_back(x.toDouble());
219 return Variant::fromValue(vec);
224 QJsonObject from_comboproperty(
const Variant& variant)
229 QJsonObject json_data;
230 json_data[comboValuesKey] = QString::fromStdString(combo.stringOfValues());
231 json_data[comboSelectionKey] = QString::fromStdString(combo.stringOfSelections());
232 result[variantValueKey] = json_data;
236 Variant to_comboproperty(
const QJsonObject&
object)
239 QJsonObject json_data =
object[variantValueKey].toObject();
242 return Variant::fromValue(combo);
247 QJsonObject from_qcolor(
const Variant& variant)
251 auto color = variant.value<QColor>();
252 result[variantValueKey] = color.name(QColor::HexArgb);
256 Variant to_qcolor(
const QJsonObject&
object)
258 return Variant::fromValue(QColor(
object[variantValueKey].
toString()));
263 QJsonObject from_extproperty(
const Variant& variant)
268 QJsonObject json_data;
269 json_data[extPropertyTextKey] = QString::fromStdString(extprop.text());
270 json_data[extPropertyColorKey] = extprop.color().name(QColor::HexArgb);
271 json_data[extPropertyIdKey] = QString::fromStdString(extprop.identifier());
272 result[variantValueKey] = json_data;
276 Variant to_extproperty(
const QJsonObject&
object)
278 QJsonObject json_data =
object[variantValueKey].toObject();
279 const std::string text = json_data[extPropertyTextKey].toString().toStdString();
280 const std::string color = json_data[extPropertyColorKey].toString().toStdString();
281 const std::string
id = json_data[extPropertyIdKey].toString().toStdString();
283 return Variant::fromValue(
ExternalProperty(text, QColor(QString::fromStdString(color)),
id));
288 QJsonObject from_reallimits(
const Variant& variant)
293 QJsonObject json_data;
296 json_data[realLimitsMinKey] = limits.lowerLimit();
297 json_data[realLimitsMaxKey] = limits.upperLimit();
299 result[variantValueKey] = json_data;
303 Variant to_reallimits(
const QJsonObject&
object)
305 QJsonObject json_data =
object[variantValueKey].toObject();
306 const std::string text = json_data[realLimitsTextKey].toString().toStdString();
307 const double min = json_data[realLimitsMinKey].toDouble();
308 const double max = json_data[realLimitsMaxKey].toDouble();
Custom property to define list of string values with multiple selections.
void setStringOfSelections(const std::string &values)
Sets selected indices from string.
void setStringOfValues(const std::string &values)
Sets values from the string containing delimeter ';'.
Property to carry text, color and identifier.
QJsonObject get_json(const Variant &variant) override
std::map< std::string, Converters > m_converters
bool isVariant(const QJsonObject &object) const
Returns true if given json object represents variant.
Variant get_variant(const QJsonObject &object) override
const std::string string_type_name
const std::string bool_type_name
const std::string reallimits_type_name
const std::string comboproperty_type_name
const std::string double_type_name
const std::string extproperty_type_name
const std::string vector_double_type_name
const std::string invalid_type_name
const std::string qcolor_type_name
const std::string int_type_name
MVVM_MODEL_EXPORT RealLimits CreateLimits(const std::string &text, double min=0.0, double max=0.0)
MVVM_MODEL_EXPORT std::string ToString(const RealLimits &limits)
Returns string representation of RealLimits.
MVVM_MODEL_EXPORT std::string VariantName(const Variant &variant)
Returns name of variant.
materialitems.h Collection of materials to populate MaterialModel.
std::string toString(PyObject *obj)
Converts PyObject into string, if possible, or throws exception.