diff options
Diffstat (limited to 'src/charts/splinechart/qsplineseries.cpp')
-rw-r--r-- | src/charts/splinechart/qsplineseries.cpp | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/src/charts/splinechart/qsplineseries.cpp b/src/charts/splinechart/qsplineseries.cpp new file mode 100644 index 00000000..2ac5cabf --- /dev/null +++ b/src/charts/splinechart/qsplineseries.cpp @@ -0,0 +1,165 @@ +/**************************************************************************** +** +** 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 "qsplineseries.h" +#include "qsplineseries_p.h" +#include "splinechartitem_p.h" +#include "chartdataset_p.h" +#include "charttheme_p.h" +#include "splineanimation_p.h" +#include "qchart_p.h" + +/*! + \class QSplineSeries + \inmodule Qt Charts + \brief Series type used to store data needed to draw a spline. + + QSplineSeries stores the data points along with the segment control points needed by QPainterPath to draw spline + Control points are automatically calculated when data changes. The algorithm computes the points so that the normal spline can be drawn. + + \image examples_splinechart.png + + Creating basic spline chart is simple: + \code + QSplineSeries* series = new QSplineSeries(); + series->append(0, 6); + series->append(2, 4); + ... + chart->addSeries(series); + \endcode +*/ +/*! + \qmltype SplineSeries + \instantiates QSplineSeries + \inqmlmodule QtCharts + + \inherits XYSeries + + \brief The SplineSeries type is used for making spline charts. + + The following QML shows how to create a simple spline chart: + \snippet qmlchart/qml/qmlchart/View3.qml 1 + \beginfloatleft + \image examples_qmlchart3.png + \endfloat + \clearfloat +*/ + +/*! + \fn QSeriesType QSplineSeries::type() const + Returns the type of the series +*/ + +/*! + \qmlproperty real SplineSeries::width + The width of the line. By default the width is 2.0. +*/ + +/*! + \qmlproperty Qt::PenStyle SplineSeries::style + Controls the style of the line. Set to one of Qt.NoPen, Qt.SolidLine, Qt.DashLine, Qt.DotLine, + Qt.DashDotLine or Qt.DashDotDotLine. Using Qt.CustomDashLine is not supported in the QML API. + By default the style is Qt.SolidLine. +*/ + +/*! + \qmlproperty Qt::PenCapStyle SplineSeries::capStyle + Controls the cap style of the line. Set to one of Qt.FlatCap, Qt.SquareCap or Qt.RoundCap. By + default the cap style is Qt.SquareCap. +*/ + +QT_CHARTS_BEGIN_NAMESPACE + +/*! + Constructs empty series object which is a child of \a parent. + When series object is added to a QChart instance then the ownerships is transferred. + */ + +QSplineSeries::QSplineSeries(QObject *parent) + : QLineSeries(*new QSplineSeriesPrivate(this), parent) +{ +} + +/*! + Destroys the object. +*/ +QSplineSeries::~QSplineSeries() +{ + Q_D(QSplineSeries); + if (d->m_chart) + d->m_chart->removeSeries(this); +} + +QAbstractSeries::SeriesType QSplineSeries::type() const +{ + return QAbstractSeries::SeriesTypeSpline; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +QSplineSeriesPrivate::QSplineSeriesPrivate(QSplineSeries *q) + : QLineSeriesPrivate(q) +{ +} + +void QSplineSeriesPrivate::initializeGraphics(QGraphicsItem* parent) +{ + Q_Q(QSplineSeries); + SplineChartItem *spline = new SplineChartItem(q,parent); + m_item.reset(spline); + QAbstractSeriesPrivate::initializeGraphics(parent); +} + +void QSplineSeriesPrivate::initializeTheme(int index, ChartTheme* theme, bool forced) +{ + Q_Q(QSplineSeries); + const QList<QColor> colors = theme->seriesColors(); + + if (forced || QChartPrivate::defaultPen() == m_pen) { + QPen pen; + pen.setColor(colors.at(index % colors.size())); + pen.setWidthF(2); + q->setPen(pen); + } + + if (forced || QChartPrivate::defaultPen().color() == m_pointLabelsColor) { + QColor color = theme->labelBrush().color(); + q->setPointLabelsColor(color); + } +} + +void QSplineSeriesPrivate::initializeAnimations(QtCharts::QChart::AnimationOptions options) +{ + SplineChartItem *item = static_cast<SplineChartItem *>(m_item.data()); + Q_ASSERT(item); + if (item->animation()) + item->animation()->stopAndDestroyLater(); + + if (options.testFlag(QChart::SeriesAnimations)) + item->setAnimation(new SplineAnimation(item)); + else + item->setAnimation(0); + QAbstractSeriesPrivate::initializeAnimations(options); +} + +#include "moc_qsplineseries.cpp" +#include "moc_qsplineseries_p.cpp" + +QT_CHARTS_END_NAMESPACE |