7#include <QtCore/qjsonobject.h>
11using namespace Qt::Literals::StringLiterals;
14QQmlTreeRow::QQmlTreeRow(QQmlTreeRow *parentItem)
15 : m_parent(parentItem)
20QQmlTreeRow::QQmlTreeRow(
const QVariant &data, QQmlTreeRow *parentItem)
21 : m_parent(parentItem)
23 QVariantMap variantMap = data.toJsonObject().toVariantMap();
24 unpackVariantMap(variantMap);
27QQmlTreeRow::QQmlTreeRow(
const QVariantMap &data, QQmlTreeRow *parentItem)
28 : m_parent(parentItem),
31 unpackVariantMap(data);
34void QQmlTreeRow::addChild(QQmlTreeRow *child)
36 m_children.push_back(std::unique_ptr<QQmlTreeRow>(child));
37 child->setParent(
this);
40void QQmlTreeRow::unpackVariantMap(
const QVariantMap &variantMap)
42 for (
auto it = variantMap.begin(); it != variantMap.end(); ++it) {
43 const QString& key = it.key();
44 const QVariant& value = it.value();
46 if ((value.typeId() == QMetaType::Type::QVariantList) && (key == TREE_ROWS_PROPERTY_NAME)) {
47 const QList<QVariant> variantList = value.toList();
48 for (
const QVariant &rowAsVariant : variantList)
49 m_children.push_back(std::make_unique<QQmlTreeRow>(rowAsVariant,
this));
51 dataMap.insert(key, value);
56void QQmlTreeRow::removeChild(std::vector<std::unique_ptr<QQmlTreeRow>>::const_iterator &child)
58 m_children.erase(child);
61void QQmlTreeRow::removeChildAt(
int i)
63 m_children.erase(std::next(m_children.begin(), i));
66void QQmlTreeRow::setData(
const QVariant &data)
69 const QVariantMap variantMap = data.toJsonObject().toVariantMap();
70 unpackVariantMap(variantMap);
73void QQmlTreeRow::setData(
const QVariantMap &data)
76 unpackVariantMap(data);
79void QQmlTreeRow::setField(
const QString &key,
const QVariant &value)
81 if (dataMap.contains(key))
85QVariant QQmlTreeRow::toVariant()
const
87 QVariantMap variantMap(dataMap);
89 if (!m_children.empty()) {
90 QVariantList children;
91 for (
const auto &child : m_children)
92 children.append(child->toVariant());
94 variantMap[TREE_ROWS_PROPERTY_NAME] = children;
100int QQmlTreeRow::subTreeSize()
const
104 for (
const auto &child : m_children)
105 size += child->subTreeSize();
static const QString TREE_ROWS_PROPERTY_NAME