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.toMap();
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::insertChild(
int index, QQmlTreeRow *child)
42 m_children.insert(m_children.begin() + index, std::unique_ptr<QQmlTreeRow>(child));
43 child->setParent(
this);
46void QQmlTreeRow::unpackVariantMap(
const QVariantMap &variantMap)
48 for (
auto it = variantMap.begin(); it != variantMap.end(); ++it) {
49 const QString& key = it.key();
50 const QVariant& value = it.value();
52 if ((value.typeId() == QMetaType::Type::QVariantList) && (key == TREE_ROWS_PROPERTY_NAME)) {
53 const QList<QVariant> variantList = value.toList();
54 for (
const QVariant &rowAsVariant : variantList)
55 m_children.push_back(std::make_unique<QQmlTreeRow>(rowAsVariant,
this));
57 dataMap.insert(key, value);
62void QQmlTreeRow::removeChild(std::vector<std::unique_ptr<QQmlTreeRow>>::const_iterator &child)
64 m_children.erase(child);
67void QQmlTreeRow::removeChildAt(
int i)
69 m_children.erase(std::next(m_children.begin(), i));
72void QQmlTreeRow::setData(
const QVariant &data)
75 const QVariantMap variantMap = data.toJsonObject().toVariantMap();
76 unpackVariantMap(variantMap);
79void QQmlTreeRow::setData(
const QVariantMap &data)
82 unpackVariantMap(data);
85void QQmlTreeRow::setField(
const QString &key,
const QVariant &value)
87 if (dataMap.contains(key))
91QVariant QQmlTreeRow::toVariant()
const
93 QVariantMap variantMap(dataMap);
95 if (!m_children.empty()) {
96 QVariantList children;
97 for (
const auto &child : m_children)
98 children.append(child->toVariant());
100 variantMap[TREE_ROWS_PROPERTY_NAME] = children;
106int QQmlTreeRow::subTreeSize()
const
110 for (
const auto &child : m_children)
111 size += child->subTreeSize();
Combined button and popup list for selecting options.
static const QString TREE_ROWS_PROPERTY_NAME