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 "qquickgraphssplineseries_p.h"
6#include "utils_p.h"
7
8QT_BEGIN_NAMESPACE
9
10QQuickGraphsSpline3DSeries::QQuickGraphsSpline3DSeries(QObject *parent)
11 : QSpline3DSeries(parent)
12{}
13
14QQuickGraphsSpline3DSeries::~QQuickGraphsSpline3DSeries() {}
15
16QQmlListProperty<QObject> QQuickGraphsSpline3DSeries::seriesChildren()
17{
18 return QQmlListProperty<QObject>(this,
19 this,
20 &QQuickGraphsSpline3DSeries::appendSeriesChildren,
21 0,
22 0,
23 0);
24}
25
26void QQuickGraphsSpline3DSeries::appendSeriesChildren(QQmlListProperty<QObject> *list,
27 QObject *element)
28{
29 QScatterDataProxy *proxy = qobject_cast<QScatterDataProxy *>(object: element);
30 if (proxy)
31 reinterpret_cast<QQuickGraphsSpline3DSeries *>(list->data)->setDataProxy(proxy);
32}
33
34void QQuickGraphsSpline3DSeries::setBaseGradient(QQuickGradient *gradient)
35{
36 if (m_baseGradient != gradient) {
37 setGradientHelper(newGradient: gradient, memberGradient: m_baseGradient, type: GradientType::Base);
38 m_baseGradient = gradient;
39 Q_EMIT baseGradientChanged(gradient: m_baseGradient);
40 }
41}
42
43QQuickGradient *QQuickGraphsSpline3DSeries::baseGradient() const
44{
45 return m_baseGradient;
46}
47
48void QQuickGraphsSpline3DSeries::setSingleHighlightGradient(QQuickGradient *gradient)
49{
50 if (m_singleHighlightGradient != gradient) {
51 setGradientHelper(newGradient: gradient, memberGradient: m_singleHighlightGradient, type: GradientType::Single);
52 m_singleHighlightGradient = gradient;
53 Q_EMIT singleHighlightGradientChanged(gradient: m_singleHighlightGradient);
54 }
55}
56
57QQuickGradient *QQuickGraphsSpline3DSeries::singleHighlightGradient() const
58{
59 return m_singleHighlightGradient;
60}
61
62void QQuickGraphsSpline3DSeries::setMultiHighlightGradient(QQuickGradient *gradient)
63{
64 if (m_multiHighlightGradient != gradient) {
65 setGradientHelper(newGradient: gradient, memberGradient: m_multiHighlightGradient, type: GradientType::Multi);
66 m_multiHighlightGradient = gradient;
67 Q_EMIT multiHighlightGradientChanged(gradient: m_multiHighlightGradient);
68 }
69}
70
71QQuickGradient *QQuickGraphsSpline3DSeries::multiHighlightGradient() const
72{
73 return m_multiHighlightGradient;
74}
75
76int QQuickGraphsSpline3DSeries::invalidSelectionIndex() const
77{
78 return QSpline3DSeries::invalidSelectionIndex();
79}
80
81void QQuickGraphsSpline3DSeries::handleBaseGradientUpdate()
82{
83 if (!m_baseGradient)
84 Utils::setSeriesGradient(series: this, gradient: m_baseGradient, type: GradientType::Base);
85}
86
87void QQuickGraphsSpline3DSeries::handleSingleHighlightGradientUpdate()
88{
89 if (!m_singleHighlightGradient)
90 Utils::setSeriesGradient(series: this, gradient: m_singleHighlightGradient, type: GradientType::Single);
91}
92
93void QQuickGraphsSpline3DSeries::handleMultiHighlightGradientUpdate()
94{
95 if (!m_multiHighlightGradient)
96 Utils::setSeriesGradient(series: this, gradient: m_multiHighlightGradient, type: GradientType::Multi);
97}
98
99void QQuickGraphsSpline3DSeries::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: &QQuickGraphsSpline3DSeries::handleBaseGradientUpdate);
114 break;
115 case GradientType::Single:
116 QObject::connect(sender: memberGradient,
117 signal: &QQuickGradient::updated,
118 context: this,
119 slot: &QQuickGraphsSpline3DSeries::handleSingleHighlightGradientUpdate);
120 break;
121 case GradientType::Multi:
122 QObject::connect(sender: memberGradient,
123 signal: &QQuickGradient::updated,
124 context: this,
125 slot: &QQuickGraphsSpline3DSeries::handleMultiHighlightGradientUpdate);
126 break;
127 default:
128 break;
129 }
130 }
131}
132
133QT_END_NAMESPACE
134

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