diff options
Diffstat (limited to 'src/datavisualizationqml/declarativebars.cpp')
-rw-r--r-- | src/datavisualizationqml/declarativebars.cpp | 220 |
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 |