Revision control

++ // Copyright (C) 2023 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
++ // Qt-Security score:significant reason:default
++
++
++ #include "graphs2d/xychart/qxyseries_p.h"
++ #include <QtGraphs/qscatterseries.h>
++ #include <private/qxypoint_p.h>
++ #include <private/qscatterseries_p.h>
++ #include <private/qgraphsview_p.h>
++ #include <QtCore/qloggingcategory.h>
++
++ QT_BEGIN_NAMESPACE
++
++ /*!
++ \class QScatterSeries
++ \inmodule QtGraphs
++ \ingroup graphs_2D
++ \brief The QScatterSeries class presents data in scatter graphs.
++
++ The scatter data is displayed as a collection of points on the graph. For
++ each point, two values are specified that determine its position on the
++ horizontal axis and the vertical axis.
++ */
++ /*!
++ \qmltype ScatterSeries
++ \nativetype QScatterSeries
++ \inqmlmodule QtGraphs
++ \ingroup graphs_qml_2D
++ \inherits XYSeries
++
++ \brief The ScatterSeries type presents data in scatter graphs.
++
++ The scatter data is displayed as a collection of points on the graph. For
++ each point, two values are specified that determine its position on the
++ horizontal axis and the vertical axis.
++
++ \image graphs2d-scatter.png {Scatter plot with data points in a grid}
++
++ You can represent scatter data by creating a ScatterSeries inside
++ GraphsView. The data can be added to the graph by creating XYPoints as
++ children for the ScatterSeries that define the x and y values of each
++ point.
++
++ \code
++ GraphsView {
++ anchors.fill: parent
++ axisX: ValueAxis {
++ max: 3
++ }
++ axisY: ValueAxis {
++ max: 3
++ }
++
++ ScatterSeries {
++ color: "#00ff00"
++ XYPoint { x: 0.5; y: 0.5 }
++ XYPoint { x: 1; y: 1 }
++ XYPoint { x: 2; y: 2 }
++ XYPoint { x: 2.5; y: 1.5 }
++ }
++ }
++ \endcode
++
++ Multiple scatter graphs can be created by adding multiple ScatterSeries
++ as children of GraphsView. In such cases only one series should define
++ the axis used as multiple definitions only override the earlier ones.
++
++ \code
++ GraphsView {
++ anchors.fill: parent
++ ScatterSeries {
++ color: "#00ff00"
++ axisX: ValueAxis {
++ max: 3
++ }
++ axisY: ValueAxis {
++ max: 3
++ }
++
++ XYPoint { x: 0.5; y: 0.5 }
++ XYPoint { x: 1; y: 1 }
++ XYPoint { x: 2; y: 2 }
++ XYPoint { x: 2.5; y: 1.5 }
++ }
++
++ ScatterSeries {
++ color: "#ff0000"
++ XYPoint { x: 0.5; y: 3 }
++ XYPoint { x: 1; y: 2 }
++ XYPoint { x: 2; y: 2.5 }
++ XYPoint { x: 2.5; y: 1 }
++ }
++ }
++ \endcode
++ */
++
++ /*!
++ \qmlproperty Component ScatterSeries::pointDelegate
++ Marks points with the given QML component.
++
++ \code
++ pointDelegate: Image {
++ source: "images/happy_box.png"
++ }
++ \endcode
++ */
++
++ QScatterSeries::QScatterSeries(QObject *parent)
++ : QXYSeries(*(new QScatterSeriesPrivate()), parent)
++ {}
++
++ QScatterSeries::~QScatterSeries() {}
++
++ QScatterSeries::QScatterSeries(QScatterSeriesPrivate &dd, QObject *parent)
++ : QXYSeries(dd, parent)
++ {}
++
++ void QScatterSeries::componentComplete()
++ {
++ Q_D(QScatterSeries);
++
++ for (auto *child : children()) {
++ if (auto point = qobject_cast<QXYPoint *>(child)) {
++ append(point->x(), point->y());
++ qCDebug(lcSeries2D, "append points x: %f, y: %f to scatterSeries",
++ point->x(),
++ point->y());
++ }
++ }
++
++ if (d->m_graphTransition)
++ d->m_graphTransition->initialize();
++
++ qCDebug(lcEvents2D, "QScatterSeries::componentComplete");
++
++ QAbstractSeries::componentComplete();
++ }
++
++ QAbstractSeries::SeriesType QScatterSeries::type() const
++ {
++ return QAbstractSeries::SeriesType::Scatter;
++ }
++
++ QScatterSeriesPrivate::QScatterSeriesPrivate()
++ : QXYSeriesPrivate(QAbstractSeries::SeriesType::Scatter)
++ {
++ }
++
++ QT_END_NAMESPACE
++
++ #include "moc_qscatterseries.cpp"