qpieslice.cpp
407 lines
| 8.6 KiB
| text/x-c
|
CppLexer
Jani Honkonen
|
r794 | /**************************************************************************** | ||
** | ||||
** Copyright (C) 2012 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 Commercial Charts Add-on. | ||||
** | ||||
** $QT_BEGIN_LICENSE$ | ||||
** Licensees holding valid Qt Commercial licenses may use this file in | ||||
** accordance with the Qt Commercial 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$ | ||||
** | ||||
****************************************************************************/ | ||||
Jani Honkonen
|
r203 | #include "qpieslice.h" | ||
Jani Honkonen
|
r818 | #include "pieslicedata_p.h" | ||
Jani Honkonen
|
r203 | |||
QTCOMMERCIALCHART_BEGIN_NAMESPACE | ||||
Jani Honkonen
|
r314 | /*! | ||
\class QPieSlice | ||||
Jani Honkonen
|
r339 | \brief Defines a slice in pie series. | ||
Jani Honkonen
|
r314 | |||
Jani Honkonen
|
r320 | Holds all the data of a single slice in a QPieSeries and provides the means | ||
to modify slice data and customize the visual appearance of the slice. | ||||
It also provides the means to customize user interaction with the slice by | ||||
providing signals for clicking and hover events. | ||||
Jani Honkonen
|
r314 | */ | ||
/*! | ||||
\property QPieSlice::label | ||||
Label of the slice. | ||||
*/ | ||||
/*! | ||||
\property QPieSlice::value | ||||
Value of the slice. | ||||
*/ | ||||
/*! | ||||
Constructs an empty slice with a \a parent. | ||||
Jani Honkonen
|
r320 | |||
Jani Honkonen
|
r314 | Note that QPieSeries takes ownership of the slice when it is set/added. | ||
Jani Honkonen
|
r320 | |||
Jani Honkonen
|
r796 | \sa QPieSeries::replace(), QPieSeries::append() | ||
Jani Honkonen
|
r314 | */ | ||
Jani Honkonen
|
r203 | QPieSlice::QPieSlice(QObject *parent) | ||
:QObject(parent), | ||||
Jani Honkonen
|
r818 | d(new PieSliceData()) | ||
Jani Honkonen
|
r203 | { | ||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Constructs an empty slice with given \a value, \a label and a \a parent. | ||||
Note that QPieSeries takes ownership of the slice when it is set/added. | ||||
Jani Honkonen
|
r796 | \sa QPieSeries::replace(), QPieSeries::append() | ||
Jani Honkonen
|
r314 | */ | ||
QPieSlice::QPieSlice(qreal value, QString label, QObject *parent) | ||||
Jani Honkonen
|
r203 | :QObject(parent), | ||
Jani Honkonen
|
r818 | d(new PieSliceData()) | ||
Jani Honkonen
|
r203 | { | ||
Jani Honkonen
|
r818 | d->m_value = value; | ||
d->m_labelText = label; | ||||
Jani Honkonen
|
r203 | } | ||
Jani Honkonen
|
r314 | /*! | ||
Destroys the slice. | ||||
User should not delete the slice if it has been added to the series. | ||||
*/ | ||||
Jani Honkonen
|
r203 | QPieSlice::~QPieSlice() | ||
{ | ||||
Jani Honkonen
|
r818 | delete d; | ||
Jani Honkonen
|
r203 | } | ||
Jani Honkonen
|
r314 | /*! | ||
Gets the value of the slice. | ||||
Note that all values in the series | ||||
\sa setValue() | ||||
*/ | ||||
Jani Honkonen
|
r203 | qreal QPieSlice::value() const | ||
{ | ||||
Jani Honkonen
|
r818 | return d->m_value; | ||
Jani Honkonen
|
r203 | } | ||
Jani Honkonen
|
r314 | /*! | ||
Gets the label of the slice. | ||||
\sa setLabel() | ||||
*/ | ||||
Jani Honkonen
|
r203 | QString QPieSlice::label() const | ||
Jani Honkonen
|
r818 | { | ||
return d->m_labelText; | ||||
Jani Honkonen
|
r203 | } | ||
Jani Honkonen
|
r314 | /*! | ||
Returns true if label is set as visible. | ||||
\sa setLabelVisible() | ||||
*/ | ||||
Jani Honkonen
|
r203 | bool QPieSlice::isLabelVisible() const | ||
{ | ||||
Jani Honkonen
|
r818 | return d->m_isLabelVisible; | ||
Jani Honkonen
|
r203 | } | ||
Jani Honkonen
|
r314 | /*! | ||
Returns true if slice is exloded from the pie. | ||||
Jani Honkonen
|
r454 | \sa setExploded(), setExplodeDistanceFactor() | ||
Jani Honkonen
|
r314 | */ | ||
Jani Honkonen
|
r203 | bool QPieSlice::isExploded() const | ||
{ | ||||
Jani Honkonen
|
r818 | return d->m_isExploded; | ||
Jani Honkonen
|
r203 | } | ||
Jani Honkonen
|
r314 | /*! | ||
Jani Honkonen
|
r454 | Returns the explode distance factor. | ||
The factor is relative to pie radius. For example: | ||||
1.0 means the distance is the same as the radius. | ||||
0.5 means the distance is half of the radius. | ||||
Default value is 0.15. | ||||
\sa setExplodeDistanceFactor() | ||||
Jani Honkonen
|
r314 | */ | ||
Jani Honkonen
|
r454 | qreal QPieSlice::explodeDistanceFactor() const | ||
Jani Honkonen
|
r289 | { | ||
Jani Honkonen
|
r818 | return d->m_explodeDistanceFactor; | ||
Jani Honkonen
|
r289 | } | ||
Jani Honkonen
|
r314 | /*! | ||
Returns the percentage of this slice compared to all slices in the same series. | ||||
Jani Honkonen
|
r386 | The returned value ranges from 0 to 1.0. | ||
Jani Honkonen
|
r320 | |||
Jani Honkonen
|
r314 | Updated internally after the slice is added to the series. | ||
*/ | ||||
Jani Honkonen
|
r203 | qreal QPieSlice::percentage() const | ||
{ | ||||
Jani Honkonen
|
r818 | return d->m_percentage; | ||
Jani Honkonen
|
r203 | } | ||
Jani Honkonen
|
r314 | /*! | ||
Returns the starting angle of this slice in the series it belongs to. | ||||
Jani Honkonen
|
r320 | |||
Full pie is 360 degrees where 0 degrees is at 12 a'clock. | ||||
Jani Honkonen
|
r314 | Updated internally after the slice is added to the series. | ||
*/ | ||||
Jani Honkonen
|
r355 | qreal QPieSlice::startAngle() const | ||
Jani Honkonen
|
r203 | { | ||
Jani Honkonen
|
r818 | return d->m_startAngle; | ||
Jani Honkonen
|
r203 | } | ||
Jani Honkonen
|
r314 | /*! | ||
Jani Honkonen
|
r355 | Returns the end angle of this slice in the series it belongs to. | ||
Jani Honkonen
|
r320 | |||
Full pie is 360 degrees where 0 degrees is at 12 a'clock. | ||||
Jani Honkonen
|
r314 | Updated internally after the slice is added to the series. | ||
*/ | ||||
Jani Honkonen
|
r355 | qreal QPieSlice::endAngle() const | ||
Jani Honkonen
|
r203 | { | ||
Jani Honkonen
|
r818 | return d->m_startAngle + d->m_angleSpan; | ||
Jani Honkonen
|
r203 | } | ||
Jani Honkonen
|
r314 | /*! | ||
Returns the pen used to draw this slice. | ||||
Jani Honkonen
|
r809 | \sa setPen() | ||
Jani Honkonen
|
r314 | */ | ||
Jani Honkonen
|
r756 | QPen QPieSlice::pen() const | ||
Jani Honkonen
|
r203 | { | ||
Jani Honkonen
|
r818 | return d->m_slicePen; | ||
Jani Honkonen
|
r203 | } | ||
Jani Honkonen
|
r314 | /*! | ||
Returns the brush used to draw this slice. | ||||
Jani Honkonen
|
r809 | \sa setBrush() | ||
Jani Honkonen
|
r314 | */ | ||
Jani Honkonen
|
r756 | QBrush QPieSlice::brush() const | ||
Jani Honkonen
|
r203 | { | ||
Jani Honkonen
|
r818 | return d->m_sliceBrush; | ||
Jani Honkonen
|
r203 | } | ||
Jani Honkonen
|
r314 | /*! | ||
Jani Honkonen
|
r714 | Returns the pen used to draw the label in this slice. | ||
Jani Honkonen
|
r809 | \sa setLabelPen() | ||
Jani Honkonen
|
r314 | */ | ||
Jani Honkonen
|
r714 | QPen QPieSlice::labelPen() const | ||
Jani Honkonen
|
r203 | { | ||
Jani Honkonen
|
r818 | return d->m_labelPen; | ||
Jani Honkonen
|
r203 | } | ||
Jani Honkonen
|
r314 | /*! | ||
Returns the font used to draw label in this slice. | ||||
\sa setLabelFont() | ||||
*/ | ||||
Jani Honkonen
|
r203 | QFont QPieSlice::labelFont() const | ||
{ | ||||
Jani Honkonen
|
r818 | return d->m_labelFont; | ||
Jani Honkonen
|
r203 | } | ||
Jani Honkonen
|
r314 | /*! | ||
Jani Honkonen
|
r691 | Gets the label arm length factor. | ||
Jani Honkonen
|
r454 | |||
The factor is relative to pie radius. For example: | ||||
1.0 means the length is the same as the radius. | ||||
0.5 means the length is half of the radius. | ||||
Default value is 0.15 | ||||
\sa setLabelArmLengthFactor() | ||||
Jani Honkonen
|
r314 | */ | ||
Jani Honkonen
|
r454 | qreal QPieSlice::labelArmLengthFactor() const | ||
Jani Honkonen
|
r203 | { | ||
Jani Honkonen
|
r818 | return d->m_labelArmLengthFactor; | ||
Jani Honkonen
|
r203 | } | ||
Jani Honkonen
|
r314 | /*! | ||
Jani Honkonen
|
r809 | \fn void QPieSlice::clicked(Qt::MouseButtons buttons) | ||
Jani Honkonen
|
r314 | |||
This signal is emitted when user has clicked the slice. | ||||
Marek Rosa
|
r924 | Parameter \a buttons hold the information about the clicked mouse buttons. | ||
Jani Honkonen
|
r314 | |||
\sa QPieSeries::clicked() | ||||
*/ | ||||
/*! | ||||
\fn void QPieSlice::hoverEnter() | ||||
This signal is emitted when user has hovered over the slice. | ||||
\sa QPieSeries::hoverEnter() | ||||
*/ | ||||
/*! | ||||
\fn void QPieSlice::hoverLeave() | ||||
This signal is emitted when user has hovered away from the slice. | ||||
\sa QPieSeries::hoverLeave() | ||||
*/ | ||||
/*! | ||||
\fn void QPieSlice::changed() | ||||
This signal emitted when something has changed in the slice. | ||||
*/ | ||||
Jani Honkonen
|
r932 | /*! | ||
\fn void QPieSlice::selected() | ||||
This signal emitted when this slice has been clicked in the legend. | ||||
*/ | ||||
Jani Honkonen
|
r314 | /*! | ||
Jani Honkonen
|
r454 | Sets the \a value of this slice. | ||
Jani Honkonen
|
r314 | \sa value() | ||
*/ | ||||
Jani Honkonen
|
r203 | void QPieSlice::setValue(qreal value) | ||
{ | ||||
Jani Honkonen
|
r818 | if (!qFuzzyIsNull(d->m_value - value)) { | ||
d->m_value = value; | ||||
emit changed(); | ||||
Jani Honkonen
|
r203 | } | ||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Sets the \a label of the slice. | ||||
\sa label() | ||||
*/ | ||||
Jani Honkonen
|
r203 | void QPieSlice::setLabel(QString label) | ||
{ | ||||
Jani Honkonen
|
r818 | if (d->m_labelText != label) { | ||
d->m_labelText = label; | ||||
Jani Honkonen
|
r203 | emit changed(); | ||
} | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Sets the label \a visible in this slice. | ||||
\sa isLabelVisible(), QPieSeries::setLabelsVisible() | ||||
*/ | ||||
Jani Honkonen
|
r203 | void QPieSlice::setLabelVisible(bool visible) | ||
{ | ||||
Jani Honkonen
|
r818 | if (d->m_isLabelVisible != visible) { | ||
d->m_isLabelVisible = visible; | ||||
Jani Honkonen
|
r203 | emit changed(); | ||
} | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Sets this slice \a exploded. | ||||
Jani Honkonen
|
r454 | \sa isExploded(), explodeDistanceFactor() | ||
Jani Honkonen
|
r314 | */ | ||
Jani Honkonen
|
r203 | void QPieSlice::setExploded(bool exploded) | ||
{ | ||||
Jani Honkonen
|
r818 | if (d->m_isExploded != exploded) { | ||
d->m_isExploded = exploded; | ||||
Jani Honkonen
|
r203 | emit changed(); | ||
} | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Jani Honkonen
|
r454 | Sets the explode distance \a factor. | ||
The factor is relative to pie radius. For example: | ||||
1.0 means the distance is the same as the radius. | ||||
0.5 means the distance is half of the radius. | ||||
Default value is 0.15 | ||||
\sa explodeDistanceFactor() | ||||
Jani Honkonen
|
r314 | */ | ||
Jani Honkonen
|
r454 | void QPieSlice::setExplodeDistanceFactor(qreal factor) | ||
Jani Honkonen
|
r289 | { | ||
Jani Honkonen
|
r818 | if (!qFuzzyIsNull(d->m_explodeDistanceFactor - factor)) { | ||
d->m_explodeDistanceFactor = factor; | ||||
Jani Honkonen
|
r289 | emit changed(); | ||
} | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Sets the \a pen used to draw this slice. | ||||
Note that applying a theme will override this. | ||||
Jani Honkonen
|
r809 | \sa pen() | ||
Jani Honkonen
|
r314 | */ | ||
Jani Honkonen
|
r756 | void QPieSlice::setPen(const QPen &pen) | ||
Jani Honkonen
|
r203 | { | ||
Jani Honkonen
|
r818 | if (d->m_slicePen != pen) { | ||
d->m_slicePen = pen; | ||||
d->m_slicePen.setThemed(false); | ||||
Jani Honkonen
|
r203 | emit changed(); | ||
} | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Sets the \a brush used to draw this slice. | ||||
Note that applying a theme will override this. | ||||
Jani Honkonen
|
r809 | \sa brush() | ||
Jani Honkonen
|
r314 | */ | ||
Jani Honkonen
|
r756 | void QPieSlice::setBrush(const QBrush &brush) | ||
Jani Honkonen
|
r203 | { | ||
Jani Honkonen
|
r818 | if (d->m_sliceBrush != brush) { | ||
d->m_sliceBrush = brush; | ||||
d->m_sliceBrush.setThemed(false); | ||||
Jani Honkonen
|
r203 | emit changed(); | ||
} | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Jani Honkonen
|
r714 | Sets the \a pen used to draw the label in this slice. | ||
Jani Honkonen
|
r314 | Note that applying a theme will override this. | ||
Jani Honkonen
|
r809 | \sa labelPen() | ||
Jani Honkonen
|
r314 | */ | ||
Jani Honkonen
|
r714 | void QPieSlice::setLabelPen(const QPen &pen) | ||
Jani Honkonen
|
r203 | { | ||
Jani Honkonen
|
r818 | if (d->m_labelPen != pen) { | ||
d->m_labelPen = pen; | ||||
d->m_labelPen.setThemed(false); | ||||
Jani Honkonen
|
r203 | emit changed(); | ||
} | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Sets the \a font used to draw the label in this slice. | ||||
Note that applying a theme will override this. | ||||
\sa labelFont() | ||||
*/ | ||||
Jani Honkonen
|
r469 | void QPieSlice::setLabelFont(const QFont &font) | ||
Jani Honkonen
|
r203 | { | ||
Jani Honkonen
|
r818 | if (d->m_labelFont != font) { | ||
d->m_labelFont = font; | ||||
d->m_labelFont.setThemed(false); | ||||
Jani Honkonen
|
r203 | emit changed(); | ||
} | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Jani Honkonen
|
r691 | Sets the label arm length \a factor. | ||
Jani Honkonen
|
r454 | |||
The factor is relative to pie radius. For example: | ||||
1.0 means the length is the same as the radius. | ||||
0.5 means the length is half of the radius. | ||||
Default value is 0.15 | ||||
\sa labelArmLengthFactor() | ||||
Jani Honkonen
|
r314 | */ | ||
Jani Honkonen
|
r454 | void QPieSlice::setLabelArmLengthFactor(qreal factor) | ||
Jani Honkonen
|
r203 | { | ||
Jani Honkonen
|
r818 | if (!qFuzzyIsNull(d->m_labelArmLengthFactor - factor)) { | ||
d->m_labelArmLengthFactor = factor; | ||||
Jani Honkonen
|
r203 | emit changed(); | ||
} | ||||
} | ||||
QTCOMMERCIALCHART_END_NAMESPACE | ||||
Tero Ahola
|
r837 | |||
QTCOMMERCIALCHART_USE_NAMESPACE | ||||
#include "moc_qpieslice.cpp" | ||||