summaryrefslogtreecommitdiffstats
path: root/src/datavisualizationqml/declarativebars.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavisualizationqml/declarativebars.cpp')
-rw-r--r--src/datavisualizationqml/declarativebars.cpp220
1 files changed, 220 insertions, 0 deletions
diff --git a/src/datavisualizationqml/declarativebars.cpp b/src/datavisualizationqml/declarativebars.cpp
new file mode 100644
index 00000000..1cba987a
--- /dev/null
+++ b/src/datavisualizationqml/declarativebars.cpp
@@ -0,0 +1,220 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "declarativebars_p.h"
+#include <QtCore/QMutexLocker>
+
+QT_BEGIN_NAMESPACE
+
+DeclarativeBars::DeclarativeBars(QQuickItem *parent)
+ : AbstractDeclarative(parent),
+ m_barsController(0)
+{
+ setAcceptedMouseButtons(Qt::AllButtons);
+
+ // Create the shared component on the main GUI thread.
+ m_barsController = new Bars3DController(boundingRect().toRect(), new Declarative3DScene);
+ AbstractDeclarative::setSharedController(m_barsController);
+
+ QObject::connect(m_barsController, &Bars3DController::primarySeriesChanged,
+ this, &DeclarativeBars::primarySeriesChanged);
+ QObject::connect(m_barsController, &Bars3DController::selectedSeriesChanged,
+ this, &DeclarativeBars::selectedSeriesChanged);
+}
+
+DeclarativeBars::~DeclarativeBars()
+{
+ QMutexLocker locker(m_nodeMutex.data());
+ const QMutexLocker locker2(mutex());
+ delete m_barsController;
+}
+
+QCategory3DAxis *DeclarativeBars::rowAxis() const
+{
+ return static_cast<QCategory3DAxis *>(m_barsController->axisZ());
+}
+
+void DeclarativeBars::setRowAxis(QCategory3DAxis *axis)
+{
+ m_barsController->setAxisZ(axis);
+}
+
+QValue3DAxis *DeclarativeBars::valueAxis() const
+{
+ return static_cast<QValue3DAxis *>(m_barsController->axisY());
+}
+
+void DeclarativeBars::setValueAxis(QValue3DAxis *axis)
+{
+ m_barsController->setAxisY(axis);
+}
+
+QCategory3DAxis *DeclarativeBars::columnAxis() const
+{
+ return static_cast<QCategory3DAxis *>(m_barsController->axisX());
+}
+
+void DeclarativeBars::setColumnAxis(QCategory3DAxis *axis)
+{
+ m_barsController->setAxisX(axis);
+}
+
+void DeclarativeBars::setMultiSeriesUniform(bool uniform)
+{
+ if (uniform != isMultiSeriesUniform()) {
+ m_barsController->setMultiSeriesScaling(uniform);
+ emit multiSeriesUniformChanged(uniform);
+ }
+}
+
+bool DeclarativeBars::isMultiSeriesUniform() const
+{
+ return m_barsController->multiSeriesScaling();
+}
+
+void DeclarativeBars::setBarThickness(float thicknessRatio)
+{
+ if (thicknessRatio != barThickness()) {
+ m_barsController->setBarSpecs(GLfloat(thicknessRatio), barSpacing(),
+ isBarSpacingRelative());
+ emit barThicknessChanged(thicknessRatio);
+ }
+}
+
+float DeclarativeBars::barThickness() const
+{
+ return m_barsController->barThickness();
+}
+
+void DeclarativeBars::setBarSpacing(const QSizeF &spacing)
+{
+ if (spacing != barSpacing()) {
+ m_barsController->setBarSpecs(GLfloat(barThickness()), spacing, isBarSpacingRelative());
+ emit barSpacingChanged(spacing);
+ }
+}
+
+QSizeF DeclarativeBars::barSpacing() const
+{
+ return m_barsController->barSpacing();
+}
+
+void DeclarativeBars::setBarSpacingRelative(bool relative)
+{
+ if (relative != isBarSpacingRelative()) {
+ m_barsController->setBarSpecs(GLfloat(barThickness()), barSpacing(), relative);
+ emit barSpacingRelativeChanged(relative);
+ }
+}
+
+bool DeclarativeBars::isBarSpacingRelative() const
+{
+ return m_barsController->isBarSpecRelative();
+}
+
+void DeclarativeBars::setBarSeriesMargin(const QSizeF &margin)
+{
+ if (margin != barSeriesMargin()) {
+ m_barsController->setBarSeriesMargin(margin);
+ emit barSeriesMarginChanged(barSeriesMargin());
+ }
+}
+
+QSizeF DeclarativeBars::barSeriesMargin() const
+{
+ return m_barsController->barSeriesMargin();
+}
+
+QBar3DSeries *DeclarativeBars::selectedSeries() const
+{
+ return m_barsController->selectedSeries();
+}
+
+void DeclarativeBars::setFloorLevel(float level)
+{
+ if (level != floorLevel()) {
+ m_barsController->setFloorLevel(level);
+ emit floorLevelChanged(level);
+ }
+}
+
+float DeclarativeBars::floorLevel() const
+{
+ return m_barsController->floorLevel();
+}
+
+QQmlListProperty<QBar3DSeries> DeclarativeBars::seriesList()
+{
+ return QQmlListProperty<QBar3DSeries>(this, this,
+ &DeclarativeBars::appendSeriesFunc,
+ &DeclarativeBars::countSeriesFunc,
+ &DeclarativeBars::atSeriesFunc,
+ &DeclarativeBars::clearSeriesFunc);
+}
+
+void DeclarativeBars::appendSeriesFunc(QQmlListProperty<QBar3DSeries> *list, QBar3DSeries *series)
+{
+ reinterpret_cast<DeclarativeBars *>(list->data)->addSeries(series);
+}
+
+qsizetype DeclarativeBars::countSeriesFunc(QQmlListProperty<QBar3DSeries> *list)
+{
+ return reinterpret_cast<DeclarativeBars *>(list->data)->m_barsController->barSeriesList().size();
+}
+
+QBar3DSeries *DeclarativeBars::atSeriesFunc(QQmlListProperty<QBar3DSeries> *list, qsizetype index)
+{
+ return reinterpret_cast<DeclarativeBars *>(list->data)->m_barsController->barSeriesList().at(index);
+}
+
+void DeclarativeBars::clearSeriesFunc(QQmlListProperty<QBar3DSeries> *list)
+{
+ DeclarativeBars *declBars = reinterpret_cast<DeclarativeBars *>(list->data);
+ QList<QBar3DSeries *> realList = declBars->m_barsController->barSeriesList();
+ int count = realList.size();
+ for (int i = 0; i < count; i++)
+ declBars->removeSeries(realList.at(i));
+}
+
+void DeclarativeBars::addSeries(QBar3DSeries *series)
+{
+ m_barsController->addSeries(series);
+}
+
+void DeclarativeBars::removeSeries(QBar3DSeries *series)
+{
+ m_barsController->removeSeries(series);
+ series->setParent(this); // Reparent as removing will leave series parentless
+}
+
+void DeclarativeBars::insertSeries(int index, QBar3DSeries *series)
+{
+ m_barsController->insertSeries(index, series);
+}
+
+void DeclarativeBars::setPrimarySeries(QBar3DSeries *series)
+{
+ m_barsController->setPrimarySeries(series);
+}
+
+QBar3DSeries *DeclarativeBars::primarySeries() const
+{
+ return m_barsController->primarySeries();
+}
+
+void DeclarativeBars::handleAxisXChanged(QAbstract3DAxis *axis)
+{
+ emit columnAxisChanged(static_cast<QCategory3DAxis *>(axis));
+}
+
+void DeclarativeBars::handleAxisYChanged(QAbstract3DAxis *axis)
+{
+ emit valueAxisChanged(static_cast<QValue3DAxis *>(axis));
+}
+
+void DeclarativeBars::handleAxisZChanged(QAbstract3DAxis *axis)
+{
+ emit rowAxisChanged(static_cast<QCategory3DAxis *>(axis));
+}
+
+QT_END_NAMESPACE