/**************************************************************************** ** ** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.io ** ** This file is part of the Qt Data Visualization module. ** ** Licensees holding valid commercial license for Qt may use this file in ** accordance with the Qt License Agreement provided with the Software ** or, alternatively, in accordance with the terms contained in a written ** agreement between you and Digia. ** ** If you have questions regarding the use of this file, please use ** contact form at http://qt.io ** ****************************************************************************/ #include "declarativebars_p.h" QT_BEGIN_NAMESPACE_DATAVISUALIZATION 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() { delete m_barsController; } QCategory3DAxis *DeclarativeBars::rowAxis() const { return static_cast(m_barsController->axisZ()); } void DeclarativeBars::setRowAxis(QCategory3DAxis *axis) { m_barsController->setAxisZ(axis); } QValue3DAxis *DeclarativeBars::valueAxis() const { return static_cast(m_barsController->axisY()); } void DeclarativeBars::setValueAxis(QValue3DAxis *axis) { m_barsController->setAxisY(axis); } QCategory3DAxis *DeclarativeBars::columnAxis() const { return static_cast(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(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(); } 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 DeclarativeBars::seriesList() { return QQmlListProperty(this, this, &DeclarativeBars::appendSeriesFunc, &DeclarativeBars::countSeriesFunc, &DeclarativeBars::atSeriesFunc, &DeclarativeBars::clearSeriesFunc); } void DeclarativeBars::appendSeriesFunc(QQmlListProperty *list, QBar3DSeries *series) { reinterpret_cast(list->data)->addSeries(series); } int DeclarativeBars::countSeriesFunc(QQmlListProperty *list) { return reinterpret_cast(list->data)->m_barsController->barSeriesList().size(); } QBar3DSeries *DeclarativeBars::atSeriesFunc(QQmlListProperty *list, int index) { return reinterpret_cast(list->data)->m_barsController->barSeriesList().at(index); } void DeclarativeBars::clearSeriesFunc(QQmlListProperty *list) { DeclarativeBars *declBars = reinterpret_cast(list->data); QList 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(axis)); } void DeclarativeBars::handleAxisYChanged(QAbstract3DAxis *axis) { emit valueAxisChanged(static_cast(axis)); } void DeclarativeBars::handleAxisZChanged(QAbstract3DAxis *axis) { emit rowAxisChanged(static_cast(axis)); } QT_END_NAMESPACE_DATAVISUALIZATION