qpieslice.cpp
436 lines
| 9.3 KiB
| text/x-c
|
CppLexer
|
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$ | ||||
** | ||||
****************************************************************************/ | ||||
|
r203 | #include "qpieslice.h" | ||
|
r818 | #include "pieslicedata_p.h" | ||
|
r203 | |||
QTCOMMERCIALCHART_BEGIN_NAMESPACE | ||||
|
r314 | /*! | ||
\class QPieSlice | ||||
|
r339 | \brief Defines a slice in pie series. | ||
|
r314 | |||
|
r952 | This object defines the properties of a single slice in a QPieSeries. | ||
|
r320 | |||
|
r952 | In addition to the obvious value and label properties the user can also control | ||
the visual appearance of a slice. By modifying the visual appearance also means that | ||||
the user is overriding the default appearance set by the theme. Even if the theme is | ||||
changed users settings will persist. | ||||
To enable user interaction customization with the slices some basic signals | ||||
are provided about clicking and hovering. | ||||
|
r314 | */ | ||
/*! | ||||
\property QPieSlice::label | ||||
Label of the slice. | ||||
*/ | ||||
/*! | ||||
\property QPieSlice::value | ||||
Value of the slice. | ||||
|
r952 | |||
\sa percentage(), QPieSeries::sum() | ||||
|
r314 | */ | ||
/*! | ||||
Constructs an empty slice with a \a parent. | ||||
|
r320 | |||
|
r1013 | \sa QPieSeries::append(), QPieSeries::insert() | ||
|
r314 | */ | ||
|
r203 | QPieSlice::QPieSlice(QObject *parent) | ||
:QObject(parent), | ||||
|
r818 | d(new PieSliceData()) | ||
|
r203 | { | ||
} | ||||
|
r314 | /*! | ||
Constructs an empty slice with given \a value, \a label and a \a parent. | ||||
|
r1013 | \sa QPieSeries::append(), QPieSeries::insert() | ||
|
r314 | */ | ||
|
r1206 | QPieSlice::QPieSlice(QString label, qreal value, QObject *parent) | ||
|
r203 | :QObject(parent), | ||
|
r818 | d(new PieSliceData()) | ||
|
r203 | { | ||
|
r818 | d->m_value = value; | ||
d->m_labelText = label; | ||||
|
r203 | } | ||
|
r314 | /*! | ||
Destroys the slice. | ||||
User should not delete the slice if it has been added to the series. | ||||
*/ | ||||
|
r203 | QPieSlice::~QPieSlice() | ||
{ | ||||
|
r818 | delete d; | ||
|
r203 | } | ||
|
r314 | /*! | ||
Gets the value of the slice. | ||||
Note that all values in the series | ||||
\sa setValue() | ||||
*/ | ||||
|
r203 | qreal QPieSlice::value() const | ||
{ | ||||
|
r818 | return d->m_value; | ||
|
r203 | } | ||
|
r314 | /*! | ||
Gets the label of the slice. | ||||
\sa setLabel() | ||||
*/ | ||||
|
r203 | QString QPieSlice::label() const | ||
|
r818 | { | ||
return d->m_labelText; | ||||
|
r203 | } | ||
|
r314 | /*! | ||
Returns true if label is set as visible. | ||||
\sa setLabelVisible() | ||||
*/ | ||||
|
r203 | bool QPieSlice::isLabelVisible() const | ||
{ | ||||
|
r818 | return d->m_isLabelVisible; | ||
|
r203 | } | ||
|
r314 | /*! | ||
Returns true if slice is exloded from the pie. | ||||
|
r952 | \sa setExploded(), explodeDistanceFactor(), setExplodeDistanceFactor() | ||
|
r314 | */ | ||
|
r203 | bool QPieSlice::isExploded() const | ||
{ | ||||
|
r818 | return d->m_isExploded; | ||
|
r203 | } | ||
|
r314 | /*! | ||
|
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. | ||||
|
r952 | \sa setExplodeDistanceFactor(), isExploded(), setExploded() | ||
|
r314 | */ | ||
|
r454 | qreal QPieSlice::explodeDistanceFactor() const | ||
|
r289 | { | ||
|
r818 | return d->m_explodeDistanceFactor; | ||
|
r289 | } | ||
|
r314 | /*! | ||
|
r952 | Returns the percentage of this slice compared to the sum of all slices in the same series. | ||
|
r386 | The returned value ranges from 0 to 1.0. | ||
|
r320 | |||
|
r314 | Updated internally after the slice is added to the series. | ||
|
r952 | |||
\sa QPieSeries::sum() | ||||
|
r314 | */ | ||
|
r203 | qreal QPieSlice::percentage() const | ||
{ | ||||
|
r818 | return d->m_percentage; | ||
|
r203 | } | ||
|
r314 | /*! | ||
Returns the starting angle of this slice in the series it belongs to. | ||||
|
r320 | |||
Full pie is 360 degrees where 0 degrees is at 12 a'clock. | ||||
|
r314 | Updated internally after the slice is added to the series. | ||
*/ | ||||
|
r355 | qreal QPieSlice::startAngle() const | ||
|
r203 | { | ||
|
r818 | return d->m_startAngle; | ||
|
r203 | } | ||
|
r314 | /*! | ||
|
r355 | Returns the end angle of this slice in the series it belongs to. | ||
|
r320 | |||
Full pie is 360 degrees where 0 degrees is at 12 a'clock. | ||||
|
r314 | Updated internally after the slice is added to the series. | ||
*/ | ||||
|
r355 | qreal QPieSlice::endAngle() const | ||
|
r203 | { | ||
|
r818 | return d->m_startAngle + d->m_angleSpan; | ||
|
r203 | } | ||
|
r314 | /*! | ||
Returns the pen used to draw this slice. | ||||
|
r809 | \sa setPen() | ||
|
r314 | */ | ||
|
r756 | QPen QPieSlice::pen() const | ||
|
r203 | { | ||
|
r818 | return d->m_slicePen; | ||
|
r203 | } | ||
|
r314 | /*! | ||
Returns the brush used to draw this slice. | ||||
|
r809 | \sa setBrush() | ||
|
r314 | */ | ||
|
r756 | QBrush QPieSlice::brush() const | ||
|
r203 | { | ||
|
r818 | return d->m_sliceBrush; | ||
|
r203 | } | ||
|
r314 | /*! | ||
|
r714 | Returns the pen used to draw the label in this slice. | ||
|
r809 | \sa setLabelPen() | ||
|
r314 | */ | ||
|
r714 | QPen QPieSlice::labelPen() const | ||
|
r203 | { | ||
|
r818 | return d->m_labelPen; | ||
|
r203 | } | ||
|
r314 | /*! | ||
Returns the font used to draw label in this slice. | ||||
\sa setLabelFont() | ||||
*/ | ||||
|
r203 | QFont QPieSlice::labelFont() const | ||
{ | ||||
|
r818 | return d->m_labelFont; | ||
|
r203 | } | ||
|
r314 | /*! | ||
|
r691 | Gets the label arm length factor. | ||
|
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() | ||||
|
r314 | */ | ||
|
r454 | qreal QPieSlice::labelArmLengthFactor() const | ||
|
r203 | { | ||
|
r818 | return d->m_labelArmLengthFactor; | ||
|
r203 | } | ||
|
r1224 | /*! | ||
\fn void QPieSlice::labelChanged() | ||||
This signal is emitted when the slice label changes. | ||||
\sa setLabel() | ||||
*/ | ||||
/*! | ||||
\fn void QPieSlice::valueChanged() | ||||
This signal is emitted when the slice value changes. | ||||
\sa setValue() | ||||
*/ | ||||
/*! | ||||
\fn void QPieSlice::appearanceChanged() | ||||
This signal is emitted when visual appearance of the slice changes. | ||||
\sa setPen(), setBrush(), setLabelVisible(), setExploded() | ||||
*/ | ||||
/*! | ||||
\fn void QPieSlice::calculatedDataChanged() | ||||
This signal is emitted when calculated data for this slice changes. | ||||
\sa percentage(), startAngle(), endAngle() | ||||
*/ | ||||
|
r314 | /*! | ||
|
r1009 | \fn void QPieSlice::clicked() | ||
|
r314 | |||
This signal is emitted when user has clicked the slice. | ||||
\sa QPieSeries::clicked() | ||||
*/ | ||||
/*! | ||||
|
r1009 | \fn void QPieSlice::hovered(bool state) | ||
|
r314 | |||
|
r1009 | This signal is emitted when user has hovered over or away from the slice. | ||
|
r314 | |||
|
r1009 | \a state is true when user has hovered over the slice and false when hover has moved away from the slice. | ||
|
r314 | |||
|
r1009 | \sa QPieSeries::hovered() | ||
|
r314 | */ | ||
/*! | ||||
|
r454 | Sets the \a value of this slice. | ||
|
r314 | \sa value() | ||
*/ | ||||
|
r203 | void QPieSlice::setValue(qreal value) | ||
{ | ||||
|
r818 | if (!qFuzzyIsNull(d->m_value - value)) { | ||
d->m_value = value; | ||||
|
r1224 | emit valueChanged(); | ||
|
r203 | } | ||
} | ||||
|
r314 | /*! | ||
Sets the \a label of the slice. | ||||
\sa label() | ||||
*/ | ||||
|
r203 | void QPieSlice::setLabel(QString label) | ||
{ | ||||
|
r818 | if (d->m_labelText != label) { | ||
d->m_labelText = label; | ||||
|
r1224 | emit labelChanged(); | ||
|
r203 | } | ||
} | ||||
|
r314 | /*! | ||
Sets the label \a visible in this slice. | ||||
\sa isLabelVisible(), QPieSeries::setLabelsVisible() | ||||
*/ | ||||
|
r203 | void QPieSlice::setLabelVisible(bool visible) | ||
{ | ||||
|
r818 | if (d->m_isLabelVisible != visible) { | ||
d->m_isLabelVisible = visible; | ||||
|
r1224 | emit appearanceChanged(); | ||
|
r203 | } | ||
} | ||||
|
r314 | /*! | ||
|
r952 | Sets this slices \a exploded state. | ||
If the slice is exploded it is moved away from the pie center. The distance is defined by the explode distance factor. | ||||
\sa isExploded(), explodeDistanceFactor(), setExplodeDistanceFactor() | ||||
|
r314 | */ | ||
|
r203 | void QPieSlice::setExploded(bool exploded) | ||
{ | ||||
|
r818 | if (d->m_isExploded != exploded) { | ||
d->m_isExploded = exploded; | ||||
|
r1224 | emit appearanceChanged(); | ||
|
r203 | } | ||
} | ||||
|
r314 | /*! | ||
|
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 | ||||
|
r952 | \sa explodeDistanceFactor(), isExploded(), setExploded() | ||
|
r314 | */ | ||
|
r454 | void QPieSlice::setExplodeDistanceFactor(qreal factor) | ||
|
r289 | { | ||
|
r818 | if (!qFuzzyIsNull(d->m_explodeDistanceFactor - factor)) { | ||
d->m_explodeDistanceFactor = factor; | ||||
|
r1224 | emit appearanceChanged(); | ||
|
r289 | } | ||
} | ||||
|
r314 | /*! | ||
Sets the \a pen used to draw this slice. | ||||
|
r952 | |||
Overrides the pen set by the theme. | ||||
|
r809 | \sa pen() | ||
|
r314 | */ | ||
|
r756 | void QPieSlice::setPen(const QPen &pen) | ||
|
r203 | { | ||
|
r818 | if (d->m_slicePen != pen) { | ||
d->m_slicePen = pen; | ||||
d->m_slicePen.setThemed(false); | ||||
|
r1224 | emit appearanceChanged(); | ||
|
r203 | } | ||
} | ||||
|
r314 | /*! | ||
Sets the \a brush used to draw this slice. | ||||
|
r952 | |||
Overrides the brush set by the theme. | ||||
|
r809 | \sa brush() | ||
|
r314 | */ | ||
|
r756 | void QPieSlice::setBrush(const QBrush &brush) | ||
|
r203 | { | ||
|
r818 | if (d->m_sliceBrush != brush) { | ||
d->m_sliceBrush = brush; | ||||
d->m_sliceBrush.setThemed(false); | ||||
|
r1224 | emit appearanceChanged(); | ||
|
r203 | } | ||
} | ||||
|
r314 | /*! | ||
|
r714 | Sets the \a pen used to draw the label in this slice. | ||
|
r952 | |||
Overrides the pen set by the theme. | ||||
|
r809 | \sa labelPen() | ||
|
r314 | */ | ||
|
r714 | void QPieSlice::setLabelPen(const QPen &pen) | ||
|
r203 | { | ||
|
r818 | if (d->m_labelPen != pen) { | ||
d->m_labelPen = pen; | ||||
d->m_labelPen.setThemed(false); | ||||
|
r1224 | emit appearanceChanged(); | ||
|
r203 | } | ||
} | ||||
|
r314 | /*! | ||
Sets the \a font used to draw the label in this slice. | ||||
|
r952 | |||
Overrides the font set by the theme. | ||||
|
r314 | \sa labelFont() | ||
*/ | ||||
|
r469 | void QPieSlice::setLabelFont(const QFont &font) | ||
|
r203 | { | ||
|
r818 | if (d->m_labelFont != font) { | ||
d->m_labelFont = font; | ||||
d->m_labelFont.setThemed(false); | ||||
|
r1224 | emit appearanceChanged(); | ||
|
r203 | } | ||
} | ||||
|
r314 | /*! | ||
|
r691 | Sets the label arm length \a factor. | ||
|
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() | ||||
|
r314 | */ | ||
|
r454 | void QPieSlice::setLabelArmLengthFactor(qreal factor) | ||
|
r203 | { | ||
|
r818 | if (!qFuzzyIsNull(d->m_labelArmLengthFactor - factor)) { | ||
d->m_labelArmLengthFactor = factor; | ||||
|
r1224 | emit appearanceChanged(); | ||
|
r203 | } | ||
} | ||||
QTCOMMERCIALCHART_END_NAMESPACE | ||||
|
r837 | |||
QTCOMMERCIALCHART_USE_NAMESPACE | ||||
#include "moc_qpieslice.cpp" | ||||