diff options
Diffstat (limited to 'src/datavisualizationqml/declarativescatter.cpp')
-rw-r--r-- | src/datavisualizationqml/declarativescatter.cpp | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/src/datavisualizationqml/declarativescatter.cpp b/src/datavisualizationqml/declarativescatter.cpp new file mode 100644 index 00000000..1e3795a0 --- /dev/null +++ b/src/datavisualizationqml/declarativescatter.cpp @@ -0,0 +1,126 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include "declarativescatter_p.h" +#include <QtCore/QMutexLocker> + +QT_BEGIN_NAMESPACE + +DeclarativeScatter::DeclarativeScatter(QQuickItem *parent) + : AbstractDeclarative(parent), + m_scatterController(0) +{ + setAcceptedMouseButtons(Qt::AllButtons); + + // Create the shared component on the main GUI thread. + m_scatterController = new Scatter3DController(boundingRect().toRect(), new Declarative3DScene); + setSharedController(m_scatterController); + + QObject::connect(m_scatterController, &Scatter3DController::selectedSeriesChanged, + this, &DeclarativeScatter::selectedSeriesChanged); +} + +DeclarativeScatter::~DeclarativeScatter() +{ + QMutexLocker locker(m_nodeMutex.data()); + const QMutexLocker locker2(mutex()); + delete m_scatterController; +} + +QValue3DAxis *DeclarativeScatter::axisX() const +{ + return static_cast<QValue3DAxis *>(m_scatterController->axisX()); +} + +void DeclarativeScatter::setAxisX(QValue3DAxis *axis) +{ + m_scatterController->setAxisX(axis); +} + +QValue3DAxis *DeclarativeScatter::axisY() const +{ + return static_cast<QValue3DAxis *>(m_scatterController->axisY()); +} + +void DeclarativeScatter::setAxisY(QValue3DAxis *axis) +{ + m_scatterController->setAxisY(axis); +} + +QValue3DAxis *DeclarativeScatter::axisZ() const +{ + return static_cast<QValue3DAxis *>(m_scatterController->axisZ()); +} + +void DeclarativeScatter::setAxisZ(QValue3DAxis *axis) +{ + m_scatterController->setAxisZ(axis); +} + +QScatter3DSeries *DeclarativeScatter::selectedSeries() const +{ + return m_scatterController->selectedSeries(); +} + +QQmlListProperty<QScatter3DSeries> DeclarativeScatter::seriesList() +{ + return QQmlListProperty<QScatter3DSeries>(this, this, + &DeclarativeScatter::appendSeriesFunc, + &DeclarativeScatter::countSeriesFunc, + &DeclarativeScatter::atSeriesFunc, + &DeclarativeScatter::clearSeriesFunc); +} + +void DeclarativeScatter::appendSeriesFunc(QQmlListProperty<QScatter3DSeries> *list, + QScatter3DSeries *series) +{ + reinterpret_cast<DeclarativeScatter *>(list->data)->addSeries(series); +} + +qsizetype DeclarativeScatter::countSeriesFunc(QQmlListProperty<QScatter3DSeries> *list) +{ + return reinterpret_cast<DeclarativeScatter *>(list->data)->m_scatterController->scatterSeriesList().size(); +} + +QScatter3DSeries *DeclarativeScatter::atSeriesFunc(QQmlListProperty<QScatter3DSeries> *list, + qsizetype index) +{ + return reinterpret_cast<DeclarativeScatter *>(list->data)->m_scatterController->scatterSeriesList().at(index); +} + +void DeclarativeScatter::clearSeriesFunc(QQmlListProperty<QScatter3DSeries> *list) +{ + DeclarativeScatter *declScatter = reinterpret_cast<DeclarativeScatter *>(list->data); + QList<QScatter3DSeries *> realList = declScatter->m_scatterController->scatterSeriesList(); + int count = realList.size(); + for (int i = 0; i < count; i++) + declScatter->removeSeries(realList.at(i)); +} + +void DeclarativeScatter::addSeries(QScatter3DSeries *series) +{ + m_scatterController->addSeries(series); +} + +void DeclarativeScatter::removeSeries(QScatter3DSeries *series) +{ + m_scatterController->removeSeries(series); + series->setParent(this); // Reparent as removing will leave series parentless +} + +void DeclarativeScatter::handleAxisXChanged(QAbstract3DAxis *axis) +{ + emit axisXChanged(static_cast<QValue3DAxis *>(axis)); +} + +void DeclarativeScatter::handleAxisYChanged(QAbstract3DAxis *axis) +{ + emit axisYChanged(static_cast<QValue3DAxis *>(axis)); +} + +void DeclarativeScatter::handleAxisZChanged(QAbstract3DAxis *axis) +{ + emit axisZChanged(static_cast<QValue3DAxis *>(axis)); +} + +QT_END_NAMESPACE |