qabstractseries.cpp
328 lines
| 8.1 KiB
| text/x-c
|
CppLexer
Jani Honkonen
|
r794 | /**************************************************************************** | ||
** | ||||
Titta Heikkala
|
r2688 | ** Copyright (C) 2014 Digia Plc | ||
Jani Honkonen
|
r794 | ** All rights reserved. | ||
** For any questions to Digia, please use contact form at http://qt.digia.com | ||||
** | ||||
Miikka Heikkinen
|
r2574 | ** This file is part of the Qt Enterprise Charts Add-on. | ||
Jani Honkonen
|
r794 | ** | ||
** $QT_BEGIN_LICENSE$ | ||||
Miikka Heikkinen
|
r2574 | ** Licensees holding valid Qt Enterprise licenses may use this file in | ||
** accordance with the Qt Enterprise License Agreement provided with the | ||||
Jani Honkonen
|
r794 | ** 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$ | ||||
** | ||||
****************************************************************************/ | ||||
Titta Heikkala
|
r2714 | #include <QtCharts/QAbstractSeries> | ||
#include <private/qabstractseries_p.h> | ||||
#include <private/chartdataset_p.h> | ||||
#include <QtCharts/QChart> | ||||
#include <private/qchart_p.h> | ||||
#include <private/chartitem_p.h> | ||||
#include <private/xydomain_p.h> | ||||
#include <private/xlogydomain_p.h> | ||||
#include <private/logxydomain_p.h> | ||||
#include <private/logxlogydomain_p.h> | ||||
Michal Klocek
|
r938 | |||
Titta Heikkala
|
r2712 | QT_CHARTS_BEGIN_NAMESPACE | ||
sauimone
|
r62 | |||
Tero Ahola
|
r309 | /*! | ||
Tero Ahola
|
r988 | \class QAbstractSeries | ||
Titta Heikkala
|
r2639 | \inmodule Qt Charts | ||
Miikka Heikkinen
|
r2591 | \brief Base class for all Qt Chart series. | ||
Tero Ahola
|
r309 | \mainclass | ||
Tero Ahola
|
r310 | |||
Usually you use the series type specific inherited classes instead of the base class. | ||||
sauimone
|
r1586 | \sa QXYSeries, QLineSeries, QSplineSeries, QScatterSeries, QAreaSeries, QAbstractBarSeries, QStackedBarSeries, | ||
Tero Ahola
|
r973 | QPercentBarSeries, QPieSeries | ||
Tero Ahola
|
r309 | */ | ||
Tero Ahola
|
r1521 | /*! | ||
Titta Heikkala
|
r2639 | \qmltype AbstractSeries | ||
\instantiates QAbstractSeries | ||||
Titta Heikkala
|
r2712 | \inqmlmodule QtCharts | ||
Titta Heikkala
|
r2639 | |||
Titta Heikkala
|
r2712 | \brief Base class for all Qt Chart series. | ||
Titta Heikkala
|
r2639 | |||
Titta Heikkala
|
r2712 | AbstractSeries is the base class for all series. | ||
The class cannot be instantiated by the user. | ||||
Tero Ahola
|
r1521 | */ | ||
Tero Ahola
|
r309 | |||
/*! | ||||
Michal Klocek
|
r1107 | \enum QAbstractSeries::SeriesType | ||
Tero Ahola
|
r309 | |||
The type of the series object. | ||||
\value SeriesTypeLine | ||||
\value SeriesTypeArea | ||||
\value SeriesTypeBar | ||||
\value SeriesTypeStackedBar | ||||
\value SeriesTypePercentBar | ||||
\value SeriesTypePie | ||||
\value SeriesTypeScatter | ||||
\value SeriesTypeSpline | ||||
sauimone
|
r1709 | \value SeriesTypeHorizontalBar | ||
\value SeriesTypeHorizontalStackedBar | ||||
\value SeriesTypeHorizontalPercentBar | ||||
Mika Salmela
|
r2548 | \value SeriesTypeBoxPlot | ||
Tero Ahola
|
r309 | */ | ||
/*! | ||||
Tero Ahola
|
r1462 | \property QAbstractSeries::type | ||
The type of the series. | ||||
Tero Ahola
|
r309 | */ | ||
Tero Ahola
|
r1521 | /*! | ||
\qmlproperty ChartView.SeriesType AbstractSeries::type | ||||
The type of the series. | ||||
*/ | ||||
Tero Ahola
|
r309 | |||
Marek Rosa
|
r908 | /*! | ||
Tero Ahola
|
r988 | \property QAbstractSeries::name | ||
Miikka Heikkinen
|
r2539 | \brief name of the series property. The name is shown in legend for series and supports html formatting. | ||
Tero Ahola
|
r1521 | */ | ||
/*! | ||||
\qmlproperty string AbstractSeries::name | ||||
Miikka Heikkinen
|
r2539 | Name of the series. The name is shown in legend for series and supports html formatting. | ||
Marek Rosa
|
r908 | */ | ||
Jani Honkonen
|
r1337 | /*! | ||
\fn void QAbstractSeries::nameChanged() | ||||
This signal is emitted when the series name changes. | ||||
Tero Ahola
|
r1521 | */ | ||
/*! | ||||
sauimone
|
r1658 | \qmlsignal AbstractSeries::onNameChanged() | ||
Tero Ahola
|
r1521 | This signal is emitted when the series name changes. | ||
Jani Honkonen
|
r1337 | */ | ||
Jani Honkonen
|
r414 | /*! | ||
Tero Ahola
|
r1343 | \property QAbstractSeries::visible | ||
\brief whether the series is visible or not; true by default. | ||||
*/ | ||||
sauimone
|
r1658 | /*! | ||
Tero Ahola
|
r2068 | \qmlproperty bool AbstractSeries::visible | ||
sauimone
|
r1658 | Visibility of the series. True by default. | ||
*/ | ||||
Jani Honkonen
|
r414 | |||
Tero Ahola
|
r1343 | /*! | ||
\fn void QAbstractSeries::visibleChanged() | ||||
Emitted when the series visibility changes. | ||||
Jani Honkonen
|
r414 | */ | ||
sauimone
|
r1658 | /*! | ||
\qmlsignal AbstractSeries::onVisibleChanged() | ||||
Emitted when the series visibility changes. | ||||
*/ | ||||
Tero Ahola
|
r2068 | |||
/*! | ||||
\property QAbstractSeries::opacity | ||||
\brief The opacity of the series. | ||||
Miikka Heikkinen
|
r2520 | |||
Tero Ahola
|
r2068 | By default the opacity is 1.0. The valid values range from 0.0 (transparent) to 1.0 (opaque). | ||
*/ | ||||
/*! | ||||
\qmlproperty real AbstractSeries::opacity | ||||
The opacity of the series. By default the opacity is 1.0. | ||||
The valid values range from 0.0 (transparent) to 1.0 (opaque). | ||||
*/ | ||||
/*! | ||||
\fn void QAbstractSeries::opacityChanged() | ||||
Emitted when the opacity of the series changes. | ||||
*/ | ||||
/*! | ||||
\qmlsignal AbstractSeries::onOpacityChanged() | ||||
Emitted when the opacity of the series changes. | ||||
*/ | ||||
Jani Honkonen
|
r414 | /*! | ||
Tero Ahola
|
r973 | \internal | ||
Miikka Heikkinen
|
r2494 | \brief Constructs QAbstractSeries object with \a parent. | ||
Jani Honkonen
|
r414 | */ | ||
Tero Ahola
|
r988 | QAbstractSeries::QAbstractSeries(QAbstractSeriesPrivate &d, QObject *parent) : | ||
Tero Ahola
|
r973 | QObject(parent), | ||
d_ptr(&d) | ||||
Michal Klocek
|
r938 | { | ||
} | ||||
Tero Ahola
|
r973 | /*! | ||
\brief Virtual destructor for the chart series. | ||||
*/ | ||||
Tero Ahola
|
r988 | QAbstractSeries::~QAbstractSeries() | ||
Michal Klocek
|
r938 | { | ||
Michal Klocek
|
r2273 | if (d_ptr->m_chart) | ||
Miikka Heikkinen
|
r2494 | qFatal("Series still bound to a chart when destroyed!"); | ||
Michal Klocek
|
r938 | } | ||
Jani Honkonen
|
r2104 | void QAbstractSeries::setName(const QString &name) | ||
Michal Klocek
|
r938 | { | ||
Tero Ahola
|
r1328 | if (name != d_ptr->m_name) { | ||
d_ptr->m_name = name; | ||||
Tero Ahola
|
r1342 | emit nameChanged(); | ||
Tero Ahola
|
r1328 | } | ||
Michal Klocek
|
r938 | } | ||
Tero Ahola
|
r988 | QString QAbstractSeries::name() const | ||
Michal Klocek
|
r938 | { | ||
return d_ptr->m_name; | ||||
} | ||||
Tero Ahola
|
r1342 | void QAbstractSeries::setVisible(bool visible) | ||
{ | ||||
if (visible != d_ptr->m_visible) { | ||||
d_ptr->m_visible = visible; | ||||
emit visibleChanged(); | ||||
} | ||||
} | ||||
bool QAbstractSeries::isVisible() const | ||||
{ | ||||
return d_ptr->m_visible; | ||||
} | ||||
Tero Ahola
|
r2067 | qreal QAbstractSeries::opacity() const | ||
{ | ||||
return d_ptr->m_opacity; | ||||
} | ||||
void QAbstractSeries::setOpacity(qreal opacity) | ||||
{ | ||||
if (opacity != d_ptr->m_opacity) { | ||||
d_ptr->m_opacity = opacity; | ||||
emit opacityChanged(); | ||||
} | ||||
} | ||||
Jani Honkonen
|
r1314 | /*! | ||
\brief Returns the chart where series belongs to. | ||||
Set automatically when the series is added to the chart | ||||
and unset when the series is removed from the chart. | ||||
*/ | ||||
Jani Honkonen
|
r2104 | QChart *QAbstractSeries::chart() const | ||
Jani Honkonen
|
r1314 | { | ||
return d_ptr->m_chart; | ||||
} | ||||
Marek Rosa
|
r1638 | /*! | ||
Miikka Heikkinen
|
r2520 | \brief Sets the visibility of the series to true. | ||
Marek Rosa
|
r1638 | |||
\sa setVisible(), isVisible() | ||||
*/ | ||||
Michal Klocek
|
r1553 | void QAbstractSeries::show() | ||
{ | ||||
setVisible(true); | ||||
} | ||||
Marek Rosa
|
r1638 | /*! | ||
Miikka Heikkinen
|
r2520 | \brief Sets the visibility of the series to false. | ||
Marek Rosa
|
r1638 | |||
\sa setVisible(), isVisible() | ||||
*/ | ||||
Michal Klocek
|
r1553 | void QAbstractSeries::hide() | ||
{ | ||||
setVisible(false); | ||||
} | ||||
Tero Ahola
|
r2363 | /*! | ||
Attach \a axis to the series. | ||||
\return true if the axis was attached successfully, false otherwise. | ||||
Miikka Heikkinen
|
r2571 | \note If multiple axes of same orientation are attached to same series, | ||
they will have same min/max ranges. | ||||
Tero Ahola
|
r2363 | \sa QChart::addAxis(), QChart::createDefaultAxes() | ||
*/ | ||||
Michal Klocek
|
r2273 | bool QAbstractSeries::attachAxis(QAbstractAxis* axis) | ||
{ | ||||
if(d_ptr->m_chart) { | ||||
Tero Ahola
|
r2363 | return d_ptr->m_chart->d_ptr->m_dataset->attachAxis(this, axis); | ||
Michal Klocek
|
r2273 | } else { | ||
qWarning()<<"Series not in the chart. Please addSeries to chart first."; | ||||
return false; | ||||
} | ||||
} | ||||
Tero Ahola
|
r2363 | /*! | ||
Detach \a axis from the series. | ||||
\return true if the axis was detached successfully, false otherwise. | ||||
\sa QChart::removeAxis() | ||||
*/ | ||||
Michal Klocek
|
r2273 | bool QAbstractSeries::detachAxis(QAbstractAxis* axis) | ||
{ | ||||
if(d_ptr->m_chart) { | ||||
Tero Ahola
|
r2363 | return d_ptr->m_chart->d_ptr->m_dataset->detachAxis(this, axis); | ||
Michal Klocek
|
r2273 | } | ||
else { | ||||
qWarning()<<"Series not in the chart. Please addSeries to chart first."; | ||||
return false; | ||||
} | ||||
} | ||||
Tero Ahola
|
r2363 | /*! | ||
Returns the list of axes attached to the series. Usually there is an x-axis and a y-axis attached to a series, except | ||||
in case of a QPieSeries, which does not have any axes attached. | ||||
\sa attachAxis(), detachAxis() | ||||
*/ | ||||
Michal Klocek
|
r2273 | QList<QAbstractAxis*> QAbstractSeries::attachedAxes() | ||
{ | ||||
return d_ptr->m_axes; | ||||
} | ||||
Michal Klocek
|
r938 | /////////////////////////////////////////////////////////////////////////////////////////////////// | ||
Jani Honkonen
|
r2104 | QAbstractSeriesPrivate::QAbstractSeriesPrivate(QAbstractSeries *q) | ||
Jani Honkonen
|
r2097 | : q_ptr(q), | ||
m_chart(0), | ||||
Michal Klocek
|
r2273 | m_item(0), | ||
Marek Rosa
|
r2275 | m_domain(new XYDomain()), | ||
Jani Honkonen
|
r2097 | m_visible(true), | ||
m_opacity(1.0) | ||||
Michal Klocek
|
r938 | { | ||
} | ||||
Tero Ahola
|
r988 | QAbstractSeriesPrivate::~QAbstractSeriesPrivate() | ||
Michal Klocek
|
r938 | { | ||
} | ||||
Michal Klocek
|
r2285 | void QAbstractSeriesPrivate::setDomain(AbstractDomain* domain) | ||
Michal Klocek
|
r2273 | { | ||
Michal Klocek
|
r2285 | Q_ASSERT(domain); | ||
if(m_domain.data()!=domain) { | ||||
Michal Klocek
|
r2273 | if(!m_item.isNull()) QObject::disconnect(m_domain.data(), SIGNAL(updated()), m_item.data(), SLOT(handleDomainUpdated())); | ||
Michal Klocek
|
r2285 | m_domain.reset(domain); | ||
Michal Klocek
|
r2273 | if(!m_item.isNull()) { | ||
QObject::connect(m_domain.data(), SIGNAL(updated()),m_item.data(), SLOT(handleDomainUpdated())); | ||||
m_item->handleDomainUpdated(); | ||||
} | ||||
} | ||||
} | ||||
Miikka Heikkinen
|
r2707 | void QAbstractSeriesPrivate::setPresenter(ChartPresenter *presenter) | ||
{ | ||||
m_presenter = presenter; | ||||
} | ||||
ChartPresenter *QAbstractSeriesPrivate::presenter() const | ||||
{ | ||||
return m_presenter; | ||||
} | ||||
Michal Klocek
|
r2273 | void QAbstractSeriesPrivate::initializeGraphics(QGraphicsItem* parent) | ||
{ | ||||
Q_ASSERT(!m_item.isNull()); | ||||
Q_UNUSED(parent); | ||||
QObject::connect(m_domain.data(), SIGNAL(updated()),m_item.data(), SLOT(handleDomainUpdated())); | ||||
} | ||||
void QAbstractSeriesPrivate::initializeAnimations(QChart::AnimationOptions options) | ||||
{ | ||||
Q_UNUSED(options); | ||||
} | ||||
Tero Ahola
|
r988 | #include "moc_qabstractseries.cpp" | ||
#include "moc_qabstractseries_p.cpp" | ||||
Michal Klocek
|
r938 | |||
Titta Heikkala
|
r2712 | QT_CHARTS_END_NAMESPACE | ||
Michal Klocek
|
r938 | |||