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
qqmlvaluetypeproxybinding.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 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
4
6
8
9/*!
10 \class QQmlValueTypeProxyBinding
11 \inmodule QtQml
12 \internal
13*/
14QQmlValueTypeProxyBinding::QQmlValueTypeProxyBinding(QObject *o, QQmlPropertyIndex index)
15 : QQmlAbstractBinding(),
16 m_bindings(nullptr)
17{
18 m_target = o;
19 m_targetIndex = index;
20}
21
22QQmlValueTypeProxyBinding::~QQmlValueTypeProxyBinding()
23{
24 QQmlAbstractBinding *binding = m_bindings.data();
25 while (binding) {
26 binding->setAddedToObject(false);
27 binding = binding->nextBinding();
28 }
29}
30
31void QQmlValueTypeProxyBinding::setEnabled(bool e, QQmlPropertyData::WriteFlags flags)
32{
33 QQmlAbstractBinding *b = m_bindings.data();
34 while (b) {
35 b->setEnabled(e, flags);
36 b = b->nextBinding();
37 }
38}
39
40QQmlAbstractBinding *QQmlValueTypeProxyBinding::subBindings() const
41{
42 return m_bindings.data();
43}
44
45QQmlAbstractBinding *QQmlValueTypeProxyBinding::binding(QQmlPropertyIndex propertyIndex) const
46{
47 QQmlAbstractBinding *binding = m_bindings.data();
48
49 while (binding && binding->targetPropertyIndex() != propertyIndex)
50 binding = binding->nextBinding();
51
52 return binding;
53}
54
55/*!
56 \internal
57 Removes a collection of bindings, corresponding to the set bits
58 in \a mask.
59*/
60void QQmlValueTypeProxyBinding::removeBindings(quint32 mask)
61{
62 QQmlAbstractBinding *binding = m_bindings.data();
63 QQmlAbstractBinding *lastBinding = nullptr;
64
65 while (binding) {
66 const int valueTypeIndex = binding->targetPropertyIndex().valueTypeIndex();
67 if (valueTypeIndex != -1 && (mask & (1 << valueTypeIndex))) {
68 QQmlAbstractBinding *remove = binding;
69 remove->setAddedToObject(false);
70 binding = remove->nextBinding();
71
72 if (lastBinding == nullptr)
73 m_bindings = remove->nextBinding();
74 else
75 lastBinding->setNextBinding(remove->nextBinding());
76 } else {
77 lastBinding = binding;
78 binding = binding->nextBinding();
79 }
80 }
81}
82
83QT_END_NAMESPACE
Combined button and popup list for selecting options.