summaryrefslogtreecommitdiffstats
path: root/src/chartsqml2/declarativebarseries.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/chartsqml2/declarativebarseries.cpp')
-rw-r--r--src/chartsqml2/declarativebarseries.cpp509
1 files changed, 509 insertions, 0 deletions
diff --git a/src/chartsqml2/declarativebarseries.cpp b/src/chartsqml2/declarativebarseries.cpp
new file mode 100644
index 00000000..b773eb7b
--- /dev/null
+++ b/src/chartsqml2/declarativebarseries.cpp
@@ -0,0 +1,509 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the Qt Enterprise Charts Add-on.
+**
+** $QT_BEGIN_LICENSE$
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise 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.digia.com
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "declarativebarseries.h"
+#include "qbarset.h"
+#include "qvbarmodelmapper.h"
+#include "qhbarmodelmapper.h"
+
+QT_CHARTS_BEGIN_NAMESPACE
+
+DeclarativeBarSet::DeclarativeBarSet(QObject *parent)
+ : QBarSet("", parent)
+{
+ connect(this, SIGNAL(valuesAdded(int,int)), this, SLOT(handleCountChanged(int,int)));
+ connect(this, SIGNAL(valuesRemoved(int,int)), this, SLOT(handleCountChanged(int,int)));
+ connect(this, SIGNAL(brushChanged()), this, SLOT(handleBrushChanged()));
+}
+
+void DeclarativeBarSet::handleCountChanged(int index, int count)
+{
+ Q_UNUSED(index)
+ Q_UNUSED(count)
+ emit countChanged(QBarSet::count());
+}
+
+qreal DeclarativeBarSet::borderWidth() const
+{
+ return pen().widthF();
+}
+
+void DeclarativeBarSet::setBorderWidth(qreal width)
+{
+ if (width != pen().widthF()) {
+ QPen p = pen();
+ p.setWidthF(width);
+ setPen(p);
+ emit borderWidthChanged(width);
+ }
+}
+
+QVariantList DeclarativeBarSet::values()
+{
+ QVariantList values;
+ for (int i(0); i < count(); i++)
+ values.append(QVariant(QBarSet::at(i)));
+ return values;
+}
+
+void DeclarativeBarSet::setValues(QVariantList values)
+{
+ while (count())
+ remove(count() - 1);
+
+ if (values.at(0).canConvert(QVariant::Point)) {
+ // Create list of values for appending if the first item is Qt.point
+ int maxValue = 0;
+ for (int i = 0; i < values.count(); i++) {
+ if (values.at(i).canConvert(QVariant::Point) &&
+ values.at(i).toPoint().x() > maxValue) {
+ maxValue = values.at(i).toPoint().x();
+ }
+ }
+
+ QVector<int> indexValueList;
+ indexValueList.resize(maxValue + 1);
+
+ for (int i = 0; i < values.count(); i++) {
+ if (values.at(i).canConvert(QVariant::Point)) {
+ indexValueList.replace(values.at(i).toPoint().x(), values.at(i).toPoint().y());
+ }
+ }
+
+ for (int i = 0; i < indexValueList.count(); i++)
+ QBarSet::append(indexValueList.at(i));
+
+ } else {
+ for (int i(0); i < values.count(); i++) {
+ if (values.at(i).canConvert(QVariant::Double))
+ QBarSet::append(values[i].toDouble());
+ }
+ }
+}
+
+QString DeclarativeBarSet::brushFilename() const
+{
+ return m_brushFilename;
+}
+
+void DeclarativeBarSet::setBrushFilename(const QString &brushFilename)
+{
+ QImage brushImage(brushFilename);
+ if (QBarSet::brush().textureImage() != brushImage) {
+ QBrush brush = QBarSet::brush();
+ brush.setTextureImage(brushImage);
+ QBarSet::setBrush(brush);
+ m_brushFilename = brushFilename;
+ m_brushImage = brushImage;
+ emit brushFilenameChanged(brushFilename);
+ }
+}
+
+void DeclarativeBarSet::handleBrushChanged()
+{
+ // If the texture image of the brush has changed along the brush
+ // the brush file name needs to be cleared.
+ if (!m_brushFilename.isEmpty() && QBarSet::brush().textureImage() != m_brushImage) {
+ m_brushFilename.clear();
+ emit brushFilenameChanged(QString(""));
+ }
+}
+
+// Declarative bar series ======================================================================================
+DeclarativeBarSeries::DeclarativeBarSeries(QQuickItem *parent) :
+ QBarSeries(parent),
+ m_axes(new DeclarativeAxes(this))
+{
+ connect(m_axes, SIGNAL(axisXChanged(QAbstractAxis*)), this, SIGNAL(axisXChanged(QAbstractAxis*)));
+ connect(m_axes, SIGNAL(axisYChanged(QAbstractAxis*)), this, SIGNAL(axisYChanged(QAbstractAxis*)));
+ connect(m_axes, SIGNAL(axisXTopChanged(QAbstractAxis*)), this, SIGNAL(axisXTopChanged(QAbstractAxis*)));
+ connect(m_axes, SIGNAL(axisYRightChanged(QAbstractAxis*)), this, SIGNAL(axisYRightChanged(QAbstractAxis*)));
+}
+
+void DeclarativeBarSeries::classBegin()
+{
+}
+
+void DeclarativeBarSeries::componentComplete()
+{
+ foreach (QObject *child, children()) {
+ if (qobject_cast<DeclarativeBarSet *>(child)) {
+ QAbstractBarSeries::append(qobject_cast<DeclarativeBarSet *>(child));
+ } else if (qobject_cast<QVBarModelMapper *>(child)) {
+ QVBarModelMapper *mapper = qobject_cast<QVBarModelMapper *>(child);
+ mapper->setSeries(this);
+ } else if (qobject_cast<QHBarModelMapper *>(child)) {
+ QHBarModelMapper *mapper = qobject_cast<QHBarModelMapper *>(child);
+ mapper->setSeries(this);
+ }
+ }
+}
+
+QQmlListProperty<QObject> DeclarativeBarSeries::seriesChildren()
+{
+ return QQmlListProperty<QObject>(this, 0, &DeclarativeBarSeries::appendSeriesChildren ,0,0,0);
+}
+
+void DeclarativeBarSeries::appendSeriesChildren(QQmlListProperty<QObject> *list, QObject *element)
+{
+ // Empty implementation; the children are parsed in componentComplete instead
+ Q_UNUSED(list);
+ Q_UNUSED(element);
+}
+
+DeclarativeBarSet *DeclarativeBarSeries::at(int index)
+{
+ QList<QBarSet *> setList = barSets();
+ if (index >= 0 && index < setList.count())
+ return qobject_cast<DeclarativeBarSet *>(setList[index]);
+
+ return 0;
+}
+
+DeclarativeBarSet *DeclarativeBarSeries::insert(int index, QString label, QVariantList values)
+{
+ DeclarativeBarSet *barset = new DeclarativeBarSet(this);
+ barset->setLabel(label);
+ barset->setValues(values);
+ if (QBarSeries::insert(index, barset))
+ return barset;
+ delete barset;
+ return 0;
+}
+
+// Declarative stacked bar series ==============================================================================
+DeclarativeStackedBarSeries::DeclarativeStackedBarSeries(QQuickItem *parent) :
+ QStackedBarSeries(parent),
+ m_axes(0)
+{
+ m_axes = new DeclarativeAxes(this);
+ connect(m_axes, SIGNAL(axisXChanged(QAbstractAxis*)), this, SIGNAL(axisXChanged(QAbstractAxis*)));
+ connect(m_axes, SIGNAL(axisYChanged(QAbstractAxis*)), this, SIGNAL(axisYChanged(QAbstractAxis*)));
+ connect(m_axes, SIGNAL(axisXTopChanged(QAbstractAxis*)), this, SIGNAL(axisXTopChanged(QAbstractAxis*)));
+ connect(m_axes, SIGNAL(axisYRightChanged(QAbstractAxis*)), this, SIGNAL(axisYRightChanged(QAbstractAxis*)));
+}
+
+void DeclarativeStackedBarSeries::classBegin()
+{
+}
+
+void DeclarativeStackedBarSeries::componentComplete()
+{
+ foreach (QObject *child, children()) {
+ if (qobject_cast<DeclarativeBarSet *>(child)) {
+ QAbstractBarSeries::append(qobject_cast<DeclarativeBarSet *>(child));
+ } else if (qobject_cast<QVBarModelMapper *>(child)) {
+ QVBarModelMapper *mapper = qobject_cast<QVBarModelMapper *>(child);
+ mapper->setSeries(this);
+ } else if (qobject_cast<QHBarModelMapper *>(child)) {
+ QHBarModelMapper *mapper = qobject_cast<QHBarModelMapper *>(child);
+ mapper->setSeries(this);
+ }
+ }
+}
+
+
+QQmlListProperty<QObject> DeclarativeStackedBarSeries::seriesChildren()
+{
+ return QQmlListProperty<QObject>(this, 0, &DeclarativeBarSeries::appendSeriesChildren ,0,0,0);
+}
+
+void DeclarativeStackedBarSeries::appendSeriesChildren(QQmlListProperty<QObject> * list, QObject *element)
+{
+ // Empty implementation; the children are parsed in componentComplete instead
+ Q_UNUSED(list);
+ Q_UNUSED(element);
+}
+
+DeclarativeBarSet *DeclarativeStackedBarSeries::at(int index)
+{
+ QList<QBarSet *> setList = barSets();
+ if (index >= 0 && index < setList.count())
+ return qobject_cast<DeclarativeBarSet *>(setList[index]);
+
+ return 0;
+}
+
+DeclarativeBarSet *DeclarativeStackedBarSeries::insert(int index, QString label, QVariantList values)
+{
+ DeclarativeBarSet *barset = new DeclarativeBarSet(this);
+ barset->setLabel(label);
+ barset->setValues(values);
+ if (QStackedBarSeries::insert(index, barset))
+ return barset;
+ delete barset;
+ return 0;
+}
+
+// Declarative percent bar series ==============================================================================
+DeclarativePercentBarSeries::DeclarativePercentBarSeries(QQuickItem *parent) :
+ QPercentBarSeries(parent),
+ m_axes(0)
+{
+ m_axes = new DeclarativeAxes(this);
+ connect(m_axes, SIGNAL(axisXChanged(QAbstractAxis*)), this, SIGNAL(axisXChanged(QAbstractAxis*)));
+ connect(m_axes, SIGNAL(axisYChanged(QAbstractAxis*)), this, SIGNAL(axisYChanged(QAbstractAxis*)));
+ connect(m_axes, SIGNAL(axisXTopChanged(QAbstractAxis*)), this, SIGNAL(axisXTopChanged(QAbstractAxis*)));
+ connect(m_axes, SIGNAL(axisYRightChanged(QAbstractAxis*)), this, SIGNAL(axisYRightChanged(QAbstractAxis*)));
+}
+
+void DeclarativePercentBarSeries::classBegin()
+{
+}
+
+void DeclarativePercentBarSeries::componentComplete()
+{
+ foreach (QObject *child, children()) {
+ if (qobject_cast<DeclarativeBarSet *>(child)) {
+ QAbstractBarSeries::append(qobject_cast<DeclarativeBarSet *>(child));
+ } else if (qobject_cast<QVBarModelMapper *>(child)) {
+ QVBarModelMapper *mapper = qobject_cast<QVBarModelMapper *>(child);
+ mapper->setSeries(this);
+ } else if (qobject_cast<QHBarModelMapper *>(child)) {
+ QHBarModelMapper *mapper = qobject_cast<QHBarModelMapper *>(child);
+ mapper->setSeries(this);
+ }
+ }
+}
+
+QQmlListProperty<QObject> DeclarativePercentBarSeries::seriesChildren()
+{
+ return QQmlListProperty<QObject>(this, 0, &DeclarativeBarSeries::appendSeriesChildren ,0,0,0);
+}
+
+void DeclarativePercentBarSeries::appendSeriesChildren(QQmlListProperty<QObject> * list, QObject *element)
+{
+ // Empty implementation; the children are parsed in componentComplete instead
+ Q_UNUSED(list);
+ Q_UNUSED(element);
+}
+
+DeclarativeBarSet *DeclarativePercentBarSeries::at(int index)
+{
+ QList<QBarSet *> setList = barSets();
+ if (index >= 0 && index < setList.count())
+ return qobject_cast<DeclarativeBarSet *>(setList[index]);
+
+ return 0;
+}
+
+DeclarativeBarSet *DeclarativePercentBarSeries::insert(int index, QString label, QVariantList values)
+{
+ DeclarativeBarSet *barset = new DeclarativeBarSet(this);
+ barset->setLabel(label);
+ barset->setValues(values);
+ if (QPercentBarSeries::insert(index, barset))
+ return barset;
+ delete barset;
+ return 0;
+}
+
+// Declarative horizontal bar series ===========================================================================
+DeclarativeHorizontalBarSeries::DeclarativeHorizontalBarSeries(QQuickItem *parent) :
+ QHorizontalBarSeries(parent),
+ m_axes(0)
+{
+ m_axes = new DeclarativeAxes(this);
+ connect(m_axes, SIGNAL(axisXChanged(QAbstractAxis*)), this, SIGNAL(axisXChanged(QAbstractAxis*)));
+ connect(m_axes, SIGNAL(axisYChanged(QAbstractAxis*)), this, SIGNAL(axisYChanged(QAbstractAxis*)));
+ connect(m_axes, SIGNAL(axisXTopChanged(QAbstractAxis*)), this, SIGNAL(axisXTopChanged(QAbstractAxis*)));
+ connect(m_axes, SIGNAL(axisYRightChanged(QAbstractAxis*)), this, SIGNAL(axisYRightChanged(QAbstractAxis*)));
+}
+
+void DeclarativeHorizontalBarSeries::classBegin()
+{
+}
+
+void DeclarativeHorizontalBarSeries::componentComplete()
+{
+ foreach (QObject *child, children()) {
+ if (qobject_cast<DeclarativeBarSet *>(child)) {
+ QAbstractBarSeries::append(qobject_cast<DeclarativeBarSet *>(child));
+ } else if (qobject_cast<QVBarModelMapper *>(child)) {
+ QVBarModelMapper *mapper = qobject_cast<QVBarModelMapper *>(child);
+ mapper->setSeries(this);
+ } else if (qobject_cast<QHBarModelMapper *>(child)) {
+ QHBarModelMapper *mapper = qobject_cast<QHBarModelMapper *>(child);
+ mapper->setSeries(this);
+ }
+ }
+}
+
+QQmlListProperty<QObject> DeclarativeHorizontalBarSeries::seriesChildren()
+{
+ return QQmlListProperty<QObject>(this, 0, &DeclarativeHorizontalBarSeries::appendSeriesChildren ,0,0,0);
+}
+
+void DeclarativeHorizontalBarSeries::appendSeriesChildren(QQmlListProperty<QObject> * list, QObject *element)
+{
+ // Empty implementation; the children are parsed in componentComplete instead
+ Q_UNUSED(list);
+ Q_UNUSED(element);
+}
+
+DeclarativeBarSet *DeclarativeHorizontalBarSeries::at(int index)
+{
+ QList<QBarSet *> setList = barSets();
+ if (index >= 0 && index < setList.count())
+ return qobject_cast<DeclarativeBarSet *>(setList[index]);
+
+ return 0;
+}
+
+DeclarativeBarSet *DeclarativeHorizontalBarSeries::insert(int index, QString label, QVariantList values)
+{
+ DeclarativeBarSet *barset = new DeclarativeBarSet(this);
+ barset->setLabel(label);
+ barset->setValues(values);
+ if (QHorizontalBarSeries::insert(index, barset))
+ return barset;
+ delete barset;
+ return 0;
+}
+
+// Declarative horizontal stacked bar series ===================================================================
+DeclarativeHorizontalStackedBarSeries::DeclarativeHorizontalStackedBarSeries(QQuickItem *parent) :
+ QHorizontalStackedBarSeries(parent),
+ m_axes(0)
+{
+ m_axes = new DeclarativeAxes(this);
+ connect(m_axes, SIGNAL(axisXChanged(QAbstractAxis*)), this, SIGNAL(axisXChanged(QAbstractAxis*)));
+ connect(m_axes, SIGNAL(axisYChanged(QAbstractAxis*)), this, SIGNAL(axisYChanged(QAbstractAxis*)));
+ connect(m_axes, SIGNAL(axisXTopChanged(QAbstractAxis*)), this, SIGNAL(axisXTopChanged(QAbstractAxis*)));
+ connect(m_axes, SIGNAL(axisYRightChanged(QAbstractAxis*)), this, SIGNAL(axisYRightChanged(QAbstractAxis*)));
+}
+
+void DeclarativeHorizontalStackedBarSeries::classBegin()
+{
+}
+
+void DeclarativeHorizontalStackedBarSeries::componentComplete()
+{
+ foreach (QObject *child, children()) {
+ if (qobject_cast<DeclarativeBarSet *>(child)) {
+ QAbstractBarSeries::append(qobject_cast<DeclarativeBarSet *>(child));
+ } else if (qobject_cast<QVBarModelMapper *>(child)) {
+ QVBarModelMapper *mapper = qobject_cast<QVBarModelMapper *>(child);
+ mapper->setSeries(this);
+ } else if (qobject_cast<QHBarModelMapper *>(child)) {
+ QHBarModelMapper *mapper = qobject_cast<QHBarModelMapper *>(child);
+ mapper->setSeries(this);
+ }
+ }
+}
+
+QQmlListProperty<QObject> DeclarativeHorizontalStackedBarSeries::seriesChildren()
+{
+ return QQmlListProperty<QObject>(this, 0, &DeclarativeHorizontalStackedBarSeries::appendSeriesChildren ,0,0,0);
+}
+
+void DeclarativeHorizontalStackedBarSeries::appendSeriesChildren(QQmlListProperty<QObject> * list, QObject *element)
+{
+ // Empty implementation; the children are parsed in componentComplete instead
+ Q_UNUSED(list);
+ Q_UNUSED(element);
+}
+
+DeclarativeBarSet *DeclarativeHorizontalStackedBarSeries::at(int index)
+{
+ QList<QBarSet *> setList = barSets();
+ if (index >= 0 && index < setList.count())
+ return qobject_cast<DeclarativeBarSet *>(setList[index]);
+
+ return 0;
+}
+
+DeclarativeBarSet *DeclarativeHorizontalStackedBarSeries::insert(int index, QString label, QVariantList values)
+{
+ DeclarativeBarSet *barset = new DeclarativeBarSet(this);
+ barset->setLabel(label);
+ barset->setValues(values);
+ if (QHorizontalStackedBarSeries::insert(index, barset))
+ return barset;
+ delete barset;
+ return 0;
+}
+
+// Declarative horizontal percent bar series ===================================================================
+DeclarativeHorizontalPercentBarSeries::DeclarativeHorizontalPercentBarSeries(QQuickItem *parent) :
+ QHorizontalPercentBarSeries(parent),
+ m_axes(0)
+{
+ m_axes = new DeclarativeAxes(this);
+ connect(m_axes, SIGNAL(axisXChanged(QAbstractAxis*)), this, SIGNAL(axisXChanged(QAbstractAxis*)));
+ connect(m_axes, SIGNAL(axisYChanged(QAbstractAxis*)), this, SIGNAL(axisYChanged(QAbstractAxis*)));
+ connect(m_axes, SIGNAL(axisXTopChanged(QAbstractAxis*)), this, SIGNAL(axisXTopChanged(QAbstractAxis*)));
+ connect(m_axes, SIGNAL(axisYRightChanged(QAbstractAxis*)), this, SIGNAL(axisYRightChanged(QAbstractAxis*)));
+}
+
+void DeclarativeHorizontalPercentBarSeries::classBegin()
+{
+}
+
+void DeclarativeHorizontalPercentBarSeries::componentComplete()
+{
+ foreach (QObject *child, children()) {
+ if (qobject_cast<DeclarativeBarSet *>(child)) {
+ QAbstractBarSeries::append(qobject_cast<DeclarativeBarSet *>(child));
+ } else if (qobject_cast<QVBarModelMapper *>(child)) {
+ QVBarModelMapper *mapper = qobject_cast<QVBarModelMapper *>(child);
+ mapper->setSeries(this);
+ } else if (qobject_cast<QHBarModelMapper *>(child)) {
+ QHBarModelMapper *mapper = qobject_cast<QHBarModelMapper *>(child);
+ mapper->setSeries(this);
+ }
+ }
+}
+
+QQmlListProperty<QObject> DeclarativeHorizontalPercentBarSeries::seriesChildren()
+{
+ return QQmlListProperty<QObject>(this, 0, &DeclarativeHorizontalPercentBarSeries::appendSeriesChildren ,0,0,0);
+}
+
+void DeclarativeHorizontalPercentBarSeries::appendSeriesChildren(QQmlListProperty<QObject> * list, QObject *element)
+{
+ // Empty implementation; the children are parsed in componentComplete instead
+ Q_UNUSED(list);
+ Q_UNUSED(element);
+}
+
+DeclarativeBarSet *DeclarativeHorizontalPercentBarSeries::at(int index)
+{
+ QList<QBarSet *> setList = barSets();
+ if (index >= 0 && index < setList.count())
+ return qobject_cast<DeclarativeBarSet *>(setList[index]);
+
+ return 0;
+}
+
+DeclarativeBarSet *DeclarativeHorizontalPercentBarSeries::insert(int index, QString label, QVariantList values)
+{
+ DeclarativeBarSet *barset = new DeclarativeBarSet(this);
+ barset->setLabel(label);
+ barset->setValues(values);
+ if (QHorizontalPercentBarSeries::insert(index, barset))
+ return barset;
+ delete barset;
+ return 0;
+}
+
+#include "moc_declarativebarseries.cpp"
+
+QT_CHARTS_END_NAMESPACE