Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qqmltreerow.cpp
Go to the documentation of this file.
1// Copyright (C) 2025 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
6
7#include <QtCore/qjsonobject.h>
8
10
11using namespace Qt::Literals::StringLiterals;
12static const QString TREE_ROWS_PROPERTY_NAME = u"rows"_s;
13
14QQmlTreeRow::QQmlTreeRow(QQmlTreeRow *parentItem)
15 : m_parent(parentItem)
16{
17
18}
19
20QQmlTreeRow::QQmlTreeRow(const QVariant &data, QQmlTreeRow *parentItem)
21 : m_parent(parentItem)
22{
23 QVariantMap variantMap = data.toJsonObject().toVariantMap();
24 unpackVariantMap(variantMap);
25}
26
27QQmlTreeRow::QQmlTreeRow(const QVariantMap &data, QQmlTreeRow *parentItem)
28 : m_parent(parentItem),
29 dataMap(data)
30{
31 unpackVariantMap(data);
32}
33
34void QQmlTreeRow::addChild(QQmlTreeRow *child)
35{
36 m_children.push_back(std::unique_ptr<QQmlTreeRow>(child));
37 child->setParent(this);
38}
39
40void QQmlTreeRow::unpackVariantMap(const QVariantMap &variantMap)
41{
42 for (auto it = variantMap.begin(); it != variantMap.end(); ++it) {
43 const QString& key = it.key();
44 const QVariant& value = it.value();
45
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));
50 } else {
51 dataMap.insert(key, value);
52 }
53 }
54}
55
56void QQmlTreeRow::removeChild(std::vector<std::unique_ptr<QQmlTreeRow>>::const_iterator &child)
57{
58 m_children.erase(child);
59}
60
61void QQmlTreeRow::removeChildAt(int i)
62{
63 m_children.erase(std::next(m_children.begin(), i));
64}
65
66void QQmlTreeRow::setData(const QVariant &data)
67{
68 dataMap.clear();
69 const QVariantMap variantMap = data.toJsonObject().toVariantMap();
70 unpackVariantMap(variantMap);
71}
72
73void QQmlTreeRow::setData(const QVariantMap &data)
74{
75 dataMap.clear();
76 unpackVariantMap(data);
77}
78
79void QQmlTreeRow::setField(const QString &key, const QVariant &value)
80{
81 if (dataMap.contains(key))
82 dataMap[key] = value;
83}
84
85QVariant QQmlTreeRow::toVariant() const
86{
87 QVariantMap variantMap(dataMap);
88
89 if (!m_children.empty()) {
90 QVariantList children;
91 for (const auto &child : m_children)
92 children.append(child->toVariant());
93
94 variantMap[TREE_ROWS_PROPERTY_NAME] = children;
95 }
96
97 return variantMap;
98}
99
100int QQmlTreeRow::subTreeSize() const
101{
102 int size = 1;
103
104 for (const auto &child : m_children)
105 size += child->subTreeSize();
106
107 return size;
108}
109
110QT_END_NAMESPACE
static const QString TREE_ROWS_PROPERTY_NAME