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