7#include <QtCore/qjsonobject.h>
11using namespace Qt::Literals::StringLiterals;
14 : m_parent(parentItem)
20 : m_parent(parentItem)
22 QVariantMap variantMap = data.toMap();
23 unpackVariantMap(variantMap);
27 : m_parent(parentItem)
29 unpackVariantMap(data);
34 m_children.push_back(std::unique_ptr<QQmlTreeRow>(child));
40 child->setParent(
this);
41 m_children.insert(m_children.begin() + index, std::move(child));
44void QQmlTreeRow::unpackVariantMap(
const QVariantMap &variantMap)
46 for (
auto it = variantMap.begin(); it != variantMap.end(); ++it) {
47 const QString& key = it.key();
48 const QVariant& value = it.value();
50 if ((value.typeId() == QMetaType::Type::QVariantList) && (key == ROWS_PROPERTY_NAME)) {
51 const QList<QVariant> variantList = value.toList();
52 for (
const QVariant &rowAsVariant : variantList)
53 m_children.push_back(std::make_unique<QQmlTreeRow>(rowAsVariant,
this));
55 dataMap.insert(key, value);
62 m_children.erase(child);
67 m_children.erase(std::next(m_children.begin(), i));
72 auto it =
std::next(m_children.begin(), i);
73 std::unique_ptr<QQmlTreeRow> child =
std::move(*it);
81 const QVariantMap variantMap = data.toJsonObject().toVariantMap();
82 unpackVariantMap(variantMap);
88 unpackVariantMap(data);
93 if (dataMap.contains(key))
99 QVariantMap variantMap(dataMap);
101 if (!m_children.empty()) {
102 QVariantList children;
103 for (
const auto &child : m_children)
104 children.append(child->toVariant());
106 variantMap[ROWS_PROPERTY_NAME] = children;
116 for (
const auto &child : m_children)
117 size += child->subTreeSize();
void addChild(QQmlTreeRow *child)
QVariant toVariant() const
std::unique_ptr< QQmlTreeRow > takeChild(int i)
void setData(const QVariant &data)
void setParent(QQmlTreeRow *parent)
void setField(const QString &key, const QVariant &value)
void removeChild(std::vector< std::unique_ptr< QQmlTreeRow > >::const_iterator &child)
QQmlTreeRow(QQmlTreeRow *parentItem=nullptr)
QQmlTreeRow(const QVariant &data, QQmlTreeRow *parentItem=nullptr)
void insertChild(int index, std::unique_ptr< QQmlTreeRow > child)
void removeChildAt(int i)
Combined button and popup list for selecting options.