summaryrefslogtreecommitdiffstats
path: root/src/datavisualizationqml/declarativescatter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavisualizationqml/declarativescatter.cpp')
-rw-r--r--src/datavisualizationqml/declarativescatter.cpp126
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