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 "qquickgraphssurfaceseries_p.h"
6#include "utils_p.h"
7
8QT_BEGIN_NAMESPACE
9
10QQuickGraphsSurface3DSeries::QQuickGraphsSurface3DSeries(QObject *parent)
11 : QSurface3DSeries(parent)
12
13{
14 QObject::connect(sender: this,
15 signal: &QSurface3DSeries::selectedPointChanged,
16 context: this,
17 slot: &QQuickGraphsSurface3DSeries::selectedPointChanged);
18}
19
20QQuickGraphsSurface3DSeries::~QQuickGraphsSurface3DSeries() {}
21
22void QQuickGraphsSurface3DSeries::setSelectedPoint(QPointF position)
23{
24 QSurface3DSeries::setSelectedPoint(position.toPoint());
25}
26
27QPointF QQuickGraphsSurface3DSeries::selectedPoint() const
28{
29 return QPointF(QSurface3DSeries::selectedPoint());
30}
31
32QPointF QQuickGraphsSurface3DSeries::invalidSelectionPosition() const
33{
34 return QPointF(QSurface3DSeries::invalidSelectionPosition());
35}
36
37QQmlListProperty<QObject> QQuickGraphsSurface3DSeries::seriesChildren()
38{
39 return QQmlListProperty<QObject>(this,
40 this,
41 &QQuickGraphsSurface3DSeries::appendSeriesChildren,
42 0,
43 0,
44 0);
45}
46
47void QQuickGraphsSurface3DSeries::appendSeriesChildren(QQmlListProperty<QObject> *list,
48 QObject *element)
49{
50 QSurfaceDataProxy *proxy = qobject_cast<QSurfaceDataProxy *>(object: element);
51 if (proxy)
52 reinterpret_cast<QQuickGraphsSurface3DSeries *>(list->data)->setDataProxy(proxy);
53}
54
55void QQuickGraphsSurface3DSeries::setBaseGradient(QQuickGradient *gradient)
56{
57 if (m_gradients.m_baseGradient != gradient) {
58 setGradientHelper(newGradient: gradient, memberGradient: m_gradients.m_baseGradient, type: GradientType::Base);
59 m_gradients.m_baseGradient = gradient;
60 Q_EMIT baseGradientChanged(gradient: m_gradients.m_baseGradient);
61 }
62}
63
64QQuickGradient *QQuickGraphsSurface3DSeries::baseGradient() const
65{
66 return m_gradients.m_baseGradient;
67}
68
69void QQuickGraphsSurface3DSeries::setSingleHighlightGradient(QQuickGradient *gradient)
70{
71 if (m_gradients.m_singleHighlightGradient != gradient) {
72 setGradientHelper(newGradient: gradient, memberGradient: m_gradients.m_singleHighlightGradient, type: GradientType::Single);
73 m_gradients.m_singleHighlightGradient = gradient;
74 Q_EMIT singleHighlightGradientChanged(gradient: m_gradients.m_singleHighlightGradient);
75 }
76}
77
78QQuickGradient *QQuickGraphsSurface3DSeries::singleHighlightGradient() const
79{
80 return m_gradients.m_singleHighlightGradient;
81}
82
83void QQuickGraphsSurface3DSeries::setMultiHighlightGradient(QQuickGradient *gradient)
84{
85 if (m_gradients.m_multiHighlightGradient != gradient) {
86 setGradientHelper(newGradient: gradient, memberGradient: m_gradients.m_multiHighlightGradient, type: GradientType::Multi);
87 m_gradients.m_multiHighlightGradient = gradient;
88 Q_EMIT multiHighlightGradientChanged(gradient: m_gradients.m_multiHighlightGradient);
89 }
90}
91
92QQuickGradient *QQuickGraphsSurface3DSeries::multiHighlightGradient() const
93{
94 return m_gradients.m_multiHighlightGradient;
95}
96
97void QQuickGraphsSurface3DSeries::handleBaseGradientUpdate()
98{
99 if (!m_gradients.m_baseGradient)
100 Utils::setSeriesGradient(series: this, gradient: m_gradients.m_baseGradient, type: GradientType::Base);
101}
102
103void QQuickGraphsSurface3DSeries::handleSingleHighlightGradientUpdate()
104{
105 if (!m_gradients.m_singleHighlightGradient)
106 Utils::setSeriesGradient(series: this, gradient: m_gradients.m_singleHighlightGradient, type: GradientType::Single);
107}
108
109void QQuickGraphsSurface3DSeries::handleMultiHighlightGradientUpdate()
110{
111 if (!m_gradients.m_multiHighlightGradient)
112 Utils::setSeriesGradient(series: this, gradient: m_gradients.m_multiHighlightGradient, type: GradientType::Multi);
113}
114
115void QQuickGraphsSurface3DSeries::setGradientHelper(QQuickGradient *newGradient,
116 QQuickGradient *memberGradient,
117 GradientType type)
118{
119 if (memberGradient)
120 QObject::disconnect(sender: memberGradient, signal: 0, receiver: this, member: 0);
121 Utils::setSeriesGradient(series: this, gradient: newGradient, type);
122 memberGradient = newGradient;
123 if (memberGradient) {
124 switch (type) {
125 case GradientType::Base:
126 QObject::connect(sender: memberGradient,
127 signal: &QQuickGradient::updated,
128 context: this,
129 slot: &QQuickGraphsSurface3DSeries::handleBaseGradientUpdate);
130 break;
131 case GradientType::Single:
132 QObject::connect(sender: memberGradient,
133 signal: &QQuickGradient::updated,
134 context: this,
135 slot: &QQuickGraphsSurface3DSeries::handleSingleHighlightGradientUpdate);
136 break;
137 case GradientType::Multi:
138 QObject::connect(sender: memberGradient,
139 signal: &QQuickGradient::updated,
140 context: this,
141 slot: &QQuickGraphsSurface3DSeries::handleMultiHighlightGradientUpdate);
142 break;
143 default:
144 break;
145 }
146 }
147}
148
149QT_END_NAMESPACE
150

Provided by KDAB

Privacy Policy
Start learning QML with our Intro Training
Find out more

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