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.toMap();
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::insertChild(int index, QQmlTreeRow *child)
41{
42 m_children.insert(m_children.begin() + index, std::unique_ptr<QQmlTreeRow>(child));
43 child->setParent(this);
44}
45
46void QQmlTreeRow::unpackVariantMap(const QVariantMap &variantMap)
47{
48 for (auto it = variantMap.begin(); it != variantMap.end(); ++it) {
49 const QString& key = it.key();
50 const QVariant& value = it.value();
51
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));
56 } else {
57 dataMap.insert(key, value);
58 }
59 }
60}
61
62void QQmlTreeRow::removeChild(std::vector<std::unique_ptr<QQmlTreeRow>>::const_iterator &child)
63{
64 m_children.erase(child);
65}
66
67void QQmlTreeRow::removeChildAt(int i)
68{
69 m_children.erase(std::next(m_children.begin(), i));
70}
71
72void QQmlTreeRow::setData(const QVariant &data)
73{
74 dataMap.clear();
75 const QVariantMap variantMap = data.toJsonObject().toVariantMap();
76 unpackVariantMap(variantMap);
77}
78
79void QQmlTreeRow::setData(const QVariantMap &data)
80{
81 dataMap.clear();
82 unpackVariantMap(data);
83}
84
85void QQmlTreeRow::setField(const QString &key, const QVariant &value)
86{
87 if (dataMap.contains(key))
88 dataMap[key] = value;
89}
90
91QVariant QQmlTreeRow::toVariant() const
92{
93 QVariantMap variantMap(dataMap);
94
95 if (!m_children.empty()) {
96 QVariantList children;
97 for (const auto &child : m_children)
98 children.append(child->toVariant());
99
100 variantMap[TREE_ROWS_PROPERTY_NAME] = children;
101 }
102
103 return variantMap;
104}
105
106int QQmlTreeRow::subTreeSize() const
107{
108 int size = 1;
109
110 for (const auto &child : m_children)
111 size += child->subTreeSize();
112
113 return size;
114}
115
116QT_END_NAMESPACE
Combined button and popup list for selecting options.
static const QString TREE_ROWS_PROPERTY_NAME