1// Copyright (C) 2024 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#include <QtCore/QMetaMethod>
5#include "qquickgraphsscatterseries_p.h"
6#include "utils_p.h"
7
8QT_BEGIN_NAMESPACE
9
10QQuickGraphsScatter3DSeries::QQuickGraphsScatter3DSeries(QObject *parent)
11 : QScatter3DSeries(parent)
12{}
13
14QQuickGraphsScatter3DSeries::~QQuickGraphsScatter3DSeries() {}
15
16QQmlListProperty<QObject> QQuickGraphsScatter3DSeries::seriesChildren()
17{
18 return QQmlListProperty<QObject>(this,
19 this,
20 &QQuickGraphsScatter3DSeries::appendSeriesChildren,
21 0,
22 0,
23 0);
24}
25
26void QQuickGraphsScatter3DSeries::appendSeriesChildren(QQmlListProperty<QObject> *list,
27 QObject *element)
28{
29 QScatterDataProxy *proxy = qobject_cast<QScatterDataProxy *>(object: element);
30 if (proxy)
31 reinterpret_cast<QQuickGraphsScatter3DSeries *>(list->data)->setDataProxy(proxy);
32}
33
34void QQuickGraphsScatter3DSeries::setBaseGradient(QQuickGradient *gradient)
35{
36 if (m_gradients.m_baseGradient != gradient) {
37 setGradientHelper(newGradient: gradient, memberGradient: m_gradients.m_baseGradient, type: GradientType::Base);
38 m_gradients.m_baseGradient = gradient;
39 Q_EMIT baseGradientChanged(gradient: m_gradients.m_baseGradient);
40 }
41}
42
43QQuickGradient *QQuickGraphsScatter3DSeries::baseGradient() const
44{
45 return m_gradients.m_baseGradient;
46}
47
48void QQuickGraphsScatter3DSeries::setSingleHighlightGradient(QQuickGradient *gradient)
49{
50 if (m_gradients.m_singleHighlightGradient != gradient) {
51 setGradientHelper(newGradient: gradient, memberGradient: m_gradients.m_singleHighlightGradient, type: GradientType::Single);
52 m_gradients.m_singleHighlightGradient = gradient;
53 Q_EMIT singleHighlightGradientChanged(gradient: m_gradients.m_singleHighlightGradient);
54 }
55}
56
57QQuickGradient *QQuickGraphsScatter3DSeries::singleHighlightGradient() const
58{
59 return m_gradients.m_singleHighlightGradient;
60}
61
62void QQuickGraphsScatter3DSeries::setMultiHighlightGradient(QQuickGradient *gradient)
63{
64 if (m_gradients.m_multiHighlightGradient != gradient) {
65 setGradientHelper(newGradient: gradient, memberGradient: m_gradients.m_multiHighlightGradient, type: GradientType::Multi);
66 m_gradients.m_multiHighlightGradient = gradient;
67 Q_EMIT multiHighlightGradientChanged(gradient: m_gradients.m_multiHighlightGradient);
68 }
69}
70
71QQuickGradient *QQuickGraphsScatter3DSeries::multiHighlightGradient() const
72{
73 return m_gradients.m_multiHighlightGradient;
74}
75
76qsizetype QQuickGraphsScatter3DSeries::invalidSelectionIndex() const
77{
78 return QScatter3DSeries::invalidSelectionIndex();
79}
80
81void QQuickGraphsScatter3DSeries::handleBaseGradientUpdate()
82{
83 if (!m_gradients.m_baseGradient)
84 Utils::setSeriesGradient(series: this, gradient: m_gradients.m_baseGradient, type: GradientType::Base);
85}
86
87void QQuickGraphsScatter3DSeries::handleSingleHighlightGradientUpdate()
88{
89 if (!m_gradients.m_singleHighlightGradient)
90 Utils::setSeriesGradient(series: this, gradient: m_gradients.m_singleHighlightGradient, type: GradientType::Single);
91}
92
93void QQuickGraphsScatter3DSeries::handleMultiHighlightGradientUpdate()
94{
95 if (!m_gradients.m_multiHighlightGradient)
96 Utils::setSeriesGradient(series: this, gradient: m_gradients.m_multiHighlightGradient, type: GradientType::Multi);
97}
98
99void QQuickGraphsScatter3DSeries::setGradientHelper(QQuickGradient *newGradient,
100 QQuickGradient *memberGradient,
101 GradientType type)
102{
103 if (memberGradient)
104 QObject::disconnect(sender: memberGradient, signal: 0, receiver: this, member: 0);
105 Utils::setSeriesGradient(series: this, gradient: newGradient, type);
106 memberGradient = newGradient;
107 if (memberGradient) {
108 switch (type) {
109 case GradientType::Base:
110 QObject::connect(sender: memberGradient,
111 signal: &QQuickGradient::updated,
112 context: this,
113 slot: &QQuickGraphsScatter3DSeries::handleBaseGradientUpdate);
114 break;
115 case GradientType::Single:
116 QObject::connect(sender: memberGradient,
117 signal: &QQuickGradient::updated,
118 context: this,
119 slot: &QQuickGraphsScatter3DSeries::handleSingleHighlightGradientUpdate);
120 break;
121 case GradientType::Multi:
122 QObject::connect(sender: memberGradient,
123 signal: &QQuickGradient::updated,
124 context: this,
125 slot: &QQuickGraphsScatter3DSeries::handleMultiHighlightGradientUpdate);
126 break;
127 default:
128 break;
129 }
130 }
131}
132
133QT_END_NAMESPACE
134

Provided by KDAB

Privacy Policy
Learn to use CMake with our Intro Training
Find out more

source code of qtgraphs/src/graphs3d/qml/qquickgraphsscatterseries.cpp