1// Copyright (C) 2025 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4//
5// W A R N I N G
6// -------------
7//
8// This file is not part of the QtGraphs API. It exists purely as an
9// implementation detail. This header file may change from version to
10// version without notice, or even be removed.
11//
12// We mean it.
13//
14#ifndef QQUICKGRAPHSSCATTERNODE_P_H
15#define QQUICKGRAPHSSCATTERNODE_P_H
16
17#include "qquickgraphsnode_p.h"
18#include "qquickgraphsscatter_p.h"
19#include "qbar3dseries.h"
20
21#include <private/qgraphsglobal_p.h>
22
23QT_BEGIN_NAMESPACE
24
25class QQuickGraphsScatterNode;
26
27class Q_GRAPHS_EXPORT QQuickGraphsScatterNode : public QQuickGraphsNode
28{
29 Q_OBJECT
30 Q_PROPERTY(QValue3DAxis *axisX READ axisX WRITE setAxisX NOTIFY axisXChanged)
31 Q_PROPERTY(QValue3DAxis *axisY READ axisY WRITE setAxisY NOTIFY axisYChanged)
32 Q_PROPERTY(QValue3DAxis *axisZ READ axisZ WRITE setAxisZ NOTIFY axisZChanged)
33 Q_PROPERTY(QScatter3DSeries *selectedSeries READ selectedSeries NOTIFY selectedSeriesChanged)
34 Q_PROPERTY(QQmlListProperty<QScatter3DSeries> seriesList READ seriesList CONSTANT)
35 Q_CLASSINFO("DefaultProperty", "seriesList")
36
37 QML_ADDED_IN_VERSION(6, 10)
38 QML_NAMED_ELEMENT(Scatter3DNode)
39
40public:
41 explicit QQuickGraphsScatterNode(QQuick3DNode *parent = nullptr);
42 ~QQuickGraphsScatterNode() override;
43
44 QValue3DAxis *axisX() const;
45 void setAxisX(QValue3DAxis *axis);
46
47 QValue3DAxis *axisY() const;
48 void setAxisY(QValue3DAxis *axis);
49
50 QValue3DAxis *axisZ() const;
51 void setAxisZ(QValue3DAxis *axis);
52
53 QScatter3DSeries *selectedSeries() const;
54
55 void setSelectionMode(QtGraphs3D::SelectionFlags mode) override;
56
57 QList<QScatter3DSeries *> scatterSeriesList();
58 QQmlListProperty<QScatter3DSeries> seriesList();
59 static void appendSeriesFunc(QQmlListProperty<QScatter3DSeries> *list, QScatter3DSeries *series);
60 static qsizetype countSeriesFunc(QQmlListProperty<QScatter3DSeries> *list);
61 static QScatter3DSeries *atSeriesFunc(QQmlListProperty<QScatter3DSeries> *list, qsizetype index);
62 static void clearSeriesFunc(QQmlListProperty<QScatter3DSeries> *list);
63
64 Q_INVOKABLE void addSeries(QScatter3DSeries *series);
65 Q_INVOKABLE void removeSeries(QScatter3DSeries *series);
66 Q_INVOKABLE void clearSelection() override;
67
68 Q_INVOKABLE bool doPicking(QPointF point) override;
69 Q_INVOKABLE bool doRayPicking(const QVector3D &origin, const QVector3D &direction) override;
70
71protected:
72 void componentComplete() override;
73
74Q_SIGNALS:
75 void axisXChanged(QValue3DAxis *axis);
76 void axisYChanged(QValue3DAxis *axis);
77 void axisZChanged(QValue3DAxis *axis);
78 void selectedSeriesChanged(QScatter3DSeries *series);
79
80private:
81 QQuickGraphsScatter *graphScatter();
82 const QQuickGraphsScatter *graphScatter() const;
83
84 bool m_multiSeriesUniform;
85 QSizeF m_barSpacing;
86 float m_barThickness;
87 bool m_barSpacingRelative;
88 QSizeF m_barSeriesMargin;
89 QBar3DSeries *m_primarySeries = nullptr;
90 QBar3DSeries *m_selectedSeries = nullptr;
91 float m_floorLevel;
92};
93
94QT_END_NAMESPACE
95
96#endif // QQUICKGRAPHSSCATTERNODE_P_H
97

source code of qtgraphs/src/graphs3d/qml/qquickgraphsscatternode_p.h